[net.games.rogue] patching rogue?

romig@osu-dbs.UUCP (Steve ) (06/06/84)

I have a rather strange question.  Is it possible to patch rogue in such
a way that the probability of running into a party room is much increased?
The reason I am asking is two-fold:  I like playing with party rooms, and
more importantly, I want to blow the socks off of someone here who is used
to playing rogue with the 'arrow trap bug' (and winning with horrendous high
scores).

The next question I have then, is how does one go about patching rogue,
or any program in general.  I have never had reason to do anything like that,
and haven't had much success in the two days I have spent trying to learn.
Could someone let me in on the secrets?  And where interesting things are in
the rogue object file?  

Thanks...

				--- Steve Romig
				...!cbosgd!osu-dbs!romig
				romig@ohio-state.csnet

tims@mako.UUCP (Tim Stoehr) (06/08/84)

Yes, it's quite possible to patch rogue.  If you have a version with a
wizard password, then a likely attack is to 'adb' rogue. First obtain a
assembler listing on paper piping adb output to a file and line printing
the file.
Then find the strings "wizard's password: ", "sorry" and "you are now
as smart as Ken Arnold ..." with adb in the data space of the rogue
object.  Write down the address of these strings and then 'grep' for
them in the the assembler listing file.  You will find that these
string addresses are localized in the code, and you can see where they
are being printed and why.  You can either patch in an instruction to
do something nice, or set a break-point, and then 'continue' at a
convenient place.  When I did this, I got the game to toggle me from
wizard mode and back at the touch of the ^P key.  Once wizard, you
may create any object you want, go up and down at will, increase your
experience and Hp, or just about anything.  Once this is done, however,
and you've explored the possibilities, the fun doesn't last very long.
I'm sure other more subtle things can be done, like finding out where
your strength is incremented, and add 10 instead.  The same method
mentioned above should work with other strings, although you may
have to trace subroutine calls and returns.
In any case, you must have your own readable, writable copy of rogue
to do any of this.  Good luck, and remember, cheating is the only
way to beat that stupid game.