| 1 |
#pragma once |
| 2 |
#ifndef ONI_CHARACTER_H |
| 3 |
#define ONI_CHARACTER_H |
| 4 |
|
| 5 |
#include "Daodan.h" |
| 6 |
#include <stdint.h> |
| 7 |
|
| 8 |
typedef struct { |
| 9 |
float X; |
| 10 |
float Y; |
| 11 |
float Z; |
| 12 |
} Vector3; //probably move to utilities... |
| 13 |
|
| 14 |
typedef struct { |
| 15 |
int Type; //'CHAR' etc. |
| 16 |
int ObjectId; //not needed |
| 17 |
int Flags; //The flags of the object...not used for CHAR |
| 18 |
Vector3 Position; //Position of Object |
| 19 |
Vector3 Rotation; //Rotation of Object |
| 20 |
int EditorCallbacks; //Lets try not to mess with it for now. :P |
| 21 |
int field_28; //unknown |
| 22 |
} OSD_Header; |
| 23 |
|
| 24 |
typedef struct { |
| 25 |
uint32_t Options; //A bitset. Someone had better define these |
| 26 |
char Class[64]; //Name of the ONCC we use. ONCCName in idb |
| 27 |
char Name[32]; //Name of the character. ie: ai2_spawn Muro |
| 28 |
char Weapon[64]; //Name of the weapon he holds. ONWCName in idb |
| 29 |
char ScriptSpawn[32]; //Script function called when char spawns |
| 30 |
char ScriptDie[32]; //Script function called when char dies |
| 31 |
char ScriptAware[32]; //Script function called when char detects something |
| 32 |
char ScriptAlarm[32]; //Script function called when char is alarmed at something |
| 33 |
char ScriptHurt[32]; //Script function called when char is hurt for the first time |
| 34 |
char ScriptDefeat[32]; //Script function called when char is at 1 HP |
| 35 |
char ScriptNoPath[32]; //Script function called when char loses path. Broken. |
| 36 |
char ScriptNoAmmo[32]; //Script function called when char is out of ammo for the first time. Char must have ammo at spawn. |
| 37 |
int32_t AdditionalHealth; //Additional Health given to the character |
| 38 |
int16_t AmmoUsed; //Ammo given for the char to use |
| 39 |
int16_t AmmoDropped; //Ammo the char drops |
| 40 |
int16_t CellsUsed; //Cells given for the char to use |
| 41 |
int16_t CellsDropped; //Cells the char drops |
| 42 |
int16_t HypoUsed; //Hypo given for the char to use |
| 43 |
int16_t HypoDropped; //Hypo the char drops |
| 44 |
int16_t ShieldUsed; //Bullet shield given for the char to use |
| 45 |
int16_t ShieldDropped; //Bullet shield the char drops |
| 46 |
int16_t CloakUsed; //Phase Cloak given for the char to use |
| 47 |
int16_t CloakDropped; //Phase Cloak the char drops |
| 48 |
int16_t NCIUsed; //Don't use this... |
| 49 |
int16_t NCIDropped; //Don't use this... |
| 50 |
int32_t TeamID; //Team ID |
| 51 |
int32_t AmmoPercent; //Percent of weapon ammo full |
| 52 |
int32_t JobID; //Job ID... |
| 53 |
//0 - none |
| 54 |
//1 - idle |
| 55 |
//2 - guard (never used in Oni) |
| 56 |
//3 - patrol |
| 57 |
//4 - teambattle (never used in Oni) |
| 58 |
int16_t PatrolID; //patrol path ID (reference to the Patrol_Path.BINA file) |
| 59 |
int16_t CombatID; //combat ID (reference to the Combat.BINA file) |
| 60 |
int16_t MeleeID; //melee ID (reference to the Melee Profile.BINA file) |
| 61 |
int16_t NeutralID; //neutral ID (reference to the Neutral.BINA file) |
| 62 |
int32_t AlarmGroups; //Bitset. http://wiki.oni2.net/CHAR |
| 63 |
int32_t InitialAlertLevel; //0 - lull, 1 - low, 2 - medium, 3 - high, 4 - combat |
| 64 |
int32_t MinimalAlertLevel; //0 - lull, 1 - low, 2 - medium, 3 - high, 4 - combat |
| 65 |
int32_t StartJobAlertLevel; //0 - lull, 1 - low, 2 - medium, 3 - high, 4 - combat |
| 66 |
int32_t InvestigatingAlertLevel;//0 - lull, 1 - low, 2 - medium, 3 - high, 4 - combat |
| 67 |
int32_t PursuitStrongLow; |
| 68 |
int32_t PursuitWeakLow; |
| 69 |
int32_t PursuitStrongHigh; |
| 70 |
int32_t PursuitWeakHigh; |
| 71 |
int32_t Pursuit5; |
| 72 |
int32_t field_1FC; |
| 73 |
} CharacterOSD; |
| 74 |
|
| 75 |
typedef struct { |
| 76 |
OSD_Header Header; |
| 77 |
CharacterOSD OSD; |
| 78 |
} CharacterObject; |
| 79 |
|
| 80 |
enum { |
| 81 |
team_konoko, |
| 82 |
team_tctf, |
| 83 |
team_syndicate, |
| 84 |
team_neutral, |
| 85 |
team_securityguard, |
| 86 |
team_rougekonoko, |
| 87 |
team_switzerland, |
| 88 |
team_syndicateaccessory, |
| 89 |
}; |
| 90 |
|
| 91 |
|
| 92 |
int chr_isplayer = 0x00000001; //is player character |
| 93 |
int chr_randomskin = 0x00000002; //gets random skin from ONCV |
| 94 |
int chr_notprespawned = 0x00000004; //isn't spawned at level creation |
| 95 |
int chr_noncombatant = 0x00000008; //doesn't fight |
| 96 |
int chr_multispawnable = 0x00000010; //can spawn up to 5 without forcing |
| 97 |
int chr_unknown = 0x00000020; // |
| 98 |
int chr_unkillable = 0x00000040; //can only be brought to 1 hp |
| 99 |
int chr_superammo = 0x00000080; //infinite ammo |
| 100 |
int chr_omniscient = 0x00000100; //touchofdeath |
| 101 |
int chr_haslsi = 0x00000200; //drops an lsi |
| 102 |
int chr_boss = 0x00000400; //is a boss character |
| 103 |
int chr_upgradedifficulty = 0x00000800; //upgrade the difficulty if you play on med\hard |
| 104 |
int chr_noautodrop = 0x00001000; //uses drop fields instead of has fields on death |
| 105 |
|
| 106 |
int16_t ONICALL ONrGameState_NewCharacter(CharacterObject* CHAR, void* AISA, void* flag, int* list_location); |
| 107 |
|
| 108 |
#endif |