Difference between revisions of "User:Mddass"
Jump to navigation
Jump to search
(→Crash 2 Return/Error Codes) |
|||
| (13 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttest | testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttest | ||
| + | |||
| + | [[User:Mddass/List of GOOL Executables]] | ||
== Crash 2 Return/Error Codes == | == Crash 2 Return/Error Codes == | ||
| − | Engine assumes codes range from <code>0xFFFFFF01</code> to <code>0xFFFFFFFF</code>. | + | Engine assumes codes range from <code>0xFFFFFF01</code> to <code>0xFFFFFFFF</code>. A special return/error code, <code>0</code>, is used in certain GOOL interpretation functions (event, state change, animation change) to indicate that the function failed and/or that interpretation should continue. |
{| border="1" | {| border="1" | ||
!Code | !Code | ||
| Line 26: | Line 28: | ||
|0xFFFFFFE6 (-0x1A) | |0xFFFFFFE6 (-0x1A) | ||
|Event failed? GOOL interpreter failed? | |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. | ||
| | | | ||
|- | |- | ||
| Line 35: | Line 49: | ||
|Chunk load failed. | |Chunk load failed. | ||
|Wrong magic, invalid page pointer, etc. | |Wrong magic, invalid page pointer, etc. | ||
| + | |- | ||
| + | | | ||
| + | | | ||
| + | |- | ||
| + | |0xFFFFFFF0 (-0x10) | ||
| + | |Unknown. | ||
| + | |Returned by FUN_80012ed0 and FUN_80013084. Chunk load success? | ||
|- | |- | ||
|0xFFFFFFF1 (-0xF) | |0xFFFFFFF1 (-0xF) | ||
| − | | | + | |Out of memory. |
| | | | ||
|- | |- | ||
|0xFFFFFFF2 (-0xE) | |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. | |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 == | ||
| + | <syntaxhighlight lang="c"> | ||
| + | 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 | ||
| + | ... | ||
| + | } | ||
| + | </syntaxhighlight> | ||
Latest revision as of 00:40, 29 July 2020
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
...
}