const char* message;
}} special_t;
+enum condtype_t {{cond_goto, cond_pct, cond_carry, cond_with, cond_not}};
+enum desttype_t {{dest_goto, dest_special, dest_speak}};
+
typedef struct {{
const long motion;
- const long cond;
- const long dest;
+ const long condtype;
+ const long condarg1;
+ const long condarg2;
+ const enum desttype_t desttype;
+ const long destval;
const bool nodwarves;
const bool stop;
}} travelop_t;
* encoding description for travel.
*/
#define T_TERMINATE(entry) ((entry).motion == 1)
-#define L_SPEAK(loc) ((loc) - 500)
extern const location_t locations[];
extern const object_t objects[];
#
# In order to de-crypticize the runtime code, we're going to break these
# magic numbers up into a struct.
- travel = [[0, 0, 0, "false", "false"]]
+ travel = [[0, "LOC_NOWHERE", 0, 0, 0, 0, 0, 0, "false", "false"]]
tkey = [0]
oldloc = 0
while ltravel:
travel[-1][-1] = "false" if travel[-1][-1] == "true" else "true"
while rule:
cond = newloc // 1000
- travel.append([rule.pop(0),
- cond,
- newloc % 1000,
- "true" if cond==100 else "false",
+ nodwarves = (cond == 100)
+ if cond == 0:
+ condtype = "cond_goto"
+ condarg1 = condarg2 = 0
+ elif cond < 100:
+ condtype = "cond_pct"
+ condarg1 = cond
+ condarg2 = 0
+ elif cond == 100:
+ condtype = "cond_goto"
+ condarg1 = 100
+ condarg2 = 0
+ elif cond <= 200:
+ condtype = "cond_carry"
+ condarg1 = objnames[cond - 100]
+ condarg2 = 0
+ elif cond <= 300:
+ condtype = "cond_with"
+ condarg1 = objnames[cond - 200]
+ condarg2 = 0
+ else:
+ condtype = "cond_not"
+ condarg1 = cond % 100
+ condarg2 = (cond - 300) // 100.
+ dest = newloc % 1000
+ if dest <= 300:
+ desttype = "dest_goto";
+ destval = locnames[dest]
+ elif dest > 500:
+ desttype = "dest_speak";
+ destval = msgnames[dest - 500]
+ else:
+ desttype = "dest_special";
+ destval = locnames[dest - 300]
+ travel.append([len(tkey)-1,
+ locnames[len(tkey)-1],
+ rule.pop(0),
+ condtype,
+ condarg1,
+ condarg2,
+ desttype,
+ destval,
+ "true" if nodwarves else "false",
"false"])
travel[-1][-1] = "true"
return (travel, tkey)
def get_travel(travel):
- template = """ {{
+ template = """ {{ // from {}: {}
.motion = {},
- .cond = {},
- .dest = {},
+ .condtype = {},
+ .condarg1 = {},
+ .condarg2 = {},
+ .desttype = {},
+ .destval = {},
.nodwarves = {},
.stop = {},
}},