Descent3/scripts/osiris_common.h
2024-04-16 14:46:12 -06:00

1333 lines
42 KiB
C

/*
* $Logfile: /DescentIII/data/scripts/osiris_common.h $
* $Revision: 1.2 $
* $Date: 2004/02/09 04:14:52 $
* $Author: kevinb $
*
* Contains code that is common along all modules. Mostly defines, flags, etc.
*
* $Log: osiris_common.h,v $
* Revision 1.2 2004/02/09 04:14:52 kevinb
* Added newlines to all headers to reduce number of warnings printed
*
* Made some small changes to get everything compiling.
*
* All Ready to merge the 1.5 tree.
*
* Revision 1.1 2000/05/29 05:48:29 icculus
* initial import.
*
* Revision 1.1 2000/04/18 01:45:56 icculus
* Needed for compilation.
*
*
* 146 11/03/99 10:20a Chris
* Added the ability to find out if a room is volatile
*
* 145 11/02/99 12:16p Chris
* More Merc code - added support for ignore_obj_lists for the Osiris
* RayCast function
*
* 144 10/27/99 4:18p 3dsmax
* added cloak flag for Obj_Value
*
* 143 10/23/99 6:16p Nate
* Added define for Polish Language
*
* 142 10/16/99 8:44p Jeff
* created defines to remove player weapons and all powerups from a room
*
* 141 10/12/99 4:50p Jeff
*
* 140 9/10/99 11:03a Samir
* added command to get object's name from Obj_Value.
*
* 139 6/23/99 12:49p Samir
* fixed for Linux builds
*
* 138 5/21/99 7:29a Chris
* More tweaking...
*
* 137 5/19/99 11:25a Matt
* Added multisafe functions & Dallas actions for showing a timer on the
* screen and adding custom HUD messages.
*
* 136 5/17/99 6:22p Jeff
* added filtered HUD messages
*
* 135 5/10/99 9:36p Ardussi
* changes to compile on Mac
*
* 134 5/10/99 12:23a Chris
* Fixed another hearing/seeing case. :) Buddy bot now is in the player
* ship at respawn
*
* 133 5/06/99 6:38a Chris
*
* 132 5/06/99 4:11a Jeff
* created multisafe function to destroy robots in the level (helps boss
* fights)
*
* 131 5/04/99 6:53p Jeff
* added event for when a player dies
*
* 130 5/04/99 12:13p Matt
* Renamed fire-flare symbol to fire-weapon.
*
* 129 4/30/99 4:32p Matt
* Added a Dallas action to fire a flare from an object.
*
* 128 4/29/99 3:25p Chris
* Added support to find out if an object has wbs
*
* 127 4/29/99 1:59a Chris
* Added the portal blockage support
*
* 126 4/27/99 4:27p Jeff
* added player respawn osiris event
*
* 125 4/27/99 4:40a Jeff
* added msafe member to set/get guidebot name
*
* 124 4/26/99 4:27a Jeff
* added multisafe functions to check a player's weapons, and add/remove
* weapons from a player
*
* 123 4/24/99 6:44p Jeff
* added functions for theif so he can steal things other than weapons
*
* 122 4/24/99 12:09a Jeff
* added path value functions
*
* 121 4/22/99 4:58p Kevin
* fixed bad merge
*
* 120 4/22/99 4:44p Jason
* fixed level goal stuff for multiplayer
*
* 118 4/20/99 7:28p Jeff
* added guidebot name
*
* 117 4/20/99 12:00a Jeff
* Linux compile
*
* 116 4/06/99 11:44p Matt
* Added action to create a lighting bolt between two gunpoints on the
* same object, and queries to return an object's original shields and to
* multiply a percent times a float.
*
* 115 4/06/99 8:44p Matt
* Added a couple actions for Mark's energy/shield collector
*
* 114 4/04/99 8:21p Matt
* Fixed include problems with osiris vector stuff. Osiris headers now
* include vecmat_external.h, instead of defining the typedefs, structs,
* and inlines on the Osiris side.
*
* 113 4/04/99 6:20p Matt
* Added distance-based shake Dallas action.
*
* 112 4/04/99 4:55p Jeff
* gamecinematics_external.h was missing for some reason
*
* 111 4/03/99 1:13a Jeff
* added multisafe/dallas actions to set an object on fire
*
* 110 4/02/99 10:12p Jeff
* made ship permissions multi safe
*
* 109 4/02/99 10:18a Chris
* We can now mess with the Object_info anim stuff
*
* 108 3/31/99 11:11a Luke
* fixed another bad merge (Jeff)
*
* 107 3/30/99 8:15p Jeff
* bad merge
*
* 106 3/30/99 7:25p Chris
* Make the weath_lightning stuff more flexable
*
* 104 3/30/99 4:32p Chris
* Moved subtype to the main goal sturct (from goal_info). Made move
* relative object vec finishable. (Like get behind player)
*
* 103 3/28/99 5:56p Matt
* Added Dallas action to turn on object sparking
*
* 102 3/27/99 12:29p Chris
* Fixed problems with assigned lower priority goals that used paths (it
* would confuse the bot because the .path field was getting updated for
* the new goal even though it was lower priority)
*
* 101 3/26/99 12:38p Jeff
* added cloak predefs
*
* 100 3/22/99 6:35p Matt
* Added Dallas action to create a lightning bolt between two objects.
* Jason will implement this.
*
* 99 3/22/99 1:59p Matt
* Added break glass Dallas action
*
* 98 3/22/99 10:56a Chris
* Awareness code was tweaked. Multisafe stuff added for objects.
*
* 97 3/17/99 3:55p Nate
* Added language defines
*
* 96 3/16/99 11:26a Chris
* Buddy is now smarter -- gets to trigger level goals
*
* 95 3/10/99 1:33p Chris
* Fixes for multi-line gb messages
*
* 94 3/04/99 6:13p Matt
* Added message2 buffer to msafe_struct, and made the message longer.
*
* 93 3/03/99 3:34p Chris
*
* 92 3/03/99 3:02p Matt
* Added Game Message action in Dallas
*
* 91 3/03/99 3:01a Chris
* Exported the difficulty stuff to OSIRIS
*
* 90 2/28/99 11:30p Chris
* FindObjOfType and OSIRIS controllable deaths
*
* 89 2/25/99 8:54p Jeff
* Inventory supports level change persistant items. Inventory supports
* time-out objects. Inventory Reset changed (takes a level of reset
* now). Quad lasers stay across level change (single player). Guidebot
* bug fixed (now back in ship on level start). Quads time out when
* spewed. Invulnerability and cloak powerups no longer use game
* event/callbacks, so they can be saved in game saves (moved to
* MakePlayerInvulnerable and MakeObjectInvisible)
*
* 88 2/25/99 5:43p Chris
* Massive improvement to BOA and AI (again)
*
* 87 2/22/99 5:59p Chris
* Level Goals are now in OSIRIS. :)
*
* 86 2/22/99 1:20a Jeff
* added support for inventory (simple) in dallas. Moved end-level
* sequence to use IGC. Add position clipboard stuff for dallas. Fixed
* some inventory bug with storing object handles
*
* 85 2/21/99 7:16p Chris
* Added the EVT_LEVEL_GOAL_ITEM_COMPLETE event
*
* 84 2/21/99 5:51p Chris
* FIxed a bug with OBJV_C_TYPE (It should have been OBJV_I_TYPE). Added
* Obj_FindType()
*
* 83 2/21/99 5:49p Matt
* Added Dallas action to set an object's volume
*
* 82 2/20/99 4:28p Chris
* SOme updates to the system, not done
*
* 81 2/19/99 5:16p Chris
* Added the child died event
*
* 80 2/17/99 3:25a Jeff
* added checksum member to init struct
*
* 79 2/15/99 11:09a Matt
* Added function to count the number of a certain type of object in the
* level. (Also added HUD actions to print an int and float.)
*
* 78 2/11/99 2:54a Jeff
* improvements to introcam
*
* 77 2/09/99 12:43p Matt
* Added function to check for players in a room
*
* 76 2/08/99 2:53p Jeff
* added matcen event data
*
* 75 2/08/99 2:47p Jeff
* new events
*
* 74 2/08/99 3:10a Jeff
* added a multisafe type for player control type setting. Improved intro
* cinematic action function, player now follows path.
*
* 73 2/06/99 10:03p Matt
* Added keys system
*
* 72 2/06/99 1:52a Matt
* Added a bunch of Dallas funcs, mostly for Sean
*
* 71 2/05/99 9:06p Jeff
* added aux events for a couple new ainotify's
*
* 70 2/03/99 5:48p Matt
* Added room damage system
*
* 69 1/31/99 11:05p Matt
* Added music region set
*
* 68 1/31/99 8:53p Jeff
* new in game cinematics system finished
*
* 67 1/30/99 3:19p Matt
* Made Dallas spews work from object centers in addition to gunpoints
*
* 66 1/29/99 12:47p Matt
* Rewrote the doorway system
*
* 65 1/27/99 11:41p Jeff
* added dll identifier
*
* 64 1/26/99 5:16p Matt
* Added STOP_SOUND_OBJ
*
* 63 1/25/99 7:06p Matt
* Ripped out doorway index stuff, since doors are referred to by their
* door objects.
*
* 62 1/25/99 8:13a Chris
* Made the AUX goal remap more obvious...
*
* 61 1/24/99 8:17p Chris
* Updated AI and OSIRIS. Externalized fireball constants for spew and
* sparks. Added CreateRandomSparks to OSIRIS, renamed a bunch of AI
* Notify names to use underscores. Fixed a memory access leak in the
* matcen effect code.
*
* 60 1/23/99 2:56a Jeff
* added target field to boss intro struct
*
* 59 1/22/99 6:53p Chris
* Fixed LoadandBind Aux notify problems, fixed static path problems,
* fixed AIF_FORCE_AWARE Problems, improved path code
*
* 58 1/22/99 3:34p Kevin
* Increased the MSAFE_MESSAGE_LENGTH to 200 bytes
*
* 57 1/20/99 6:26p Matt
* Added several actions
*
*/
#ifndef __OSIRIS_COMMON_H_
#define __OSIRIS_COMMON_H_
#include "vecmat_external.h"
#include "aistruct_external.h"
#include "object_external.h"
#include "matcen_external.h"
#include "robotfirestruct_external.h"
#include "findintersection_external.h"
#include "weapon_external.h"
#include "damage_external.h"
#include "fireball_external.h"
#include "levelgoal_external.h"
#include "deathinfo_external.h"
#include "difficulty_external.h"
#include "gamecinematics_external.h"
#include "player_external.h"
// =======================================================================
// Event return values (OR these if needed)
// =======================================================================
#define CONTINUE_CHAIN 0x0100 // continue executing the chain of scripts
#define CONTINUE_DEFAULT 0x0001 // continue executing the 'in-code' action
// =======================================================================
// Events that OSIRIS handles
// =======================================================================
#define EVT_INTERVAL 0x100 // called every frame
#define EVT_AI_FRAME 0x101 // called every frame for AI info
#define EVT_DAMAGED 0x102 // called when object is damaged
#define EVT_COLLIDE 0x103 // called when object collides with something
#define EVT_CREATED 0x104 // called when object created
#define EVT_DESTROY 0x105 // called when object destroyed
#define EVT_TIMER 0x106 // called when a timer event is signalled
#define EVT_USE 0x107 // called when item is selected for use from inventory
#define EVT_AI_NOTIFY 0x110 // called when an AI gets notified
#define EVT_AI_INIT 0x111 // called to initialize SCRIPT AI stuff
#define EVT_LEVELSTART EVT_CREATED //
#define EVT_LEVELEND EVT_DESTROY // called when level is started and ended.
#define EVT_CHANGESEG 0x115 // called when object changes room
#define EVT_SAVESTATE 0x117 // called when the script should save it's state
#define EVT_RESTORESTATE 0x118 // called when the script should restore it's state
#define EVT_MEMRESTORE \
0x119 // called when the script should restore a pointer to the special auto-save memory it allocated
#define EVT_TIMERCANCEL 0x11A // called when a timer is cancels (either by function call or from it's object detonator)
#define EVT_AIN_OBJKILLED 0x11B // child event of EVT_AI_NOTIFY
#define EVT_AIN_SEEPLAYER 0x11C // child event of EVT_AI_NOTIFY
#define EVT_AIN_WHITOBJECT 0x11D // child event of EVT_AI_NOTIFY
#define EVT_AIN_GOALCOMPLETE 0x11E // child event of EVT_AI_NOTIFY
#define EVT_AIN_GOALFAIL 0x11F // child event of EVT_AI_NOTIFY
#define EVT_AIN_MELEE_HIT 0x120 // child event of EVT_AI_NOTIFY
#define EVT_AIN_MELEE_ATTACK_FRAME 0x121 // child event of EVT_AI_NOTIFY
#define EVT_AIN_MOVIE_START 0x122 // child event of EVT_AI_NOTIFY
#define EVT_AIN_MOVIE_END 0x123 // child event of EVT_AI_NOTIFY
#define EVT_MATCEN_CREATE 0x124 // level event that a matcen created an object
#define EVT_DOOR_ACTIVATE 0x125 // event to when a door is opening
#define EVT_DOOR_CLOSE 0x126 // event to when a door is closing
#define EVT_CHILD_DIED 0x127
#define EVT_LEVEL_GOAL_COMPLETE 0x128
#define EVT_ALL_LEVEL_GOALS_COMPLETE 0x129
#define EVT_LEVEL_GOAL_ITEM_COMPLETE 0x12A
#define EVT_PLAYER_MOVIE_START 0x12B // event when a IGC focusing on the player starts
#define EVT_PLAYER_MOVIE_END 0x12C // event when a IGC focusing on the player ends
#define EVT_PLAYER_RESPAWN 0x12D // event when a player respawns
#define EVT_PLAYER_DIES 0x12E // event when a player dies
// =======================================================================
// General defines
// =======================================================================
#define MAX_MODULEFUNCS 256 // maximum number of functions imported to OSIRIS
typedef int OMMSHANDLE;
// =======================================================================
// Language defines
// =======================================================================
#define LANGUAGE_ENGLISH 0
#define LANGUAGE_GERMAN 1
#define LANGUAGE_SPANISH 2
#define LANGUAGE_ITALIAN 3
#define LANGUAGE_FRENCH 4
#define LANGUAGE_POLISH 5
// Player Accessories indices (for Player_Value function)
#define ACCESSORY_CLOAK 0
#define ACCESSORY_INVULNERABILITY 1
#define ACCESSORY_AFTERBURNER 2
#define ACCESSORY_HEADLIGHT 3
#define ACCESSORY_QUAD 4
#define ACCESSORY_RAPID_FIRE 5
#define ACCESSORY_MAP 6
#define MSAFE_ROOM 0
#define MSAFE_OBJ 20
#define MSAFE_WEATHER 100
#define MSAFE_SOUND 110
#define MSAFE_MATCEN 130
#define MSAFE_MISC 150
#define MSAFE_DOOR 170
#define MSAFE_MISSION 180
#define MSAFE_TRIGGER 190
#define MSAFE_INVEN 200
#define MSAFE_COUNTERMEASURE 210
#define MSAFE_WEAPON 250
#define SPEW_RAND_SPEED 2
#define SPEW_RAND_SIZE 4
#define SPEW_RAND_LIFETIME 16
// =======================================================================
// Value Functions
// =======================================================================
#define VF_SET 0
#define VF_GET 1
#define VF_SET_FLAGS 2
#define VF_CLEAR_FLAGS 3
// =======================================================================
// Value - Player only values
// =======================================================================
#define PLYV_F_ENERGY 0
#define PLYV_F_MOVEMENT_SCALAR 1
#define PLYV_F_RECHARGE_SCALAR 2
#define PLYV_F_WSPEED_SCALAR 3
#define PLYV_F_DAMAGE_SCALAR 4
#define PLYV_F_ARMOR_SCALAR 5
#define PLYV_I_BUDDY_HANDLE 6
// These work off the weapon index
#define PLYSV_I_WEAPON 7
#define PLYSV_I_WEAPON_AMMO 8
#define PLYSV_US_WEAPON_POWERUP_ID 9
// These work off the accessory index
#define PLYSV_F_ACCESSORY 10
// This is for setting and getting the guidebot name
#define PLYV_CS_GUIDEBOTNAME 11
// this is for thief access
#define PLYV_B_THIEF_PLAYERHASITEM 12 // VF_GET only (takes a bool for ptr, int for index..which item..see THIEFITEM_)
#define PLYV_I_THIEF_STEALPLAYERITEM 13 // VF_SET only (takes an int for index, ptr is ignored)
#define PLYV_I_FLAGS 14 // Player flags
#define PLYV_I_STRIP_WEAPONS 15 // VF_SET only (removes all weapons but lasers, sets energy to 0)
// These are used to mask out various controls, put in initially for the training system
#define PLYV_CMASK_FORWARD 1
#define PLYV_CMASK_REVERSE 2
#define PLYV_CMASK_LEFT 4
#define PLYV_CMASK_RIGHT 8
#define PLYV_CMASK_UP 16
#define PLYV_CMASK_DOWN 32
#define PLYV_CMASK_PITCHUP 64
#define PLYV_CMASK_PITCHDOWN 128
#define PLYV_CMASK_HEADINGLEFT 256
#define PLYV_CMASK_HEADINGRIGHT 512
#define PLYV_CMASK_BANKLEFT 1024
#define PLYV_CMASK_BANKRIGHT 2048
#define PLYV_CMASK_PRIMARY 4096
#define PLYV_CMASK_SECONDARY 8192
#define PLYV_CMASK_AFTERBURNER 16384
// =======================================================================
// Value - AI Values
// =======================================================================
#define AIV_F_MAX_SPEED 0
#define AIV_F_MAX_DELTA_SPEED 1
#define AIV_F_MAX_TURN_RATE 2
#define AIV_F_MAX_DELTA_TURN_RATE 3
#define AIV_F_ATTACK_VEL_PERCENT 4
#define AIV_F_FLEE_VEL_PERCENT 5
#define AIV_F_DODGE_VEL_PERCENT 6
#define AIV_F_CIRCLE_DIST 7
#define AIV_F_DODGE_PERCENT 8
#define AIV_F_MELEE_DAMAGE1 9
#define AIV_F_MELEE_DAMAGE2 10
#define AIV_F_MELEE_LATENCY1 11
#define AIV_F_MELEE_LATENCY2 12
#define AIV_C_MOVEMENT_TYPE 13
#define AIV_C_MOVEMENT_SUBTYPE 14
#define AIV_C_ANIMATION_TYPE 15
#define AIV_C_NEXT_ANIMATION_TYPE 16
#define AIV_C_NEXT_MOVEMENT 17
#define AIV_C_CURRENT_WB_FIRING 18
#define AIV_I_TARGET_HANDLE 19
#define AIV_F_NEXT_TARGET_UPDATE_TIME 20
#define AIV_F_DIST_TO_TARGET 21
#define AIV_V_VEC_TO_TARGET 22
#define AIV_F_NEXT_CHECK_SEE_TARGET_TIME 23
#define AIV_V_LAST_SEE_TARGET_POS 24
#define AIV_F_LAST_SEE_TARGET_TIME 25
#define AIV_F_WEAPON_SPEED 26
#define AIV_F_NEXT_MELEE_TIME 27
#define AIV_F_LAST_RENDER_TIME 28
#define AIV_F_NEXT_FLINCH_TIME 29
#define AIV_V_MOVEMENT_DIR 30
#define AIV_V_ROT_THRUST_VECTOR 31
#define AIV_F_FOV 32
#define AIV_F_AVOID_FRIENDS_DIST 33
#define AIV_F_FRUSTRATION 34
#define AIV_F_CURIOUSITY 35
#define AIV_F_FIRE_SPREAD 36
#define AIV_F_AGRESSION 37
#define AIV_F_NIGHT_VISION 38
#define AIV_F_FOG_VISION 39
#define AIV_F_LEAD_ACCURACY 40
#define AIV_F_LEAD_VARIENCE 41
#define AIV_F_FIGHT_TEAM 42
#define AIV_F_FIGHT_SAME 43
#define AIV_F_HEARING 44
#define AIV_F_ROAMING 45
#define AIV_F_LIFE_PRESERVATION 46
#define AIV_F_BIASED_FLIGHT_IMPORTANCE 47
#define AIV_F_BIASED_FLIGHT_MIN 48
#define AIV_F_BIASED_FLIGHT_MAX 49
#define AIV_F_AWARENESS 50
#define AIV_I_FLAGS 51
#define AIV_I_STATUS_REG 52
#define AIV_F_LAST_HEAR_TARGET_TIME 53
// =======================================================================
// Value - AI Values
// =======================================================================
#define AIGV_I_TYPE 0
#define AIGV_C_ACTIVATION_LEVEL 1
#define AIGV_F_MIN_INFLUENCE 2
#define AIGV_F_MAX_INFLUENCE 3
#define AIGSV_F_INFLUENCE_DIST 4
#define AIGV_I_HANDLE 5
#define AIGV_I_ROOMNUM 6
#define AIGV_I_F_ACTIONS 7
#define AIGV_I_ID 8
#define AIGV_C_SUBTYPE 9
#define AIGV_F_TIME 10
#define AIGV_V_VEC 11
#define AIGV_V_POS 12
#define AIGV_F_STEER_MIN_DIST 13
#define AIGV_F_STEER_MAX_DIST 14
#define AIGV_F_STEER_MAX_STRENGTH 15
#define AIGV_B_ATTACH_F_ALIGNED 16
#define AIGV_B_ATTACH_F_SPHERE 17
#define AIGV_F_ATTACH_RAD 18
#define AIGV_C_ATTACH_CHILD_AP 19
#define AIGV_C_ATTACH_PARENT_AP 20
#define AIGV_I_WANDER_AVOID_HANDLE 21
#define AIGV_C_WANDER_MIN_ROOMS 22
#define AIGV_C_WANDER_MAX_ROOMS 23
#define AIGV_C_WANDER_FLAGS 24
#define AIGV_C_WANDER_MINE_INDEX 25
#define AIGV_F_CIRCLE_DIST 26
#define AIGV_I_STATUS_REG 27
#define AIGV_F_START_TIME 28
#define AIGV_F_NEXT_PATH_TIME 29
#define AIGV_F_DIST_TO_GOAL 30
#define AIGV_V_VEC_TO_TARGET 31
#define AIGV_F_NEXT_CHECK_SEE_TARGET_TIME 32
#define AIGV_V_LAST_SEE_TARGET_POS 33
#define AIGV_F_LAST_SEE_TARGET_TIME 34
#define AIGV_F_NEXT_TARGET_UPDATE_TIME 35
#define AIGV_I_FLAGS 36
#define AIGV_V_ORIENT_FVEC 37
#define AIGV_V_ORIENT_UVEC 38
#define AIGV_C_NUM_ENABLERS 39
#define AIGSV_C_ENABLER_TYPE 40
#define AIGSV_F_ENABLER_TIME 41
#define AIGSV_C_ENABLER_MTYPE 42
#define AIGSV_F_ENABLER_FLOAT_VALUE 43
#define AIGSV_I_ENABLER_FLAGS 44
#define AIGSV_F_ENABLER_DIST 45
#define AIGSV_F_ENABLER_PERCENT 46
#define AIGSV_F_ENABLER_CHECK_INTERVAL 47
#define AIGSV_F_ENABLER_LAST_CHECK_TIME 48
#define AIGSV_C_ENABLER_NEXT_ENABLER_OP 49
#define AIGV_B_USED 50
#define AIGV_I_SCRIPTED_DATA_PTR 51
// =======================================================================
// Value - Object Values
// =======================================================================
#define OBJV_F_SHIELDS 0
#define OBJV_I_TYPE 1
#define OBJV_US_ID 2
#define OBJV_V_POS 3
#define OBJV_M_ORIENT 4
#define OBJV_I_ROOMNUM 5
#define OBJV_V_VELOCITY 6
#define OBJV_V_ROTVELOCITY 7
#define OBJV_V_THRUST 8
#define OBJV_V_ROTTHRUST 9
#define OBJV_I_FLAGS 10
#define OBJV_F_SIZE 11
#define OBJV_C_CONTROL_TYPE 12
#define OBJV_C_MOVEMENT_TYPE 13
#define OBJV_F_CREATION_TIME 14
#define OBJV_F_ROTDRAG 15
#define OBJV_I_PHYSICS_FLAGS 16
#define OBJV_I_PARENT_HANDLE 17
#define OBJV_F_ANIM_FRAME 18
#define OBJV_F_MAX_SHIELDS 19
#define OBJV_PC_MARKER_MESSAGE 20
#define OBJSV_F_ANIM_START 21
#define OBJSV_F_ANIM_END 22
#define OBJSV_F_ANIM_TIME 23
#define OBJV_S_NAME 24 // object's name
#define OBJV_C_VIRUS_INFECTED 25 // the object show signs of virus infection
#define OBJV_C_NEGATIVE_LIGHT 26 // the object casts negative light (black hole)
#define OBJV_C_IS_CLOAKED 27 // is object cloaked?
#define OBJV_PI_HACK_FVI_IGNORE_LIST 28
// =======================================================================
// Value - Object Weapon Battery Values
// =======================================================================
#define WBV_F_ANIM_FRAME 0
#define WBV_F_LAST_FIRE_TIME 1
#define WBV_I_DYNAMIC_FLAGS 2
// WBSV values use the index parameter of Obj_WBValue() for the gun point index
#define WBV_C_NUM_GUNPTS 3
#define WBSV_US_GUNPT_WEAPON_ID 4
#define WBSV_V_GUNPT_POS 5
// WBSV values use the index parameter of Obj_WBValue() for the firing mask index
#define WBV_C_NUM_MASKS 6
#define WBSV_C_MASK 7
#define WBSV_I_FIRE_SOUND 8
#define WBSV_F_LATENCY 9
#define WBSV_F_ANIM_TIME 10
#define WBSV_F_ANIM_START 11
#define WBSV_F_ANIM_FIRE 12
#define WBSV_F_ANIM_END 13
#define WBV_C_NUM_WBS 14
// =======================================================================
// Value - Room Values
// =======================================================================
#define RMV_I_FLAGS 0
#define RMV_V_WIND 1
#define RMV_C_USED 2
#define RMV_I_NUM_PATH_PNTS 3
#define RMSV_V_PATH_PNT 4
#define RMV_I_NUM_FACES 5
#define RMSV_I_FACE_TEXTURE_ID 6
#define RMSV_I_FACE_FLAGS 7
#define RMSV_V_FACE_NORMAL 8
#define RMSV_V_FACE_CENTER_PNT 14 // I didn't want to reorder the other ones as it is late in the build process
#define RMV_I_NUM_PORTALS 9
#define RMSV_V_PORTAL_PATH_PNT 10
#define RMSV_I_PORTAL_CONNECT_ROOM 11
#define RMSV_I_PORTAL_CONNECT_PORTAL 12
#define RMSV_I_PORTAL_FACE 13
#define RMSV_I_PORTAL_FLAGS 15
#define RMV_F_DAMAGE 16
// =======================================================================
// Value - Level Goal Values
// =======================================================================
#define LGV_I_STATUS 0
#define LGV_I_NUM_ACTIVE_PRIMARIES 1
#define LGSV_I_ACTIVE_PRIMARY_GOAL 2
#define LGV_I_NUM_ACTIVE_SECONDARIES 3
#define LGSV_I_ACTIVE_SECONDARY_GOAL 4
#define LGV_I_NUM_GOALS 5
#define LGSV_PC_GOAL_NAME 6
#define LGSV_PC_LOCATION_NAME 7
#define LGSV_PC_DESCRIPTION 8
#define LGSV_PC_COMPLETION_MESSAGE 9
#define LGSV_I_PRIORITY 10
#define LGSV_C_GOAL_LIST 11
#define LGSV_I_STATUS 12
#define LGSV_I_NUM_ITEMS 13
#define LGSSV_C_ITEM_TYPE 14
#define LGSSV_I_ITEM_HANDLE 15
#define LGSSV_B_ITEM_DONE 16
// =======================================================================
// Value - Matcen Values
// =======================================================================
#define MTNV_C_ATTACH_TYPE 0
#define MTNV_C_CONTROL_TYPE 1
#define MTNV_I_ATTACH 2
#define MTNV_V_CREATE_POINT 3
#define MTNV_I_CREATE_ROOM 4
#define MTNV_PC_NAME 5
#define MTNV_I_MAX_PROD 6
#define MTNV_F_PROD_MULTIPLIER 7
#define MTNV_I_STATUS 8
#define MTNV_C_CREATION_EFFECT 9
#define MTNV_I_MAX_ALIVE_CHILDREN 10
#define MTNV_F_PRE_PROD_TIME 11
#define MTNV_F_POST_PROD_TIME 12
#define MTNV_S_CREATION_TEXTURE 13
#define MTNSV_I_SOUND 14
#define MTNV_C_NUM_SPAWN_PTS 15
#define MTNSV_I_SPAWN_POINT 16
#define MTNV_C_NUM_PROD_TYPES 17
#define MTNSV_I_PROD_ITEM_ID 18
#define MTNSV_I_PROD_ITEM_PRIORITY 19
#define MTNSV_F_PROD_ITEM_TIME 20
#define MTNSV_I_PROD_ITEM_MAX_PROD 21
// =======================================================================
// inventory add flags
// =======================================================================
#define INVAF_NOTSPEWABLE 0x0001
#define INVAF_TIMEOUTONSPEW 0x0002
#define INVAF_LEVELLAST 0x0004
// =======================================================================
// thief stealable items (see PLYV_ actions)
// =======================================================================
#define THIEFITEM_AUTOMAP 1
#define THIEFITEM_HEADLIGHT 2
#define THIEFITEM_ETOSCONV 3
#define THIEFITEM_CLOAK 4
#define THIEFITEM_INVULN 5
#define THIEFITEM_RAPIDFIRE 6
#define THIEFITEM_QUADFIRE 7
#define THIEFITEM_MAXCOUNT 8
// =======================================================================
// Multiplayer safe function type defines
// =======================================================================
#define MSAFE_ROOM_TEXTURE MSAFE_ROOM + 0
#define MSAFE_ROOM_WIND MSAFE_ROOM + 1
#define MSAFE_ROOM_FOG MSAFE_ROOM + 2
#define MSAFE_ROOM_LIGHT_PULSE MSAFE_ROOM + 3
#define MSAFE_ROOM_PORTAL_RENDER MSAFE_ROOM + 4
#define MSAFE_ROOM_FOG_STATE MSAFE_ROOM + 5
#define MSAFE_ROOM_CHANGING_FOG MSAFE_ROOM + 6
#define MSAFE_ROOM_CHANGING_WIND MSAFE_ROOM + 7
#define MSAFE_ROOM_DAMAGE MSAFE_ROOM + 8
#define MSAFE_ROOM_LIGHT_FLICKER MSAFE_ROOM + 9
#define MSAFE_ROOM_LIGHT_STROBE MSAFE_ROOM + 10
#define MSAFE_ROOM_REFUEL MSAFE_ROOM + 11
#define MSAFE_ROOM_HAS_PLAYER MSAFE_ROOM + 12
#define MSAFE_ROOM_BREAK_GLASS MSAFE_ROOM + 13
#define MSAFE_ROOM_PORTAL_BLOCK MSAFE_ROOM + 14
#define MSAFE_ROOM_REMOVE_ALL_POWERUPS MSAFE_ROOM + 15
#define MSAFE_OBJECT_SHIELDS MSAFE_OBJ + 0
#define MSAFE_OBJECT_ENERGY MSAFE_OBJ + 1
#define MSAFE_OBJECT_BLANK MSAFE_OBJ + 2
#define MSAFE_OBJECT_LIGHT_COLOR MSAFE_OBJ + 3
#define MSAFE_OBJECT_MOVEMENT_SCALAR MSAFE_OBJ + 4
#define MSAFE_OBJECT_RECHARGE_SCALAR MSAFE_OBJ + 5
#define MSAFE_OBJECT_WSPEED_SCALAR MSAFE_OBJ + 6
#define MSAFE_OBJECT_DAMAGE_SCALAR MSAFE_OBJ + 7
#define MSAFE_OBJECT_ARMOR_SCALAR MSAFE_OBJ + 8
#define MSAFE_OBJECT_DAMAGE_OBJECT MSAFE_OBJ + 9
#define MSAFE_OBJECT_TYPE MSAFE_OBJ + 10
#define MSAFE_OBJECT_ID MSAFE_OBJ + 11
#define MSAFE_OBJECT_ADD_WEAPON MSAFE_OBJ + 12
#define MSAFE_OBJECT_START_SPEW MSAFE_OBJ + 13
#define MSAFE_OBJECT_STOP_SPEW MSAFE_OBJ + 14
#define MSAFE_OBJECT_GHOST MSAFE_OBJ + 15
#define MSAFE_OBJECT_UNGHOST MSAFE_OBJ + 16
#define MSAFE_OBJECT_REMOVE MSAFE_OBJ + 17
#define MSAFE_OBJECT_POS MSAFE_OBJ + 18
#define MSAFE_OBJECT_ORIENT MSAFE_OBJ + 19
#define MSAFE_OBJECT_ROOMNUM MSAFE_OBJ + 20
#define MSAFE_OBJECT_VELOCITY MSAFE_OBJ + 21
#define MSAFE_OBJECT_ROTVELOCITY MSAFE_OBJ + 22
#define MSAFE_OBJECT_THRUST MSAFE_OBJ + 23
#define MSAFE_OBJECT_ROTTHRUST MSAFE_OBJ + 24
#define MSAFE_OBJECT_FLAGS MSAFE_OBJ + 25
#define MSAFE_OBJECT_SIZE MSAFE_OBJ + 26
#define MSAFE_OBJECT_CONTROL_TYPE MSAFE_OBJ + 27
#define MSAFE_OBJECT_MOVEMENT_TYPE MSAFE_OBJ + 28
#define MSAFE_OBJECT_CREATION_TIME MSAFE_OBJ + 29
#define MSAFE_OBJECT_CLOAKALLPLAYERS MSAFE_OBJ + 30
#define MSAFE_OBJECT_PHYSICS_FLAGS MSAFE_OBJ + 31
#define MSAFE_OBJECT_PARENT MSAFE_OBJ + 32
#define MSAFE_OBJECT_ROTDRAG MSAFE_OBJ + 33
#define MSAFE_OBJECT_INVULNERABLE MSAFE_OBJ + 34
#define MSAFE_OBJECT_CLOAK MSAFE_OBJ + 35
#define MSAFE_OBJECT_PLAYER_HANDLE MSAFE_OBJ + 36
#define MSAFE_OBJECT_PLAYER_CMASK MSAFE_OBJ + 37
#define MSAFE_OBJECT_NO_RENDER MSAFE_OBJ + 38
#define MSAFE_OBJECT_LIGHT_DIST MSAFE_OBJ + 39
#define MSAFE_OBJECT_DEFORM MSAFE_OBJ + 40
#define MSAFE_OBJECT_VIEWER_SHAKE MSAFE_OBJ + 41 // or is this player shake?
#define MSAFE_OBJECT_PLAYER_KEY MSAFE_OBJ + 42
#define MSAFE_OBJECT_PLAYER_CONTROLAI MSAFE_OBJ + 43
#define MSAFE_OBJECT_WORLD_POSITION MSAFE_OBJ + 44 // room+pos+orient
#define MSAFE_OBJECT_COUNT_TYPE MSAFE_OBJ + 45
#define MSAFE_OBJECT_SPARKS MSAFE_OBJ + 46
#define MSAFE_OBJECT_SETONFIRE \
MSAFE_OBJ + 47 // objhandle, longevity = how long, interval = damage per sec, ithandle = killer (or
// OBJECT_HANDLE_NONE)
#define MSAFE_OBJECT_SHAKE_AREA MSAFE_OBJ + 48
#define MSAFE_OBJECT_ENERGY_WEAPON MSAFE_OBJ + 49
#define MSAFE_OBJECT_DAMAGE_AMOUNT MSAFE_OBJ + 50
#define MSAFE_OBJECT_SHIELDS_ORIGINAL MSAFE_OBJ + 51
#define MSAFE_SHOW_ENABLED_CONTROLS MSAFE_OBJ + 52
#define MSAFE_OBJECT_FIRE_WEAPON MSAFE_OBJ + 53
#define MSAFE_OBJECT_DESTROY_ROBOTS_EXCEPT MSAFE_OBJ + 54
#define MSAFE_WEATHER_RAIN MSAFE_WEATHER + 0
#define MSAFE_WEATHER_SNOW MSAFE_WEATHER + 1
#define MSAFE_WEATHER_LIGHTNING MSAFE_WEATHER + 2
#define MSAFE_WEATHER_LIGHTNING_BOLT MSAFE_WEATHER + 3
#define MSAFE_WEATHER_LIGHTNING_BOLT_POS MSAFE_WEATHER + 4
#define MSAFE_SOUND_2D MSAFE_SOUND + 0
#define MSAFE_SOUND_OBJECT MSAFE_SOUND + 1
#define MSAFE_SOUND_STREAMING MSAFE_SOUND + 2
#define MSAFE_SOUND_STOP MSAFE_SOUND + 3
#define MSAFE_SOUND_STOP_OBJ MSAFE_SOUND + 4
#define MSAFE_SOUND_VOLUME_OBJ MSAFE_SOUND + 5
#define MSAFE_DOOR_LOCK_STATE MSAFE_DOOR + 0
#define MSAFE_DOOR_ACTIVATE MSAFE_DOOR + 1
#define MSAFE_DOOR_POSITION MSAFE_DOOR + 2
#define MSAFE_DOOR_STOP MSAFE_DOOR + 3
#define MSAFE_DOOR_OPENABLE MSAFE_DOOR + 4
#define MSAFE_TRIGGER_SET MSAFE_TRIGGER + 0
#define MSAFE_MISC_HUD_MESSAGE MSAFE_MISC + 0
#define MSAFE_MISC_WAYPOINT MSAFE_MISC + 1
#define MSAFE_MISC_END_LEVEL MSAFE_MISC + 2
#define MSAFE_MISC_POPUP_CAMERA MSAFE_MISC + 3
#define MSAFE_MISC_CLOSE_POPUP MSAFE_MISC + 4
#define MSAFE_MISC_GAME_MESSAGE MSAFE_MISC + 5
#define MSAFE_MUSIC_REGION MSAFE_MISC + 6
#define MSAFE_MISC_ENABLE_SHIP MSAFE_MISC + 7
#define MSAFE_MISC_LEVELGOAL MSAFE_MISC + 8
#define MSAFE_MISC_GUIDEBOT_NAME MSAFE_MISC + 9
#define MSAFE_MISC_FILTERED_HUD_MESSAGE MSAFE_MISC + 10
#define MSAFE_MISC_START_TIMER MSAFE_MISC + 11
#define MSAFE_MISC_ADD_HUD_ITEM MSAFE_MISC + 12
#define MSAFE_MISC_UPDATE_HUD_ITEM MSAFE_MISC + 13
#define MSAFE_INVEN_ADD_TYPE_ID MSAFE_INVEN + 0
#define MSAFE_INVEN_CHECK MSAFE_INVEN + 1
#define MSAFE_INVEN_COUNT MSAFE_INVEN + 2
#define MSAFE_INVEN_REMOVE MSAFE_INVEN + 3
#define MSAFE_INVEN_SIZE MSAFE_INVEN + 4
#define MSAFE_INVEN_GET_TYPE_ID MSAFE_INVEN + 5
#define MSAFE_INVEN_ADD_OBJECT MSAFE_INVEN + 6
#define MSAFE_INVEN_CHECK_OBJECT MSAFE_INVEN + 7
#define MSAFE_INVEN_REMOVE_OBJECT MSAFE_INVEN + 8
#define MSAFE_COUNTERMEASURE_ADD MSAFE_COUNTERMEASURE + 0
#define MSAFE_COUNTERMEASURE_COUNT MSAFE_COUNTERMEASURE + 1
#define MSAFE_COUNTERMEASURE_CHECK MSAFE_COUNTERMEASURE + 2
#define MSAFE_COUNTERMEASURE_REMOVE MSAFE_COUNTERMEASURE + 3
#define MSAFE_COUNTERMEASURE_SIZE MSAFE_COUNTERMEASURE + 4
#define MSAFE_COUNTERMEASURE_GET MSAFE_COUNTERMEASURE + 5
#define MSAFE_WEAPON_CHECK MSAFE_WEAPON + 0
#define MSAFE_WEAPON_ADD MSAFE_WEAPON + 1
// =======================================================================
// Structures shared between OSIRIS and the game
// =======================================================================
// Since this header is shared within D3, in order to keep redefinition errors
// quiet, the following section will only be included if this header file
// is included by a DLL
#ifndef INCLUDED_FROM_D3
// Use this handle when you want a handle that will never be a valid object
#ifndef INCLUDED_FROM_PLAYER_H
#define MAX_PLAYERS 32
#endif
// define unsigned types;
typedef unsigned char ubyte;
typedef signed char sbyte;
typedef unsigned short ushort;
typedef unsigned int uint;
typedef unsigned long ulong;
typedef unsigned int ddgr_color;
#ifndef NULL
#define NULL 0
#endif
inline ddgr_color GR_RGB(int r, int g, int b) { return ((r << 16) + (g << 8) + b); }
#endif // end #ifndef INCLUDED_FROM_D3
// =======================================================================
// GB Menu structure
// =======================================================================
#define MAX_GB_COMMANDS 60
#define GBCT_EXIT_IMMEDIATELY 0
#define GBCT_STRING_DIALOG 1
#define COM_GET_MENU 0
#define COM_DO_ACTION 1
#define COM_REINIT 2
typedef struct {
char action;
char index;
void *ptr;
} gb_com;
typedef struct {
char title[256];
int num_commands;
char command_text[MAX_GB_COMMANDS][256];
char command_id[MAX_GB_COMMANDS];
char command_type[MAX_GB_COMMANDS];
char dialog_text[MAX_GB_COMMANDS][256];
} gb_menu;
// =======================================================================
// Osiris structures
// =======================================================================
typedef struct {
int *fp[MAX_MODULEFUNCS];
char **string_table;
int string_count;
int module_identifier;
bool module_is_static; // if this is set to true after initialization
// then the module will not unload if it's reference
// count is 0....only when the level ends.
// this is for Game modules ONLY.
char *script_identifier; // Contains a unique script identifier (string), which
// can be used for the OMMS system. While this pointer
// will always be valid during the lifetime of the module
// DO NOT ALTER THE STRING IT POINTS TO.
uint game_checksum; // Checksum of game structures, if this doesn't match
// the checksum at compile time, it is very likely that
// bad things can happen, and this module shouldn't initialize.
} tOSIRISModuleInit; // contains the necessary data to initialize
// an OSIRIS module
typedef struct {
float frame_time;
float game_time;
} tOSIRISEVTINTERVAL; // struct for EVT_INTERVAL data
typedef struct {
} tOSIRISIEVTAIFRAME; // struct for EVT_AI_FRAME data
typedef struct {
float damage;
int it_handle;
int weapon_handle;
int damage_type;
} tOSIRISEVTDAMAGED; // struct for EVT_DAMAGED data
typedef struct {
int it_handle;
} tOSIRISEVTCOLLIDE; // struct for EVT_COLLIDE data
typedef struct {
} tOSIRISEVTCREATED; // struct for EVT_CREATED data
typedef struct {
ubyte is_dying; // if this is !=0 than the event is coming because it is
// really being destroyed. Else it is due to the level ending.
} tOSIRISEVTDESTROY; // struct for EVT_DESTROY data
typedef struct {
int id;
float game_time;
} tOSIRISEVTTIMER; // struct for EVT_TIMER data
typedef struct {
int it_handle;
} tOSIRISEVTUSE; // struct for EVT_USE data
typedef struct {
void *fileptr;
} tOSIRISEVTSAVESTATE; // struct for EVT_SAVESTATE data
typedef struct {
void *fileptr;
} tOSIRISEVTRESTORESTATE; // struct for EVT_RESTORESTATE data
typedef struct {
int notify_type;
int it_handle;
int goal_num;
int goal_uid;
union {
int enabler_num;
int attack_num;
};
} tOSIRISEVTAINOTIFY; // struct for EVT_AI_NOTIFY data
typedef struct {
} tOSIRISEVTAIINIT; // struct for EVT_AI_INIT data
typedef struct {
} tOSIRISEVTLEVELSTART; // struct for EVT_LEVELSTART data
typedef struct {
} tOSIRISEVTLEVELEND; // struct for EVT_LEVELEND data
typedef struct {
int room_num;
} tOSIRISEVTCHANGESEG; // struct for EVT_CHANGESEG data
typedef struct {
int id;
void *memory_ptr;
} tOSIRISEVTMEMRESTORE; // struct for EVT_MEMRESTORE data
typedef struct {
int handle;
ubyte detonated;
} tOSIRISEVTTIMERCANCEL; // struct for EVT_TIMERCANCEL data
typedef struct {
int it_handle;
} tOSIRISEVTCHILDDIED;
typedef struct {
int it_handle;
int id;
} tOSIRISEVTMATCENCREATE; // struct for EVT_MATCEN_CREATE data
typedef struct {
} tOSIRISEVTDOORACTIVATE; // struct for EVT_DOOR_ACTIVATE data
typedef struct {
} tOSIRISEVTDOORCLOSE; // struct for EVT_DOOR_CLOSE data
typedef struct {
int level_goal_index;
} tOSIRISEVTLEVELGOALCOMPLETE;
typedef struct {
int level_goal_index;
} tOSIRISEVTLEVELGOALITEMCOMPLETE;
typedef struct {
} tOSIRISEVTALLLEVELGOALSCOMPLETE;
typedef struct {
} tOSIRISEVTPLAYERMOVIESTART;
typedef struct {
} tOSIRISEVTPLAYERMOVIEEND;
typedef struct {
int it_handle; // player respawning
} tOSIRISEVTPLAYERRESPAWN;
typedef struct {
int it_handle; // player dead
} tOSIRISEVTPLAYERDIES;
typedef struct {
union {
tOSIRISEVTINTERVAL evt_interval;
tOSIRISIEVTAIFRAME evt_ai_frame;
tOSIRISEVTDAMAGED evt_damaged;
tOSIRISEVTCOLLIDE evt_collide;
tOSIRISEVTCREATED evt_created;
tOSIRISEVTDESTROY evt_destroy;
tOSIRISEVTTIMER evt_timer;
tOSIRISEVTUSE evt_use;
tOSIRISEVTAINOTIFY evt_ai_notify;
tOSIRISEVTAINOTIFY evt_ain_objkilled;
tOSIRISEVTAINOTIFY evt_ain_seeplayer;
tOSIRISEVTAINOTIFY evt_ain_whitobject;
tOSIRISEVTAINOTIFY evt_ain_goalcomplete;
tOSIRISEVTAINOTIFY evt_ain_goalinvalid;
tOSIRISEVTAINOTIFY evt_ain_goalfail;
tOSIRISEVTAINOTIFY evt_ain_goalerror;
tOSIRISEVTAINOTIFY evt_ain_goalforcedone;
tOSIRISEVTAINOTIFY evt_ain_melee_hit;
tOSIRISEVTAINOTIFY evt_ain_melee_attack_frame;
tOSIRISEVTAINOTIFY evt_ain_movie_start;
tOSIRISEVTAINOTIFY evt_ain_movie_end;
tOSIRISEVTAIINIT evt_ai_init;
tOSIRISEVTLEVELSTART evt_levelstart;
tOSIRISEVTLEVELEND evt_levelend;
tOSIRISEVTCHANGESEG evt_changeseg;
tOSIRISEVTSAVESTATE evt_savestate;
tOSIRISEVTRESTORESTATE evt_restorestate;
tOSIRISEVTMEMRESTORE evt_memrestore;
tOSIRISEVTTIMERCANCEL evt_timercancel;
tOSIRISEVTMATCENCREATE evt_matcen_create;
tOSIRISEVTDOORACTIVATE evt_door_activate;
tOSIRISEVTDOORCLOSE evt_door_close;
tOSIRISEVTCHILDDIED evt_child_died;
tOSIRISEVTLEVELGOALCOMPLETE evt_level_goal_complete;
tOSIRISEVTALLLEVELGOALSCOMPLETE evt_all_level_goals_complete;
tOSIRISEVTLEVELGOALITEMCOMPLETE evt_level_goal_item_complete;
tOSIRISEVTPLAYERMOVIESTART evt_player_movie_start;
tOSIRISEVTPLAYERMOVIEEND evt_player_movie_end;
tOSIRISEVTPLAYERRESPAWN evt_player_respawn;
tOSIRISEVTPLAYERDIES evt_player_dies;
};
int me_handle;
void *extra_info;
} tOSIRISEventInfo; // contains the necessary data for all events
// to pass what they need to their event handlers.
#define OTF_REPEATER 0x0001 // this timer is to repeat repeat_count times
#define OTF_TRIGGER 0x0002 // this timer is for a trigger, use trigger_number
#define OTF_LEVEL 0x0004 // this timer is for the level
#define OTF_CANCELONDEAD \
0x008 // this timer should be auto-cancelled if object_handle_detonator dies, than the
// timer auto-cancels
typedef struct {
ushort flags;
int id; // an optional id you can use to store, will be passed back on EVT_TIMER signal
int repeat_count; // if OTF_REPEATER is set, this is how many times to repeat the signal (every
// interval). -1 for infinite.
union {
int object_handle; // handle to the object to recieve the EVT_TIMER signal
int trigger_number; // trigger number to recieve the EVT_TIMER signal (OTF_TRIGGER)
};
int object_handle_detonator; // if OTF_CANCELONDEAD is specified, this is the object handle to
// use for checking, if this object dies, than auto-cancel the timer
float timer_interval; // the timeframe in between EVT_TIMER signals (for non-repeaters, this is how
// long until the single EVT_TIMER gets signaled).
} tOSIRISTIMER;
typedef enum { OBJECT_SCRIPT = 0, TRIGGER_SCRIPT, LEVEL_SCRIPT } script_type;
typedef struct {
script_type type;
union {
int objhandle;
int triggernum;
};
} tOSIRISSCRIPTID;
typedef struct {
tOSIRISSCRIPTID my_id;
ushort id;
int size;
} tOSIRISMEMCHUNK;
// =======================================================================
// Multiplayer safe function structs
// =======================================================================
#define KOI_ID 0 // this item is specifying a type/id of object NOT to kill
#define KOI_HANDLE 1 // this item is specifying an object handle of an object NOT to kill
typedef struct {
ubyte info_type;
int id;
int objhandle;
} tKillObjectItem;
#define MSAFE_MESSAGE_LENGTH 255
#define MSAFE_NAME_LENGTH 32
typedef struct {
// Rooms
int roomnum;
short facenum;
short texnum;
short portalnum;
float fog_r, fog_g, fog_b, fog_depth;
vector wind;
ubyte pulse_time;
ubyte pulse_offset;
// Objects/Players
uint objhandle;
uint ithandle;
float shields, energy;
short start_tick;
short end_tick;
float cycle_time;
int type, id, aux_type, aux_id;
uint checksum;
int path_id;
float amount;
ubyte damage_type;
uint killer_handle;
float ammo;
ubyte playsound;
ubyte remove;
ubyte do_powerup;
vector velocity;
vector rot_velocity;
float rot_drag;
vector thrust;
vector rot_thrust;
char control_type;
char movement_type;
float creation_time;
int physics_flags;
vector pos;
matrix orient;
float anim_frame;
// Spew
ubyte is_real;
ubyte random;
ubyte unused2; // was use_gunpoint
sbyte gunpoint;
ubyte effect_type;
ubyte phys_info;
float drag, mass;
// Unused
ushort unused; // was doorway_index
// Weather
int randval;
// Triggers
ubyte trigger_num;
// sounds
int sound_handle;
float volume;
// Shared/misc
int index;
float scalar;
float interval;
ubyte state;
sbyte slot;
char message[MSAFE_MESSAGE_LENGTH];
char name[MSAFE_NAME_LENGTH];
int color;
float longevity;
float lifetime;
float size;
float speed;
int count;
int flags;
void *list;
unsigned int control_mask;
unsigned char control_val;
// Object lighting stuff
float light_distance;
float r1, g1, b1; // light 1 color
float r2, g2, b2; // light 2 color
float time_interval;
float flicker_distance;
float directional_dot;
int timebits;
vector pos2;
// Second message
char message2[MSAFE_MESSAGE_LENGTH];
} msafe_struct;
typedef struct {
int fate;
int hit_room;
vector hit_point;
int hit_object;
int hit_subobject;
int hit_face;
vector hit_face_pnt;
int hit_face_room;
vector hit_wallnorm;
} ray_info;
#define PV_POS 0x00000001 // set/get pos member (pass in an osiris_path_node_info ptr)
#define PV_ROOMNUM 0x00000002 // set/get roomnum member (pass in an osiris_path_node_info ptr)
#define PV_FLAGS 0x00000004 // set/get flags member (pass in an osiris_path_node_info ptr)
#define PV_FVEC 0x00000008 // set/get fvec member (pass in an osiris_path_node_info ptr)
#define PV_UVEC 0x00000010 // set/get uvec member (pass in an osiris_path_node_info ptr)
#define PV_ALL 0x0000001F // set/get all members (above..pass in an osiris_path_node_info ptr)
#define PV_I_NUMNODES 0x00010000 // get number of nodes in this path
#define PV_CS_NAME 0x00020000 // get name of path
#define PV_I_NUMPATHS 0x00040000 // get number of paths (path_id & node_id are ignored in this case)
typedef struct {
vector pos; // where this node is in the world
int roomnum; // what room?
int flags; // if this point lives over the terrain, etc
vector fvec;
vector uvec;
} osiris_path_node_info;
#endif