GothicKit / ZenKit

A re-implementation of file formats used by the early 2000's ZenGin
http://zk.gothickit.dev/
MIT License
44 stars 9 forks source link

Multiple "not fully parsed" messages in Gothic 1 #57

Closed CReimer closed 1 year ago

CReimer commented 1 year ago

There are multiple "not fully parsed" error messages while running OpenGothic with the German version of Gothic 1.

To reproduce these, you don't have to do anything too difficult. Just open up OpenGothic with Gothic 1 and start a new game. No interaction with Diego is necessary.

Complete log:

OpenGothic v1.0 dev
no *.ini file in path - using default settings
GPU = NVIDIA GeForce RTX 2070
Depth format = Depth32F Shadow format = Depth16
[phoenix] world: parsing object [MeshAndBsp % 0 0]
[phoenix] bsp_tree: parsing chunk c000
[phoenix] bsp_tree: parsing chunk c010
[phoenix] bsp_tree: parsing chunk c040
[phoenix] bsp_tree: parsing chunk c045
[phoenix] bsp_tree: parsing chunk c050
[phoenix] bsp_tree: parsing chunk c0ff
[phoenix] world: parsing object [VobTree % 0 0]
[phoenix] world: parsing object [WayNet % 0 0]
[phoenix] world: parsing object [EndMarker % 0 0]
unable to load animation sequence: "PILLAR_7M-s_S1.MAN"
unable to load animation sequence: "PILLAR_7M-t_S1_2_S0.MAN"
unable to load sound fx: WOOD_NIGHT2
[phoenix] messages: oCMsgConversation("DIA_BaalTaran_Lehre_05_04") not fully parsed
[phoenix] messages: zCCSAtomicBlock("DIA_BaalTaran_Lehre_05_04") not fully parsed
[phoenix] messages: oCMsgConversation("DIA_Jarvis_Rest_08_01") not fully parsed
[phoenix] messages: zCCSAtomicBlock("DIA_Jarvis_Rest_08_01") not fully parsed
[phoenix] messages: oCMsgConversation("DIA_Mud_Nerve_14_07_00") not fully parsed
[phoenix] messages: zCCSAtomicBlock("DIA_Mud_Nerve_14_07_00") not fully parsed
[phoenix] messages: oCMsgConversation("DIA_Mud_Nerve_18_07_00") not fully parsed
[phoenix] messages: zCCSAtomicBlock("DIA_Mud_Nerve_18_07_00") not fully parsed
[phoenix] messages: oCMsgConversation("Info_Bloodwyn_PayDay_PayNoMore_08_01") not fully parsed
[phoenix] messages: zCCSAtomicBlock("Info_Bloodwyn_PayDay_PayNoMore_08_01") not fully parsed
[phoenix] messages: oCMsgConversation("Info_Diego_JoinAnalyze_Whistler_11_01") not fully parsed
[phoenix] messages: zCCSAtomicBlock("Info_Diego_JoinAnalyze_Whistler_11_01") not fully parsed
[phoenix] messages: oCMsgConversation("Info_GorNaToth_ARMOR_H_11_03") not fully parsed
[phoenix] messages: zCCSAtomicBlock("Info_GorNaToth_ARMOR_H_11_03") not fully parsed
[phoenix] messages: oCMsgConversation("Info_Jackal_Hello_WhatIf_07_02") not fully parsed
[phoenix] messages: zCCSAtomicBlock("Info_Jackal_Hello_WhatIf_07_02") not fully parsed
[phoenix] messages: oCMsgConversation("Info_Kirgo_Charge_Beer_15_02") not fully parsed
[phoenix] messages: zCCSAtomicBlock("Info_Kirgo_Charge_Beer_15_02") not fully parsed
[phoenix] messages: oCMsgConversation("Info_Vlk_1_EinerVonEuchWerden_01_01") not fully parsed
[phoenix] messages: zCCSAtomicBlock("Info_Vlk_1_EinerVonEuchWerden_01_01") not fully parsed
[phoenix] messages: oCMsgConversation("Info_Xardas_DANGER_14_03") not fully parsed
[phoenix] messages: zCCSAtomicBlock("Info_Xardas_DANGER_14_03") not fully parsed
[phoenix] messages: oCMsgConversation("Info_Xardas_LOADSWORD01_14_04") not fully parsed
[phoenix] messages: zCCSAtomicBlock("Info_Xardas_LOADSWORD01_14_04") not fully parsed
[phoenix] messages: oCMsgConversation("KDF_402_Corristo_KREIS4_Info_14_04") not fully parsed
[phoenix] messages: zCCSAtomicBlock("KDF_402_Corristo_KREIS4_Info_14_04") not fully parsed
[phoenix] messages: oCMsgConversation("KDF_402_Corristo_WANNBEKDF_Info_14_05") not fully parsed
[phoenix] messages: zCCSAtomicBlock("KDF_402_Corristo_WANNBEKDF_Info_14_05") not fully parsed
[phoenix] messages: oCMsgConversation("Org_819_Drax_Creatures_Fell_06_02") not fully parsed
[phoenix] messages: zCCSAtomicBlock("Org_819_Drax_Creatures_Fell_06_02") not fully parsed
[phoenix] messages: oCMsgConversation("Org_859_Aidan_Creatures_Fell_13_02") not fully parsed
[phoenix] messages: zCCSAtomicBlock("Org_859_Aidan_Creatures_Fell_13_02") not fully parsed
[phoenix] messages: oCMsgConversation("Sit_2_PSI_Yberion_BringFocus_WO_12_02") not fully parsed
[phoenix] messages: zCCSAtomicBlock("Sit_2_PSI_Yberion_BringFocus_WO_12_02") not fully parsed
comb not found: t_FIREPLACE_Stand_2_S0 -> c_FP_STAND_2_S0_(c_FP_STAND_2_S0_2)
comb not found: t_FIREPLACE_S0_2_Stand -> c_FP_STAND_2_S0_(c_FP_STAND_2_S0_2)
alias not found: t_Walk_2_WalkBL -> t_walkL_2_Walk
alias not found: t_SwimF_2_Dive -> t_swim_2_dive
alias not found: t_SwimF_2_Dive -> t_swim_2_dive
[phoenix] vm: accessing member "C_NPC.ATTRIBUTE" without an instance set
alias not found: r_Roam1 -> r_Scratch
alias not found: t_FallenB_2_Stand -> t_Fallen_2_Stand  
inserNpc: invalid waypoint
inserNpc: invalid waypoint
alias not found: t_FistWalkBL_2_FistWalk -> t_FistWalk_2_FistWalkL
comb not found: t_FIREPLACE_Stand_2_S0 -> c_FP_STAND_2_S0_(c_FP_STAND_2_S0_2)
comb not found: t_FIREPLACE_S0_2_Stand -> c_FP_STAND_2_S0_(c_FP_STAND_2_S0_2)
alias not found: t_Walk_2_WalkBL -> t_walkL_2_Walk
comb not found: t_FIREPLACE_Stand_2_S0 -> c_FP_STAND_2_S0_(c_FP_STAND_2_S0_2)
comb not found: t_FIREPLACE_S0_2_Stand -> c_FP_STAND_2_S0_(c_FP_STAND_2_S0_2)
room not found: NLHU03
room not found: NLHU05
room not found: NLHU06
room not found: NLHU09
room not found: NLHU08
room not found: NLHU07
room not found: NLHU04
room not found: NLHU02
room not found: NLHU01
not implemented call [WLD_SETOBJECTROUTINE]
room not found: H�TTE5
room not found: H�TTE34
[phoenix] vm: accessing member "C_NPC.ID" without an instance set
[phoenix] vm: accessing member "C_NPC.NAME" without an instance set
not implemented call [WLD_EXCHANGEGUILDATTITUDES]
room not found: NLHU03
room not found: NLHU05
room not found: NLHU06
room not found: NLHU09
room not found: NLHU08
room not found: NLHU07
room not found: NLHU04
room not found: NLHU02
room not found: NLHU01
room not found: H�TTE5
room not found: H�TTE34
[phoenix] vm: accessing member "C_NPC.ID" without an instance set
[phoenix] vm: accessing member "C_NPC.NAME" without an instance set
[phoenix] world: parsing object [VobTree % 0 0]
[phoenix] world: parsing object [EndMarker % 0 0]
not implemented call [mdl_applyrandomani]
not implemented call [mdl_applyrandomanifreq]
not implemented call [NPC_HASREADIEDWEAPON]
not implemented call [AI_LOOKAT]
not implemented call [NPC_SETKNOWSPLAYER]
lmichaelis commented 1 year ago

Hi there @CReimer, this is a known issue with some message DBs. A synchronized field is present but not parsed (see link). I am not sure if it needs to be fixed to implement Gothic I correctly and I am also not sure about the default value. There is some investigation required into how this is actually supposed to work.

https://github.com/lmichaelis/phoenix/blob/main/source/messages.cc#L64-L67

CReimer commented 1 year ago

"synchronized" in cutscenes. Could that be subtitles for the cutscenes?

lmichaelis commented 1 year ago

Cut-scenes are normally just videos iirc. Maybe it has something to do with subtitles of ambient conversation instead? I have no way to actually check since the G1 decompilation I can make is just garbage: I can't get any function or class names at all. G2 is so much easier :/

If you have a need for that data, let me know. I'll look into how to parse it :).

lmichaelis commented 1 year ago

Re-classifying this as a bug. After some further investigation I've determined an issue with the binary archive parser which causes this problem.

I've added a fix for it on main. Could you confirm that it does fix this issue @CReimer?

dreimer1986 commented 1 year ago

I can confirm that. Same Gothic I version (Steam, German version). Used OpenGothic: https://github.com/Try/OpenGothic/commit/f53134f8c6a6fcc8184d5537731bfe66d62853e6 Used phoenix: v1.1.1

OpenGothic v1.0 dev
GPU = NVIDIA GeForce RTX 2080
Depth format = Depth32F Shadow format = Depth16
[phoenix] world: parsing object [MeshAndBsp % 0 0]
[phoenix] bsp_tree: parsing chunk c000
[phoenix] bsp_tree: parsing chunk c010
[phoenix] bsp_tree: parsing chunk c040
[phoenix] bsp_tree: parsing chunk c045
[phoenix] bsp_tree: parsing chunk c050
[phoenix] bsp_tree: parsing chunk c0ff
[phoenix] world: parsing object [VobTree % 0 0]
[phoenix] world: parsing object [WayNet % 0 0]
[phoenix] world: parsing object [EndMarker % 0 0]
[phoenix] model_script: detected invalid use of keyword aniin "Model" block. Ignoring rest of script.
unable to load sound fx: WOOD_NIGHT2
[phoenix] model script: syntax error (line 3186, column 2): comments must start with two slashes
comb not found: t_FIREPLACE_Stand_2_S0 -> c_FP_STAND_2_S0_(c_FP_STAND_2_S0_2)
comb not found: t_FIREPLACE_S0_2_Stand -> c_FP_STAND_2_S0_(c_FP_STAND_2_S0_2)
alias not found: t_Walk_2_WalkBL -> t_walkL_2_Walk
alias not found: t_SwimF_2_Dive -> t_swim_2_dive
alias not found: t_SwimF_2_Dive -> t_swim_2_dive
[phoenix] vm: accessing member "C_NPC.ATTRIBUTE" without an instance set
[phoenix] model script: syntax error (line 162, column 56): string not terminated
alias not found: r_Roam1 -> r_Scratch
alias not found: t_FallenB_2_Stand -> t_Fallen_2_Stand  
[phoenix] model_script: detected invalid use of keyword *eventSFXin "Model" block. Ignoring rest of script.
inserNpc: invalid waypoint
inserNpc: invalid waypoint
alias not found: t_FistWalkBL_2_FistWalk -> t_FistWalk_2_FistWalkL
[phoenix] model script: syntax error (line 3186, column 2): comments must start with two slashes
comb not found: t_FIREPLACE_Stand_2_S0 -> c_FP_STAND_2_S0_(c_FP_STAND_2_S0_2)
comb not found: t_FIREPLACE_S0_2_Stand -> c_FP_STAND_2_S0_(c_FP_STAND_2_S0_2)
alias not found: t_Walk_2_WalkBL -> t_walkL_2_Walk
[phoenix] model script: syntax error (line 55, column 96): string not terminated
[phoenix] model script: syntax error (line 55, column 109): string not terminated
[phoenix] model_script: detected invalid use of keyword aniAliasin "Model" block. Ignoring rest of script.
[phoenix] model script: syntax error (line 138, column 55): string not terminated
comb not found: t_FIREPLACE_Stand_2_S0 -> c_FP_STAND_2_S0_(c_FP_STAND_2_S0_2)
comb not found: t_FIREPLACE_S0_2_Stand -> c_FP_STAND_2_S0_(c_FP_STAND_2_S0_2)
room not found: NLHU03
room not found: NLHU05
room not found: NLHU06
room not found: NLHU09
room not found: NLHU08
room not found: NLHU07
room not found: NLHU04
room not found: NLHU02
room not found: NLHU01
not implemented call [WLD_SETOBJECTROUTINE]
room not found: HüTTE5
room not found: HüTTE34
[phoenix] vm: accessing member "C_NPC.ID" without an instance set
[phoenix] vm: accessing member "C_NPC.NAME" without an instance set
not implemented call [WLD_EXCHANGEGUILDATTITUDES]
room not found: NLHU03
room not found: NLHU05
room not found: NLHU06
room not found: NLHU09
room not found: NLHU08
room not found: NLHU07
room not found: NLHU04
room not found: NLHU02
room not found: NLHU01
room not found: HüTTE5
room not found: HüTTE34
[phoenix] vm: accessing member "C_NPC.ID" without an instance set
[phoenix] vm: accessing member "C_NPC.NAME" without an instance set
not implemented call [mdl_applyrandomani]
not implemented call [mdl_applyrandomanifreq]
not implemented call [NPC_HASREADIEDWEAPON]
not implemented call [NPC_SETKNOWSPLAYER]
not implemented call [NPC_HASNEWS]
not implemented call [NPC_GETNEXTWP]
not implemented call [NPC_ISWAYBLOCKED]
not implemented call [NPC_HASRANGEDWEAPONWITHAMMO]
not implemented call [NPC_GETINVITEMBYSLOT]
invalid particle system: "BFX_Scavenger_Dead"
unable to load sound fx: CS_MAM_JA_FL
invalid particle system: "BFX_Scavenger_Dead"
invalid particle system: "BFX_Scavenger_Dead"
exception in trigger-script: Cannot call function: not found
[phoenix] vm: accessing member "C_NPC.ID" without an instance set
[phoenix] vm: accessing member "C_NPC.NAME" without an instance set
[phoenix] vm: accessing member "C_NPC.ID" without an instance set
[phoenix] vm: accessing member "C_NPC.NAME" without an instance set
exception in trigger-script: Cannot call function: not found
not implemented call [NPC_ISINCUTSCENE]
[phoenix] vm: accessing member "C_NPC.ID" without an instance set
[phoenix] vm: accessing member "C_NPC.NAME" without an instance set
not implemented call [NPC_HASREADIEDRANGEDWEAPON]
[phoenix] vm: accessing member "C_NPC.ID" without an instance set
[phoenix] vm: accessing member "C_NPC.NAME" without an instance set

This log is smaller already. all the not fully parsed are gone now and new intersting stuff shows up now. Maybe some of these are worth another report (like the syntax errors and rest of script skipped, etcetc), but this one here is fixed.

lmichaelis commented 1 year ago

Thanks for confirming. Those messages are related to malformed MDS files which we don't control. They are simply informing you about the incorrect syntax and don't necessarily indicate parsing errors I handle those issues and resolve them internally

If you do run into issues related to missing animations possibly related to phoenix, please open another issue :>