Links:
key | description | link |
---|---|---|
original | base game | https://jowilder-master.netlify.app/?script_type=original |
nohumor | no humor | https://jowilder-master.netlify.app/?script_type=nohumor |
nosnark | no snark | https://jowilder-master.netlify.app/?script_type=nosnark |
dry | no snark or humor | https://jowilder-master.netlify.app/?script_type=dry |
Each log is sent with a number of fields required by simplelog. Simple log allows for a custom field called event_data_complex along with its category enumerator: event_custom: category enumerator event_data_complex: JSON.stringify(log_data) Each log_data is a JSON object for that specific category as defined below. Note: Note: event_custom will always map to a string of the event name. For example, if an event called FOO had a field of "event_custom", its value would be a string "FOO". Not all events have this field.
Versions:
- Original
- Restructured to flatten logging objects (which originally contained many sub-objects)
- Simple log now sends player_id (if present) from the URL to log.php (9/24/2019)
- Change name, type, and subtype to representitive strings instead of numbers (11/12/2019)
- Intermediate Change. (11/26/2019)
- Big Change. Will update readme later with all that has been changed (11/26/2019).
- Add "script_type" and "script_version" to startgame (7/22/2020).
- Add "quiz_number" to quiz (7/23/2020). Quiz questions subject to change, but now there is a quiz after each chapter end.
- Add quizquestion log (#22) (7/29/2020).
- Add quizstart and quizend logs (#23,#24) (8/03/2020).
- checkpoint
- startgame
- endgame
- navigate_click
- notebook_click
- map_click
- notification_click
- object_click
- observation_click
- person_click
- cutscene_click
- wildcard_click
- navigate_hover
- notebook_hover
- map_hover
- notification_hover
- object_hover
- observation_hover
- person_hover
- cutscene_hover
- wildcard_hover
- quiz
- quizquestion
- quizstart
- quizend
- Event Categories
- Log Types
- Log Subtypes
- Log Names
- Levels
- Interactions and Objectives
- Survey Questions
- Survey Responses
- Script Types
- Script Versions
event Name | Description | Note |
---|---|---|
room_fqid | fully qualified id of the room | |
type | type name | |
subtype | subtype name | |
fqid | fqid of the interaction, with the room_fqid subtracted | |
event_custom | event enum | |
name | event name | |
level | enum for current checkpoint |
event Name | Description | Note |
---|---|---|
room_fqid | fully qualified id of the room | |
type | type name | |
subtype | subtype name | |
fqid | fqid of the interaction, with the room_fqid subtracted | |
event_custom | event enum | |
save_code | ||
fullscreen | ||
music | ||
hq | ||
script_type | enum of which script is being used. See script_types for details and mappings from enum to type. | v7+ |
script_version | Version of the script | v7+ |
name | event name | |
level | enum for current checkpoint |
event Name | Description | Note |
---|---|---|
room_fqid | fully qualified id of the room | |
type | type name | |
subtype | subtype name | |
fqid | fqid of the interaction, with the room_fqid subtracted | |
event_custom | event enum | |
name | event name | |
level | enum for current checkpoint |
event Name | Description | Note |
---|---|---|
room_fqid | fully qualified id of the room | |
type | type name | |
subtype | subtype name | |
fqid | fqid of the interaction, with the room_fqid subtracted | |
event_custom | event enum | |
screen_coor | x,y integer array of where the mouse is in current room | |
room_coor | x,y integer array of where the mouse is in the game screen | |
level | enum for current checkpoint |
event Name | Description | Note |
---|---|---|
room_fqid | fully qualified id of the room | |
type | type name | |
subtype | subtype name | |
fqid | fqid of the interaction, with the room_fqid subtracted | |
event_custom | event enum | |
screen_coor | x,y integer array of where the mouse is in current room | |
room_coor | x,y integer array of where the mouse is in the game screen | |
name | event name | |
page | ||
level | enum for current checkpoint |
event Name | Description | Note |
---|---|---|
room_fqid | fully qualified id of the room | |
type | type name | |
subtype | subtype name | |
fqid | fqid of the interaction, with the room_fqid subtracted | |
event_custom | event enum | |
screen_coor | x,y integer array of where the mouse is in current room | |
room_coor | x,y integer array of where the mouse is in the game screen | |
name | event name | |
level | enum for current checkpoint |
event Name | Description | Note |
---|---|---|
room_fqid | fully qualified id of the room | |
type | type name | |
subtype | subtype name | |
fqid | fqid of the interaction, with the room_fqid subtracted | |
event_custom | event enum | |
screen_coor | x,y integer array of where the mouse is in current room | |
room_coor | x,y integer array of where the mouse is in the game screen | |
name | event name | |
level | enum for current checkpoint | |
text_fqid | c.fqid | Text fqid (v6+) |
text | c_text | Text (v6+) |
event Name | Description | Note |
---|---|---|
room_fqid | fully qualified id of the room | |
type | type name | |
subtype | subtype name | |
fqid | fqid of the interaction, with the room_fqid subtracted | |
event_custom | event enum | |
screen_coor | x,y integer array of where the mouse is in current room | |
room_coor | x,y integer array of where the mouse is in the game screen | |
name | event name | |
level | enum for current checkpoint |
event Name | Description | Note |
---|---|---|
room_fqid | fully qualified id of the room | |
type | type name | |
subtype | subtype name | |
fqid | fqid of the interaction, with the room_fqid subtracted | |
event_custom | event enum | |
screen_coor | x,y integer array of where the mouse is in current room | |
room_coor | x,y integer array of where the mouse is in the game screen | |
name | event name | |
level | enum for current checkpoint | |
text_fqid | obs_fqid | Text fqid (v6+) |
text | obs_text | Text (v6+) |
event Name | Description | Note |
---|---|---|
room_fqid | fully qualified id of the room | |
type | type name | |
subtype | subtype name | |
fqid | fqid of the interaction, with the room_fqid subtracted | |
event_custom | event enum | |
screen_coor | x,y integer array of where the mouse is in current room | |
room_coor | x,y integer array of where the mouse is in the game screen | |
name | event name | |
level | enum for current checkpoint | |
text_fqid | speak.fqid | Text fqid (v6+) |
text | speak_text | (v6+) |
event Name | Description | Note |
---|---|---|
room_fqid | fully qualified id of the room | |
type | type name | |
subtype | subtype name | |
fqid | fqid of the interaction, with the room_fqid subtracted | |
event_custom | event enum | |
screen_coor | x,y integer array of where the mouse is in current room | |
room_coor | x,y integer array of where the mouse is in the game screen | |
name | event name | |
level | enum for current checkpoint | |
text_fqid | cutscene.fqid | Text fqid (v6+) |
text | txt | Either cutscene text or 'undefined' (v6+) |
event Name | Description | Note |
---|---|---|
room_fqid | fully qualified id of the room | |
type | type name | |
subtype | subtype name | |
fqid | fqid of the interaction, with the room_fqid subtracted | |
event_custom | event enum | |
screen_coor | x,y integer array of where the mouse is in current room | |
room_coor | x,y integer array of where the mouse is in the game screen | |
name | event name | |
level | enum for current checkpoint |
|correct | correct answer to the problem (only exists for event name CHOICE) - sometimes doesn't exist?? | Only exists in versions 1-4. (v4-)| |answer | selected answer (only exists for event name CHOICE) | Only exists in versions 1-4. (v4-)| |cur_cmd_fqid| cmd_type == 1 ? cur_cmd.speak_fqid : wc.cur_command.entry_fqid|Only exists in versions 6+ (v6+)| |cur_cmd_type| cmd_type| Only exists in versions 6+ (v6+)| |text| cmd_txt| Only exists in versions 6+ (v6+)| |name| wc.cmd_type == 1 ? LOG_NAME_BASIC : LOG_NAME_CHOICE| Only exists in versions 6+ (v6+)| |interacted_fqid| clicked_fqid| Only exists in versions 6+ (v6+)|
event Name | Description | Note |
---|---|---|
room_fqid | fully qualified id of the room | |
type | type name | |
subtype | subtype name | |
fqid | fqid of the interaction, with the room_fqid subtracted | |
event_custom | event enum | |
start_time | client side timestamp for the time the hover started | |
end_time | client side timestamp for the time the hover ended | |
name | event name | |
level | enum for current checkpoint |
event Name | Description | Note |
---|
event Name | Description | Note |
---|---|---|
room_fqid | fully qualified id of the room | |
type | type name | |
subtype | subtype name | |
fqid | fqid of the interaction, with the room_fqid subtracted | |
event_custom | event enum | |
start_time | client side timestamp for the time the hover started | |
end_time | client side timestamp for the time the hover ended | |
name | event name | |
level | enum for current checkpoint |
event Name | Description | Note |
---|
event Name | Description | Note |
---|---|---|
room_fqid | fully qualified id of the room | |
type | type name | |
subtype | subtype name | |
fqid | fqid of the interaction, with the room_fqid subtracted | |
event_custom | event enum | |
start_time | client side timestamp for the time the hover started | |
end_time | client side timestamp for the time the hover ended | |
level | enum for current checkpoint | |
name | event name - sometimes doesn't exist?? |
event Name | Description | Note |
---|
event Name | Description | Note |
---|
event Name | Description | Note |
---|
event Name | Description | Note |
---|---|---|
room_fqid | fully qualified id of the room | |
type | type name | |
subtype | subtype name | |
fqid | fqid of the interaction, with the room_fqid subtracted | |
event_custom | event enum | |
start_time | client side timestamp for the time the hover started | |
end_time | client side timestamp for the time the hover ended | |
name | event name - sometimes doesn't exist?? | |
level | enum for current checkpoint | |
correct | correct answer to the problem (only exists for event name CHOICE) - sometimes doesn't exist?? | Only exists in versions 1-4. (v4-) |
answer | selected answer (only exists for event name CHOICE) | Only exists in versions 1-4. (v4-) |
cur_cmd_fqid | cmd_type == 1 ? cur_cmd.speak_fqid : wc.cur_command.entry_fqid | Only exists in versions 6+ (v6+) |
cur_cmd_type | cmd_type | Only exists in versions 6+ (v6+) |
text | cmd_txt | Only exists in versions 6+ (v6+) |
name | wc.cmd_type == 1 ? LOG_NAME_BASIC : LOG_NAME_CHOICE | Only exists in versions 6+ (v6+) |
interacted_fqid | clicked_fqid | Only exists in versions 6+ (v6+) |
Only exists in logs v6+. quiz_number only exists in logs v8+. Replaced by quizquestion in v9+
event Name | Description | Note |
---|---|---|
room_fqid | fully qualified id of the room | |
type | type enum | |
subtype | subtype enum | |
fqid | fqid of the interaction, with the room_fqid subtracted | |
name | event name enum | |
level | enum for current checkpoint | |
event_custom | event enum | |
questions | array of question objects, each has question, response, and response_index | |
quiz_number | numerical id of the quiz sent (default startgame quiz is number 0) |
Only exists in logs v9+. Replaces quiz.
event Name | Description | Note |
---|---|---|
room_fqid | fully qualified id of the room | |
type | type enum | |
subtype | subtype enum | |
fqid | fqid of the interaction, with the room_fqid subtracted | |
name | event name enum | |
level | enum for current checkpoint | |
event_custom | event enum | |
quiz_number | numerical id of the quiz sent | |
question | ques.q | text of the question |
question_index | question_index | index of the question within the quiz |
response | ques.a[ques.response] | question response text |
response_index | ques.response | index of the response |
Only exists in logs v10+. Logs when a player starts a given quiz.
event Name | Description | Note |
---|---|---|
room_fqid | fully qualified id of the room | |
type | type enum | |
subtype | subtype enum | |
fqid | fqid of the interaction, with the room_fqid subtracted | |
event_custom | event enum | |
name | event name enum | |
level | enum for current checkpoint | |
quiz_number | numerical id of the quiz sent |
Only exists in logs v10+. Logs when a player ends a given quiz.
event Name | Description | Note |
---|---|---|
room_fqid | fully qualified id of the room | |
type | type enum | |
subtype | subtype enum | |
fqid | fqid of the interaction, with the room_fqid subtracted | |
event_custom | event enum | |
name | event name enum | |
level | enum for current checkpoint | |
quiz_number | numerical id of the quiz sent |
Index | Name | Description |
---|---|---|
0 | checkpoint | |
1 | startgame | |
2 | endgame | |
3 | navigate_click | |
4 | notebook_click | |
5 | map_click | |
6 | notification_click | |
7 | object_click | |
8 | observation_click | |
9 | person_click | |
10 | cutscene_click | |
11 | wildcard_click | |
12 | navigate_hover | |
13 | notebook_hover | |
14 | map_hover | |
15 | notification_hover | |
16 | object_hover | |
17 | observation_hover | |
18 | person_hover | |
19 | cutscene_hover | |
20 | wildcard_hover | |
21 | quiz | |
22 | quizquestion | |
23 | quizstart | |
24 | quizend |
Index | Name | Description |
---|---|---|
0 | checkpoint | |
1 | startgame | |
2 | endgame | |
3 | click | |
4 | hover | |
5 | quiz | |
6 | quizquestion | |
7 | quizstart | |
8 | quizend |
Index | Name | Description |
---|---|---|
0 | basic | |
1 | navigate | |
2 | notebook | |
3 | map | |
4 | notification | |
5 | object | |
6 | observation | |
7 | person | |
8 | cutscene | |
9 | wildcard |
Index | Name | Description |
---|---|---|
0 | basic | |
1 | open | |
2 | close | |
3 | choice | |
4 | next | |
5 | prev |
Jo Wilder data is organized into levels, where each level corresponds to a "save code"/chapter in the game.
Index | Name |
---|---|
0 | startgame |
1 | notebook |
2 | wiscwonders |
3 | mystery |
4 | plaque |
5 | notajersey |
6 | trashed |
7 | archivist |
8 | textile |
9 | logbook |
10 | suffragist |
11 | taxidermist |
12 | wellsdidit |
13 | saveteddy |
14 | scratches |
15 | hesalive |
16 | akey |
17 | rescued |
18 | backtowork |
19 | sadanimals |
20 | flaglady |
21 | ecologists |
22 | donethework |
23 | sunset |
Many of the extracted features are based on individual interactions with the environment, or game objectives. Linked here are JSON files mapping each interaction and objective to the index it will have in the resulting features data.
Players are given the following survey questions to answer throughout the game.
Index | Question |
---|---|
0 | What grade are you in? |
1 | How well do you read in English? |
2 | The game grabs my attention. |
3 | I like watching TV shows about history. |
4 | Jo is friendly. |
5 | I think the characters are funny. |
6 | The characters say things that make me laugh. |
7 | Time flies while I'm playing the game. |
8 | I like reading about history. |
9 | I like Jo. |
10 | Jo is kind. |
11 | The characters say funny things. |
12 | I forget what's around me while playing the game. |
13 | I like learning history very much. |
14 | I think learning history is fun. |
15 | I can relate to Jo. |
16 | The characters are entertaining. |
17 | I feel emotionally involved in the game. |
For question 0 ("What grade are you in?"):
Index | Response |
---|---|
0 | 3rd |
1 | 4th |
2 | 5th |
3 | 6th |
4 | Other |
For question 1 ("How well do you read in English?"):
Index | Response |
---|---|
0 | Not a very Good Reader |
1 | An OK Reader |
2 | Very Good Reader |
For remaining EVEN-indexed questions:
Index | Response |
---|---|
0 | Disagree |
1 | Somewhat Disagree |
2 | Neutral |
3 | Somewhat Agree |
4 | Agree |
For remaining ODD-indexed questions, responses are reverse coded:
Index | Response |
---|---|
0 | Agree |
1 | Somewhat Agree |
2 | Neutral |
3 | Somewhat Disagree |
4 | Disagree |
Starting in v7, multiple scripts were added to the game for AB tests on snark and humor. The game will randomly choose between 4 different data files: data_dry.js, data_nohumor.js, data_nosnark.js, and the original data.js. They are each built from their respective data folder in assets. The type of script used is only logged once, in startgame.
Index | Name | Description |
---|---|---|
0 | dry | no humor or snark |
1 | nohumor | no humor (includes snark) |
2 | nosnark | no snark (includes humor). No snark can also be thought of as "obedient" |
3 | normal | base script (includes snark and humor) |
Starting in v7. The version of script used is only logged once, in startgame. Different script types may have different versions, but for now they are all uniform.
Version | Description |
---|---|
0 | Base game, all script types were the same as the original script (type 3: normal). |
1 | Changed the script for Chapter 1 to reflect the different types. Type 3 stays the same. |
2 | Updated survey questions (8/26/2020). |
3 | Changed the script of rest of chapters to reflect the different types (10/8/2020). |
In /engine
, edit the first few lines of gen_data.sh
based on the script you want to edit:
- original (data)
ENGINE_DD=../assets/data
GAME_DD=assets/data
STUB_D=stubs
OUT=data.js
- no humor (nohumor)
ENGINE_DD=../assets/dataNoHumor
GAME_DD=assets/dataNoHumor
STUB_D=stubs
OUT=data_nohumor.js
- no snark (nosnark)
ENGINE_DD=../assets/dataNoSnark
GAME_DD=assets/dataNoSnark
STUB_D=stubs
OUT=data_nosnark.js
- no snark and no humor (dry)
ENGINE_DD=../assets/dataDry
GAME_DD=assets/dataDry
STUB_D=stubs
OUT=data_dry.js
- In terminal, navigate to
/engine
. - Run
. quickgen.sh
(Windows users: runsh quickgen.sh
). If you get an error about\r
characters, run dos2unix on the erroring file and retry. - If generating the
nosnark
,nohumor
, anddry
versions, replace the code in/src/data_nosnark
,/src/data_nohumor
, and/src/data_dry
respectively:
tmp_animcycle = new animcycle();
tmp_animcycle.id = "notebook_baked";
tmp_animcycle.fqid = "tunic.notebook_baked";
{
tmp_animcycle.w = 0;
tmp_animcycle.h = 0;
tmp_animcycle.frame_t = 10;
tmp_animcycle.offset_t = 0;
tmp_animcycle.loop = 1;
tmp_animcycle.frame_files = [];
tmp_animcycle.frames = [];
tmp_animcycle.frame_files.push("assets/dataDry/levels/tunic/animcycles/notebook_baked/0.png");
}
tmp_level.animcycles.push(tmp_animcycle);
with
tmp_animcycle = new animcycle();
tmp_animcycle.id = "notebook_baked_no_monster";
tmp_animcycle.fqid = "tunic.notebook_baked_no_monster";
{
tmp_animcycle.w = 0;
tmp_animcycle.h = 0;
tmp_animcycle.frame_t = 10;
tmp_animcycle.offset_t = 0;
tmp_animcycle.loop = 1;
tmp_animcycle.frame_files = [];
tmp_animcycle.frames = [];
tmp_animcycle.frame_files.push("assets/dataDry/levels/tunic/animcycles/notebook_baked_no_monster/0.png");
}
tmp_level.animcycles.push(tmp_animcycle);
if necessary.
- Optionally, delete any data files generated in the engine folder.
- If you changed the script, please increment the versions of the script in
/src/log_events.js
, and add a comment of what the version changes. Also add similar documetation to/README.md
in theScript Versions
section.