source: Daodan/src/Oni_Character.h @ 437

Last change on this file since 437 was 437, checked in by rossy, 13 years ago

Daodan_Console

File size: 17.5 KB
Line 
1#pragma once
2#ifndef ONI_CHARACTER_H
3#define ONI_CHARACTER_H
4
5#include "Daodan.h"
6#include <stdint.h>
7#include <stdbool.h>
8
9typedef struct {
10        float X;
11        float Y;
12        float Z;       
13} Vector3; //probably move to utilities...
14
15typedef struct {
16        float X;
17        float Y;
18        float Z;
19        float W;
20} Quaternion;
21
22typedef struct {
23        float RotationScale[9];
24        Vector3 Translation;
25} Matrix4x3;
26
27typedef struct {
28        Vector3 Center;
29        float Radius;
30} Sphere;
31
32typedef struct {
33        Sphere Sphere_; //fix this name
34        int Child1;
35        int Child2;     
36} SphereTreeNode;
37
38typedef struct {
39        Vector3 Min;
40        Vector3 Max;
41} BoundingBox;
42
43
44enum { //action flags
45        Action_Escape                    = 1,
46        Action_Console                   = 2,
47        Action_PauseScreen               = 4,
48        Action_Cutscene_1                = 8,
49        Action_Cutscene_2                = 0x10,
50        Action_F4                        = 0x20,
51        Action_F5                        = 0x40,
52        Action_F6                        = 0x80,
53        Action_F7                        = 0x100,
54        Action_F8                        = 0x200,
55        Action_StartRecord               = 0x400,
56        Action_StopRecord                = 0x800,
57        Action_PlayRecord                = 0x1000,
58        Action_F12                       = 0x2000,
59        Action_Unknown1                  = 0x4000,
60        Action_LookMode                  = 0x8000,
61        Action_Screenshot                = 0x10000,
62        Action_Unknown2                  = 0x20000,
63        Action_Unknown3                  = 0x40000,
64        Action_Unknown4                  = 0x80000,
65        Action_Unknown5                  = 0x100000,
66        Action_Forward                   = 0x200000,
67        Action_Backward                  = 0x400000,
68        Action_TurnLeft                  = 0x800000,
69        Action_TurnRight                 = 0x1000000,
70        Action_StepLeft                  = 0x2000000,
71        Action_StepRight                 = 0x4000000,
72        Action_Jump                      = 0x8000000,
73        Action_Crouch                    = 0x10000000,
74        Action_Punch                     = 0x20000000,
75        Action_Kick                      = 0x40000000,
76        Action_Block                     = 0x80000000,
77        //used in second action field
78        Action2_Walk                     = 1,
79        Action2_Action                   = 2,
80        Action2_Hypo                     = 4,
81        Action2_Reload                   = 8,
82        Action2_Swap                     = 0x10,
83        Action2_Drop                     = 0x20,
84        Action2_Fire1                    = 0x40,
85        Action2_Fire2                    = 0x80,
86        Action2_Fire3                    = 0x100,
87};
88
89
90typedef struct {
91        int32_t Actions1;
92        int32_t Actions2;
93} InputAction;
94
95
96typedef struct {
97        float MouseDeltaX;
98        float MouseDeltaY;
99        float field_8;
100        float field_C;
101        InputAction Current;
102        InputAction Stopped;
103        InputAction Start;
104        InputAction Stop;
105} GameInput;
106
107typedef struct {
108        int Type;                               //'CHAR' etc.
109        int ObjectId;                   //not needed
110        int Flags;                              //The flags of the object...not used for CHAR
111        Vector3 Position;               //Position of Object
112        Vector3 Rotation;               //Rotation of Object
113        int EditorCallbacks;    //Lets try not to mess with it for now. :P
114        int field_28;                   //unknown
115} OSD_Header;
116
117typedef struct {
118        int32_t Flags;
119        int32_t Frame;
120        int32_t field_8;
121        int32_t field_C;
122        int32_t field_10;
123        int32_t field_14;
124        int32_t field_18;
125        int32_t field_1C;
126        int32_t FILMInstance;
127} PlayingFilm;
128
129typedef struct {
130        uint32_t Options;                               //A bitset. Someone had better define these
131        char Class[64];                                 //Name of the ONCC we use. ONCCName in idb
132        char Name[32];                                  //Name of the character. ie: ai2_spawn Muro
133        char Weapon[64];                                //Name of the weapon he holds. ONWCName in idb
134        char ScriptSpawn[32];                   //Script function called when char spawns
135        char ScriptDie[32];                             //Script function called when char dies
136        char ScriptAware[32];                   //Script function called when char detects something
137        char ScriptAlarm[32];                   //Script function called when char is alarmed at something
138        char ScriptHurt[32];                    //Script function called when char is hurt for the first time
139        char ScriptDefeat[32];                  //Script function called when char is at 1 HP
140        char ScriptNoPath[32];                  //Script function called when char loses path. Broken.
141        char ScriptNoAmmo[32];                  //Script function called when char is out of ammo for the first time. Char must have ammo at spawn.
142        int32_t AdditionalHealth;               //Additional Health given to the character
143        int16_t AmmoUsed;                               //Ammo given for the char to use
144        int16_t AmmoDropped;                    //Ammo the char drops
145        int16_t CellsUsed;                              //Cells given for the char to use
146        int16_t CellsDropped;                   //Cells the char drops
147        int16_t HypoUsed;                               //Hypo given for the char to use
148        int16_t HypoDropped;                    //Hypo the char drops
149        int16_t ShieldUsed;                             //Bullet shield given for the char to use
150        int16_t ShieldDropped;                  //Bullet shield the char drops
151        int16_t CloakUsed;                              //Phase Cloak given for the char to use
152        int16_t CloakDropped;                   //Phase Cloak the char drops
153        int16_t NCIUsed;                                //Don't use this...
154        int16_t NCIDropped;                             //Don't use this...
155        int32_t TeamID;                                 //Team ID
156        int32_t AmmoPercent;                    //Percent of weapon ammo full
157        int32_t JobID;                                  //Job ID...
158                                                                        //0 - none
159                                                                        //1 - idle
160                                                                        //2 - guard (never used in Oni)
161                                                                        //3 - patrol
162                                                                        //4 - teambattle (never used in Oni)
163        int16_t PatrolID;                               //patrol path ID (reference to the Patrol_Path.BINA file)
164        int16_t CombatID;                               //combat ID (reference to the Combat.BINA file)
165        int16_t MeleeID;                                //melee ID (reference to the Melee Profile.BINA file)
166        int16_t NeutralID;                              //neutral ID (reference to the Neutral.BINA file)
167        int32_t AlarmGroups;                    //Bitset. http://wiki.oni2.net/CHAR
168        int32_t InitialAlertLevel;              //0 - lull, 1 - low, 2 - medium, 3 - high, 4 - combat
169        int32_t MinimalAlertLevel;              //0 - lull, 1 - low, 2 - medium, 3 - high, 4 - combat
170        int32_t StartJobAlertLevel;             //0 - lull, 1 - low, 2 - medium, 3 - high, 4 - combat
171        int32_t InvestigatingAlertLevel;//0 - lull, 1 - low, 2 - medium, 3 - high, 4 - combat
172        int32_t PursuitStrongLow;
173        int32_t PursuitWeakLow;
174        int32_t PursuitStrongHigh;
175        int32_t PursuitWeakHigh;
176        int32_t Pursuit5;
177        int32_t field_1FC;
178} CharacterOSD;
179
180typedef struct {
181        OSD_Header Header;
182        CharacterOSD OSD;
183} CharacterObject;
184
185typedef struct {
186        Vector3 Center;
187        float Radius;
188} BoundingSphere;
189
190typedef struct {
191        int32_t ONCP; //probably pointer
192        int32_t field_4;        //who knows?
193        int32_t Instance; //probably link to actual particle
194        int32_t Bone; //duh
195} AttachedParticle;
196
197typedef struct { //Inventory
198        int32_t Weapons[3];
199        int16_t field_1A0; //10 bucks says this is the current weapon
200        int16_t AmmoUsed;                               //Ammo given for the char to use
201        int16_t HypoUsed;                               //Hypo given for the char to use
202        int16_t CellsUsed;                              //Cells given for the char to use
203        int16_t AmmoDropped;                    //Ammo the char drops
204        int16_t HypoDropped;                    //Hypo the char drops
205        int16_t CellsDropped;                   //Cells the char drops
206        int16_t field_1A;       //who knows? InverseHypoRegenRate?
207        int16_t field_1C;       
208        int16_t field_1E;
209        int16_t hasLSI;
210        int16_t field_1B6;
211        int16_t ShieldUsed;                             //Bullet shield given for the char to use
212        int16_t CloakUsed;                              //Phase Cloak given for the char to use
213        int16_t field_28;                       //probably bullet shield dropped
214        int16_t DoorKeys;               //Lol. We can use this later for other sorts of items.
215} Inventory;
216
217typedef struct { //ActiveCharacter
218        int16_t Number;
219        int16_t field_2; //probably Number is an int32
220        int32_t PhyContext;
221        SphereTree SphereTree1;         //probably SphereTree[7]...
222        SphereTree SphereTree3[4];
223        SphereTree SphereTree2[2];
224        int16_t field_B0;
225        int16_t field_B2;
226        int16_t field_B4;
227        int16_t field_B6;
228        Vector3 field_B8;
229        Vector3 AccelerateWith;
230        int16_t field_D0;
231        Vector3 field_D4;
232        int32_t field_E0;
233        int32_t field_E4;
234        int32_t field_E8;
235        int32_t field_EC;
236        int32_t field_F0;
237        int32_t field_F4;
238        int32_t field_E0;
239        int16_t IsInAir;
240        Vector3 FallingVelocity;
241        Vector3 JumpVelocity;
242        int16_t field_110;
243        int16_t field_112;
244        int32_t field_114;
245        int32_t field_118;
246        int32_t field_11C;
247        int32_t field_120;
248        int32_t field_124;
249        int32_t field_128;
250        int32_t field_12C;
251        BoundingSphere BoundingSphere_; //fix this name
252        Vector3 field_140;
253        Vector3 field_14C;
254        int32_t field_158;
255        int32_t field_15C;
256        Vector3 Location;
257        int32_t field_16C[6]; //16C-184 ???
258        int32_t AkiraNode;
259        int32_t GraphNode;
260        int32_t PelvisHeight;
261        int32_t MovementStatePtr;
262        int32_t ActiveWeapon;           //NOTE: FIGURE OUT THIS MESS OF INVENTORY...
263        int32_t field_198;              //maybe weap 3, maybe not...
264        int32_t InventoryWeapon;
265        int16_t field_1A0;      //unused?
266        int16_t AmmoUsable;                             //Ammo given for the char to use
267        int16_t HypoUsable;                             //Hypo given for the char to use
268        int16_t CellsUsable;                            //Cells given for the char to use
269        int16_t AmmoDropped;                    //Ammo the char drops
270        int16_t HypoDropped;                    //Hypo the char drops
271        int16_t CellsDropped;                   //Cells the char drops
272        int16_t field_1AE;     
273        int16_t InverseHypoRegenRate;
274        int16_t ShieldDropped;
275        int16_t CloakDropped;
276        int16_t field_1B4;
277        int16_t field_1B6;
278        int16_t ShieldUsable;
279        int16_t CloakUsable;
280        int16_t field_1BC[9]; //1BC-1E0
281        int32_t NotIdleStartTime;
282        int32_t TimeToIdle;
283        int32_t field_1E8[1315]; //1E8-1648 what the hell is all this?
284        BoundingBox BoundingBox_; //fix this name
285        int32_t field_1660;
286        int32_t field_1664;
287        int32_t ShieldPower; //Same as Boss Shield Power???
288        int32_t field_166C;
289        int32_t NumberOfKills; //^_^
290        int32_t InflictedDamage; //^_^
291        int32_t field_1678[260];        //1678-1A88 more wtf
292        int32_t field_1A88; //here starts animation junk? It was 4 bools in idb O_o
293        int32_t Executor_AimingDirection; //possibly throw junk?
294        int32_t field_1A98;
295        int32_t field_1A9C;
296        int32_t Executor_ActualMovementMode;
297        int32_t field_1AA4;
298        int32_t field_1AA8;
299        int32_t field_1AAC;
300        int32_t Executor_HasFacingOverride; //a bool...
301        float   Executor_AimingSpeed; 
302        bool    field_1AB8; //actually a bitset...
303        bool    Executor_HasMoveOverride;
304        int16_t field_1ABA;
305        int32_t field_1ABC;
306        int32_t field_1AC0;
307        int32_t field_1AC4;
308        int32_t Executor_FacingOverride;
309        int32_t Executor_HasAttackOverride; //another bool :P
310        int32_t field_1AC4;
311        int32_t field_1AD0;
312        int32_t field_1AD4;
313        int32_t field_1AD8;
314        int32_t field_1ADC;
315        int32_t field_1AE0;
316        int32_t field_1AE4;
317        int32_t Executor_HasThrowOverride; //another another bool
318        int32_t field_1AEC;
319        int32_t field_1AF0;
320        int32_t field_1AF4;
321        int32_t Animation;
322        int16_t AnimationToState;
323        int16_t AnimationFromState;
324        int16_t AnimationType;
325        int16_t NextAnimationType;
326        int16_t field_1B04;
327        int16_t field_1B06;
328        int32_t Stitch; //bool
329        float StitchHeight;
330        int16_t InterpolationFromState;
331        int16_t field_1B12;
332        Vector3 StitchVelocity;
333        int16_t InterpolationCurrentFrame;
334        int16_t InterpolationLength;
335        Quaternion InterpolationStartRotations[19];
336        int32_t field_1C54;
337        int32_t field_1C58;
338        int32_t field_1C5C;
339        int32_t field_1C60;
340        int32_t Overlay;
341        int32_t field_1C60;
342        int32_t field_1C64;
343        int32_t field_1C68;
344        int32_t field_1C6C;
345        int32_t field_1C70;
346        int32_t field_1C74;
347        int32_t field_1C78;
348        int32_t field_1C7C;
349        int32_t field_1C80;
350        int32_t field_1C84;
351        int16_t Frame;
352        int16_t SoftPause;
353        int16_t HardPause;
354        int16_t field1C8E;
355        int32_t field1C90;
356        int16_t field1C94;
357        int16_t field1C96;
358        int16_t Dizzy;
359        int16_t field1C9A;
360        int32_t field1C9C;
361        int16_t AnimationVarient;
362        int16_t TimeToPeace;
363        int16_t NumAnimationAttachedParticles;
364        int16_t field_1CA6; //spacing
365        AttachedParticle AnimationAttachedParticles[16];
366        int32_t TRAMParticles;
367        bool FixedParticlesAttached;
368        bool FixedParticlesStarted;
369        int16_t NumFixedParticles;
370        AttachedParticle FixedParticles[16];
371        int16_t CurrentAnimationType;
372        int16_t field_1EB2; //spacing
373        int32_t field_1EB4;
374        int32_t field_1EB8;
375        int32_t field_1EBC;
376        int32_t field_1EC0;
377        int32_t field_1EC4;
378        int32_t field_1EC8;
379        int32_t field_1ED0;
380        int32_t field_1ED4;
381        int32_t field_1ED8;
382        int32_t field_1EE0;
383        int32_t field_1EE4;
384        int32_t field_1EE8;
385        Quaternion Rotations[19];
386        Quaternion OverlayRotations[19];
387        int32_t field_2150;
388        int32_t field_2154;
389        GameInput Input;
390        InputAction PreviousActions;
391        int32_t SprintTimer;
392        int32_t field_2194;
393        Vector3 field_2198;
394        int32_t field_21A4;
395        int32_t field_21A8;
396        int32_t field_21AC;
397        Vector3 field_21B0;
398        float HeadFacing;
399        float HeadPitch;
400        int32_t field_21C4;
401        int32_t field_21C8;
402        int32_t field_21D0;
403        int32_t field_21D4;
404        bool field_21D8;
405        bool field_21D9;
406        bool field_21DA;
407        bool field_21DB;
408        bool field_21DC;
409        bool field_21DD;
410        bool field_21DE;
411        bool field_21DF;
412        bool field_21E0;
413        bool HasAlternateTrigger;
414        bool field_21E2;
415        bool ReleaseTrigger;
416        bool ReleaseAlternateTrigger;
417        bool TurningLeft;
418        bool TurningRight;
419        bool field_21E7;
420        int32_t field_21E8;
421        int32_t field_21EC;
422        int32_t field_21F0;
423        PlayingFilm PlayingFilm_; //fix this name
424        int32_t field_2218[24]; //2218-2278
425        Matrix4x3 BoneMatrices[19];
426        Matrix4x3 WeaponMatrix;
427        int32_t field_2638[113]; //2638-27FC
428        int16_t ShadowIndex;
429        int16_t field_27FE;
430        int16_t field_2780;
431        bool ShieldParts[19]; 
432        bool field_2815; //padding...
433        bool field_2816;
434        bool field_2817;
435        int32_t field_2818[8];
436} ActiveCharacter;
437
438
439typedef struct { //Character
440        int16_t Number;
441        int16_t ActiveCharacterIndex;
442        int32_t Flags;
443        int16_t field_8;
444        int32_t ONCC;                   //change type to ONCC when we get that far...
445        int32_t field_10;
446        int16_t Team;
447        char Name[32];
448        float BodySize;
449        int32_t Health;
450        int32_t MaxHealth;
451        int32_t ASIA_ID; //might be 16 with 2 byte padding
452        int32_t field_44;
453        char ScriptSpawn[32];                   //Script function called when char spawns
454        char ScriptDie[32];                             //Script function called when char dies
455        char ScriptAware[32];                   //Script function called when char detects something
456        char ScriptAlarm[32];                   //Script function called when char is alarmed at something
457        char ScriptHurt[32];                    //Script function called when char is hurt for the first time
458        char ScriptDefeat[32];                  //Script function called when char is at 1 HP
459        char ScriptNoAmmo[32];                  //Script function called when char is out of ammo for the first time. Char must have ammo at spawn.
460        char ScriptNoPath[32];                  //Script function called when char loses path. Broken.
461        Vector3 Position;
462        Vector3 LastPosition;
463        Vector3 Location;
464        float Facing;
465        float DesiredFacing;
466        float CosmeticFacing;
467        float field_178;
468        float field_17C;
469        float field_180;
470        int32_t BNV;
471        int32_t GraphNode;
472        int32_t PelvisHeight;
473        int32_t GraphNode;
474        float PelvisHeight;
475        float field_190;
476        Inventory Inventory_; //is there a better way to do this?
477        Vector3 Velocity;
478        int32_t field_1D0;
479        int32_t field_1D4;
480        int32_t field_1D8;
481        int32_t field_1DC;
482        int32_t field_1E0;
483        int32_t IdleDelay;
484        int32_t field_1E8;
485        int32_t field_1DC;
486        int32_t CombatFlags;
487        int32_t JobId;
488        int32_t Goal;
489        int32_t field_1FC;
490        int32_t field_200;
491        int32_t field_204;
492        int32_t field_208[107]; //its all undocumented through here
493        int32_t CombatState;    //I think....
494        int32_t field_8BB; 
495        int32_t PatrolPathOSD[10];      //actually another struct. Not needed atm.
496        int32_t PatrolPathPoints[5][64]; //64 of another struct
497        int32_t field_DE8[98];  //DE8-F70
498        int32_t CombatStatePtr;
499        int32_t KnowledgeState[4]; //Another struct
500        int32_t field_F84;
501        int32_t AlertDecayTimer;
502        int32_t field_F8C;
503        int32_t field_F90;
504        int32_t InitialAlertLevel;              //0 - lull, 1 - low, 2 - medium, 3 - high, 4 - combat
505        int32_t MinimalAlertLevel;              //0 - lull, 1 - low, 2 - medium, 3 - high, 4 - combat
506        int32_t StartJobAlertLevel;             //0 - lull, 1 - low, 2 - medium, 3 - high, 4 - combat
507        int32_t InvestigatingAlertLevel;//0 - lull, 1 - low, 2 - medium, 3 - high, 4 - combat
508        int32_t StartleTime;
509        int32_t field_FA8;
510        int32_t field_FAC;
511        int32_t field_FB0;
512        int32_t PursuitStrongLow;
513        int32_t PursuitWeakLow;
514        int32_t PursuitStrongHigh;
515        int32_t PursuitWeakHigh;
516        int32_t Pursuit5;
517        int32_t field_FC8[16];
518        int32_t AlarmGroups; //a bitset
519        int32_t field_FDC[16]; //FDC-F68
520        int32_t field_F68;
521        int32_t DazeTimer;
522        int32_t field_1024[16]; //1024-1064
523        int32_t MeleePtr; //probably MELE. Looks somewhat important.
524        int32_t field_106C[270]; //106C-14A4 skipping lots of junk and a little pathfinding stuff that we might want later.
525        int32_t MovementModifiers; //hopefully sprinting, pistol, rifle, etc.
526        int32_t field_14B4[101]; //14B4-1648 Glossing over a few other things we don't need having to do with AI direction.
527        int32_t BossShieldPower;        //a multiplier? or just a flag? who knows
528        int32_t field_1668[6];
529        int32_t CurrentConsoleActionMarker; //not sure.
530        int32_t field_1684[7]; // done. hopefully i didnt screw this up somewhere.
531} Character;
532
533enum {
534        team_konoko,
535        team_tctf,
536        team_syndicate,
537        team_neutral,
538        team_securityguard,
539        team_rougekonoko,
540        team_switzerland,
541        team_syndicateaccessory,
542};
543
544
545int     chr_isplayer                    =               0x00000001;     //is player character
546int     chr_randomskin                  =               0x00000002;     //gets random skin from ONCV
547int     chr_notprespawned               =               0x00000004;     //isn't spawned at level creation
548int     chr_noncombatant                =               0x00000008;     //doesn't fight
549int     chr_multispawnable              =               0x00000010;     //can spawn up to 5 without forcing
550int     chr_unknown                             =               0x00000020;     //
551int     chr_unkillable                  =               0x00000040;     //can only be brought to 1 hp
552int     chr_superammo                   =               0x00000080;     //infinite ammo
553int     chr_omniscient                  =               0x00000100;     //touchofdeath
554int     chr_haslsi                              =               0x00000200;     //drops an lsi
555int     chr_boss                                =               0x00000400;     //is a boss character
556int     chr_upgradedifficulty   =               0x00000800;     //upgrade the difficulty if you play on med\hard
557int     chr_noautodrop                  =               0x00001000;     //uses drop fields instead of has fields on death
558
559int16_t ONICALL ONrGameState_NewCharacter(CharacterObject* CHAR, void* AISA, void* flag, int* list_location);
560//int16_t ONICALL ONrGameState_GetPlayerCharacter();
561
562
563#endif
Note: See TracBrowser for help on using the repository browser.