Script Author: Katja Borchert, Ph.D. (katjab@millisecond.com), Millisecond
Millisecond thanks Dr. Jan Keil for his ample support in creating this script!
Any mistakes and errors that this script may contain, however, are Millisecond's alone.
Created: January 07, 2022
Last Modified: January 30, 2024 by K. Borchert (katjab@millisecond.com), Millisecond
Script Copyright © Millisecond Software, LLC
The 'Pizza Game' is a virtual public goods game to assess cooperative behavior in children and adolescents (Keil et al, 2017). The 'Pizza Game' is not a true multi player game but simulates the behavior of coplayers with computer algorithms while pretending that participants play against real people. The original 'Pizza Game' app runs in German and was initially programmed in e-prime. It was later re-programmed by [programmer name]. This updated version of the Pizza Game - used by the lab of Dr. Jan Keil- incorporates a selfie-app to increase the real-life validity of the task. For more information regarding the original Pizza Game implementation contact Dr. Keil at jan.keil@medizin.uni-leipzig.de.
(1) script played with avatars: run pizzagame_avatars.iqjs (all players use avatars-participant can choose avatar and avatar name)
(2) script played with female co-players, age 9-12: run pizzagame_f9to12.iqjs Images taken from the NIMH-chEFS database Neutral-direct gazes Each coplayer image gets a name randomly assigned (see file 'pizzagame_coplayers_f_agegroup1.iqjs)
(3) script played with female co-players, age 13-16: run pizzagame_f13to116.iqjs Images taken from the NIMH-chEFS database Neutral-direct gazes Each coplayer image gets a name randomly assigned (see file 'pizzagame_coplayers_f_agegroup2.iqjs)
(4) script played with male co-players, age 9-12: run pizzagame_m9to12.iqjs Images taken from the NIMH-chEFS database Neutral-direct gazes Each coplayer image gets a name randomly assigned (see file 'pizzagame_coplayers_m_agegroup1.iqjs)
(5) script played with male co-players, age 13-16: run pizzagame_m13to16.iqjs Images taken from the NIMH-chEFS database Neutral-direct gazes Each coplayer image gets a name randomly assigned (see file 'pizzagame_coplayers_m_agegroup2.iqjs)
Keil, J., Michel, A., Sticca, F. et al. The Pizzagame: A virtual public goods game to assess cooperative behavior in children and adolescents. Behav Res 49, 1432–1443 (2017). https://doi.org/10.3758/s13428-016-0799-9
15 - 20 minutes
The basic game setup is as follows: Participant are told that they play a game with 2 fellow players that evolves around collecting slices of pizzas: The more slices of pizza the better. Each player receives 9 slices of pizza at the start of each new game round. Each player then has to decide how many slices of pizza to keep (safely) at home and how many slices of pizza to contribute to a 'public share plate' at school.
Home: pizza is 'safe' (home pizza slices cannot be taken away) School: slices of pizza are pooled and teacher contributes half of the collected slices. The total number of slices of pizza are then divided up amongst the three players => depending on how many slices of pizza are contributed by all the players, each player can end up with more, fewer or the same number of pizza slices compared to the start amount (9)
Examples: 1) None of the players contribute ('non-cooperative' or 'selfish') school: 3*0 = 0; 0/2 = 0 (0+0)/3 = 0 => each player receives 13.5 pizza slices from school => 9 (home) + 0 (school) = 9 (9-9 = 0 => no gain, no loss)
2) 2 players contribute 0 slices of pizza and one player contributes 9 slices. ('exploitative' or 'divergent') school: 1*9 = 9; 9/2 = 4.5; (9+4.5)/3 = 4.5 => each player receives 9 pizza slices from school => cooperative player: 0 (home) + 4.5 (school) = 4.5 (4.5-9 = -4.5 => loss) => exploitative players: 9 (home) + 4.5 (school) = 13.5 (13.5-9 = 4.5 => net gain)
3) All players contribute 9 slices of pizze ('cooperative'). school: 3*9 = 27; 27/2 = 13.5; (27+13.5)/3 = 13.5 => each player receives 13.5 pizza slices from school => 0 (home) + 13.5 (school) = 13.5 (13.5-9 = 4.5 => net gain)
Participants play 3 games with 4 rounds each. Each game is played with different 'players'. The first game is run with cooperative players, the second one is run with uncooperative players, and the third game is run with one exploitative player.
(1) Game Loading: the script 'loads' the game page for a random 2-10s while playing some music
(2) Game Startup Page: the startup page presents 4 buttons: a tutorial button and three game buttons.
At the start of the game, only the tutorial button is activated.
(3) Tutorial: the tutorial plays
(a) Instructions
(b) 3 demo scenarios: the scenarios are played in a fixed order
Demo1: shows non-cooperative players
Demo2: shows an exploitative player
Demo3: shows cooperative players
After each demo, participants are asked
(i) Which player has more slices of pizza
(ii) Which player has fewer slices of pizza
(iii) Which player has the same amount of pizza
participants do not receive accuracy feedback for their choices
(c) A practice ('User Interface') Scenario (a game round without actual slices of pizza and actual coplayers)
After the practice, the first game button is activated
(4) Game #1
-Game #1 starts with a 'fake' module loading page (with music overlay) to simulate finding players etc.
-Then the players get introduced
-Then the decision page comes up: how many slices of pizza to share at school (this trial is followed by a 'wait' trial with music)
-Then the school situation is played out, the slices of pizza divided
-At the end of the round, the participant gets feedback of this particular round and an overview
of how many slices of pizzas were won during game1
After game #1 is over (4 rounds), the player returns to the startpage and game button 2 is activated
(game button#1 is de-activated)
(5) Game #2
see Game #1 with new players
(6) Game #3
see Game #1 with new players
(7) Final Feedback about slices of pizza won by all 7 players
An overview page that displays all pizza slices won during each game round
(participant always ends up being the second highest winner,
the remaining numbers are calculated based on an fixed algorithm - see script 'pizzagame_ranksoverview.iqjs')
provided by Millisecond - can be edited under section Editable Stimuli
The images were taken from 'https://pixabay.com/' (license: free for commercial use)
soundfiles were taken from 'https://www.free-stock-music.com' (license: free for commercial use with attribution)
as well as 'https://freesound.org/ (creative commons 0 license)
photo images: NIMH-chEFS database Neutral-direct gazes
for scripts run with avatar images, the images can be replaced by your own
(just keep the original filenames)
The instructions are based on the original German Pizza game instructions shared by Dr. Jan Keil.
The audio files were professionally generated by Millisecond.
File Name: pizzagame_summary*.iqdat
| Name | Description |
|---|---|
| inquisit.version | Inquisit version number |
| computer.platform | Device platform: win | mac |ios | android |
| startDate | Date the session was run |
| startTime | Time the session was run |
| groupId | Group number |
| sessionId | Session number |
| elapsedTime | Session duration in ms |
| completed | 0 = Test was not completed 1 = Test was completed |
| runSelfieTaker | True: a selfie taker module is run false: no selfie taker module is run |
| coplayerCondition | "avatar", "f9to12", "f13to16", "m9to12", OR "m13to16" |
| compAcc | Comprehension accuracy: proportion correctly responded comprehension questions (out of 9) |
The Collected Number Of Pizza Slices (Participant) By Game And Round |
|
| game1Condition | Cooperative |
| game1R1 | The collected number of pizza slices in round1 of game1 ('cooperative') |
| game1R2 | The collected number of pizza slices in round2 of game1 |
| game1R3 | The collected number of pizza slices in round3 of game1 |
| game1R4 | The collected number of pizza slices in round4 of game1 |
| game2Condition | Selfish |
| game2R1 | The collected number of pizza slices in round1 of game2 ('selfish') |
| game2R2 | The collected number of pizza slices in round2 of game2 |
| game2R3 | The collected number of pizza slices in round3 of game2 |
| game2R4 | The collected number of pizza slices in round4 of game2 |
| game3Condition | Divergent |
| game3R1 | The collected number of pizza slices in round1 of game3 ('divergent') |
| game3R2 | The collected number of pizza slices in round2 of game3 |
| game3R3 | The collected number of pizza slices in round3 of game3 |
| game3R4 | The collected number of pizza slices in round4 of game3 |
File Name: pizzagame_raw*.iqdat
| Name | Description |
|---|---|
| build | Inquisit version number |
| computer.platform | Device platform: win | mac |ios | android |
| date | Date the session was run |
| time | Time the session was run |
| subject | Participant ID |
| group | Group number |
| session | Session number |
| blockCode | Name of the current block |
| blockNum | Number of the current block |
| trialCode | Name of the current trial |
| trialNum | Number of the current trial |
| runSelfieTaker | True: a selfie taker module is run false: no selfie taker module is run |
| coplayerCondition | "avatar", "f9to12", "f13to16", "m9to12", OR "m13to16" |
Built-In Dvs (Record For Any Performance Metrics Recording Trial) |
|
| response | The participant's response |
| correct | Accuracy of response: 1 = correct response; 0 = otherwise (if applicable) |
| latency | The response latency (in ms); measured from: onset of trial |
Demo Data |
|
| correctResponseQ1 | Stores the correct response for q1 (0 = none, 1 = button1, 2=button2, 3=button3, A = All) |
| q1Rsp | Stores the selected response for q1 |
| q1Acc | See trialCode 'compQuestions_end': 1 = comprehension question 1 answered correctly; 0 = otherwise |
| correctResponseQ2 | Stores the correct response for q2 (0 = none, 1 = button1, 2=button2, 3=button3, A = All) |
| q2Rsp | Stores the selected response for q2 |
| q2Acc | See trialCode 'compQuestions_end': 1 = comprehension question 2 answered correctly; 0 = otherwise |
| correctResponseQ3 | Stores the correct response for q3 (0 = none, 1 = button1, 2=button2, 3=button3, A = All) |
| q3Rsp | Stores the selected response for q3 |
| q3Acc | See trialCode 'compQuestions_end': 1 = comprehension question 3 answered correctly; 0 = otherwise |
Test Game Data (See Trial.Testdecision) |
|
| game | 1, 2 or 3 |
| gameCondition | "cooperative", "selfish", "divergent" |
| roundCount | Counts the number of rounds per game (1-4) |
| coplayer1Image | The image presented for coplayer1 (on the left) |
| coplayer1Name | The name selected for coplayer1 |
| startPlayer1 | The number of pizza slices at the start of the round |
| schoolPlayer1 | The number of pizza slices that coplayer1 takes to school |
| homePlayer1 | The number of pizza slices that coplayer1 keeps home |
| coplayer2Image | The image presented for coplayer2 (on the right) |
| coplayer2Name | The name selected for coplayer2 |
| startPlayer2 | The number of pizza slices at the start of the round |
| schoolPlayer2 | The number of pizza slices that coplayer2 takes to school |
| homePlayer2 | The number of pizza slices that coplayer2 keeps home |
| participantImage | The image presented for participant (in the middle) |
| participantName | The name used for participant |
| startParticipant | The number of pizza slices at the start of the round |
| schoolParticipant | The number of pizza slices that participant takes to school |
| homeParticipant | The number of pizza slices that participant keeps home |
| schoolContribution | The sum of the all the pizza slices brought to school |
| teacherContribution | The number of pizza slices the teacher contributes |
| totalpizza | The combined number of pizza slices (teacher contribution + slices brought in by the kids) |
| takeHomepizza | The number of pizza slices that each kid can take home |
| finalPlayer1 | The total number of pizza slices for player1 (home + takehomepizza) at the end of the current round |
| finalPlayer2 | The total number of pizza slices for player2 (home + takehomepizza) at the end of the current round |
| finalParticipant | The total number of pizza slices for participant (home + takehomepizza) at the end of the current round |
The Collected Number Of Pizza Slices (Participant) By Game And Round |
|
| game1R1 | The collected number of pizza slices in round1 of game1 ('cooperative') |
| game1R2 | The collected number of pizza slices in round2 of game1 |
| game1R3 | The collected number of pizza slices in round3 of game1 |
| game1R4 | The collected number of pizza slices in round4 of game1 |
| game2R1 | The collected number of pizza slices in round1 of game2 ('selfish') |
| game2R2 | The collected number of pizza slices in round2 of game2 |
| game2R3 | The collected number of pizza slices in round3 of game2 |
| game2R4 | The collected number of pizza slices in round4 of game2 |
| game3R1 | The collected number of pizza slices in round1 of game3 ('divergent') |
| game3R2 | The collected number of pizza slices in round2 of game3 |
| game3R3 | The collected number of pizza slices in round3 of game3 |
| game3R4 | The collected number of pizza slices in round4 of game3 |
The procedure can be adjusted by setting the following parameters.
| Name | Description | Default |
|---|---|---|
| startPizzaSlices | The number of start pizza slices | 9 |
| a | Option A of pizza slice sharing | 0 |
| b | Option B of pizza slice sharing | 3 |
| c | Option C of pizza slice sharing | 6 |
| d | Option D of pizza slice sharing (setting of parameters.selfieTaker are set in respective main scripts) | 9 |