Updated dialogue engine to work with external files

This commit is contained in:
magicalfeyfenny 2021-06-04 04:09:05 -04:00
parent 9ff4641278
commit dc3f3496f3
8 changed files with 184 additions and 40 deletions

24
dialogue_test.txt Normal file
View File

@ -0,0 +1,24 @@
0
3 Wriggle
2 Mystia
"So, what are you up to?"
0
3 Wriggle
2 Mystia
"on this fine day of Tuesday"
1
1 Wriggle
2 Mystia
"not much my good binch"
1
1 Wriggle
2 Mystia
"just drinking my soup"
0
1 Wriggle
5 Mystia
"cool cool"
1
2 Wriggle
1 Mystia
"btw did you hear we're files now"

View File

@ -0,0 +1,24 @@
0
3 Wriggle
2 Mystia
"So, what are you up to?"
0
3 Wriggle
2 Mystia
"on this fine day of Tuesday"
1
1 Wriggle
2 Mystia
"not much my good binch"
1
1 Wriggle
2 Mystia
"just drinking my soup"
0
1 Wriggle
5 Mystia
"cool cool"
1
2 Wriggle
1 Mystia
"btw did you hear we're files now"

View File

@ -1,11 +1,11 @@
dialogue_flag = 0;
dialogue_mode = true;
loopdoop = 0;
dialogue_mode = false;
textspew = "";
texttarget = "";
actor_left = "";
actor_left_emote = 0;
actor_right = "";
actor_right_emote = 0;
spewlength = 0;
last_active = 0;
text_advance_ready = -1;
@ -13,31 +13,42 @@ text_advance_ready = -1;
name_test = ds_queue_create();
text_test = ds_queue_create();
active_test = ds_queue_create();
emote_test = ds_queue_create();
if (dialogue_flag == 0) {
ds_queue_enqueue(name_test,
"", "",
"Wriggle", "Mystia",
"Wriggle", "Mystia",
"Wriggle", "Mystia",
"Wriggle", "Mystia",
"Wriggle", "Mystia"
);
ds_queue_enqueue(text_test,
"",
"So, what are you up to?",
"on this fine day of Tuesday",
"not much my good binch",
"just drinking my soup",
"cool cool"
);
ds_queue_enqueue(active_test,
0,
0,
0,
1,
1,
0
);
dialogue_flag++;
}
loopdoop = 0;
//ds_queue_enqueue(name_test,
// "", "",
// "Wriggle", "Mystia",
// "Wriggle", "Mystia",
// "Wriggle", "Mystia",
// "Wriggle", "Mystia",
// "Wriggle", "Mystia"
// );
//ds_queue_enqueue(text_test,
// "",
// "So, what are you up to?",
// "on this fine day of Tuesday",
// "not much my good binch",
// "just drinking my soup",
// "cool cool"
// );
//ds_queue_enqueue(active_test,
// 0,
// 0,
// 0,
// 1,
// 1,
// 0
// );
//
//ds_queue_enqueue(emote_test,
// 3, 2,
// 3, 2,
// 1, 2,
// 1, 2,
// 1, 2,
// 1, 5
// );
scr_dialogue_start( "dialogue_test.txt" );

View File

@ -4,20 +4,28 @@ if (dialogue_mode) {
// draw_sprite_ext( actor_left
//TODO: Draw right active character, transparent if "last active"
// draw_sprite_ext( actor_right
draw_text( 128, 320, actor_left_emote );
draw_text( 1000, 320, actor_right_emote );
// Draw dialogue box
draw_self();
//TODO: Draw current active character's name
draw_set_alpha(1);
if ( last_active == 0 ) {
draw_text( 128, 640, actor_left );
draw_set_alpha(.5);
}
draw_set_halign( fa_right );
draw_text( 1080, 640, actor_right );
draw_set_halign( fa_left );
}
draw_set_alpha(1);
if ( last_active == 1 ) {
draw_set_halign( fa_right );
draw_text( 1080, 640, actor_right );
draw_set_halign( fa_left );
draw_set_alpha(.5);
}
draw_text( 128, 640, actor_left );
draw_set_alpha(1);
//TODO: Draw current active character's text, adding one character at a time
draw_text( 128, 480, textspew );

View File

@ -1,10 +1,12 @@
if (dialogue_mode) {
if (text_advance_ready == -1 && !ds_queue_empty(name_test) && !ds_queue_empty(name_test) && !ds_queue_empty(active_test)) {
if (text_advance_ready == -1 && !ds_queue_empty(name_test) && !ds_queue_empty(name_test) && !ds_queue_empty(active_test) && !ds_queue_empty(emote_test)) {
text_advance_ready = 0;
actor_left = ds_queue_dequeue(name_test);
actor_left_emote = ds_queue_dequeue(emote_test);
actor_right = "";
if (!ds_queue_empty(name_test)) {
if (!ds_queue_empty(name_test) && !ds_queue_empty(emote_test)) {
actor_right = ds_queue_dequeue(name_test);
actor_right_emote = ds_queue_dequeue(emote_test);
}
texttarget = ds_queue_dequeue(text_test);
textspew = "";
@ -27,7 +29,7 @@ if (dialogue_mode) {
if (text_advance_ready == 1) {
if (keyboard_check_pressed( ord("Z") ) ) {
text_advance_ready = -1;
if (ds_queue_empty(name_test) || ds_queue_empty(text_test) || ds_queue_empty(active_test)) {
if (ds_queue_empty(name_test) || ds_queue_empty(text_test) || ds_queue_empty(active_test) || ds_queue_empty(emote_test)) {
dialogue_mode = false;
}
}

View File

@ -0,0 +1,60 @@
/// @function: scr_dialogue_start( _filename );
/// @param {string} _filename The filename of the dialogue branch
// Requirements: An instance of obj_dialogue
function scr_dialogue_start( _filename ) {
if (!instance_exists(obj_dialogue) ) {
return -1;
}
//file format for dialogue:
/*
last_active {int} active_test
actor_left_emote {int} emote_test
actor_left {string} name_test
actor_right_emote {int} emote_test
actor_right {string} name_test
texttarget {string} text_test
repeat until EOF
*/
//clear all queues
ds_queue_clear( obj_dialogue.active_test );
ds_queue_clear( obj_dialogue.emote_test );
ds_queue_clear( obj_dialogue.name_test );
ds_queue_clear( obj_dialogue.text_test );
//open dialogue file matching _filename
file = file_text_open_read( _filename );
//enqueue dialogue
while (!file_text_eof(file) ) {
ds_queue_enqueue( obj_dialogue.active_test, file_text_read_real(file) );
file_text_readln(file);
ds_queue_enqueue( obj_dialogue.emote_test, file_text_read_real(file) );
ds_queue_enqueue( obj_dialogue.name_test, file_text_read_string(file) );
file_text_readln(file);
ds_queue_enqueue( obj_dialogue.emote_test, file_text_read_real(file) );
ds_queue_enqueue( obj_dialogue.name_test, file_text_read_string(file) );
file_text_readln(file);
ds_queue_enqueue( obj_dialogue.text_test, file_text_read_string(file) );
file_text_readln(file);
}
//close dialogue file
file_text_close( file );
//enter dialogue mode and set variables
obj_dialogue.dialogue_mode = true;
obj_dialogue.textspew = "";
obj_dialogue.texttarget = "";
obj_dialogue.actor_left = "";
obj_dialogue.actor_left_emote = 0;
obj_dialogue.actor_right = "";
obj_dialogue.actor_right_emote = 0;
obj_dialogue.spewlength = 0;
obj_dialogue.last_active = 0;
obj_dialogue.text_advance_ready = -1;
}

View File

@ -0,0 +1,12 @@
{
"isDnD": false,
"isCompatibility": false,
"parent": {
"name": "thpj3",
"path": "thpj3.yyp",
},
"resourceVersion": "1.0",
"name": "scr_dialogue_start",
"tags": [],
"resourceType": "GMScript",
}

View File

@ -6,6 +6,7 @@
{"id":{"name":"Sprite7","path":"sprites/Sprite7/Sprite7.yy",},"order":9,},
{"id":{"name":"obj_title_moon","path":"objects/obj_title_moon/obj_title_moon.yy",},"order":1,},
{"id":{"name":"spr_title_star","path":"sprites/spr_title_star/spr_title_star.yy",},"order":8,},
{"id":{"name":"scr_dialogue_start","path":"scripts/scr_dialogue_start/scr_dialogue_start.yy",},"order":10,},
{"id":{"name":"rm_disclaimer","path":"rooms/rm_disclaimer/rm_disclaimer.yy",},"order":3,},
{"id":{"name":"obj_title_text","path":"objects/obj_title_text/obj_title_text.yy",},"order":4,},
{"id":{"name":"spr_title_bg","path":"sprites/spr_title_bg/spr_title_bg.yy",},"order":6,},
@ -49,7 +50,9 @@
"TextureGroups": [
{"isScaled":true,"autocrop":true,"border":2,"mipsToGenerate":0,"groupParent":null,"targets":-1,"resourceVersion":"1.3","name":"Default","resourceType":"GMTextureGroup",},
],
"IncludedFiles": [],
"IncludedFiles": [
{"CopyToMask":153157610357391598,"filePath":"datafiles","resourceVersion":"1.0","name":"dialogue_test.txt","resourceType":"GMIncludedFile",},
],
"MetaData": {
"IDEVersion": "2.3.2.560",
},