source: Daodan/src/Oni_Character.h @ 455

Last change on this file since 455 was 453, checked in by rossy, 14 years ago

some cheats, im a little confused about flags, see how far you can get in level 1 with ninja mode on (shinobi) :3

File size: 18.1 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        int32_t field_28;                       //probably bullet shield dropped
214        int32_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        SphereTreeNode SphereTree1;             //probably SphereTree[7]...
222        SphereTreeNode SphereTree3[4];
223        SphereTreeNode 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        int16_t IsInAir;
239        Vector3 FallingVelocity;
240        Vector3 JumpVelocity;
241        int16_t field_110;
242        int16_t field_112;
243        int32_t field_114;
244        int32_t field_118;
245        int32_t field_11C;
246        int32_t field_120;
247        int32_t field_124;
248        int32_t field_128;
249        int32_t field_12C;
250        BoundingSphere BoundingSphere_; //fix this name
251        Vector3 field_140;
252        Vector3 field_14C;
253        int32_t field_158;
254        int32_t field_15C;
255        Vector3 Location;
256        int32_t field_16C[6]; //16C-184 ???
257        int32_t AkiraNode;
258        int32_t GraphNode;
259        int32_t PelvisHeight;
260        int32_t MovementStatePtr;
261        int32_t ActiveWeapon;           //NOTE: FIGURE OUT THIS MESS OF INVENTORY...
262        int32_t field_198;              //maybe weap 3, maybe not...
263        int32_t InventoryWeapon;
264        int16_t field_1A0;      //unused?
265        int16_t AmmoUsable;                             //Ammo given for the char to use
266        int16_t HypoUsable;                             //Hypo given for the char to use
267        int16_t CellsUsable;                            //Cells given for the char to use
268        int16_t AmmoDropped;                    //Ammo the char drops
269        int16_t HypoDropped;                    //Hypo the char drops
270        int16_t CellsDropped;                   //Cells the char drops
271        int16_t field_1AE;     
272        int16_t InverseHypoRegenRate;
273        int16_t ShieldDropped;
274        int16_t CloakDropped;
275        int16_t field_1B4;
276        int16_t field_1B6;
277        int16_t ShieldUsable;
278        int16_t CloakUsable;
279        int16_t field_1BC[9]; //1BC-1E0
280        int32_t NotIdleStartTime;
281        int32_t TimeToIdle;
282        int32_t field_1E8[1315]; //1E8-1648 what the hell is all this?
283        BoundingBox BoundingBox_; //fix this name
284        int32_t field_1660;
285        int32_t field_1664;
286        int32_t ShieldPower; //Same as Boss Shield Power???
287        int32_t field_166C;
288        int32_t NumberOfKills; //^_^
289        int32_t InflictedDamage; //^_^
290        int32_t field_1678[260];        //1678-1A88 more wtf
291        int32_t field_1A88; //here starts animation junk? It was 4 bools in idb O_o
292        int32_t Executor_AimingDirection; //possibly throw junk?
293        int32_t field_1A98;
294        int32_t field_1A9C;
295        int32_t Executor_ActualMovementMode;
296        int32_t field_1AA4;
297        int32_t field_1AA8;
298        int32_t field_1AAC;
299        int32_t Executor_HasFacingOverride; //a bool...
300        float   Executor_AimingSpeed; 
301        bool    field_1AB8; //actually a bitset...
302        bool    Executor_HasMoveOverride;
303        int16_t field_1ABA;
304        int32_t field_1ABC;
305        int32_t field_1AC0;
306        int32_t field_1AC4;
307        int32_t Executor_FacingOverride;
308        int32_t Executor_HasAttackOverride; //another bool :P
309        int32_t field_1AD0;
310        int32_t field_1AD4;
311        int32_t field_1AD8;
312        int32_t field_1ADC;
313        int32_t field_1AE0;
314        int32_t field_1AE4;
315        int32_t Executor_HasThrowOverride; //another another bool
316        int32_t field_1AEC;
317        int32_t field_1AF0;
318        int32_t field_1AF4;
319        int32_t Animation;
320        int16_t AnimationToState;
321        int16_t AnimationFromState;
322        int16_t AnimationType;
323        int16_t NextAnimationType;
324        int16_t field_1B04;
325        int16_t field_1B06;
326        int32_t Stitch; //bool
327        float StitchHeight;
328        int16_t InterpolationFromState;
329        int16_t field_1B12;
330        Vector3 StitchVelocity;
331        int16_t InterpolationCurrentFrame;
332        int16_t InterpolationLength;
333        Quaternion InterpolationStartRotations[19];
334        int32_t field_1C54;
335        int32_t field_1C58;
336        int32_t field_1C5C;
337        int32_t field_1C60;
338        int32_t Overlay;
339        int32_t field_1C68;
340        int32_t field_1C6C;
341        int32_t field_1C70;
342        int32_t field_1C74;
343        int32_t field_1C78;
344        int32_t field_1C7C;
345        int32_t field_1C80;
346        int32_t field_1C84;
347        int16_t Frame;
348        int16_t SoftPause;
349        int16_t HardPause;
350        int16_t field1C8E;
351        int32_t field1C90;
352        int16_t field1C94;
353        int16_t field1C96;
354        int16_t Dizzy;
355        int16_t field1C9A;
356        int32_t field1C9C;
357        int16_t AnimationVarient;
358        int16_t TimeToPeace;
359        int16_t NumAnimationAttachedParticles;
360        int16_t field_1CA6; //spacing
361        AttachedParticle AnimationAttachedParticles[16];
362        int32_t TRAMParticles;
363        bool FixedParticlesAttached;
364        bool FixedParticlesStarted;
365        int16_t NumFixedParticles;
366        AttachedParticle FixedParticles[16];
367        int16_t CurrentAnimationType;
368        int16_t field_1EB2; //spacing
369        int32_t field_1EB4;
370        int32_t field_1EB8;
371        int32_t field_1EBC;
372        int32_t field_1EC0;
373        int32_t field_1EC4;
374        int32_t field_1EC8;
375        int32_t field_1ED0;
376        int32_t field_1ED4;
377        int32_t field_1ED8;
378        int32_t field_1EE0;
379        int32_t field_1EE4;
380        int32_t field_1EE8;
381        Quaternion Rotations[19];
382        Quaternion OverlayRotations[19];
383        int32_t field_2150;
384        int32_t field_2154;
385        GameInput Input;
386        InputAction PreviousActions;
387        int32_t SprintTimer;
388        int32_t field_2194;
389        Vector3 field_2198;
390        int32_t field_21A4;
391        int32_t field_21A8;
392        int32_t field_21AC;
393        Vector3 field_21B0;
394        float HeadFacing;
395        float HeadPitch;
396        int32_t field_21C4;
397        int32_t field_21C8;
398        int32_t field_21D0;
399        int32_t field_21D4;
400        bool field_21D8;
401        bool field_21D9;
402        bool field_21DA;
403        bool field_21DB;
404        bool field_21DC;
405        bool field_21DD;
406        bool field_21DE;
407        bool field_21DF;
408        bool field_21E0;
409        bool HasAlternateTrigger;
410        bool field_21E2;
411        bool ReleaseTrigger;
412        bool ReleaseAlternateTrigger;
413        bool TurningLeft;
414        bool TurningRight;
415        bool field_21E7;
416        int32_t field_21E8;
417        int32_t field_21EC;
418        int32_t field_21F0;
419        PlayingFilm PlayingFilm_; //fix this name
420        int32_t field_2218[24]; //2218-2278
421        Matrix4x3 BoneMatrices[19];
422        Matrix4x3 WeaponMatrix;
423        int32_t field_2638[113]; //2638-27FC
424        int16_t ShadowIndex;
425        int16_t field_27FE;
426        int16_t field_2780;
427        bool ShieldParts[19]; 
428        bool field_2815; //padding...
429        bool field_2816;
430        bool field_2817;
431        int32_t field_2818[8];
432} ActiveCharacter;
433
434//This struct is good.
435typedef struct { //Character
436        char Number;
437        char field_2;
438        int16_t ActiveCharacterIndex;
439        int32_t Flags;
440        int32_t field_8;
441        int32_t ONCC;                   //change type to ONCC when we get that far...
442        int16_t field_10;
443        int16_t Team;
444        char Name[32];
445        float BodySize;
446        int32_t Health;
447        int32_t MaxHealth;
448        int32_t ASIA_ID; //might be 16 with 2 byte padding
449        int32_t field_44;
450        char ScriptSpawn[32];                   //Script function called when char spawns
451        char ScriptDie[32];                             //Script function called when char dies
452        char ScriptAware[32];                   //Script function called when char detects something
453        char ScriptAlarm[32];                   //Script function called when char is alarmed at something
454        char ScriptHurt[32];                    //Script function called when char is hurt for the first time
455        char ScriptDefeat[32];                  //Script function called when char is at 1 HP
456        char ScriptNoAmmo[32];                  //Script function called when char is out of ammo for the first time. Char must have ammo at spawn.
457        char ScriptNoPath[32];                  //Script function called when char loses path. Broken.
458        Vector3 Position;
459        Vector3 LastPosition;
460        Vector3 Location;
461        float Facing;
462        float DesiredFacing;
463        float CosmeticFacing;
464        float field_178;
465        float field_17C;
466        float field_180;
467        int32_t BNV;
468        int32_t GraphNode;
469        float PelvisHeight;
470        float field_190;
471        Inventory Inventory_; //is there a better way to do this?
472        Vector3 Velocity;
473        int32_t field_1D0;
474        int32_t Recoil;
475        int32_t field_1D8;
476        int32_t field_1DC;
477        int32_t LastNotIdleGameTime;
478        int32_t IdleDelay;
479        int32_t Type;
480        int32_t field_1EC;
481        int32_t CombatFlags;
482        int32_t JobId;
483        int32_t Goal;
484        int32_t field_1FC;
485        int32_t field_200;
486        int32_t field_204;
487        int32_t field_208[428]; //208-8B8   
488        int32_t CombatState;    //I think....
489        int32_t field_8BC; 
490        int32_t PatrolPathOSD[10];      //actually another struct. Not needed atm.
491        int32_t PatrolPathPoints[5][64]; //64 of another struct
492        int32_t field_DE8[98];  //DE8-F70
493        int32_t CombatStatePtr;
494        int32_t KnowledgeState[4]; //Another struct
495        int32_t field_F84;
496        int32_t AlertDecayTimer;
497        int32_t field_F8C;
498        int32_t field_F90;
499        int32_t InitialAlertLevel;              //0 - lull, 1 - low, 2 - medium, 3 - high, 4 - combat
500        int32_t MinimalAlertLevel;              //0 - lull, 1 - low, 2 - medium, 3 - high, 4 - combat
501        int32_t StartJobAlertLevel;             //0 - lull, 1 - low, 2 - medium, 3 - high, 4 - combat
502        int32_t InvestigatingAlertLevel;//0 - lull, 1 - low, 2 - medium, 3 - high, 4 - combat
503        int32_t StartleTime;
504        int32_t field_FA8;
505        int32_t field_FAC;
506        int32_t field_FB0;
507        int32_t PursuitStrongLow;
508        int32_t PursuitWeakLow;
509        int32_t PursuitStrongHigh;
510        int32_t PursuitWeakHigh;
511        int32_t Pursuit5;
512        int32_t field_FC8[4];
513        int32_t AlarmGroups; //a bitset
514        int32_t field_FDC[17]; //FDC-1020
515        int32_t DazeTimer;
516        int32_t field_1024[17]; //1024-1068
517        int32_t MeleePtr; //probably MELE. Looks somewhat important.
518        int32_t field_106C[270]; //106C-14A4 skipping lots of junk and a little pathfinding stuff that we might want later.
519        int32_t MovementMode;
520        int32_t field_14A8;
521        int32_t field_14AC;
522        int32_t MovementModifiers; //hopefully sprinting, pistol, rifle, etc.
523        int32_t field_14B4[101]; //14B4-1648 Glossing over a few other things we don't need having to do with AI direction.
524        BoundingBox BoundingBox_;
525        int32_t field_1660;
526        int32_t BossShieldPower;        //a multiplier? or just a flag? who knows
527        int32_t field_1668[6];
528        int32_t CurrentConsoleActionMarker; //not sure.
529        int32_t field_1684[7];
530} Character;
531
532enum {
533        team_konoko,
534        team_tctf,
535        team_syndicate,
536        team_neutral,
537        team_securityguard,
538        team_rougekonoko,
539        team_switzerland,
540        team_syndicateaccessory,
541};
542
543typedef enum {
544        chr_isplayer          = 1 << 0,
545        chr_randomskin        = 1 << 1,
546        chr_notprespawned     = 1 << 2,
547        chr_noncombatant      = 1 << 3,
548        chr_multispawnable    = 1 << 4,
549        chr_unkillable        = 1 << 5,
550        chr_superammo         = 1 << 6,
551        chr_omniscient        = 1 << 8,
552        chr_haslsi            = 1 << 9,
553        chr_boss              = 1 << 10,
554        chr_upgradedifficulty = 1 << 11,
555        chr_noautodrop        = 1 << 12,
556        chr_dontaim           = 1 << 13,
557        chr_nocollision       = 1 << 17,
558        chr_noshadow          = 1 << 24,
559        chr_invincible        = 1 << 25,
560        chr_bossshield        = 1 << 30,
561        chr_weaponimmune      = 1 << 31,
562} chr_flags;
563/*
564enum {
565chr_isplayer                    =               0x00000001,     //is player character
566chr_randomskin                  =               0x00000002,     //gets random skin from ONCV
567chr_notprespawned               =               0x00000004,     //isn't spawned at level creation
568chr_noncombatant                =               0x00000008,     //doesn't fight
569chr_multispawnable              =               0x00000010,     //can spawn up to 5 without forcing
570chr_unknown                             =               0x00000020,     //
571chr_unkillable                  =               0x00000040,     //can only be brought to 1 hp
572chr_superammo                   =               0x00000080,     //infinite ammo
573chr_omniscient                  =               0x00000100,     //touchofdeath
574chr_haslsi                              =               0x00000200,     //drops an lsi
575chr_boss                                =               0x00000400,     //is a boss character
576chr_upgradedifficulty   =               0x00000800,     //upgrade the difficulty if you play on med\hard
577chr_noautodrop                  =               0x00001000,     //uses drop fields instead of has fields on death
578}; //
579*/
580int16_t ONICALL ONrGameState_NewCharacter(CharacterObject* CHAR, void* AISA, void* flag, int* list_location);
581int32_t* ONICALL ONrGetActiveCharacter(void* CharacterPtr);
582//int16_t ONICALL ONrGameState_GetPlayerCharacter();
583
584
585#endif
Note: See TracBrowser for help on using the repository browser.