User:Mddass
Jump to navigation
Jump to search
testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttest
User:Mddass/List of GOOL Executables
Crash 2 Return/Error Codes
Engine assumes codes range from 0xFFFFFF01
to 0xFFFFFFFF
. A special return/error code, 0
, is used in certain GOOL interpretation functions (event, state change, animation change) to indicate that the function failed and/or that interpretation should continue.
Code | Meaning | Additional Notes |
---|---|---|
0xFFFFFF01 (-0xFF) | No error. | |
0xFFFFFF02 (-0xFE) | Error finding specified file. | "File" includes entries and disc files. |
0xFFFFFFE5 (-0x1B) | The specified object state is invalid. | For example, when an object's subtype corresponds to state 255 (invalid). |
0xFFFFFFE6 (-0x1A) | Event failed? GOOL interpreter failed? | |
0xFFFFFFE7 (-0x19) | GOOL stack frame update unsuccessful. | |
0xFFFFFFE8 (-0x18) | Object linked list remove unsuccessful. | |
0xFFFFFFEA (-0x16) | Object could not be spawned from entity, pools are full. | |
0xFFFFFFEE (-0x12) | Chunk load failed. | Wrong magic, invalid page pointer, etc. |
0xFFFFFFF0 (-0x10) | Unknown. | Returned by FUN_80012ed0 and FUN_80013084. Chunk load success? |
0xFFFFFFF1 (-0xF) | Out of memory. | |
0xFFFFFFF2 (-0xE) | Object is malformed.
Texture load success. |
Returned on state change if object status b-flag 0x10000000 is set or if state is 255 (invalid), etc. |
0xFFFFFFF6 (-0xA) | Tried to find null entry. | GetEntry was trying to find "NONE!". |
Crash 2 GOOL Interpretation Locations
uint GoolChangeObjState(c2_object_s *obj,int newstate,int argc,int *argv)
{
...
// if hpc (hpc is reset to NULL before this, hpc used here is from before)
GOOLInterpret(obj,0x13,NULL); // hpc
...
// if tpc and is last updated object
GOOLInterpret(obj,0x3,NULL); // obj->tpc = state->tpc
...
}
uint FUN_8001c718(c2_object_s *obj,int unkflag) // some object update routine every frame
{
...
// if tpc
GOOLInterpret(obj,0x3,NULL); // tpc
...
// if wait is 0
GOOLInterpret(obj,0x4,NULL); // ??? pc
...
}
uint ObjSendEvent(c2_object_s *sender,c2_object_s *receiver,int event,int argc,uint *argv)
{
...
// if receiver->epc
GOOLInterpret(receiver,0x8,NULL); // tpc
...
// if previous interpretation was unsuccesful and interrupt is mapped to subroutine
GOOLInterpret(receiver,0x3,NULL); // interrupt-pc
...
GoolChangeObjState(receiver,eState,argc,argv);
...
}
void GoolInterrupt(c2_object_s *obj,uint newpc,int argc,uint *argv)
{
...
GOOLInterpret(obj,0x3,NULL); // newpc
...
}