Pizza Game - Avatars

Technical Manual

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 18, 2024 by K. Borchert (katjab@millisecond.com), Millisecond

Script Copyright © Millisecond Software, LLC

Background

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.

Options
This Inquisit implementation of the pizza game provides the following options:

(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)

References

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

Duration

15 - 20 minutes

Description

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.

Procedure

(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')

Selfies: Additional Information

The original pizza game (Keil et al, 2017) is played with selfies and images for the coplayer.
Co-players were originally matched in gender and agegroup.

This script provides a rudimentary selfie maker.
See settings of parameters.runSelfieTaker in the respective main scripts!

Stimuli

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)

Instructions

The instructions are based on the original German Pizza game instructions shared by Dr. Jan Keil.
The audio files were professionally generated by Millisecond.

Summary Data

File Name: pizzagame_summary*.iqdat

Data Fields

NameDescription
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

Raw Data

File Name: pizzagame_raw*.iqdat

Data Fields

NameDescription
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

Parameters

The procedure can be adjusted by setting the following parameters.

NameDescriptionDefault
startPizzaSlices The number of start pizza slices9
a Option A of pizza slice sharing0
b Option B of pizza slice sharing3
c Option C of pizza slice sharing6
d Option D of pizza slice sharing
(setting of parameters.selfieTaker are set in respective main scripts)
9