From 5f28f9524472ef6784191470747d708262b31386 Mon Sep 17 00:00:00 2001 From: Aaron Traas Date: Fri, 21 Jul 2017 16:56:43 -0400 Subject: [PATCH] All specials are now actions. Builds correct outputs, more needs deleting. --- actions.c | 8 +++++++ adventure.yaml | 56 +++++++++++++++++++++++++++++++++---------------- make_dungeon.py | 39 ++++++++-------------------------- 3 files changed, 55 insertions(+), 48 deletions(-) diff --git a/actions.c b/actions.c index 7faf331..32dcd90 100644 --- a/actions.c +++ b/actions.c @@ -1313,6 +1313,14 @@ int action(struct command_t *command) * unless verb is "say", which snarfs arbitrary second word. */ { + /* Previously, actions that result in a message, but don't do anything + * further were called "specials". Now they're handled here as normal + * actions. If noaction is true, then we spit out the message and return */ + if (actions[command->verb].noaction) { + speak(actions[command->verb].message); + return GO_CLEAROBJ; + } + if (command->part == unknown) { /* Analyse an object word. See if the thing is here, whether * we've got a verb yet, and so on. Object must be here diff --git a/adventure.yaml b/adventure.yaml index 6401882..75bd76c 100644 --- a/adventure.yaml +++ b/adventure.yaml @@ -3889,15 +3889,15 @@ actions: !!omap - ACT_UNKNOWN: message: *huh_man words: !!null - -specials: !!omap -- SPC_THANKYOU: +- THANKYOU: message: 'You''re quite welcome.' words: ['thank'] -- SPC_INVALIDMAGIC: + noaction: true +- INVALIDMAGIC: message: 'Good try, but that is an old worn-out magic word.' words: ['sesam', 'opens', 'abra', 'abrac', 'shaza', 'hocus', 'pocus'] -- SPC_HELP: + noaction: true +- HELP: message: |- I know of places, actions, and things. Most of my vocabulary describes places and is used to move you there. To move, try words @@ -3929,10 +3929,12 @@ specials: !!omap though the direction that takes you back might not be the reverse of what got you here. Good luck, and have fun! words: ['help', '?'] -- SPC_NO: + noaction: true +- NO: message: *ok_man words: ['no'] -- SPC_TREE: + noaction: true +- TREE: message: |- The trees of the forest are large hardwood oak and maple, with an occasional grove of pine or spruce. There is quite a bit of under- @@ -3941,27 +3943,33 @@ specials: !!omap all the leaves, but travel is quite easy if you detour around the spruce and berry bushes. words: ['tree', 'trees'] -- SPC_DIG: + noaction: true +- DIG: message: |- Digging without a shovel is quite impractical. Even with a shovel progress is unlikely. words: ['dig', 'excav'] -- SPC_LOST: + noaction: true +- LOST: message: 'I''m as confused as you are.' words: ['lost'] -- SPC_MIST: + noaction: true +- MIST: message: |- Mist is a white vapor, usually water, seen from time to time in caverns. It can be found anywhere but is frequently a sign of a deep pit leading down to water.' words: ['mist'] -- SPC_FBOMB: + noaction: true +- FBOMB: message: 'Watch it!' words: ['fuck'] -- SPC_STOP: + noaction: true +- STOP: message: 'I don''t know the word "stop". Use "quit" if you want to give up.' words: ['stop'] -- SPC_INFO: + noaction: true +- INFO: message: |- For a summary of the most recent changes to the game, say "news". If you want to end your adventure early, say "quit". To suspend your @@ -3985,16 +3993,20 @@ specials: !!omap save time, you may specify "brief", which tells me never to repeat the full description of a place unless you explicitly ask me to. words: ['info', 'infor'] -- SPC_SWIM: + noaction: true +- SWIM: message: *not_knowhow words: ['swim'] -- SPC_WIZARD: + noaction: true +- WIZARD: message: 'Wizards are not to be disturbed by such as you.' words: ['wizar'] -- SPC_YES: + noaction: true +- YES: message: 'Guess again.' words: ['yes'] -- SPC_NEWS: + noaction: true +- NEWS: message: |- Open Adventure is an author-approved open-source release of Version 2.5 with, as yet, no gameplay changes. @@ -4006,11 +4018,19 @@ specials: !!omap while first), but it now costs you a few points each time you save the game. Saved games are now stored in much smaller files than before. words: ['news'] -- SPC_VERSION: + noaction: true +- ACT_VERSION: message: |- There is a puff of orange smoke; within it, fiery runes spell out: \tOpen Adventure %V - http://www.catb.org/esr/open-adventure/ words: ['versi'] + noaction: true + +# Specials no longer used, but this is still needed for now +specials: !!omap +- SPC_DELETEME: + message: 'Please delete this item' + words: ['null'] # end diff --git a/make_dungeon.py b/make_dungeon.py index b378563..de7251c 100755 --- a/make_dungeon.py +++ b/make_dungeon.py @@ -105,11 +105,13 @@ typedef struct {{ typedef struct {{ const string_group_t words; const char* message; + const bool noaction; }} action_t; typedef struct {{ const string_group_t words; const char* message; + const bool noaction; }} special_t; enum condtype_t {{cond_goto, cond_pct, cond_carry, cond_with, cond_not}}; @@ -497,39 +499,11 @@ def get_motions(motions): ignore += word.upper() return mot_str -def get_actions(actions): - template = """ {{ - .words = {}, - .message = {}, - }}, -""" - act_str = "" - for action in actions: - contents = action[1] - - if contents["words"] == None: - words_str = get_string_group([]) - else: - words_str = get_string_group(contents["words"]) - - if contents["message"] == None: - message = "NO_MESSAGE" - else: - message = contents["message"] - - act_str += template.format(words_str, message) - global ignore - if contents.get("oldstyle", True) == False: - for word in contents["words"]: - if len(word) == 1: - ignore += word.upper() - act_str = act_str[:-1] # trim trailing newline - return act_str - def get_specials(specials): template = """ {{ .words = {}, .message = {}, + .noaction = {}, }}, """ spc_str = "" @@ -546,7 +520,12 @@ def get_specials(specials): else: message = make_c_string(contents["message"]) - spc_str += template.format(words_str, message) + if contents.get("noaction") == None: + noaction = "false" + else: + noaction = "true" + + spc_str += template.format(words_str, message, noaction) global ignore if contents.get("oldstyle", True) == False: for word in contents["words"]: -- 2.31.1