Well this is weird. The cursor will freeze up anytime you score points. Collector is right, you can still change the cursor, but visually it's frozen. This can be tested from 'Where to?' by visiting the jungle or Cibola. The jungle automatically gives 1 point and you get five points by freeing the bat in Cibola. If (gGame points: 5) is commented out of the script, everything works as expected.
So here is the cause of the problem. The points method in main can take a second parameter used to set flags so that points are not repeatedly awarded for the same action. The command (gGame points: 3 888) would award three points and set flag number 888.
(method (points param1 param2)
(if (and (> argc 1) (proc0_2 param2)) (return))
(if param1
(gGame changeScore: param1)
(if param2 (proc0_3 param2)) ;set flag if param2 is passed
(if (and (> param1 0) pointSound)
(pointSound play:)
(statusCode doit:)
)
)
)
For some reason that param2 two check is non-zero even when we're not sending a 2nd param and it's passing a value of 1 to proc0_3, which is SetFlag. Well, guess what? Flag 1 is a condition checked in the game's Rain::setCursor method and if it is set the cursor will not change!
Why or how (gGame points: x) is sending a second parameter value I have no idea. But what's the quick and dirty workaround for this problem? My solution was to add a new debug command for Alt+D that clears flag 1. That way you can unstick the cursor after scoring points.
I've attached the 98.scr patch with the Alt+D command below, but ideally I'd like to figure out why the param2 value isn't 0 when there is no flag passed.
Moving on, Ghost Adam when TPing to Cibola is caused by the room you're teleporting from. Script 501's init method includes the following code:
(if (proc999_5 gGNumber 530 560 440 0 10)
(gEgo init: normalize: 510)
else
(gEgo init: normalize: 0)
)
gGNumber is the previous room variable. The procedure is checking if you came from rooms 530, 560, 440, 0 or 10 and setting the view of Adam tied to the chair (510) or his normal walk view (0).
This type of issue is common when teleporting with debug commands as most rooms have different initial actions based on the previous room. Further down in 501's init is this switch statement:
(switch gGNumber
((proc999_5 gGNumber 530 560)
(= local3 1)
(Cibola timesCaptured: (+ (Cibola timesCaptured?) 1))
(gGameSound1 number: 523 loop: -1 play: 127)
(self setScript: sAdamCaught)
)
(440
(carrot init:)
(gGameSound1 number: 521 loop: -1 play: 127)
(self setScript: sOpenSeq)
)
(500
(if (not (== (gGameSound1 number?) 522))
(gGameSound1 number: 522 loop: -1 play: 127)
)
(self setScript: sFromShackBedroom)
)
(else
(carrot init:)
(gGameSound1 number: 521 loop: -1 play: 127)
(self setScript: sOpenSeq)
)
)
Teleporting from most rooms is going to be caught by the 'else' case and run the sOpenSeq script with Mr Slaughter, but you can see there are different behaviors coming from those other room numbers. Fixing this type of issue is possible, but isn't really feasible because they need to be addressed on a room by room basis.
Finally, I think the problem with the 98.hep might be that it just doesn't exist in the resource files. If it does, the script is pointing to the wrong locations for the strings it needs in the debug text. Either way, recompiling and exporting the 98.hep allows the script to access the correct strings.
edit: removed outdated attachment