source: Daodan/src/Oni_Character.h@ 445

Last change on this file since 445 was 441, checked in by gumby, 15 years ago
File size: 17.3 KB
RevLine 
[427]1#pragma once
[428]2#ifndef ONI_CHARACTER_H
3#define ONI_CHARACTER_H
[427]4
5#include "Daodan.h"
6#include <stdint.h>
[437]7#include <stdbool.h>
[427]8
9typedef struct {
10 float X;
11 float Y;
12 float Z;
13} Vector3; //probably move to utilities...
14
15typedef struct {
[435]16 float X;
17 float Y;
18 float Z;
19 float W;
20} Quaternion;
21
22typedef struct {
23 float RotationScale[9];
24 Vector3 Translation;
[437]25} Matrix4x3;
[435]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,
[437]86 Action2_Fire3 = 0x100,
[435]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 {
[432]108 int Type; //'CHAR' etc.
[427]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 {
[435]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 {
[428]130 uint32_t Options; //A bitset. Someone had better define these
[427]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;
[428]184
[435]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;
[437]196
[435]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
[437]217typedef struct { //ActiveCharacter
[435]218 int16_t Number;
219 int16_t field_2; //probably Number is an int32
220 int32_t PhyContext;
[438]221 SphereTreeNode SphereTree1; //probably SphereTree[7]...
222 SphereTreeNode SphereTree3[4];
223 SphereTreeNode SphereTree2[2];
[435]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
435typedef struct { //Character
436 int16_t Number;
437 int16_t ActiveCharacterIndex;
438 int32_t Flags;
439 int16_t field_8;
440 int32_t ONCC; //change type to ONCC when we get that far...
441 int32_t field_10;
442 int16_t Team;
443 char Name[32];
444 float BodySize;
445 int32_t Health;
446 int32_t MaxHealth;
447 int32_t ASIA_ID; //might be 16 with 2 byte padding
448 int32_t field_44;
449 char ScriptSpawn[32]; //Script function called when char spawns
450 char ScriptDie[32]; //Script function called when char dies
451 char ScriptAware[32]; //Script function called when char detects something
452 char ScriptAlarm[32]; //Script function called when char is alarmed at something
453 char ScriptHurt[32]; //Script function called when char is hurt for the first time
454 char ScriptDefeat[32]; //Script function called when char is at 1 HP
455 char ScriptNoAmmo[32]; //Script function called when char is out of ammo for the first time. Char must have ammo at spawn.
456 char ScriptNoPath[32]; //Script function called when char loses path. Broken.
457 Vector3 Position;
458 Vector3 LastPosition;
459 Vector3 Location;
460 float Facing;
461 float DesiredFacing;
462 float CosmeticFacing;
463 float field_178;
464 float field_17C;
465 float field_180;
466 int32_t BNV;
467 int32_t GraphNode;
468 float PelvisHeight;
469 float field_190;
470 Inventory Inventory_; //is there a better way to do this?
471 Vector3 Velocity;
472 int32_t field_1D0;
473 int32_t field_1D4;
474 int32_t field_1D8;
475 int32_t field_1DC;
476 int32_t field_1E0;
477 int32_t IdleDelay;
478 int32_t field_1E8;
[438]479 int32_t field_1EzC;
[435]480 int32_t CombatFlags;
481 int32_t JobId;
482 int32_t Goal;
483 int32_t field_1FC;
484 int32_t field_200;
485 int32_t field_204;
486 int32_t field_208[107]; //its all undocumented through here
487 int32_t CombatState; //I think....
488 int32_t field_8BB;
489 int32_t PatrolPathOSD[10]; //actually another struct. Not needed atm.
[437]490 int32_t PatrolPathPoints[5][64]; //64 of another struct
[435]491 int32_t field_DE8[98]; //DE8-F70
492 int32_t CombatStatePtr;
493 int32_t KnowledgeState[4]; //Another struct
494 int32_t field_F84;
495 int32_t AlertDecayTimer;
496 int32_t field_F8C;
497 int32_t field_F90;
498 int32_t InitialAlertLevel; //0 - lull, 1 - low, 2 - medium, 3 - high, 4 - combat
499 int32_t MinimalAlertLevel; //0 - lull, 1 - low, 2 - medium, 3 - high, 4 - combat
500 int32_t StartJobAlertLevel; //0 - lull, 1 - low, 2 - medium, 3 - high, 4 - combat
501 int32_t InvestigatingAlertLevel;//0 - lull, 1 - low, 2 - medium, 3 - high, 4 - combat
502 int32_t StartleTime;
503 int32_t field_FA8;
504 int32_t field_FAC;
505 int32_t field_FB0;
506 int32_t PursuitStrongLow;
507 int32_t PursuitWeakLow;
508 int32_t PursuitStrongHigh;
509 int32_t PursuitWeakHigh;
510 int32_t Pursuit5;
511 int32_t field_FC8[16];
512 int32_t AlarmGroups; //a bitset
513 int32_t field_FDC[16]; //FDC-F68
514 int32_t field_F68;
515 int32_t DazeTimer;
516 int32_t field_1024[16]; //1024-1064
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 MovementModifiers; //hopefully sprinting, pistol, rifle, etc.
520 int32_t field_14B4[101]; //14B4-1648 Glossing over a few other things we don't need having to do with AI direction.
521 int32_t BossShieldPower; //a multiplier? or just a flag? who knows
522 int32_t field_1668[6];
523 int32_t CurrentConsoleActionMarker; //not sure.
524 int32_t field_1684[7]; // done. hopefully i didnt screw this up somewhere.
525} Character;
526
[428]527enum {
528 team_konoko,
529 team_tctf,
530 team_syndicate,
531 team_neutral,
532 team_securityguard,
533 team_rougekonoko,
534 team_switzerland,
535 team_syndicateaccessory,
536};
537
[441]538enum {
539chr_isplayer = 0x00000001, //is player character
540chr_randomskin = 0x00000002, //gets random skin from ONCV
541chr_notprespawned = 0x00000004, //isn't spawned at level creation
542chr_noncombatant = 0x00000008, //doesn't fight
543chr_multispawnable = 0x00000010, //can spawn up to 5 without forcing
544chr_unknown = 0x00000020, //
545chr_unkillable = 0x00000040, //can only be brought to 1 hp
546chr_superammo = 0x00000080, //infinite ammo
547chr_omniscient = 0x00000100, //touchofdeath
548chr_haslsi = 0x00000200, //drops an lsi
549chr_boss = 0x00000400, //is a boss character
550chr_upgradedifficulty = 0x00000800, //upgrade the difficulty if you play on med\hard
551chr_noautodrop = 0x00001000, //uses drop fields instead of has fields on death
552}; //
[432]553int16_t ONICALL ONrGameState_NewCharacter(CharacterObject* CHAR, void* AISA, void* flag, int* list_location);
[435]554//int16_t ONICALL ONrGameState_GetPlayerCharacter();
[428]555
[435]556
[428]557#endif
Note: See TracBrowser for help on using the repository browser.