Yeah, in my own notes I generally use stack, L01, L02…L0E, L0F, G10, G11…GFE, GFF. But that’s partially because Dialog’s Z-machine assembler requires you to use the raw register number in various places, so it’s easiest to not think about the offsets.
Caesarian narration applies also to the 2nd person…
Best regards from Italy,
dott. Piergiorgio.
Ok, now I tested it. This is the procedure to compile Shogun…
-
You will need a relative new compilation of Zilf. Version 0.9 hangs for me, maybe because I think a bug in object ordering have been fixed in later versions. Builds for Mac/Linux/Windows of the latest code are available here.
-
Get the code for Shogun here.
-
Get the code for the new parser here.
-
Organize projects something like:
Shogun_20250227
shogun
zillib
- Open a command window at the
Shogun_20250227
level and compile with:
Shogun_20250227>Zilf.exe -ci shogun\a5.zil -ip shogun -ip zillib -ip zillib\parser
ZILF 0.10b4 built 2024-04-14 20:08:35
*** SHOGUN: A Story of Japan ***
18 terminals defined.
100 warnings (100 suppressed)
Shogun_20250227>zapf shogun\a5.zap
ZAPF 0.10b4
Reading shogun\a5.zap
Reading shogun\a5_freq.zap
Reading shogun\a5_data.zap
Reading shogun\a5_str.zap
Measuring
Restarting
Reading shogun\a5.zap
Reading shogun\a5_freq.zap
Reading shogun\a5_data.zap
Reading shogun\a5_str.zap
Measuring..
Assembling
Wrote 338560 bytes to shogun\a5.z6
Voila!
Well, if you really want a fixed version (who plays this?), there are other known bugs.
And the next update to my bugs list will include a few more.
I don’t think @eriktorbjorn have reached Shogun yet, but he is the one that have reported yours, new and others bugs as issues on earlier games.
I may some day get around to fix them all and release “fixed” versions. (Don’t hold your breath…)
Thanks!
Daft question, is the New Parser an add-on, or a total replacement for the parser we were using in ZILF 0.9?
Total replacement. To be fair you don’t use the shipped 0.9 parser when you compile the other Infocom either, they have their own (with similiar behaviour to the 0.9 parser). The “new parser” is totally different though (@SomeOne2 probably knows best how to use it in new games).
I can give it look at, if you want. I know that the original new-parser from Infocom’s games had some significant bugs in them, but I can’t remember what they were (I made way too many changes for Milliways and subsequent ZIL concepts to be able to just do a compare to find what I fixed).
I didn’t, unfortunately. Playing them in chronological order, I got partway through Bureaucracy before running out of steam.
Incidentally, Bureaucracy is a game that probably won’t run correctly in many modern interpreters because of of this:
<CONSTANT DELAYS <PTABLE (BYTE) 1 ; "ZIL"
10 ; "ZIP20"
1 ; "APPLE II"
4 ; "MAC"
4 ; "AMIGA"
4 ; "ST"
1 ; "COMPAQ/PC"
1 ; "128"
1 ; "64...">>
<DEFINE DELAY ("OPT" (SEC:FIX 1) "AUX" (N:FIX <GETB ,DELAYS <LOWCORE INTID>>))
; "N is number of 1000s to count down to get 1-sec. delay"
<SET N <* 1000 .N .SEC>>
<REPEAT ()
<COND (<L=? <SET N <- .N 1>> 0> <RETURN>)>>>
So it’s using an empty loop to cause a delay, which works great. As long as you know exactly how fast the computer you’re running it on is.
The Bocfel patch for this, just as an example of how to work around it. It replaces the entire function.
Practically the same solution, but done in ZIL (suggested here):
<DEFINE DELAY ("OPT" (SEC:FIX 1))
;"Wait for input SEC s ((SEC x 10) x 0.1 s) then call a routine that
returns true and aborts the input."
<INPUT 1 <* .SEC 10> ABORT-WAIT>
<RETURN>>
<ROUTINE ABORT-WAIT () <RTRUE>>
The known source code to Bureaucracy isn’t perfectly aligned to any released game and contains a few newly introduced bugs. @ChristopherDrum patched the source to a runnable version here.
Ah yes, this Bureaucracy quirk annoys the crap out of me.
I don’t like putting game specific hacks in my interpreter, and this one has defied a general solution in the past. On my latest interpreter I haven’t gotten around to thinking about it.
Only problem with that is if you press enter, it skips it. If you want it truly to take that time, use a loop and variables so that if you hit a key instead of letting the tenth-of-a-second pass (not the full time, just 1), it increments a varianle by 1, but itherwise (put variable the ABORT-WAIT) it increments by 3.in modern interpreters like Gargoyle and Frotz, 3 keypresses takes the same time as a tenth of a second. Repeat for number of seconds * 30
.
I can give an example later…
I’ll need to update my repo with that fix