diff --git a/edgehead/assets/text/Knights/locations/008_big_o/000_big_o.egb.txt b/edgehead/assets/text/Knights/locations/008_big_o/000_big_o.egb.txt index b72a5bda5..007d5969f 100644 --- a/edgehead/assets/text/Knights/locations/008_big_o/000_big_o.egb.txt +++ b/edgehead/assets/text/Knights/locations/008_big_o/000_big_o.egb.txt @@ -136,6 +136,8 @@ Big O still walks in a wide circle around [[IF c.playerIsAlone]]me[[ELSE]]us[[EN TODO: player joins the cause + TODO: Yet all this time I wonder if I made the right choice. + [[CODE]] w.popSituationsUntil(RoomRoamingSituation.className, c); w.popSituation(c); diff --git a/edgehead/assets/text/Knights/locations/008_big_o/100_big_o_end.egb.txt b/edgehead/assets/text/Knights/locations/008_big_o/100_big_o_end.egb.txt index 79714b6c3..781eb8988 100644 --- a/edgehead/assets/text/Knights/locations/008_big_o/100_big_o_end.egb.txt +++ b/edgehead/assets/text/Knights/locations/008_big_o/100_big_o_end.egb.txt @@ -4,22 +4,31 @@ FOR_LOCATION: $start_bogus_location COMMAND: N/A INK: -I have prevailed. +I look at the dead necromancer. The tyrant is no more, and his sick experiment will no doubt crumble without his leadership. -// TODO: Use INK here and let the player explore the observatory, descend to the people, show the head, and make some stately decision (keep the Knights, or start a new kingdom, or...) as well as some personal decision (call on father, start from scratch, or ...). +It has started raining outside. The large raindrops drum on the windowpanes, and the air becomes sweeter. -TODO: an end, in which Aren (the player) shows the Dog's head to the people. Most of the Orcs and goblins flee. Aren is revered. A darkness is lifted from Sarn's mind, and he is no longer insane. He explains his past mistakes, and apologizes. +An hour later, I'm descending through the Pyramid. No one tries to stop me. Even the orcs move out of the way. They all look, mesmerized by what I hold in my hands. + +Down in the Bleeds, I wait for a crowd to form. We all stand in the rain. People don't complain. They know that what they are about to witness transcends this brief moment of discomfort. Somehow, they all know what the thing in my hands means. + +[[IF c.hasHappened(evSavedSarn)]]Sarn comes to the fore. He looks much better now. Still scared, but less fuzzy than before. For the first time in years, I smile at him. He starts quietly weeping.[[ELSE]]I think about Sarn. He died somewhere in the Pyramid, I am sure of it. He paid for the suffering he brought upon his own family. Good riddance.[[ENDIF]] + +The crowd is formed. Two dozen men and women are soaking in the downpour, watching me in silence. I raise my posession for everyone to see. ![Illustration Big O's head in my arms. Before me, a group of people.](doghead.png) -// * But what was Conet for? What were these quakes for? ... In the distance, large figures are approaching. -- this is cool, but it could be seen as a cheap trick - an obvious cliffhanger. Instead, focus on making the ending deliver, emotionally. +* "I am the Doghead." + + I am the one these people have been waiting for. The man with a dog's head. The savior of this damned place. + +* "The Doghead is dead." -* A option -* B option + I killed him. I removed the false myth and the tyrant behind it. - -The end. +The fight is over. [[CODE]] c.movePlayer('__END_OF_ROAM__'); diff --git a/edgehead/lib/writers_input.compiled.dart b/edgehead/lib/writers_input.compiled.dart index 691ad723e..0fac23f9a 100644 --- a/edgehead/lib/writers_input.compiled.dart +++ b/edgehead/lib/writers_input.compiled.dart @@ -559,6 +559,17 @@ final finalFightInkInk = InkAst([ final Storyline s = c.outputStoryline; s.add('TODO: player joins the cause\n', isRaw: true); }), + InkParagraphNode((c) => c.outputStoryline.addParagraph()), + InkParagraphNode((ActionContext c) { + final WorldState originalWorld = c.world; + final Simulation sim = c.simulation; + final Actor a = c.actor; + final WorldStateBuilder w = c.outputWorld; + final Storyline s = c.outputStoryline; + s.add( + 'TODO: Yet all this time I wonder if I made the right choice.\n', + isRaw: true); + }), InkParagraphNode((ActionContext c) { final WorldState originalWorld = c.world; final Simulation sim = c.simulation; @@ -681,7 +692,54 @@ final bigOEndInkInk = InkAst([ final Actor a = c.actor; final WorldStateBuilder w = c.outputWorld; final Storyline s = c.outputStoryline; - s.add('I have prevailed.\n', isRaw: true); + s.add( + 'I look at the dead necromancer. The tyrant is no more, and his sick experiment will no doubt crumble without his leadership.\n', + isRaw: true); + }), + InkParagraphNode((c) => c.outputStoryline.addParagraph()), + InkParagraphNode((ActionContext c) { + final WorldState originalWorld = c.world; + final Simulation sim = c.simulation; + final Actor a = c.actor; + final WorldStateBuilder w = c.outputWorld; + final Storyline s = c.outputStoryline; + s.add( + 'It has started raining outside. The large raindrops drum on the windowpanes, and the air becomes sweeter.\n', + isRaw: true); + }), + InkParagraphNode((c) => c.outputStoryline.addParagraph()), + InkParagraphNode((ActionContext c) { + final WorldState originalWorld = c.world; + final Simulation sim = c.simulation; + final Actor a = c.actor; + final WorldStateBuilder w = c.outputWorld; + final Storyline s = c.outputStoryline; + s.add( + 'An hour later, I\'m descending through the Pyramid. No one tries to stop me. Even the orcs move out of the way. They all look, mesmerized by what I hold in my hands.\n', + isRaw: true); + }), + InkParagraphNode((c) => c.outputStoryline.addParagraph()), + InkParagraphNode((ActionContext c) { + final WorldState originalWorld = c.world; + final Simulation sim = c.simulation; + final Actor a = c.actor; + final WorldStateBuilder w = c.outputWorld; + final Storyline s = c.outputStoryline; + s.add( + 'Down in the Bleeds, I wait for a crowd to form. We all stand in the rain. People don\'t complain. They know that what they are about to witness transcends this brief moment of discomfort. Somehow, they all know what the thing in my hands means.\n', + isRaw: true); + }), + InkParagraphNode((c) => c.outputStoryline.addParagraph()), + InkParagraphNode((ActionContext c) { + final WorldState originalWorld = c.world; + final Simulation sim = c.simulation; + final Actor a = c.actor; + final WorldStateBuilder w = c.outputWorld; + final Storyline s = c.outputStoryline; + final ifBlock_1d0ea1020 = c.hasHappened(evSavedSarn) + ? '''Sarn comes to the fore. He looks much better now. Still scared, but less fuzzy than before. For the first time in years, I smile at him. He starts quietly weeping.''' + : '''I think about Sarn. He died somewhere in the Pyramid, I am sure of it. He paid for the suffering he brought upon his own family. Good riddance.'''; + s.add('${ifBlock_1d0ea1020}\n', isRaw: true); }), InkParagraphNode((c) => c.outputStoryline.addParagraph()), InkParagraphNode((ActionContext c) { @@ -691,7 +749,7 @@ final bigOEndInkInk = InkAst([ final WorldStateBuilder w = c.outputWorld; final Storyline s = c.outputStoryline; s.add( - 'TODO: an end, in which Aren (the player) shows the Dog\'s head to the people. Most of the Orcs and goblins flee. Aren is revered. A darkness is lifted from Sarn\'s mind, and he is no longer insane. He explains his past mistakes, and apologizes.\n', + 'The crowd is formed. Two dozen men and women are soaking in the downpour, watching me in silence. I raise my posession for everyone to see.\n', isRaw: true); }), InkParagraphNode((c) => c.outputStoryline.addParagraph()), @@ -707,12 +765,34 @@ final bigOEndInkInk = InkAst([ }), InkForkNode([ InkChoiceNode( - command: r""" A option """.trim(), - consequence: [], + command: r""" "I am the Doghead." """.trim(), + consequence: [ + InkParagraphNode((ActionContext c) { + final WorldState originalWorld = c.world; + final Simulation sim = c.simulation; + final Actor a = c.actor; + final WorldStateBuilder w = c.outputWorld; + final Storyline s = c.outputStoryline; + s.add( + 'I am the one these people have been waiting for. The man with a dog\'s head. The savior of this damned place.\n', + isRaw: true); + }), + ], ), InkChoiceNode( - command: r""" B option """.trim(), - consequence: [], + command: r""" "The Doghead is dead." """.trim(), + consequence: [ + InkParagraphNode((ActionContext c) { + final WorldState originalWorld = c.world; + final Simulation sim = c.simulation; + final Actor a = c.actor; + final WorldStateBuilder w = c.outputWorld; + final Storyline s = c.outputStoryline; + s.add( + 'I killed him. I removed the false myth and the tyrant behind it.\n', + isRaw: true); + }), + ], ), ]), InkParagraphNode((c) => c.outputStoryline.addParagraph()), @@ -722,7 +802,7 @@ final bigOEndInkInk = InkAst([ final Actor a = c.actor; final WorldStateBuilder w = c.outputWorld; final Storyline s = c.outputStoryline; - s.add('The end.\n', isRaw: true); + s.add('The fight is over.\n', isRaw: true); }), InkParagraphNode((ActionContext c) { final WorldState originalWorld = c.world;