Game Callbacks
Welcome to the documentation for the onGameStart() function! This guide will explain how the game initializes, assigns roles, and structures rounds. This page is verified by: Vedant Kejariwal
Functions
This function defines the game structure, player attributes, and round stages. It ensures that the simulation starts with the correct conditions.
Function: Empirica.onGameStart()
Explanation:
- This function is executed at the start of the game.
- It defines the game parameters, round stages, and assigns roles to players.
- It ensures that all players begin with the correct attributes based on whether they are producers or consumers.
Game Parameters
Explanation:
- The game starts by retrieving key settings from treatment parameters.
- These variables determine the structure of the game.
Extracted Game Parameters
playerCount→ Total number of players.warrantTreatment→ Specifies the use of warranties in the game.producerCount→ Number of producers in the game.consumerCount→ Number of consumers in the game.numRounds→ Total number of rounds in the game.
Adding Rounds
Explanation:
- The function iterates through the total number of rounds (
numRounds). - Each round consists of different stages that represent the phases of gameplay.
Stages in Each Round
-
First Round Only
if (i === 1)→ The first round has two additional stages:"SelectRole"→ Players are assigned their roles."Tutorial"→ Introduces game mechanics.
-
Stages in Every Round
"ProducerChoice"→ Producers make decisions on quality and branding."ConsumerChoice"→ Consumers decide which producers to purchase from."Feedback"→ Consumer challenges and reviews are processed."Results"→ Updates players' attributes and displays outcomes.
Each round ensures that producers and consumers interact, trade, and provide feedback.
Assigning Roles
Explanation:
- Players are randomly shuffled before roles are assigned.
- The function determines whether a player will be a producer or a consumer.
Shuffling Players
const shuffledPlayers = shuffleArray([...game.players]);- Ensures random role distribution.
- Prevents predictable player positioning.
Producer Initialization
Explanation:
- Producers represent businesses that sell products.
- Each producer starts with a unique brand, capital, and attributes.
Key Producer Attributes
player.set("role", "producer");→ Assigns producer role.player.set("capital", initialCapital);→ Starting funds for investments.player.set("brandName", getRandomName());→ Assigns a random brand name.player.set("currentQuality", "");→ Quality is chosen later in the round.player.set("profits", [0]);→ Tracks profits over time.player.set("claims", [0, 0]);→ Tracks successful vs. failed claims.player.set("sold", []);→ List of consumers who purchased from them.
Tracking Performance
player.set("reviews", [[0, 0]]);→ Tracks positive & negative feedback.player.set("score", []);→ Individual round scores.player.set("totalScore", [0]);→ Cumulative game score.player.set("totalProfits", 0);→ Total profit throughout the game.
Challenge & Branding Mechanics
player.set("warrants", []);→ Tracks if a producer issued warranties.player.set("challenges", []);→ Tracks who challenged them.player.set("changedBrand", []);→ Tracks if they rebranded.
By initializing these attributes, the function ensures that producers have everything they need to operate in the game.
Consumer Initialization
Explanation:
- Consumers purchase products, issue challenges, and earn points based on their choices.
Key Consumer Attributes
player.set("role", "consumer");→ Assigns consumer role.player.set("wallet", initialWallet);→ Starting budget for purchases.player.set("cart", []);→ Stores selected products each round.player.set("purchasedFrom", []);→ Tracks producers they bought from.
Challenge & Review System
player.set("consumerReviews", {});→ Stores feedback on producers.player.set("currentChallenge", []);→ List of producers they challenge.player.set("challenged", []);→ List of all past challenges.
Tracking Performance
player.set("score", []);→ Individual round scores.player.set("totalScore", [0]);→ Cumulative game score.player.set("roundScore", []);→ Score for each round.
By initializing these attributes, the function ensures that consumers have a structured way to engage with the game.
Logical Flow of the Function
-
Define Game Parameters
- Retrieve player count, rounds, and game rules from
treatment.
- Retrieve player count, rounds, and game rules from
-
Create Rounds
- Generate rounds with specific stages for gameplay progression.
-
Shuffle Players
- Randomize player order to ensure fair role assignment.
-
Assign Producers
- Give producers capital, brand names, and tracking variables.
-
Assign Consumers
- Give consumers wallets, tracking systems, and purchase abilities.