// vim: set ts=4 sw=4 tw=99 noet: // // AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). // Copyright (C) The AMX Mod X Development Team. // // This software is licensed under the GNU General Public License, version 3 or higher. // Additional exceptions apply. For full license details, see LICENSE.txt or visit: // https://alliedmods.net/amxmodx-license // // Natural Selection Module // #ifndef NS_CONST_H #define NS_CONST_H // Offsets (used in NPData.cpp) #define NEED_TO_FIND 0 #define OFFSET_WIN_RESOURCES 1816 #define OFFSET_LIN_RESOURCES 1836 #define OFFSET_WIN_WEAPDMG 408 #define OFFSET_LIN_WEAPDMG 424 #define OFFSET_WIN_WEAPRANGE 404 #define OFFSET_LIN_WEAPRANGE 420 #define OFFSET_WIN_WEAPCLIP 364 #define OFFSET_LIN_WEAPCLIP 380 #define OFFSET_WIN_WEAPID 324 #define OFFSET_LIN_WEAPID 340 // Next weapon in the item linked list #define OFFSET_WIN_WEAP_NEXT 320 #define OFFSET_LIN_WEAP_NEXT 336 #define OFFSET_WIN_HIVE_TRAIT 488 #define OFFSET_LIN_HIVE_TRAIT 504 #define OFFSET_WIN_SCORE 6588 #define OFFSET_LIN_SCORE 6608 #define OFFSET_WIN_EXP 6512 #define OFFSET_LIN_EXP 6532 #define OFFSET_WIN_POINTS 6520 #define OFFSET_LIN_POINTS 6540 #define OFFSET_WIN_AMMO_LMG 1116 #define OFFSET_LIN_AMMO_LMG 1136 #define OFFSET_WIN_AMMO_PISTOL 1120 #define OFFSET_LIN_AMMO_PISTOL 1140 #define OFFSET_WIN_AMMO_SHOTGUN 1124 #define OFFSET_LIN_AMMO_SHOTGUN 1144 #define OFFSET_WIN_AMMO_HMG 1128 #define OFFSET_LIN_AMMO_HMG 1148 #define OFFSET_WIN_AMMO_GL 1132 #define OFFSET_LIN_AMMO_GL 1152 #define OFFSET_WIN_AMMO_HG 1136 #define OFFSET_LIN_AMMO_HG 1156 #define OFFSET_WIN_DEATHS 1380 #define OFFSET_LIN_DEATHS 1400 #define OFFSET_WIN_STRUCTOWNER 324 #define OFFSET_LIN_STRUCTOWNER 340 #define OFFSET_WIN_HIVEABILITY 6248 #define OFFSET_LIN_HIVEABILITY 6268 #define OFFSET_WIN_PLAYER_ITEMS 1068 #define OFFSET_LIN_PLAYER_ITEMS 1088 #define OFFSET_WIN_NEXT_WEAPON 1280 #define OFFSET_LIN_NEXT_WEAPON 1300 #define OFFSET_WIN_CURRENT_WEAPON 1092 #define OFFSET_LIN_CURRENT_WEAPON 1112 // +4 is the client known weapon if it's ever needed #define OFFSET_WIN_LAST_WEAPON 1100 #define OFFSET_LIN_LAST_WEAPON 1120 #define OFFSET_WIN_ENTVAR 4 #define OFFSET_LIN_ENTVAR 4 // first entry in the virtual class (vtable is 0) #define OFFSET_WIN_OBS_ENERGY 476 #define OFFSET_LIN_OBS_ENERGY 492 #define OFFSET_WIN_WELD_DONE 128 #define OFFSET_LIN_WELD_DONE 144 #define OFFSET_WIN_WELD_TIME 132 #define OFFSET_LIN_WELD_TIME 148 #define OFFSET_WIN_GHOST_STRUCTURE 472 #define OFFSET_LIN_GHOST_STRUCTURE 488 // The teamnumber for the specified team #define OFFSET_WIN_GAMEPLAY_TEAMA 0x54 #define OFFSET_LIN_GAMEPLAY_TEAMA 0x64 #define OFFSET_WIN_GAMEPLAY_TEAMB 0x58 #define OFFSET_LIN_GAMEPLAY_TEAMB 0x68 #define OFFSET_WIN_UPGRADES_BOUGHT 0x1980 #define OFFSET_LIN_UPGRADES_BOUGHT 0x1994 #define OFFSET_WIN_UPGRADES_ACTIVE 0x198C #define OFFSET_LIN_UPGRADES_ACTIVE 0x19A0 // TODO: Symbols / signatures instead // Not actually offsets, but easier to use MAKE_OFFSET stuff for this :o // First functions listed in the disassembler #define OFFSET_WIN_BASE "?SUB_CallUseToggle@CBaseEntity@@QAEXXZ" #define OFFSET_LIN_BASE "_init" #define OFFSET_LIN_MEMBERFUNCSTART 0x000EDBE8 // The location of _init in the binary #define OFFSET_WIN_MEMBERFUNCSTART 0x00001000 // The location of CBaseEntity::SUB_CallUseToggle // NOTE: These addresses are raw offsets, not including the // base addresses! These are the exact offsets that // the disassembler provides. // MAKE_MEMBER_OFFSET will compensate for the base address // Recycle: void AvHBaseBuildable::StartRecycle(void) #define OFFSET_WIN_MEMBER_RECYCLE MAKE_MEMBER_OFFSET(0x00053950) #define OFFSET_LIN_MEMBER_RECYCLE MAKE_MEMBER_OFFSET(0x00180800) // Weldable: void AvHWeldable::AddWeldTime(float Time) #define OFFSET_WIN_MEMBER_TRIGGER_WELDABLE MAKE_MEMBER_OFFSET(0x000A0E20) #define OFFSET_LIN_MEMBER_TRIGGER_WELDABLE MAKE_MEMBER_OFFSET(0x00232840) // Game Rules: AvHGameRules *GetGameRules(void) #define OFFSET_WIN_GETGAMERULES MAKE_MEMBER_OFFSET(0x00068000) #define OFFSET_LIN_GETGAMERULES MAKE_MEMBER_OFFSET(0x0019F930) // Offset into the gamerules pointer to the TeamA / TeamB class #define GAMERULES_TEAMA_OFFSET 0xCC #define GAMERULES_TEAMB_OFFSET 0x2A8 #define AVHTEAM_RESOURCES_OFFSET 0x94 #define GAMERULES_TEAMA_RESOURCES GAMERULES_TEAMA_OFFSET + AVHTEAM_RESOURCES_OFFSET #define GAMERULES_TEAMB_RESOURCES GAMERULES_TEAMB_OFFSET + AVHTEAM_RESOURCES_OFFSET enum { NSGame_CantTell, /**< It is too soon to tell (can't find avhgameplay entity or it doesn't have private data) */ NSGame_MarineVAlien, /**< Marine vs Aliens (standard) gameplay */ NSGame_MarineVMarine, /**< Marine vs Marine */ NSGame_AlienVAlien, /**< Alien vs Alien */ NSGame_Unknown, /**< Can find the gameplay entity, but can't determine gameplay type. */ }; enum { MASK_NONE = 0, MASK_SIGHTED = 1, MASK_DETECTED = 2, MASK_BUILDABLE = 4, MASK_BASEBUILD0 = 8, // Base build slot #0 MASK_WEAPONS1 = 8, // Marine weapons 1 MASK_CARAPACE = 8, // Alien carapace MASK_WEAPONS2 = 16, // Marines weapons 2 MASK_REGENERATION = 16, // Alien regeneration MASK_BASEBUILD1 = 16, // Base build slot #1 MASK_WEAPONS3 = 32, // Marine weapons 3 MASK_REDEMPTION = 32, // Alien redemption MASK_BASEBUILD2 = 32, // Base build slot #2 MASK_ARMOR1 = 64, // Marine armor 1 MASK_CELERITY = 64, // Alien celerity MASK_BASEBUILD3 = 64, // Base build slot #3 MASK_ARMOR2 = 128, // Marine armor 2 MASK_ADRENALINE = 128, // Alien adrenaline MASK_BASEBUILD4 = 128, // Base build slot #4 MASK_ARMOR3 = 256, // Marine armor 3 MASK_SILENCE = 256, // Alien silence MASK_BASEBUILD5 = 256, // Base build slot #5 MASK_JETPACK = 512, // Marine jetpacks MASK_CLOAKING = 512, // Alien cloaking MASK_BASEBUILD6 = 512, // Base build slot #6 MASK_FOCUS = 1024, // Alien focus MASK_MOTION = 1024, // Marine motion tracking MASK_BASEBUILD7 = 1024, // Base build slot #7 MASK_SCENTOFFEAR = 2048, // Alien scent of fear MASK_DEFENSE2 = 4096, // Defense level 2 MASK_DEFENSE3 = 8192, // Defense level 3 MASK_ELECTRICITY = 8192, // Electricy MASK_MOVEMENT2 = 16384, // Movement level 2, MASK_MOVEMENT3 = 32768, // Movement level 3 MASK_HEAVYARMOR = 32768, // Marine heavy armor MASK_SENSORY2 = 65536, // Sensory level 2 MASK_SENSORY3 = 131072, // Sensory level 3 MASK_ALIEN_MOVEMENT = 262144, // Onos is charging MASK_WALLSTICKING = 524288, // Flag for wall-sticking MASK_PRIMALSCREAM = 1048576, // Alien is in range of active primal scream MASK_UMBRA = 2097152, // In umbra MASK_DIGESTING = 4194304, // When set on a visible player, player is digesting. When set on invisible player, player is being digested MASK_RECYCLING = 8388608, // Building is recycling MASK_TOPDOWN = 16777216, // Commander view MASK_PLAYER_STUNNED = 33554432, // Player has been stunned by stomp MASK_ENSNARED = 67108864, // Webbed MASK_ALIEN_EMBRYO = 134217728, //268435456, // Gestating MASK_SELECTABLE = 268435456, //536870912, // ??? MASK_PARASITED = 536870912, //1073741824, // Parasite flag MASK_SENSORY_NEARBY = 1073741824 //2147483648 // Sensory chamber in range }; typedef enum { AVH_USER3_NONE = 0, AVH_USER3_MARINE_PLAYER, AVH_USER3_COMMANDER_PLAYER, AVH_USER3_ALIEN_PLAYER1, AVH_USER3_ALIEN_PLAYER2, AVH_USER3_ALIEN_PLAYER3, AVH_USER3_ALIEN_PLAYER4, AVH_USER3_ALIEN_PLAYER5, AVH_USER3_ALIEN_EMBRYO, AVH_USER3_SPAWN_TEAMONE, AVH_USER3_SPAWN_TEAMTWO, AVH_USER3_PARTICLE_ON, // only valid for AvHParticleEntity: entindex as int in fuser1, template index stored in fuser2 AVH_USER3_PARTICLE_OFF, // only valid for AvHParticleEntity: particle system handle in fuser1 AVH_USER3_WELD, // float progress (0 - 100) stored in fuser1 AVH_USER3_ALPHA, // fuser1 indicates how much alpha this entity toggles to in commander mode, fuser2 for players AVH_USER3_MARINEITEM, // Something a friendly marine can pick up AVH_USER3_WAYPOINT, AVH_USER3_HIVE, AVH_USER3_NOBUILD, AVH_USER3_USEABLE, AVH_USER3_AUDIO_ON, AVH_USER3_AUDIO_OFF, AVH_USER3_FUNC_RESOURCE, AVH_USER3_COMMANDER_STATION, AVH_USER3_TURRET_FACTORY, AVH_USER3_ARMORY, AVH_USER3_ADVANCED_ARMORY, AVH_USER3_ARMSLAB, AVH_USER3_PROTOTYPE_LAB, AVH_USER3_OBSERVATORY, AVH_USER3_CHEMLAB, AVH_USER3_MEDLAB, AVH_USER3_NUKEPLANT, AVH_USER3_TURRET, AVH_USER3_SIEGETURRET, AVH_USER3_RESTOWER, AVH_USER3_PLACEHOLDER, AVH_USER3_INFANTRYPORTAL, AVH_USER3_NUKE, AVH_USER3_BREAKABLE, AVH_USER3_UMBRA, AVH_USER3_PHASEGATE, AVH_USER3_DEFENSE_CHAMBER, AVH_USER3_MOVEMENT_CHAMBER, AVH_USER3_OFFENSE_CHAMBER, AVH_USER3_SENSORY_CHAMBER, AVH_USER3_ALIENRESTOWER, AVH_USER3_HEAVY, AVH_USER3_JETPACK, AVH_USER3_ADVANCED_TURRET_FACTORY, AVH_USER3_SPAWN_READYROOM, AVH_USER3_CLIENT_COMMAND, AVH_USER3_FUNC_ILLUSIONARY, AVH_USER3_MENU_BUILD, AVH_USER3_MENU_BUILD_ADVANCED, AVH_USER3_MENU_ASSIST, AVH_USER3_MENU_EQUIP, AVH_USER3_MINE, AVH_USER3_MAX } AvHUser3; enum { WEAPON_NONE = 0, WEAPON_CLAWS, WEAPON_SPIT, WEAPON_SPORES, WEAPON_SPIKE, WEAPON_BITE, WEAPON_BITE2, WEAPON_SWIPE, WEAPON_WEBSPINNER, WEAPON_METABOLIZE, WEAPON_PARASITE, WEAPON_BLINK, WEAPON_DIVINEWIND, WEAPON_KNIFE, WEAPON_PISTOL, WEAPON_LMG, WEAPON_SHOTGUN, WEAPON_HMG, WEAPON_WELDER, WEAPON_MINE, WEAPON_GRENADE_GUN, WEAPON_LEAP, WEAPON_CHARGE, WEAPON_UMBRA, WEAPON_PRIMALSCREAM, WEAPON_BILEBOMB, WEAPON_ACIDROCKET, WEAPON_HEALINGSPRAY, WEAPON_GRENADE, WEAPON_STOMP, WEAPON_DEVOUR, WEAPON_MAX }; enum { PLAYERCLASS_NONE = 0, PLAYERCLASS_ALIVE_MARINE, PLAYERCLASS_ALIVE_JETPACK, PLAYERCLASS_ALIVE_HEAVY_MARINE, PLAYERCLASS_ALIVE_LEVEL1, PLAYERCLASS_ALIVE_LEVEL2, PLAYERCLASS_ALIVE_LEVEL3, PLAYERCLASS_ALIVE_LEVEL4, PLAYERCLASS_ALIVE_LEVEL5, PLAYERCLASS_ALIVE_DIGESTING, PLAYERCLASS_ALIVE_GESTATING, PLAYERCLASS_DEAD_MARINE, PLAYERCLASS_DEAD_ALIEN, PLAYERCLASS_COMMANDER, PLAYERCLASS_REINFORCING, PLAYERCLASS_SPECTATOR, PLAYERCLASS_READY, }; enum classes { CLASS_UNKNOWN = 0, CLASS_SKULK, CLASS_GORGE, CLASS_LERK, CLASS_FADE, CLASS_ONOS, CLASS_MARINE, CLASS_JETPACK, CLASS_HEAVY, CLASS_COMMANDER, CLASS_GESTATE, CLASS_DEAD, CLASS_NOTEAM }; #endif