X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=newdungeon.py;h=d1ea21c8f04c696429960ddb3ccd74107885f624;hp=df8b19abbfa6303d7984e54c86dcba4181c859b4;hb=a4de450bfaf2c600dccd9a5b3625c5a3ca279e7c;hpb=3e19c39f579dacb20c1c9b6fc1a26c8d106f1365 diff --git a/newdungeon.py b/newdungeon.py index df8b19a..d1ea21c 100755 --- a/newdungeon.py +++ b/newdungeon.py @@ -1,8 +1,50 @@ #!/usr/bin/python3 -# This is the new open-adventure dungeon generator. It'll eventually replace the existing dungeon.c It currently outputs a .h and .c pair for C code. - -import yaml +# This is the new open-adventure dungeon generator. It'll eventually +# replace the existing dungeon.c It currently outputs a .h and .c pair +# for C code. +# +# The nontrivial part of this is the compilation of the YAML for +# movement rules to the travel array that's actually used by +# playermove(). This program first compiles the YAML to a form +# identical to the data in section 3 of the old adventure.text file, +# then a second stage unpacks that data into the travel array. +# +# Here are the rules of the intermediate form: +# +# Each row of data contains a location number (X), a second +# location number (Y), and a list of motion numbers (see section 4). +# each motion represents a verb which will go to Y if currently at X. +# Y, in turn, is interpreted as follows. Let M=Y/1000, N=Y mod 1000. +# If N<=300 it is the location to go to. +# If 300500 message N-500 from section 6 is printed, +# and he stays wherever he is. +# Meanwhile, M specifies the conditions on the motion. +# If M=0 it's unconditional. +# If 0