Author Topic: LSL6 Interface help question mark bug  (Read 693 times)

0 Members and 2 Guests are viewing this topic.

Offline miracle.flame

LSL6 Interface help question mark bug
« on: February 10, 2025, 04:54:31 AM »
How to reproduce:
1. Skip intro into game
2. Go in menu Help - Interface
3. Dialog says "Click once to clear this message. When you do, your cursor will change into a Question Mark. Pass the Question Mark over the other areas of the screen to learn what they do. When you are done, click again anywhere to turn off these messages." which comes from n093.msg
4. Click as the message suggests

Result: Cursor is not Question Mark but Hourglass instead, otherwise the function of cursor works as help (expected).
This is reproducible with vanilla LSL6SVGA in Dosbox and ScummVM alike.

There is no script n093 but there's ll6ControlPanel.sc with very similar message "Click once to clear this message. Your cursor will change into a Question Mark. Pass the Question Mark over the Control Panel to learn what each knob does. Click again to turn off these messages." though this message does not really display in Control Panel after clicking the help icon - there's another message "This is where you clicked to pull down the Help menu."

There's also nClickHelp.sc which looks like it's involved.




Offline doomlazer

Re: LSL6 Interface help question mark bug
« Reply #1 on: February 11, 2025, 12:13:19 AM »
In nClickHelp script 75 doit method (theGame setCursor: helpCursor) needs to be inside the while loop.

Code: [Select]
(method (doit &tmp temp0 temp1 temp2)
(= temp2 gTheCursor)
;(gGame setCursor: helpCursor)
(while (!= ((= temp1 (Event new:)) type:) evMOUSEBUTTON)
(gGame setCursor: helpCursor) ;move here
(temp1 y: (- (temp1 y:) 10))
(= temp0 (self firstTrue: #onMe temp1))
(if (and (gTalkers size:) (!= local0 temp0))
(gMessager cue:)
)
« Last Edit: February 11, 2025, 12:30:27 AM by doomlazer »

Offline miracle.flame

Re: LSL6 Interface help question mark bug
« Reply #2 on: February 11, 2025, 02:16:19 PM »
I've tried to make the change and compile but that failed:

Offline miracle.flame

Re: LSL6 Interface help question mark bug
« Reply #3 on: February 11, 2025, 02:28:30 PM »
OK, I've tried to use sluicebox's scripts and that compiled successfully.
Note that this time reverting resource files to vanilla after compilation and using just the exported 75.scr worked without troubles.

Offline Kawa

Re: LSL6 Interface help question mark bug
« Reply #4 on: February 11, 2025, 02:34:25 PM »
The error message doesn't lie. nClickHelp is an instance of a Set so it can't add selectors (methods or properties), only change them.

Offline doomlazer

Re: LSL6 Interface help question mark bug
« Reply #5 on: February 17, 2025, 10:29:15 AM »
Sluicebox's SVM fix:
https://github.com/scummvm/scummvm/commit/8a5c1f20e031d34504fe58db8dc6161784be8d63

...and suggestion for patch file:
Code: [Select]
(method (doit &tmp temp0 temp1 temp2 prevWaitCursor)
    (= temp2 gTheCursor)
   
    ; 1. set current cursor and wait cursor to helpCursor so
    ; that LarryTalker will use them instead of the hourglass.
    (= prevWaitCursor gWaitCursor)
    (= gWaitCursor helpCursor)
    (gGame setCursor: helpCursor)
   
    (while (!= ((= temp1 (Event new:)) type:) evMOUSEBUTTON)
        (temp1 y: (- (temp1 y:) 10))
        (= temp0 (self firstTrue: #onMe temp1))
        (if (and (gTalkers size:) (!= local0 temp0))
            (gMessager cue:)
        )
        (if (and temp0 (!= temp0 local0))
            (Print font: gUserFont width: 250 modeless: 2)
            (gMessager
                say: (temp0 noun:) (temp0 case:) 0 1 0 (temp0 modNum:)
            )
        )
        (= local0 temp0)
        (temp1 dispose:)
    )
    (temp1 dispose:)
    (if (gTalkers size:)
        (gMessager cue:)
    )
    (gGame setCursor: temp2)
   
    ; 2. restore gWaitCursor
    (= gWaitCursor prevWaitCursor)
)

« Last Edit: February 17, 2025, 10:40:43 AM by doomlazer »


SMF 2.0.19 | SMF © 2021, Simple Machines
Simple Audio Video Embedder

Page created in 0.042 seconds with 22 queries.