User Manual: Inquisit Pizza Game - male 9-12


								Pizzagame: with male coplayers, ages 9-12
								Main Script to run: pizzagame_m9to12.iqjs
								
				*A selfie maker can be activated - default runs with a generic avatar instead*


___________________________________________________________________________________________________________________	

											*Pizza Game*
___________________________________________________________________________________________________________________	

Script Author: Katja Borchert, Ph.D. (katjab@millisecond.com) for Millisecond Software, LLC
Date: 03-07-2022
last updated:  09-30-2024 by K. Borchert (katjab@millisecond.com) for Millisecond Software, LLC

Script Copyright © 09-30-2024 Millisecond Software

Millisecond Software 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.

___________________________________________________________________________________________________________________
BACKGROUND INFO 	
___________________________________________________________________________________________________________________	

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)

Reference:
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

___________________________________________________________________________________________________________________
TASK 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.

___________________________________________________________________________________________________________________	
DURATION 
___________________________________________________________________________________________________________________	
the default set-up of the script takes appr. 15-20 minutes to complete
___________________________________________________________________________________________________________________	
DATA OUTPUT DICTIONARY
___________________________________________________________________________________________________________________		
The fields in the data files are:

(1) Raw data file: 'pizzagame_raw*.iqdat' (a separate file for each participant)*

build:							The specific Inquisit version used (the 'build') that was run
computer.platform:				the platform the script was run on (win/mac/ios/android)
date, time: 					date and time script was run 

subject: 						current subjectId

group:							groupnumber
session:						with the current session id

blockCode, blockNum:			the name and number of the current block (built-in Inquisit variable)
trialCode, trialNum: 			the name and number of the currently recorded trial (built-in Inquisit variable)
									Note: trialNum is a built-in Inquisit variable; it counts all trials run; even those
									that do not store data to the data file.
									
runSelfieTaker: false			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 data 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


(2) Summary data file: 'pizzagame_summary*.iqdat' (a separate file for each participant)*

inquisit.version:				Inquisit version run
computer.platform:				the platform the script was run on (win/mac/ios/android)
startDate:						date script was run
startTime:						time script was started

groupId:						groupnumber								
sessionId:						assigned session id number
elapsedTime:					time it took to run script (in ms); measured from onset to offset of script
completed:						0 = script was not completed (prematurely aborted); 
								1 = script was completed (all conditions run)
								
runSelfieTaker: false			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								
							
							
___________________________________________________________________________________________________________________	
EXPERIMENTAL SET-UP 
___________________________________________________________________________________________________________________	

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

Note: 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 Software.

___________________________________________________________________________________________________________________	
EDITABLE CODE 
___________________________________________________________________________________________________________________	
check below for (relatively) easily editable parameters, stimuli, instructions etc. 
Keep in mind that you can use this script as a template and therefore always "mess" with the entire code 
to further customize your experiment.

The parameters you can change are:

/ startPizzaSlices = 9			//the number of start pizza slices

/ a = 0							//option A of pizza slice sharing
/ b = 3							//option B of pizza slice sharing
/ c = 6							//option C of pizza slice sharing
/ d = 9							//option D of pizza slice sharing

(setting of parameters.selfieTaker are set in respective main scripts)