diff --git a/ob.cpp b/ob.cpp index f7fb654..44e1514 100644 --- a/ob.cpp +++ b/ob.cpp @@ -728,7 +728,6 @@ void validate_CSuper(void){ VALIDATE(CSuper, field_FC, 0xFC); VALIDATE(CSuper, field_100, 0x100); VALIDATE(CSuper, field_104, 0x104); - VALIDATE(CSuper, field_108, 0x108); VALIDATE(CSuper, field_10C, 0x10C); VALIDATE(CSuper, field_114, 0x114); diff --git a/ob.h b/ob.h index 48e2ea5..495e2b7 100644 --- a/ob.h +++ b/ob.h @@ -174,8 +174,7 @@ class CSuper : public CBody { int field_FC; int field_100; - int field_104; - int field_108; + SHandle field_104; int field_10C; unsigned char padAfter10C[4]; diff --git a/scorpion.cpp b/scorpion.cpp index 27a25af..210580c 100644 --- a/scorpion.cpp +++ b/scorpion.cpp @@ -3,6 +3,104 @@ #include "ai.h" #include "ps2lowsfx.h" #include "utils.h" +#include "web.h" + +// @NotOk +// case 1 is fucked up +void CScorpion::GetTrapped(void) +{ + i32 **v6; + i32 v7; + i32 v8; + switch (this->dumbAssPad) + { + case 0: + new CAIProc_StateSwitchSendMessage(this, 14); + + this->CycleAnim(12, 1); + this->field_BD4 = 0; + this->field_BD8 = 0; + this->field_1F8 = 5; + this->dumbAssPad++; + break; + case 1: + if (this->field_142) + this->CycleAnim(12, 1); + + this->field_324 |= 2; + if (this->field_BD8 > 0) + this->field_BD8 -= 1; + + if (--this->field_1F8 <= 0) + { + v6 = reinterpret_cast(Mem_RecoverPointer(&this->field_104)); + if (!v6 || (v7 = this->field_BD4, v8 = v6[17][15], v7 == v8)) + { + this->dumbAssPad++; + } + else + { + this->field_BD8 += (8000 * (v8 - v7)) >> 12; + this->field_1F8 = 5; + this->field_BD4 = v6[17][15]; + } + } + + break; + case 2: + this->field_324 |= 2; + this->RunTimer(&this->field_BD8); + if (this->field_BD8 <= 0) + { + this->RunAnim(0xC, + this->field_12A == 12 ? this->field_128 : 0, + -1); + this->dumbAssPad++; + } + break; + case 3: + this->field_324 |= 2; + if (this->field_142) + { + this->RunAnim(0xD, 0, -1); + this->dumbAssPad++; + } + break; + case 4: + if (this->field_128 >= 10) + { + if (this->field_104.field_0) + { + CTrapWebEffect* pWeb = reinterpret_cast( + Mem_RecoverPointer(&this->field_104)); + if (pWeb) + { + SFX_PlayPos(0x80C6, &this->mPos, 0); + pWeb->Burst(); + } + + this->field_104.field_0 = 0; + } + this->field_31C.bothFlags = 12; + this->dumbAssPad++; + } + else + { + this->field_324 |= 2; + } + break; + case 5: + if (this->field_142) + { + this->field_31C.bothFlags = 2; + this->dumbAssPad = 0; + } + break; + default: + print_if_false(0, "Unknown substate!"); + break; + } +} // @Ok void __inline CScorpion::NextRoom(void) @@ -200,6 +298,11 @@ void CScorpion::TakeHit(void) void validate_CScorpion(void){ VALIDATE_SIZE(CScorpion, 0xC28); + VALIDATE(CScorpion, field_324, 0x324); + + VALIDATE(CScorpion, field_BD4, 0xBD4); + VALIDATE(CScorpion, field_BD8, 0xBD8); + VALIDATE(CScorpion, field_BEC, 0xBEC); VALIDATE(CScorpion, hCurrentTarget, 0xBF0); diff --git a/scorpion.h b/scorpion.h index 21dabd9..488fb5e 100644 --- a/scorpion.h +++ b/scorpion.h @@ -17,12 +17,17 @@ class CScorpion : public CBaddy { EXPORT void Gloat(void); EXPORT void DetermineTarget(void); EXPORT void TakeHit(void); + EXPORT void GetTrapped(void); - unsigned char padTop[0xBEC-0x324]; + i32 field_324; + u8 padAfter324[0xBD4-0x324-4]; - CSuper* field_BEC; + i32 field_BD4; + i32 field_BD8; + u8 padAfterBD8[0xBEC-0xBD8-4]; + CSuper* field_BEC; SHandle hCurrentTarget; i32 field_BF8; diff --git a/spider.mak b/spider.mak deleted file mode 100644 index 9ba0b58..0000000 --- a/spider.mak +++ /dev/null @@ -1,520 +0,0 @@ -# Microsoft Developer Studio Generated NMAKE File, Based on spider.dsp -!IF "$(CFG)" == "" -CFG=spider - Win32 Debug -!MESSAGE No configuration specified. Defaulting to spider - Win32 Debug. -!ENDIF - -!IF "$(CFG)" != "spider - Win32 Release" && "$(CFG)" != "spider - Win32 Debug" -!MESSAGE Invalid configuration "$(CFG)" specified. -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "spider.mak" CFG="spider - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "spider - Win32 Release" (based on "Win32 (x86) Application") -!MESSAGE "spider - Win32 Debug" (based on "Win32 (x86) Application") -!MESSAGE -!ERROR An invalid configuration is specified. -!ENDIF - -!IF "$(OS)" == "Windows_NT" -NULL= -!ELSE -NULL=nul -!ENDIF - -!IF "$(CFG)" == "spider - Win32 Release" - -OUTDIR=.\Release -INTDIR=.\Release -# Begin Custom Macros -OutDir=.\Release -# End Custom Macros - -ALL : "$(OUTDIR)\spider.exe" - - -CLEAN : - -@erase "$(INTDIR)\baddy.obj" - -@erase "$(INTDIR)\bit.obj" - -@erase "$(INTDIR)\blackcat.obj" - -@erase "$(INTDIR)\carnage.obj" - -@erase "$(INTDIR)\chopper.obj" - -@erase "$(INTDIR)\cop.obj" - -@erase "$(INTDIR)\docock.obj" - -@erase "$(INTDIR)\friction.obj" - -@erase "$(INTDIR)\front.obj" - -@erase "$(INTDIR)\hostage.obj" - -@erase "$(INTDIR)\jonah.obj" - -@erase "$(INTDIR)\lizard.obj" - -@erase "$(INTDIR)\lizman.obj" - -@erase "$(INTDIR)\m3d.obj" - -@erase "$(INTDIR)\main.obj" - -@erase "$(INTDIR)\mem.obj" - -@erase "$(INTDIR)\mj.obj" - -@erase "$(INTDIR)\mysterio.obj" - -@erase "$(INTDIR)\ob.obj" - -@erase "$(INTDIR)\platform.obj" - -@erase "$(INTDIR)\ps2funcs.obj" - -@erase "$(INTDIR)\ps2m3d.obj" - -@erase "$(INTDIR)\pshell.obj" - -@erase "$(INTDIR)\rhino.obj" - -@erase "$(INTDIR)\scorpion.obj" - -@erase "$(INTDIR)\shell.obj" - -@erase "$(INTDIR)\simby.obj" - -@erase "$(INTDIR)\spclone.obj" - -@erase "$(INTDIR)\submarin.obj" - -@erase "$(INTDIR)\superock.obj" - -@erase "$(INTDIR)\thug.obj" - -@erase "$(INTDIR)\torch.obj" - -@erase "$(INTDIR)\turret.obj" - -@erase "$(INTDIR)\utils.obj" - -@erase "$(INTDIR)\validate.obj" - -@erase "$(INTDIR)\vc60.idb" - -@erase "$(INTDIR)\vector.obj" - -@erase "$(INTDIR)\venom.obj" - -@erase "$(INTDIR)\web.obj" - -@erase "$(OUTDIR)\spider.exe" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -CPP=cl.exe -CPP_PROJ=/nologo /MT /W3 /GX /O2 /Op /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /Fp"$(INTDIR)\spider.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c - -.c{$(INTDIR)}.obj:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cpp{$(INTDIR)}.obj:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cxx{$(INTDIR)}.obj:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.c{$(INTDIR)}.sbr:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cpp{$(INTDIR)}.sbr:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cxx{$(INTDIR)}.sbr:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -MTL=midl.exe -MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 -RSC=rc.exe -BSC32=bscmake.exe -BSC32_FLAGS=/nologo /o"$(OUTDIR)\spider.bsc" -BSC32_SBRS= \ - -LINK32=link.exe -LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /incremental:no /pdb:"$(OUTDIR)\spider.pdb" /machine:I386 /out:"$(OUTDIR)\spider.exe" -LINK32_OBJS= \ - "$(INTDIR)\baddy.obj" \ - "$(INTDIR)\bit.obj" \ - "$(INTDIR)\blackcat.obj" \ - "$(INTDIR)\carnage.obj" \ - "$(INTDIR)\chopper.obj" \ - "$(INTDIR)\cop.obj" \ - "$(INTDIR)\docock.obj" \ - "$(INTDIR)\friction.obj" \ - "$(INTDIR)\front.obj" \ - "$(INTDIR)\hostage.obj" \ - "$(INTDIR)\jonah.obj" \ - "$(INTDIR)\lizard.obj" \ - "$(INTDIR)\lizman.obj" \ - "$(INTDIR)\m3d.obj" \ - "$(INTDIR)\main.obj" \ - "$(INTDIR)\mem.obj" \ - "$(INTDIR)\mj.obj" \ - "$(INTDIR)\mysterio.obj" \ - "$(INTDIR)\ob.obj" \ - "$(INTDIR)\platform.obj" \ - "$(INTDIR)\ps2funcs.obj" \ - "$(INTDIR)\ps2m3d.obj" \ - "$(INTDIR)\pshell.obj" \ - "$(INTDIR)\rhino.obj" \ - "$(INTDIR)\scorpion.obj" \ - "$(INTDIR)\shell.obj" \ - "$(INTDIR)\simby.obj" \ - "$(INTDIR)\spclone.obj" \ - "$(INTDIR)\submarin.obj" \ - "$(INTDIR)\superock.obj" \ - "$(INTDIR)\thug.obj" \ - "$(INTDIR)\torch.obj" \ - "$(INTDIR)\turret.obj" \ - "$(INTDIR)\utils.obj" \ - "$(INTDIR)\validate.obj" \ - "$(INTDIR)\vector.obj" \ - "$(INTDIR)\venom.obj" \ - "$(INTDIR)\web.obj" - -"$(OUTDIR)\spider.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) - $(LINK32) @<< - $(LINK32_FLAGS) $(LINK32_OBJS) -<< - -!ELSEIF "$(CFG)" == "spider - Win32 Debug" - -OUTDIR=.\Debug -INTDIR=.\Debug -# Begin Custom Macros -OutDir=.\Debug -# End Custom Macros - -ALL : "$(OUTDIR)\spider.exe" - - -CLEAN : - -@erase "$(INTDIR)\baddy.obj" - -@erase "$(INTDIR)\bit.obj" - -@erase "$(INTDIR)\blackcat.obj" - -@erase "$(INTDIR)\carnage.obj" - -@erase "$(INTDIR)\chopper.obj" - -@erase "$(INTDIR)\cop.obj" - -@erase "$(INTDIR)\docock.obj" - -@erase "$(INTDIR)\friction.obj" - -@erase "$(INTDIR)\front.obj" - -@erase "$(INTDIR)\hostage.obj" - -@erase "$(INTDIR)\jonah.obj" - -@erase "$(INTDIR)\lizard.obj" - -@erase "$(INTDIR)\lizman.obj" - -@erase "$(INTDIR)\m3d.obj" - -@erase "$(INTDIR)\main.obj" - -@erase "$(INTDIR)\mem.obj" - -@erase "$(INTDIR)\mj.obj" - -@erase "$(INTDIR)\mysterio.obj" - -@erase "$(INTDIR)\ob.obj" - -@erase "$(INTDIR)\platform.obj" - -@erase "$(INTDIR)\ps2funcs.obj" - -@erase "$(INTDIR)\ps2m3d.obj" - -@erase "$(INTDIR)\pshell.obj" - -@erase "$(INTDIR)\rhino.obj" - -@erase "$(INTDIR)\scorpion.obj" - -@erase "$(INTDIR)\shell.obj" - -@erase "$(INTDIR)\simby.obj" - -@erase "$(INTDIR)\spclone.obj" - -@erase "$(INTDIR)\submarin.obj" - -@erase "$(INTDIR)\superock.obj" - -@erase "$(INTDIR)\thug.obj" - -@erase "$(INTDIR)\torch.obj" - -@erase "$(INTDIR)\turret.obj" - -@erase "$(INTDIR)\utils.obj" - -@erase "$(INTDIR)\validate.obj" - -@erase "$(INTDIR)\vc60.idb" - -@erase "$(INTDIR)\vector.obj" - -@erase "$(INTDIR)\venom.obj" - -@erase "$(INTDIR)\web.obj" - -@erase "$(OUTDIR)\spider.exe" - -@erase "$(OUTDIR)\spider.pdb" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -CPP=cl.exe -CPP_PROJ=/nologo /MT /W3 /GX /O2 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /Fp"$(INTDIR)\spider.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c - -.c{$(INTDIR)}.obj:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cpp{$(INTDIR)}.obj:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cxx{$(INTDIR)}.obj:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.c{$(INTDIR)}.sbr:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cpp{$(INTDIR)}.sbr:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cxx{$(INTDIR)}.sbr:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -MTL=midl.exe -MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 -RSC=rc.exe -BSC32=bscmake.exe -BSC32_FLAGS=/nologo /o"$(OUTDIR)\spider.bsc" -BSC32_SBRS= \ - -LINK32=link.exe -LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /incremental:no /pdb:"$(OUTDIR)\spider.pdb" /debug /machine:I386 /out:"$(OUTDIR)\spider.exe" /pdbtype:sept -LINK32_OBJS= \ - "$(INTDIR)\baddy.obj" \ - "$(INTDIR)\bit.obj" \ - "$(INTDIR)\blackcat.obj" \ - "$(INTDIR)\carnage.obj" \ - "$(INTDIR)\chopper.obj" \ - "$(INTDIR)\cop.obj" \ - "$(INTDIR)\docock.obj" \ - "$(INTDIR)\friction.obj" \ - "$(INTDIR)\front.obj" \ - "$(INTDIR)\hostage.obj" \ - "$(INTDIR)\jonah.obj" \ - "$(INTDIR)\lizard.obj" \ - "$(INTDIR)\lizman.obj" \ - "$(INTDIR)\m3d.obj" \ - "$(INTDIR)\main.obj" \ - "$(INTDIR)\mem.obj" \ - "$(INTDIR)\mj.obj" \ - "$(INTDIR)\mysterio.obj" \ - "$(INTDIR)\ob.obj" \ - "$(INTDIR)\platform.obj" \ - "$(INTDIR)\ps2funcs.obj" \ - "$(INTDIR)\ps2m3d.obj" \ - "$(INTDIR)\pshell.obj" \ - "$(INTDIR)\rhino.obj" \ - "$(INTDIR)\scorpion.obj" \ - "$(INTDIR)\shell.obj" \ - "$(INTDIR)\simby.obj" \ - "$(INTDIR)\spclone.obj" \ - "$(INTDIR)\submarin.obj" \ - "$(INTDIR)\superock.obj" \ - "$(INTDIR)\thug.obj" \ - "$(INTDIR)\torch.obj" \ - "$(INTDIR)\turret.obj" \ - "$(INTDIR)\utils.obj" \ - "$(INTDIR)\validate.obj" \ - "$(INTDIR)\vector.obj" \ - "$(INTDIR)\venom.obj" \ - "$(INTDIR)\web.obj" - -"$(OUTDIR)\spider.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) - $(LINK32) @<< - $(LINK32_FLAGS) $(LINK32_OBJS) -<< - -!ENDIF - - -!IF "$(NO_EXTERNAL_DEPS)" != "1" -!IF EXISTS("spider.dep") -!INCLUDE "spider.dep" -!ELSE -!MESSAGE Warning: cannot find "spider.dep" -!ENDIF -!ENDIF - - -!IF "$(CFG)" == "spider - Win32 Release" || "$(CFG)" == "spider - Win32 Debug" -SOURCE=.\baddy.cpp - -"$(INTDIR)\baddy.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\bit.cpp - -"$(INTDIR)\bit.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\blackcat.cpp - -"$(INTDIR)\blackcat.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\carnage.cpp - -"$(INTDIR)\carnage.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\chopper.cpp - -"$(INTDIR)\chopper.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\cop.cpp - -"$(INTDIR)\cop.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\docock.cpp - -"$(INTDIR)\docock.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\friction.cpp - -"$(INTDIR)\friction.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\front.cpp - -"$(INTDIR)\front.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\hostage.cpp - -"$(INTDIR)\hostage.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\jonah.cpp - -"$(INTDIR)\jonah.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\lizard.cpp - -"$(INTDIR)\lizard.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\lizman.cpp - -"$(INTDIR)\lizman.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\m3d.cpp - -"$(INTDIR)\m3d.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\main.cpp - -"$(INTDIR)\main.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\mem.cpp - -"$(INTDIR)\mem.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\mj.cpp - -"$(INTDIR)\mj.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\mysterio.cpp - -"$(INTDIR)\mysterio.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\ob.cpp - -"$(INTDIR)\ob.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\platform.cpp - -"$(INTDIR)\platform.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\ps2funcs.cpp - -"$(INTDIR)\ps2funcs.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\ps2m3d.cpp - -"$(INTDIR)\ps2m3d.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\pshell.cpp - -"$(INTDIR)\pshell.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\rhino.cpp - -"$(INTDIR)\rhino.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\scorpion.cpp - -"$(INTDIR)\scorpion.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\shell.cpp - -"$(INTDIR)\shell.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\simby.cpp - -"$(INTDIR)\simby.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\spclone.cpp - -"$(INTDIR)\spclone.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\submarin.cpp - -"$(INTDIR)\submarin.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\superock.cpp - -"$(INTDIR)\superock.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\thug.cpp - -"$(INTDIR)\thug.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\torch.cpp - -"$(INTDIR)\torch.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\turret.cpp - -"$(INTDIR)\turret.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\utils.cpp - -"$(INTDIR)\utils.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\validate.cpp - -"$(INTDIR)\validate.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\vector.cpp - -"$(INTDIR)\vector.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\venom.cpp - -"$(INTDIR)\venom.obj" : $(SOURCE) "$(INTDIR)" - - -SOURCE=.\web.cpp - -"$(INTDIR)\web.obj" : $(SOURCE) "$(INTDIR)" - - - -!ENDIF -