diff --git a/data/missions/alba/02 - patrol #2.json b/data/missions/alba/02 - patrol #2.json index 44cf039..0b5f08b 100644 --- a/data/missions/alba/02 - patrol #2.json +++ b/data/missions/alba/02 - patrol #2.json @@ -63,7 +63,7 @@ "lines" : [ "ACTIVATE_ENTITY Pandoran", "ACTIVATE_OBJECTIVE 1", - "MSG_BOX 6 Alba Control;Patrol A-82, you have hostiles incoming. Identified as 3 Mitikas fighters; Jackals, possibly Pandoran. Engage, but exercise extreme caution." + "MSG_BOX Alba Control;Patrol A-82, you have hostiles incoming. Identified as 3 Mitikas fighters; Jackals, possibly Pandoran. Engage, but exercise extreme caution." ] } ] diff --git a/data/missions/coyote/03 - coyote assault #3.json b/data/missions/coyote/03 - coyote assault #3.json index a88ba3c..0270d22 100644 --- a/data/missions/coyote/03 - coyote assault #3.json +++ b/data/missions/coyote/03 - coyote assault #3.json @@ -81,25 +81,24 @@ { "function" : "ALLIES_KILLED 70", "lines" : [ - "MSG_BOX 4 UNF Pilot #1;We're getting our arses kicked here! Any chance of any backup?!" + "MSG_BOX UNF Pilot #1;We're getting our arses kicked here! Any chance of any backup?!" ] }, { "function" : "ALLIES_KILLED 80", "lines" : [ - "MSG_BOX 4 UNF Pilot #2;The White Knights are here! Finally!", + "MSG_BOX UNF Pilot #2;The White Knights are here! Finally!", "ACTIVATE_ENTITY ATAFs" ] }, { "function" : "ALLIES_KILLED 90", "lines" : [ - "MSG_BOX 6 UNF Talos;All fighters, Captain Bailey has signalled the retreat. Coyote is lost. Fall back to the extraction point.", - "MSG_BOX 4 Cdr de Winter;You all heard the Captain - fall back, we'll cover the retreat.", - "WAIT 8", - "MSG_BOX 4 Lt Cdr Dodds;Estelle, we've got this. We can take them.", - "MSG_BOX 4 Cdr de Winter;We're taking too many losses, Dodds. Fall back now, that's an order.", - "WAIT 8", + "MSG_BOX UNF Talos;All fighters, Captain Bailey has signalled the retreat. Coyote is lost. Fall back to the extraction point.", + "MSG_BOX Cdr de Winter;You all heard the Captain - fall back, we'll cover the retreat.", + "MSG_BOX Lt Cdr Dodds;Estelle, we've got this. We can take them.", + "MSG_BOX Cdr de Winter;We're taking too many losses, Dodds. Fall back now, that's an order.", + "WAIT_MSG_BOX", "ACTIVATE_ENTITY Extraction Point", "RETREAT_ALLIES" ] diff --git a/data/missions/granada/02 - suspect packages #2.json b/data/missions/granada/02 - suspect packages #2.json index 7e5fa65..3f4f627 100644 --- a/data/missions/granada/02 - suspect packages #2.json +++ b/data/missions/granada/02 - suspect packages #2.json @@ -120,7 +120,7 @@ { "function" : "Waypoint #2", "lines" : [ - "MSG_BOX 5 Alexandria Orbital;Patrol, we're again identifying a handful of crates drifting close to your current position. Please effect pick up.", + "MSG_BOX Alexandria Orbital;Patrol, we're again identifying a handful of crates drifting close to your current position. Please effect pick up.", "ACTIVATE_ENTITY package", "ACTIVATE_OBJECTIVE 1" ] @@ -128,9 +128,9 @@ { "function" : "Waypoint #4", "lines" : [ - "MSG_BOX 8 Alexandria Orbital;Patrol, a stranded Dart has been spotted nearby. A tug has been dispatch to bring it in. Please escort it to the target's location.", - "MSG_BOX 4 1st Lt Carr;Know anything about the occupant, or affiliation?", - "MSG_BOX 6 Alexandria Orbital;Negative, Lieutenant. We'll know more once it's brought in.", + "MSG_BOX Alexandria Orbital;Patrol, a stranded Dart has been spotted nearby. A tug has been dispatch to bring it in. Please escort it to the target's location.", + "MSG_BOX 1st Lt Carr;Know anything about the occupant, or affiliation?", + "MSG_BOX Alexandria Orbital;Negative, Lieutenant. We'll know more once it's brought in.", "ACTIVATE_ENTITY Stranded Dart", "ACTIVATE_ENTITY Tug", "ACTIVATE_OBJECTIVE 2" @@ -140,14 +140,14 @@ "function" : "TOWING Stranded Dart", "lines" : [ "WAIT 2", - "MSG_BOX 4 Tug;Tow cable attached. Ready to head home.", - "MSG_BOX 4 1st Lt Carr;We're done here. Let's bring our mystery guest in.", + "MSG_BOX Tug;Tow cable attached. Ready to head home.", + "MSG_BOX 1st Lt Carr;We're done here. Let's bring our mystery guest in.", "ACTIVATE_ENTITY Extraction Point", "WAIT 20", "ACTIVATE_ENTITY Dart", "ACTIVATE_OBJECTIVE 3", - "MSG_BOX 4 TAF Pilot;Dan, we've got enemy vessels inbound. More Darts.", - "MSG_BOX 4 1st Lt Carr;Prepare to engage. Protect the asset!" + "MSG_BOX TAF Pilot;Dan, we've got enemy vessels inbound. More Darts.", + "MSG_BOX 1st Lt Carr;Prepare to engage. Protect the asset!" ] } ] diff --git a/src/battle/messageBox.c b/src/battle/messageBox.c index 25d482e..3a9d830 100644 --- a/src/battle/messageBox.c +++ b/src/battle/messageBox.c @@ -29,13 +29,19 @@ void initMessageBox(void) tail = &head; } -void addMessageBox(int time, char *title, char *body) +void addMessageBox(char *title, char *body) { - MessageBox *msg = malloc(sizeof(MessageBox)); + MessageBox *msg; + float time; + + msg = malloc(sizeof(MessageBox)); memset(msg, 0, sizeof(MessageBox)); tail->next = msg; tail = msg; + time = 0.075 * strlen(body); + time = MIN(MAX(time, 3), 7); + STRNCPY(msg->title, title, MAX_NAME_LENGTH); STRNCPY(msg->body, body, MAX_DESCRIPTION_LENGTH); msg->time = time * FPS; @@ -66,6 +72,11 @@ void doMessageBox(void) } } +int showingMessageBoxes(void) +{ + return head.next != NULL; +} + void drawMessageBox(void) { MessageBox *msg = head.next; diff --git a/src/battle/script.c b/src/battle/script.c index c6dbf26..6425c31 100644 --- a/src/battle/script.c +++ b/src/battle/script.c @@ -44,7 +44,12 @@ void doScript(void) { runner->delay = MAX(0, runner->delay - 1); - if (!runner->delay) + if (runner->waitForMessageBox) + { + runner->waitForMessageBox = showingMessageBoxes(); + } + + if (!runner->delay && !runner->waitForMessageBox) { executeNextLine(runner); @@ -133,14 +138,18 @@ static void executeNextLine(ScriptRunner *runner) } else if (strcmp(command, "MSG_BOX") == 0) { - sscanf(line, "%*s %d %[^;]%*c%[^\n]", &intParam[0], strParam[0], strParam[1]); - addMessageBox(intParam[0], strParam[0], strParam[1]); + sscanf(line, "%*s %[^;]%*c%[^\n]", strParam[0], strParam[1]); + addMessageBox(strParam[0], strParam[1]); } else if (strcmp(command, "WAIT") == 0) { sscanf(line, "%*s %d", &intParam[0]); runner->delay = intParam[0] * FPS; } + else if (strcmp(command, "WAIT_MSG_BOX") == 0) + { + runner->waitForMessageBox = 1; + } else if (strcmp(command, "COMPLETE_MISSION") == 0) { addHudMessage(colors.green, "Mission Complete!"); diff --git a/src/battle/script.h b/src/battle/script.h index a713149..6d6496e 100644 --- a/src/battle/script.h +++ b/src/battle/script.h @@ -29,10 +29,11 @@ extern void failMission(void); extern void retreatEnemies(void); extern void retreatAllies(void); extern void addHudMessage(SDL_Color c, char *format, ...); -extern void addMessageBox(int time, char *title, char *format, ...); +extern void addMessageBox(char *title, char *format, ...); extern void activateEntities(char *name); extern void activateEntityGroup(char *groupName); extern void activateObjective(int num); +extern int showingMessageBoxes(void); extern Battle battle; extern Colors colors; diff --git a/src/structs.h b/src/structs.h index eb0b694..d38822a 100644 --- a/src/structs.h +++ b/src/structs.h @@ -255,6 +255,7 @@ typedef struct { struct ScriptRunner { struct cJSON *line; long delay; + int waitForMessageBox; ScriptRunner *next; };