Opened 3 years ago

Closed 6 weeks ago

Last modified 5 weeks ago

#13139 closed defect (fixed)

GRIM: Grim Fandango - model glitch year 3

Reported by: arrowgent Owned by: Le Philousophe <lephilousophe@…>
Priority: normal Component: Engine: Grim
Version: Keywords: grim, model, year 3, 2.5.0
Cc: Game: Grim Fandango

Description (last modified by arrowgent)

Please check you are including all the following information in your

ScummVM version (scummvm -v)
ScummVM 2.5.0 (Oct 14 2021 11:15:57)
Features compiled in: Vorbis FLAC MP3 ALSA SEQ sndio TiMidity RGB zLib MPEG2 FluidSynth Theora AAC A/52 FreeType2 JPEG PNG GIF TTS cloud (servers, local) TinyGL OpenGL (with shaders) GLEW

Bug details, including step-by-step instructions to reproduce the bug
manny model glitches after opening vault door in year 3
see included terminal output and video clip
using "opengl" not sure if this matters, i could test for you...

Language of game (English, German, ...)
english

Version of game (CD, Floppy, DOS, Amiga, ...)
CD + patch 1.01

Your OS, including version and device if appropriate (Windows 10 build 1709 32-bit, Debian 9.2 x86_64, Android 7.0 on Samsung Galaxy S7, ...)
Linux Ubuntu 18.04 LTS x86_64
Nvidia 1070 Driver Version: 470.86

Attach a save game if possible
included

If this bug only occurred recently, please note the last version without the bug, and the first version including the bug. That way we can fix it quicker by looking at the changes made.
occurs in several locations of the gameplay

new release v2.5.0

Next, select the game in the 'Game' dropdown, and the game engine or other component in the 'Component' dropdown. Enter your text, and hit the button**
yep.

video clips
https://clips.twitch.tv/AgitatedAffluentSpiderMingLee-Puxo4kcOeWMIpOVc

not fixed by leaving the room, it was *fixed* by picking up the large axe in the next room

let me.... try to reproduce and get a save file....
reproducable, savegame included. just open the door and wait for dialog to finish then move around. persists through saving and exiting the game also.

terminal log:

WARNING: Play video vd.snm!
WARNING: Stub function: Lua_V1::SetActorInvClipNode!
WARNING: Stub function: Lua_V1::SetActorInvClipNode!
lua: (null)
Active Stack:

`gettable' tag method at line 2346 [in file Scripts\_system.lua]
function (Scripts\_actors.lua:749)
function (Scripts\_manny.lua:870)
function (Scripts\vd.lua:77)
function (Scripts\vd.lua:808)

WARNING: Lua: call expression not a function!
lua: (null)
Active Stack:

`gettable' tag method at line 2346 [in file Scripts\_system.lua]
function (Scripts\_actors.lua:749)
function (Scripts\_manny.lua:870)
function (Scripts\vd.lua:77)
function (Scripts\vd.lua:808)

Attachments (3)

br.txt (629 bytes ) - added by arrowgent 3 years ago.
grim11.gsv (964.2 KB ) - added by arrowgent 3 years ago.
grim04.gsv (933.6 KB ) - added by alexbevi 2 years ago.

Download all attachments as: .zip

Change History (13)

by arrowgent, 3 years ago

Attachment: br.txt added

by arrowgent, 3 years ago

Attachment: grim11.gsv added

comment:1 by arrowgent, 3 years ago

Description: modified (diff)

comment:2 by arrowgent, 3 years ago

Description: modified (diff)

comment:3 by arrowgent, 3 years ago

Description: modified (diff)

comment:4 by arrowgent, 3 years ago

duplicate of
https://bugs.scummvm.org/ticket/11815

same issue

by alexbevi, 2 years ago

Attachment: grim04.gsv added

comment:5 by alexbevi, 2 years ago

Issues still reproduces (tested on OSX):

ScummVM 2.7.0git5250-g8b310f12710 (Nov 30 2022 05:50:50)
Features compiled in: TAINTED Vorbis FLAC MP3 TiMidity RGB zLib MPEG2 FluidSynth Theora AAC A/52 FreeType2 FriBiDi JPEG PNG GIF taskbar TTS cloud (servers, local) TinyGL OpenGL (with shaders) OpenGL desktop only

Attaching grim04.gsv

User picked target 'grim-win' (engine ID 'grim', game ID 'grim')...
   Looking for a plugin supporting this target... Grim
Running Grim Fandango (Windows/English)
VOX0001.LAB: 444f05f2af689c1bffd179b8b6a632bd, 57993159 bytes.
WARNING: Lua_V1::SetGamma, implement opcode, level: 0.000000!
WARNING: Lua_V1::SetGamma, implement opcode, level: 0.000000!
WARNING: Lua_V1::SetGamma, implement opcode, level: 0.000000!
lua: (null)
Active Stack:
	`gettable' tag method at line 2346 [in file Scripts\_system.lua]
	function (Scripts\_actors.lua:749)
	function (Scripts\_manny.lua:870)
	function (Scripts\vd.lua:77)
	function (Scripts\vd.lua:808)
lua: (null)
Active Stack:
	`error' tag method at line 2365 [in file Scripts\_system.lua]
	function (Scripts\_actors.lua:749)
	function (Scripts\_manny.lua:870)
	function (Scripts\vd.lua:77)
	function (Scripts\vd.lua:808)
lua: call expression not a function
Active Stack:
	`error' tag method at line 2371 [in file Scripts\_system.lua]
	function (Scripts\_actors.lua:749)
	function (Scripts\_manny.lua:870)
	function (Scripts\vd.lua:77)
	function (Scripts\vd.lua:808)

Just for fun I decompiled the associated Lua scripts (using RESOURCE FILE CREATOR AND DUMPER and DELUA AND LUAC FOR GRIM FANDANGO):

-- `gettable' tag method at line 2346 [in file Scripts\_system.lua]
system.oldGettableFB = setfallback("gettable", system.GettableFB)
-- function (Scripts\_actors.lua:749)
Actor.stop_chore = function(arg1, arg2, arg3) -- line 749
    if arg1:get_costume() then
        StopActorChore(arg1.hActor, arg2, arg3)
    end
end
-- function (Scripts\_manny.lua:870)
manny.stop_chore = function(arg1, arg2, arg3) -- line 870
    Actor.stop_chore(arg1, arg2, arg3)
    if arg2 == nil or (arg2 == ms_rest and arg3 == manny.base_costume) then
        arg1:play_chore(ms_rest, manny.base_costume)
    end
end
-- function (Scripts\vd.lua:77)
vd.open_safe = function() -- line 77
    local local1
    cur_puzzle_state[39] = TRUE
    START_CUT_SCENE()
    manny:play_chore(ms_hand_on_obj, manny.base_costume)
    manny:wait_for_chore()
    vd.handle:play_chore(2)
    manny:play_chore(ms_hand_off_obj, manny.base_costume)
    vd.handle:wait_for_chore()
    vd.handle:play_chore(0)
    vd.door_jam:play_chore(1)
    vd.safe_door:free()
    StartMovie("vd.snm", nil, 233, 119)
    local1 = start_script(vd.scythe_fall)
    wait_for_movie()
    music_state:set_sequence(seqOpenVault)
    vd.door_jam:play_chore(2)
    vd.door_open = TRUE
    music_state:update()
    wait_for_script(local1)
    manny:walkto(-0.105456002, 0.341720015, 0, 0, -11.4314003, 0)
    manny:play_chore(50, manny.base_costume)
    mn2_event = FALSE
    repeat
        break_here()
    until mn2_event
    door_scythe:free()
    mo.scythe:get()
    MakeSectorActive("scythe_here", TRUE)
    vd.tumblers.secured = FALSE
    manny:wait_for_chore()
    manny.is_holding = mo.scythe
    open_inventory(TRUE, TRUE)
    vd.tumblers.name = "tumblers"
    vd.tumblers:make_untouchable()
    vd.wheel:make_untouchable()
    vd.handle:make_untouchable()
    vd.vo_door:make_touchable()
    MakeSectorActive("safe_passage", TRUE)
    if not vd.cracked_safe then
        vd.cracked_safe = TRUE
        wait_for_message()
        manny:say_line("/vdma020/")
        wait_for_message()
        manny:say_line("/vdma021/")
        wait_for_message()
        sleep_for(750)
        manny:say_line("/vdma022/")
        manny:tilt_head_gesture()
    end
    END_CUT_SCENE()
end
-- function (Scripts\vd.lua:808)
vd.handle.use = function(arg1) -- line 808
    if meche_freed then
        system.default_response("not now")
    else
        START_CUT_SCENE()
        manny:set_rest_chore(-1)
        manny:walkto_object(arg1)
        manny:wait_for_actor()
        if vd.tumblers.alligned then
            if vd.tumblers.secured then
                vd.open_safe()
            else
                manny:play_chore(ms_hand_on_obj, manny.base_costume)
                manny:wait_for_chore()
                arg1:play_chore(1)
                start_script(vd.safe_door.scramble, vd.safe_door)
                manny:play_chore(ms_hand_off_obj, manny.base_costume)
                manny:wait_for_chore()
                manny:say_line("/vdma031/")
                wait_for_message()
                manny:say_line("/vdma032/")
            end
        else
            manny:play_chore(ms_hand_on_obj, manny.base_costume)
            manny:wait_for_chore()
            arg1:play_chore(1)
            if not vd.tumblers_secured then
                start_script(vd.safe_door.scramble, vd.safe_door)
            end
            manny:play_chore(ms_hand_off_obj, manny.base_costume)
            manny:wait_for_chore()
            if vd.wheel.tried then
                manny:say_line("/vdma033/")
            else
                vd.wheel.tried = TRUE
                vd.wheel:lookAt()
            end
        end
        manny:set_rest_chore(ms_rest, manny.base_costume)
        END_CUT_SCENE()
    end
end
Last edited 2 years ago by alexbevi (previous) (diff)

comment:6 by mike-SpeedyAdventures, 11 months ago

This issue has become much more severe on ScummVM 2.8.0. No longer do only Manny's animations lock up, but you cannot move at all anymore. The only input that still works is opening the menu. As far as I can tell, this makes the game uncompletable on 2.8.0.

Console output is still the same as in comment 5. My OS is Linux Mint 21.2 x86_64.

comment:7 by digitall, 9 months ago

A workaround has been proposed in https://github.com/scummvm/scummvm/pull/5692

comment:8 by Le Philousophe <lephilousophe@…>, 6 weeks ago

Owner: set to Le Philousophe <lephilousophe@…>
Resolution: fixed
Status: newclosed

In 7e34e793:

GRIM: Fix vd patch to avoid error gettable tag error

The original patch is broken.
This fixes #13139 and #14987.

The main problem now is that the savegames are broken as well and this
commit don't fix these. Starting a new game from scratch is working
though.

comment:9 by Paweł Kołodziejski <aquadran@…>, 5 weeks ago

In 15957c38:

GRIM: Put warning message for user after restore from save game. Related with bug #13139 and #14987

comment:10 by Le Philousophe <lephilousophe@…>, 5 weeks ago

In 8cc72754:

GRIM: Patch saves on the fly

This is a follow up to fix #13139 and #14987.
All saves created with the faulty patch get contaminated so we
decontaminate them at load time by applying a minimized fixup.

This will avoid players to restart a game from scratch and any game
saved again will get this fix.

Note: See TracTickets for help on using tickets.