aboutsummaryrefslogtreecommitdiff
path: root/src/parsec/include
diff options
context:
space:
mode:
Diffstat (limited to 'src/parsec/include')
-rw-r--r--src/parsec/include/aud_bkgn.h29
-rw-r--r--src/parsec/include/aud_comm.h16
-rw-r--r--src/parsec/include/aud_defs.h122
-rw-r--r--src/parsec/include/aud_game.h236
-rw-r--r--src/parsec/include/aud_glob.h16
-rw-r--r--src/parsec/include/aud_subh.h160
-rw-r--r--src/parsec/include/aud_supp.h129
-rw-r--r--src/parsec/include/con_act.h239
-rw-r--r--src/parsec/include/con_aux.h331
-rw-r--r--src/parsec/include/con_cani.h16
-rw-r--r--src/parsec/include/con_com.h71
-rw-r--r--src/parsec/include/con_conf.h36
-rw-r--r--src/parsec/include/con_ext.h91
-rw-r--r--src/parsec/include/con_geom.h15
-rw-r--r--src/parsec/include/con_info.h63
-rw-r--r--src/parsec/include/con_int.h59
-rw-r--r--src/parsec/include/con_kmap.h49
-rw-r--r--src/parsec/include/con_list.h34
-rw-r--r--src/parsec/include/con_load.h16
-rw-r--r--src/parsec/include/con_main.h157
-rw-r--r--src/parsec/include/con_path.h15
-rw-r--r--src/parsec/include/con_rc.h16
-rw-r--r--src/parsec/include/con_say.h41
-rw-r--r--src/parsec/include/con_shad.h26
-rw-r--r--src/parsec/include/con_std.h127
-rw-r--r--src/parsec/include/con_tani.h16
-rw-r--r--src/parsec/include/d_bmap.h26
-rw-r--r--src/parsec/include/d_font.h24
-rw-r--r--src/parsec/include/d_fontt.h435
-rw-r--r--src/parsec/include/d_glob.h31
-rw-r--r--src/parsec/include/d_iter.h37
-rw-r--r--src/parsec/include/d_misc.h43
-rw-r--r--src/parsec/include/d_patch.h17
-rw-r--r--src/parsec/include/do_bmap.h28
-rw-r--r--src/parsec/include/do_font.h29
-rw-r--r--src/parsec/include/do_iter.h34
-rw-r--r--src/parsec/include/do_misc.h21
-rw-r--r--src/parsec/include/do_patch.h15
-rw-r--r--src/parsec/include/e_callbk.h62
-rw-r--r--src/parsec/include/e_colani.h34
-rw-r--r--src/parsec/include/e_color.h94
-rw-r--r--src/parsec/include/e_demo.h55
-rw-r--r--src/parsec/include/e_draw.h55
-rw-r--r--src/parsec/include/e_events.h66
-rw-r--r--src/parsec/include/e_evtdef.h48
-rw-r--r--src/parsec/include/e_getopt.h55
-rw-r--r--src/parsec/include/e_global.h177
-rw-r--r--src/parsec/include/e_level.h19
-rw-r--r--src/parsec/include/e_loader.h20
-rw-r--r--src/parsec/include/e_mouse.h51
-rw-r--r--src/parsec/include/e_record.h79
-rw-r--r--src/parsec/include/e_replay.h17
-rw-r--r--src/parsec/include/e_shader.h69
-rw-r--r--src/parsec/include/e_supp.h32
-rw-r--r--src/parsec/include/e_texani.h34
-rw-r--r--src/parsec/include/e_vtxani.h17
-rw-r--r--src/parsec/include/g_boot.h19
-rw-r--r--src/parsec/include/g_bot_cl.h404
-rw-r--r--src/parsec/include/g_camera.h32
-rw-r--r--src/parsec/include/g_cloud.h20
-rw-r--r--src/parsec/include/g_explod.h16
-rw-r--r--src/parsec/include/g_gameloop.h16
-rw-r--r--src/parsec/include/g_global.h119
-rw-r--r--src/parsec/include/g_laser.h17
-rw-r--r--src/parsec/include/g_main_cl.h258
-rw-r--r--src/parsec/include/g_planet.h47
-rw-r--r--src/parsec/include/g_sfx.h35
-rw-r--r--src/parsec/include/g_shkwav.h16
-rw-r--r--src/parsec/include/g_stars.h20
-rw-r--r--src/parsec/include/g_supp.h37
-rw-r--r--src/parsec/include/g_swarm.h20
-rw-r--r--src/parsec/include/g_telep.h79
-rw-r--r--src/parsec/include/g_vapor.h16
-rw-r--r--src/parsec/include/g_wfx.h51
-rw-r--r--src/parsec/include/h_cockpt.h78
-rw-r--r--src/parsec/include/h_drwhud.h30
-rw-r--r--src/parsec/include/h_frmplt.h17
-rw-r--r--src/parsec/include/h_global.h47
-rw-r--r--src/parsec/include/h_radar.h28
-rw-r--r--src/parsec/include/h_strmap.h35
-rw-r--r--src/parsec/include/h_supp.h40
-rw-r--r--src/parsec/include/h_text.h23
-rw-r--r--src/parsec/include/il_joy.h25
-rw-r--r--src/parsec/include/il_mouse.h19
-rw-r--r--src/parsec/include/il_supp.h18
-rw-r--r--src/parsec/include/img_3df.h28
-rw-r--r--src/parsec/include/img_api.h78
-rw-r--r--src/parsec/include/img_conv.h61
-rw-r--r--src/parsec/include/img_jpg.h16
-rw-r--r--src/parsec/include/img_load.h45
-rw-r--r--src/parsec/include/img_supp.h20
-rw-r--r--src/parsec/include/img_tga.h16
-rw-r--r--src/parsec/include/inp_comm.h16
-rw-r--r--src/parsec/include/inp_defs.h220
-rw-r--r--src/parsec/include/inp_glob.h26
-rw-r--r--src/parsec/include/inp_init.h17
-rwxr-xr-xsrc/parsec/include/inp_keyn.h109
-rw-r--r--src/parsec/include/inp_sdl.h26
-rw-r--r--src/parsec/include/inp_subh.h36
-rw-r--r--src/parsec/include/inp_user.h42
-rw-r--r--src/parsec/include/isdl_joy.h30
-rw-r--r--src/parsec/include/isdl_keydf.h89
-rw-r--r--src/parsec/include/isdl_keyn.h117
-rw-r--r--src/parsec/include/isdl_mouse.h19
-rw-r--r--src/parsec/include/isdl_supp.h18
-rw-r--r--src/parsec/include/m_button.h92
-rw-r--r--src/parsec/include/m_list.h46
-rw-r--r--src/parsec/include/m_logo.h21
-rw-r--r--src/parsec/include/m_main.h85
-rw-r--r--src/parsec/include/m_option.h67
-rw-r--r--src/parsec/include/m_status.h21
-rw-r--r--src/parsec/include/m_viewer.h42
-rw-r--r--src/parsec/include/net_conn.h34
-rw-r--r--src/parsec/include/net_game.h92
-rw-r--r--src/parsec/include/net_game_gmsv.h30
-rw-r--r--src/parsec/include/net_game_peer.h60
-rw-r--r--src/parsec/include/net_glob.h144
-rw-r--r--src/parsec/include/net_gmsv.h46
-rw-r--r--src/parsec/include/net_pckt_peer.h23
-rw-r--r--src/parsec/include/net_peer.h40
-rw-r--r--src/parsec/include/net_prediction.h93
-rw-r--r--src/parsec/include/net_rmev.h95
-rw-r--r--src/parsec/include/net_rmev_gmsv.h20
-rw-r--r--src/parsec/include/net_rmev_peer.h21
-rw-r--r--src/parsec/include/net_serv.h77
-rw-r--r--src/parsec/include/net_subh.h167
-rw-r--r--src/parsec/include/net_udp.h33
-rw-r--r--src/parsec/include/net_udpdf.h31
-rw-r--r--src/parsec/include/net_univ.h40
-rw-r--r--src/parsec/include/net_util_cl.h29
-rw-r--r--src/parsec/include/nl_udp.h19
-rw-r--r--src/parsec/include/nw_udp.h27
-rw-r--r--src/parsec/include/obj_ani.h19
-rw-r--r--src/parsec/include/obj_coll.h16
-rw-r--r--src/parsec/include/obj_comm.h21
-rw-r--r--src/parsec/include/obj_ctrl.h132
-rw-r--r--src/parsec/include/obj_expl.h24
-rw-r--r--src/parsec/include/obj_game.h53
-rw-r--r--src/parsec/include/obj_iter.h22
-rw-r--r--src/parsec/include/obj_part.h32
-rw-r--r--src/parsec/include/obj_vani.h20
-rw-r--r--src/parsec/include/obj_xtra.h21
-rw-r--r--src/parsec/include/part_ani.h22
-rw-r--r--src/parsec/include/part_api.h435
-rw-r--r--src/parsec/include/part_def.h29
-rw-r--r--src/parsec/include/part_sys.h25
-rw-r--r--src/parsec/include/r_gl.h93
-rw-r--r--src/parsec/include/r_glob.h71
-rw-r--r--src/parsec/include/r_obj.h21
-rw-r--r--src/parsec/include/r_part.h20
-rw-r--r--src/parsec/include/r_patch.h20
-rw-r--r--src/parsec/include/r_perf.h22
-rw-r--r--src/parsec/include/r_sfx.h21
-rw-r--r--src/parsec/include/r_supp.h19
-rw-r--r--src/parsec/include/ro_api.h84
-rw-r--r--src/parsec/include/ro_obj.h19
-rw-r--r--src/parsec/include/ro_objmc.h156
-rw-r--r--src/parsec/include/ro_part.h17
-rw-r--r--src/parsec/include/ro_patch.h17
-rw-r--r--src/parsec/include/ro_perf.h19
-rw-r--r--src/parsec/include/ro_poly.h18
-rw-r--r--src/parsec/include/ro_sfx.h18
-rw-r--r--src/parsec/include/ro_supp.h62
-rw-r--r--src/parsec/include/sl_err.h21
-rw-r--r--src/parsec/include/sl_main.h18
-rw-r--r--src/parsec/include/sl_msg.h18
-rw-r--r--src/parsec/include/sl_opt.h16
-rw-r--r--src/parsec/include/snd_api.h49
-rw-r--r--src/parsec/include/snd_wav.h20
-rw-r--r--src/parsec/include/sys_bind.h36
-rw-r--r--src/parsec/include/sys_conv.h16
-rw-r--r--src/parsec/include/sys_err.h40
-rw-r--r--src/parsec/include/sys_glob.h16
-rw-r--r--src/parsec/include/sys_msg.h41
-rw-r--r--src/parsec/include/sys_subh.h46
-rw-r--r--src/parsec/include/t_pack.h14
-rw-r--r--src/parsec/include/vid_defs.h84
-rw-r--r--src/parsec/include/vid_glob.h108
-rw-r--r--src/parsec/include/vid_init.h30
-rw-r--r--src/parsec/include/vid_plug.h17
-rw-r--r--src/parsec/include/vid_subh.h42
-rw-r--r--src/parsec/include/vid_supp.h18
-rw-r--r--src/parsec/include/vsdl_buffo.h18
-rw-r--r--src/parsec/include/vsdl_inito.h18
-rw-r--r--src/parsec/include/vsdl_ogl.h41
-rw-r--r--src/parsec/include/vsdl_suppo.h23
186 files changed, 10274 insertions, 0 deletions
diff --git a/src/parsec/include/aud_bkgn.h b/src/parsec/include/aud_bkgn.h
new file mode 100644
index 0000000..a45f917
--- /dev/null
+++ b/src/parsec/include/aud_bkgn.h
@@ -0,0 +1,29 @@
+/*
+ * PARSEC HEADER: aud_bkgn.h
+ */
+
+#ifndef _AUD_BKGN_H_
+#define _AUD_BKGN_H_
+
+
+// external functions
+
+void AUD_BackGroundPlayer_Init( int voice );
+void AUD_BackGroundPlayer_Kill();
+int AUD_BackGroundPlayer_AddSample( const char *name );
+int AUD_BackGroundPlayer_RemoveSample( char *name );
+int AUD_BackGroundPlayer_AddTrack( int track );
+int AUD_BackGroundPlayer_RemoveTrack( int track );
+int AUD_BackGroundPlayer_AddStream( const char *name );
+int AUD_BackGroundPlayer_AddSilence( int seconds );
+int AUD_BackGroundPlayer_RemoveItem( int item );
+int AUD_BackGroundPlayer_Start( int fromevent );
+int AUD_BackGroundPlayer_Stop();
+int AUD_BackGroundPlayer_IsPlaying();
+int AUD_BackGroundPlayer_Maintain();
+void AUD_BackGroundPlayer_List();
+
+
+#endif // _AUD_BKGN_H_
+
+
diff --git a/src/parsec/include/aud_comm.h b/src/parsec/include/aud_comm.h
new file mode 100644
index 0000000..5767979
--- /dev/null
+++ b/src/parsec/include/aud_comm.h
@@ -0,0 +1,16 @@
+/*
+ * PARSEC HEADER: aud_comm.h
+ */
+
+#ifndef _AUD_COMM_H_
+#define _AUD_COMM_H_
+
+
+// external functions
+
+void AUD_RegisterCDCommands();
+
+
+#endif // _AUD_COMM_H_
+
+
diff --git a/src/parsec/include/aud_defs.h b/src/parsec/include/aud_defs.h
new file mode 100644
index 0000000..c50333d
--- /dev/null
+++ b/src/parsec/include/aud_defs.h
@@ -0,0 +1,122 @@
+/*
+ * PARSEC HEADER: aud_defs.h
+ */
+
+#ifndef _AUD_DEFS_H_
+#define _AUD_DEFS_H_
+
+
+// ----------------------------------------------------------------------------
+// AUDIO SUBSYSTEM (AUD) related definitions -
+// ----------------------------------------------------------------------------
+
+
+typedef void *audiowave_t;
+
+
+extern int SELECT_VOICE;
+extern int STREAM_VOICE_L;
+extern int STREAM_VOICE_R;
+
+extern char console_audio_stream_path[];
+extern char intro_stream_name[];
+extern char menu_stream_name[];
+
+// global volume between 0 and 255
+extern int GlobalVolume;
+
+extern int aud_sample_quality;
+
+extern int aud_do_open_menu_sound_on_aud_conf;
+
+
+// audio subsystem constraints ------------------------------------------------
+//
+#define AUD_MAX_VOLUME 255
+#define AUD_MIN_VOLUME 0
+#define AUD_RANGE_VOLUME ( AUD_MAX_VOLUME - AUD_MIN_VOLUME + 1 )
+
+#define NUMCHANNELS 32
+
+
+// audio subsystem return codes -----------------------------------------------
+//
+#define AUD_RETURN_SUCCESS 0
+#define AUD_RETURN_FAILURE 1
+
+
+// flags for looping and selection of sound -----------------------------------
+//
+enum {
+
+ SOUNDPARAMS_NONE = 0x0000,
+ SOUNDPARAMS_SELECTION = 0x0001, // play only a selection of the wave
+ SOUNDPARAMS_LOOP = 0x0002, // loop whole wave, only selection or extended loop
+ SOUNDPARAMS_LOOP_COUNT = 0x0010, // loop the sound numLoops times
+ SOUNDPARAMS_VOLUME = 0x0100, // set the specified volume
+ SOUNDPARAMS_STREAMWAVE = 0x0200 // play streamed wave
+};
+
+
+// parameters when playing a sound --------------------------------------------
+//
+struct SoundParams_s {
+
+ long start; // sample to start playing
+ long end; // sample to end playing
+ long startLoop; // sample to rewind when looping
+ long endLoop; // sample to end looping in all but the last loop
+ long numLoops; // number of loops to play the sound
+ int volume; // volume this sound has to be played with
+ dword flags; // indicate which fields are set
+};
+
+
+// struct for handling distance relative volume changes -----------------------
+//
+struct DistVolumeInfo_s {
+
+ DistVolumeInfo_s* next;
+ int nChannel;
+ int nMaxVolume;
+ int nMinVolume;
+ geomv_t fMaxVolumeDist; // distance for max. volume
+ geomv_t fMinVolumeDist; // distance for min. volume
+ float fRolloffscale; // scale for the rolloff inside the sound sphere
+ GenObject* pListener;
+ GenObject* pOriginator;
+};
+
+
+// ids for different types of jim comments ------------------------------------
+//
+enum {
+
+ JIM_COMMENT_ANGRY, // 0
+ JIM_COMMENT_WEAPON, // 1
+ JIM_COMMENT_KILLED, // 2
+ JIM_COMMENT_EATTHIS, // 3
+ JIM_COMMENT_ENERGY, // 4
+ JIM_COMMENT_BORED, // 5
+
+ JIM_COMMENT_NUM_COMMENTS
+};
+
+
+// ids for different types of thrust sounds -----------------------------------
+//
+enum {
+
+ THRUST_TYPE_NORMAL, // 0
+ THRUST_TYPE_SLIDE // 1
+};
+
+
+// include system-specific subsystem prototypes -------------------------------
+//
+#include "aud_subh.h"
+
+
+#endif // _AUD_DEFS_H_
+
+
diff --git a/src/parsec/include/aud_game.h b/src/parsec/include/aud_game.h
new file mode 100644
index 0000000..1347d20
--- /dev/null
+++ b/src/parsec/include/aud_game.h
@@ -0,0 +1,236 @@
+/*
+ * PARSEC HEADER: aud_game.h
+ */
+
+#ifndef _AUD_GAME_H_
+#define _AUD_GAME_H_
+
+
+// aud_game.c implements the following functions
+// ---------------------------------------------
+// int AUD_DamageRepaired();
+// int AUD_EnergyBoosted();
+// int AUD_ExtraCollected( int type );
+// int AUD_Laser( GenObject *objectpo );
+// int AUD_Missile( GenObject *objectpo );
+// int AUD_Mine( GenObject *objectpo );
+// int AUD_Locked();
+// int AUD_LowEnergy();
+// int AUD_MaxedOut( int type );
+// int AUD_MineCollision();
+// int AUD_PlayerKilled();
+// int AUD_Select1();
+// int AUD_Select2();
+// int AUD_ShipDestroyed( GenObject *objectpo );
+// int AUD_Tracking();
+// int AUD_EnergyExtra();
+// int AUD_Lightning( ShipObject *shippo );
+// int AUD_LightningOff( ShipObject *shippo );
+// int AUD_TrackingBeep();
+// int AUD_ButtonSlided();
+// int AUD_SpaceCraftViewerIn();
+// int AUD_SpaceCraftViewerOut();
+// int AUD_NewPlayerJoined();
+// int AUD_SelectLaser( int sellaser );
+// int AUD_SelectMissile( int selmissile );
+// int AUD_SlideIn( int type );
+// int AUD_SlideOut( int type );
+// int AUD_Countdown( int num );
+// int AUD_StartThrust();
+// int AUD_IncomingMissile( int looptime );
+// int AUD_BootOnBoardComputer();
+// int AUD_StopOnBoardComputer();
+// int AUD_StartLaserBeam();
+// int AUD_StopLaserBeam();
+// int AUD_EnemyShieldHit();
+// int AUD_EnemyHullHit();
+// int AUD_PlayerShieldHit();
+// int AUD_PlayerHullHit();
+// int AUD_MineDetector();
+// int AUD_LowShields();
+// int AUD_ActivateAfterBurner();
+// int AUD_DeactivateAfterBurner();
+// int AUD_SwarmMissiles( Vertex3 *origin, GenObject *dummyobj );
+// int AUD_SwarmMissilesOff( GenObject *dummypo );
+// int AUD_PhotonLoading( ShipObject *objectpo );
+// int AUD_PhotonLoadingOff( ShipObject *objectpo );
+// int AUD_PhotonFiring( GenObject* objectpo );
+// int AUD_KillsLeft( int killsleft );
+// int AUD_EmpBlast( ShipObject *shippo, int level );
+// int AUD_YouDidIt();
+// int AUD_YouHaveLost();
+// int AUD_LiCommenting( int lcid );
+// int AUD_LiBabbling( int lbid );
+// int AUD_JimCommenting( int jcid );
+// int AUD_JimBabbling( int jbid );
+// int AUD_Helix( ShipObject *shippo );
+// int AUD_HelixOff( ShipObject *shippo );
+// int AUD_Teleporter( GenObject* teleporter );
+// int AUD_TeleporterOff( GenObject* teleporter );
+// int AUD_SkillAmazing();
+// int AUD_SkillBrilliant();
+
+
+// voice enumeration ----------------------------------------------------------
+//
+#define STD_VOICE 2
+#define TRACKING_VOICE 3
+#define LOCKED_VOICE 4
+#define LOWENERGY_VOICE 5
+#define EXPLOSION_VOICE 6
+#define DESTROYED_VOICE 7
+#define LASER1_VOICE 8
+#define MISSILE1_VOICE 9
+#define MISSILE2_VOICE 10
+#define LIGHTNING_VOICE 11
+#define TRACKBEEP_VOICE 12
+#define BACKGROUND_VOICE 13
+#define ENERGYBOOSTED_VOICE 14
+#define NEWPLAYERJOINED_VOICE 15
+#define ENEMY_HIT_VOICE 16
+#define GUN_SELECT_VOICE 17
+#define MISS_SELECT_VOICE 18
+#define THRUST_VOICE 19
+#define SLIDETHRUST_VOICE 20
+#define HELIX_VOICE 21
+#define COUNTDOWN_VOICE 22
+#define ANNOUNCE_VOICE 23
+#define AFTERBURNER_VOICE 24
+#define PHOTON_CANNON_VOICE 25
+#define SWARM_MISSILE_VOICE 26
+#define EMP_VOICE 27
+
+
+// sound effects enumeration --------------------------------------------------
+//
+enum {
+
+ SND_SELECT1,
+ SND_SELECT2,
+ SND_SHIPDESTROYED,
+ SND_NEWPLAYER,
+ SND_PLAYERLEFT,
+ SND_LOWENERGY,
+ SND_TRACKING,
+ SND_TARGETLOCKED,
+ SND_TRACKINGBEEP,
+ SND_EXPLOSION,
+ SND_LASER1,
+ SND_MISSILE1,
+ SND_MISSILE2,
+ SND_ENERGYEXTRA,
+ SND_DROPMINE,
+ SND_LASER2,
+ SND_LIGHTNING,
+ SND_MINEHIT
+};
+
+
+// sound effects names --------------------------------------------------------
+//
+#define SND_NAME_AFTERBURNER_COLLECTED "afterb collected"
+#define SND_NAME_BUTTONSLIDED "buttonslided"
+#define SND_NAME_DAMAGE_REPAIRED "damage repaired"
+#define SND_NAME_DAZZLING_COLLECTED "dazzling collected"
+#define SND_NAME_DROPMINE "drop mine"
+#define SND_NAME_DUMB_MISSILE_COLLECTED "dmiss collected"
+#define SND_NAME_ENERGYEXTRA "get energy"
+#define SND_NAME_EXPLOSION "explosion"
+#define SND_NAME_GUIDE_MISSILE_COLLECTED "gmiss collected"
+#define SND_NAME_INVISIBILITY_COLLECTED "invis collected"
+#define SND_NAME_INVUL_COLLECTED "invul collected"
+#define SND_NAME_LASER1 "laser level 1"
+#define SND_NAME_LASER2 "laser level 2"
+#define SND_NAME_LASER3 "laser level 3"
+#define SND_NAME_LIGHTNING "lightning beam"
+#define SND_NAME_LOWENERGY "low energy"
+#define SND_NAME_MAXED_OUT "maxed out"
+#define SND_NAME_MINEHIT "mine hit"
+#define SND_NAME_MINE_COLLECTED "mine collected"
+#define SND_NAME_MISSILE1 "dumb missile"
+#define SND_NAME_MISSILE2 "guided missile"
+#define SND_NAME_HELIX "helix"
+#define SND_NAME_NEWPLAYER "new player"
+#define SND_NAME_OPTIONS_SLIDE_IN "options in"
+#define SND_NAME_OPTIONS_SLIDE_OUT "options out"
+#define SND_NAME_PLAYERLEFT "player leaves"
+#define SND_NAME_SCV_SLIDE_IN "scv in"
+#define SND_NAME_SCV_SLIDE_OUT "scv out"
+#define SND_NAME_SELECT1 "cursor movement"
+#define SND_NAME_SELECT2 "option selected"
+#define SND_NAME_SELECT_LASER1 "select laser1"
+#define SND_NAME_SELECT_LASER2 "select laser2"
+#define SND_NAME_SELECT_LASER3 "select laser3"
+#define SND_NAME_SELECT_LASER4 "select laser4"
+#define SND_NAME_SELECT_LASER5 "select laser5"
+#define SND_NAME_SELECT_MISSILE1 "select missile1"
+#define SND_NAME_SELECT_MISSILE2 "select missile2"
+#define SND_NAME_SELECT_MISSILE3 "select missile3"
+#define SND_NAME_SELECT_MISSILE4 "select missile4"
+#define SND_NAME_SHIPDESTROYED "Ship destroyed"
+#define SND_NAME_TARGETLOCKED "target locked"
+#define SND_NAME_THIEF_COLLECTED "thief collected"
+#define SND_NAME_TRACKING "tracking"
+#define SND_NAME_TRACKINGBEEP "tracker beep"
+#define SND_NAME_COUNTDOWN1 "count1"
+#define SND_NAME_COUNTDOWN2 "count2"
+#define SND_NAME_COUNTDOWN3 "count3"
+#define SND_NAME_COUNTDOWN4 "count4"
+#define SND_NAME_COUNTDOWN5 "count5"
+#define SND_NAME_SWITCH_GUN "switch gun"
+#define SND_NAME_SWITCH_MISSILE "switch missile"
+#define SND_NAME_THRUST "thrust"
+#define SND_NAME_SLIDETHRUST "slidethrust"
+#define SND_NAME_INCOMING "incoming"
+#define SND_NAME_BOOTING "booting"
+#define SND_NAME_LASERBEAM "laserbeam"
+#define SND_NAME_ENEMYSHIELD_HIT "enemy hit"
+#define SND_NAME_ENEMYHULL_HIT "enemyhull hit"
+#define SND_NAME_PLAYERSHIELD_HIT "playershield hit"
+#define SND_NAME_PLAYERHULL_HIT "playerhull hit"
+#define SND_NAME_LOW_SHIELDS "low shields"
+#define SND_NAME_ONE_KILL_LEFT "one kill left"
+#define SND_NAME_TWO_KILLS_LEFT "two kills left"
+#define SND_NAME_THREE_KILLS_LEFT "two kills left"
+#define SND_NAME_JIM_COMMENT_AFRAID_1 "jim afraid 1"
+#define SND_NAME_JIM_COMMENT_AFRAID_2 "jim afraid 2"
+#define SND_NAME_JIM_COMMENT_ANGRY_1 "jim angry 1"
+#define SND_NAME_JIM_COMMENT_ANGRY_2 "jim angry 2"
+#define SND_NAME_JIM_COMMENT_WEAPON_1 "jim weapon 1"
+#define SND_NAME_JIM_COMMENT_WEAPON_2 "jim weapon 2"
+#define SND_NAME_JIM_COMMENT_WEAPON_3 "jim weapon 3"
+#define SND_NAME_JIM_COMMENT_WEAPON_4 "jim weapon 4"
+#define SND_NAME_JIM_COMMENT_KILLED_1 "jim killed 1"
+#define SND_NAME_JIM_COMMENT_KILLED_2 "jim killed 2"
+#define SND_NAME_JIM_COMMENT_EAT_THIS_1 "jim eat this 1"
+#define SND_NAME_JIM_COMMENT_EAT_THIS_2 "jim eat this 2"
+#define SND_NAME_JIM_COMMENT_ENERGY "jim energy"
+#define SND_NAME_JIM_COMMENT_BORED_1 "jim bored 1"
+#define SND_NAME_JIM_COMMENT_BORED_2 "jim bored 2"
+#define SND_NAME_DECOY_COLLECTED "decoy collected"
+#define SND_NAME_LASER_UPGRADE_COLLECTED "laser upgrade collected"
+#define SND_NAME_PHOTON_CANNON_COLLECTED "photon cannon collected"
+#define SND_NAME_SWARM_MISSILES_COLLECTED "swarm missiles collected"
+#define SND_NAME_SKILL_AMAZING "skill amazing"
+#define SND_NAME_SKILL_BRILLIANT "skill brilliant"
+#define SND_NAME_AFTERBURNER_ACTIVATE "afterburner activate"
+#define SND_NAME_AFTERBURNER_DEACTIVATE "afterburner deactivate"
+#define SND_NAME_PHOTON_LOADING "photon loading"
+#define SND_NAME_PHOTON_FIRING "photon firing"
+#define SND_NAME_SWARM_MISSILES "swarm missiles"
+#define SND_NAME_YOU_DID_IT "you did it"
+#define SND_NAME_YOU_HAVE_LOST "you have lost"
+#define SND_NAME_MINE_DETECTOR "mine detector"
+#define SND_NAME_EMP_1 "emp1"
+#define SND_NAME_EMP_2 "emp2"
+#define SND_NAME_EMP_3 "emp3"
+#define SND_NAME_TELEPORTER "teleporter"
+
+// distances for max. volume on distance based sound effects ------------------
+//
+#define MAX_VOLUME_DISTANCE_VISIBLE 4096
+#define MAX_VOLUME_DISTANCE_TELEPORTER 500
+
+#endif // _AUD_GAME_H_
+
+
diff --git a/src/parsec/include/aud_glob.h b/src/parsec/include/aud_glob.h
new file mode 100644
index 0000000..47c9f21
--- /dev/null
+++ b/src/parsec/include/aud_glob.h
@@ -0,0 +1,16 @@
+/*
+ * PARSEC HEADER: aud_glob.h
+ */
+
+#ifndef _AUD_GLOB_H_
+#define _AUD_GLOB_H_
+
+
+// ----------------------------------------------------------------------------
+// AUDIO SUBSYSTEM (AUD) related global declarations and definitions -
+// ----------------------------------------------------------------------------
+
+
+#endif // _AUD_GLOB_H_
+
+
diff --git a/src/parsec/include/aud_subh.h b/src/parsec/include/aud_subh.h
new file mode 100644
index 0000000..d23d9e4
--- /dev/null
+++ b/src/parsec/include/aud_subh.h
@@ -0,0 +1,160 @@
+/*
+ * PARSEC HEADER: aud_subh.h
+ */
+
+#ifndef _AUD_SUBH_H_
+#define _AUD_SUBH_H_
+
+
+// ----------------------------------------------------------------------------
+// AUDIO SUBSYSTEM (AUD) system-dependent function declarations -
+// ----------------------------------------------------------------------------
+
+
+// sound effects playing functions
+
+int AUD_DamageRepaired();
+int AUD_EnergyBoosted();
+int AUD_ExtraCollected( int type );
+int AUD_Laser( GenObject *objectpo );
+int AUD_Missile( GenObject *objectpo );
+int AUD_Mine( GenObject *objectpo );
+int AUD_MineCollision();
+int AUD_Locked();
+int AUD_LowEnergy();
+int AUD_MaxedOut( int type );
+int AUD_PlayerKilled();
+int AUD_Select1();
+int AUD_Select2();
+int AUD_ShipDestroyed( GenObject *objectpo );
+int AUD_Tracking();
+int AUD_EnergyExtra();
+int AUD_Lightning( ShipObject *shippo );
+int AUD_LightningOff( ShipObject *shippo );
+int AUD_TrackingBeep();
+int AUD_ButtonSlided();
+int AUD_SpaceCraftViewerIn();
+int AUD_SpaceCraftViewerOut();
+int AUD_NewPlayerJoined();
+int AUD_SelectLaser( int sellaser );
+int AUD_SelectMissile( int selmissile );
+int AUD_SlideIn( int type );
+int AUD_SlideOut( int type );
+int AUD_Countdown( int num );
+int AUD_StartThrust( int type );
+int AUD_IncomingMissile( int looptime );
+int AUD_BootOnBoardComputer();
+int AUD_StopOnBoardComputer();
+int AUD_StartLaserBeam();
+int AUD_StopLaserBeam();
+int AUD_EnemyShieldHit();
+int AUD_EnemyHullHit();
+int AUD_PlayerShieldHit();
+int AUD_PlayerHullHit();
+int AUD_MineDetector();
+int AUD_LowShields();
+int AUD_ActivateAfterBurner();
+int AUD_DeactivateAfterBurner();
+int AUD_SwarmMissiles( Vertex3 *origin, GenObject *dummyobj );
+int AUD_SwarmMissilesOff( GenObject *dummypo );
+int AUD_PhotonLoading( ShipObject *objectpo );
+int AUD_PhotonLoadingOff( ShipObject *objectpo );
+int AUD_PhotonFiring( GenObject* objectpo );
+int AUD_KillsLeft( int killsleft );
+int AUD_EmpBlast( ShipObject *shippo, int level );
+int AUD_YouDidIt();
+int AUD_YouHaveLost();
+int AUD_LiCommenting( int lcid );
+int AUD_LiBabbling( int lbid );
+int AUD_JimCommenting( int jcid );
+int AUD_JimBabbling( int jbid );
+int AUD_Helix( ShipObject *shippo );
+int AUD_HelixOff( ShipObject *shippo );
+int AUD_Teleporter( GenObject* teleporter );
+int AUD_TeleporterOff( GenObject* teleporter );
+int AUD_SkillAmazing();
+int AUD_SkillBrilliant();
+
+
+// audio api abstraction
+
+int AUDs_PlayVoice( int voice, int sound );
+int AUDs_PlayVoiceBuffer( int voice, audiowave_t wave, SoundParams_s *params );
+int AUDs_SetVoiceVolume( int voice, int volume );
+int AUDs_LoadWaveFile( int num );
+int AUDs_FreeWaveFile( int num );
+int AUDs_CreateAudioVoice( int voice );
+int AUDs_CreateAudioData( audiowave_t wave );
+int AUDs_WriteAudioData( audiowave_t wave, dword offset, dword count );
+int AUDs_DestroyAudioData( audiowave_t wave );
+int AUDs_OpenVoices( int num );
+int AUDs_CloseVoices();
+int AUDs_SetVoicePanning( int voice, int panning );
+int AUDs_SetVoiceFrequency( int voice, int freq );
+int AUDs_GetVoiceStatus( int voice, int *stopped );
+int AUDs_StopVoice( int voice, int finishloop );
+int AUDs_UpdateAudio();
+
+// cd audio functions
+
+void AUDs_CDInit();
+void AUDs_CDKill();
+int AUDs_CDOpen( short sCDDrive );
+void AUDs_CDClose();
+void AUDs_CDPlay( short sTrack, short from, short to );
+int AUDs_CDPause();
+void AUDs_CDStop();
+int AUDs_CDResume();
+int AUDs_CDEject();
+int AUDs_CDReadTrackInfo();
+int AUDs_CDHasMedia();
+int AUDs_CDCanPlay( short sTrack );
+int AUDs_CDSetVolume( int nVolume );
+int AUDs_CDGetVolume();
+int AUDs_CDList();
+int AUDs_CDGetTrackLength( short sTrack );
+
+// speech functions
+
+int AUDs_SpeakString( char *speakstr );
+
+// screen music control functions
+
+int AUDs_OpenIntroSound();
+int AUDs_CloseIntroSound();
+int AUDs_OpenMenuSound();
+int AUDs_CloseMenuSound();
+int AUDs_OpenCreditsSound();
+int AUDs_CloseCreditsSound();
+int AUDs_OpenGameSound();
+int AUDs_CloseGameSound();
+
+// streaming functions
+
+int AUDs_PlayAudioStream( char *fname );
+int AUDs_StopAudioStream();
+
+// sound effects memory management
+
+void AUDs_LoadAllSoundEffects();
+void AUDs_FreeAllSoundEffects();
+
+// volume control
+
+void AUDs_MinMusicVolume();
+void AUDs_MaxMusicVolume();
+void AUDs_FadeMusicVolume();
+
+// needs to be called regularly
+
+void AUDs_MaintainSound();
+
+// init functions
+
+int AUDs_InitSoundSys();
+int AUDs_KillSoundSys();
+
+
+#endif // _AUD_SUBH_H_
+
+
diff --git a/src/parsec/include/aud_supp.h b/src/parsec/include/aud_supp.h
new file mode 100644
index 0000000..a5819ff
--- /dev/null
+++ b/src/parsec/include/aud_supp.h
@@ -0,0 +1,129 @@
+/*
+ * PARSEC HEADER: aud_supp.h
+ */
+
+#ifndef _AUD_SUPP_H_
+#define _AUD_SUPP_H_
+
+
+// sample-channel relation (holds id once sample is fetched by name) ----------
+//
+struct sample_channel_info_s {
+
+ const char* samplename;
+ const char* fallbacksample;
+ int sampleid;
+ int channel;
+ int interruptold;
+};
+
+
+// macro to fetch a wave for sample x -----------------------------------------
+//
+#define AUD_FETCHSAMPLE(x) \
+\
+ audiowave_t fetch_wave = NULL; \
+ sampleinfo_s* fetch_pSampleInfo; \
+ SoundParams_s fetch_params; \
+ memset( &fetch_params, 0, sizeof( fetch_params ) ); \
+ static int sampleid = -1; \
+ if ( sampleid == -1 ) { \
+ fetch_pSampleInfo = AUD_FetchSampleByName((x),&sampleid); \
+ } else { \
+ fetch_pSampleInfo = AUD_FetchSampleById(sampleid); \
+ } \
+ if(fetch_pSampleInfo != NULL) { \
+ fetch_wave = (audiowave_t)fetch_pSampleInfo->samplepointer; \
+ fetch_params.volume = ( fetch_pSampleInfo->volume == -1 ) ? \
+ AUD_MAX_VOLUME : fetch_pSampleInfo->volume; \
+ fetch_params.flags = SOUNDPARAMS_VOLUME; \
+ }
+
+
+// macro to fetch a wave for sample x store id in y ---------------------------
+//
+#define AUD_FETCHSAMPLE_EX(x,y) \
+\
+ audiowave_t fetch_wave = NULL; \
+ sampleinfo_s* fetch_pSampleInfo; \
+ SoundParams_s fetch_params; \
+ memset( &fetch_params, 0, sizeof( fetch_params ) ); \
+ if ( (y) == -1 ) { \
+ fetch_pSampleInfo = AUD_FetchSampleByName((x),&(y)); \
+ } else { \
+ fetch_pSampleInfo = AUD_FetchSampleById(y); \
+ } \
+ if(fetch_pSampleInfo != NULL) { \
+ fetch_wave = (audiowave_t)fetch_pSampleInfo->samplepointer; \
+ fetch_params.volume = ( fetch_pSampleInfo->volume == -1 ) ? \
+ AUD_MAX_VOLUME : fetch_pSampleInfo->volume; \
+ fetch_params.flags = SOUNDPARAMS_VOLUME; \
+ }
+
+
+// macro to fetch a wave for sample x, fallback to sample y -------------------
+//
+#define AUD_FETCHSAMPLE_FALLBACK(x,y) \
+\
+ audiowave_t fetch_wave = NULL; \
+ sampleinfo_s* fetch_pSampleInfo; \
+ SoundParams_s fetch_params; \
+ memset( &fetch_params, 0, sizeof( fetch_params ) ); \
+ static int sampleid = -1; \
+ if ( sampleid == -1 ) { \
+ fetch_pSampleInfo = AUD_FetchSampleByName( (x) ,&sampleid); \
+ if(fetch_pSampleInfo == NULL) { \
+ fetch_pSampleInfo = AUD_FetchSampleByName( (y) ,&sampleid); \
+ } \
+ } else { \
+ fetch_pSampleInfo = AUD_FetchSampleById(sampleid); \
+ } \
+ if(fetch_pSampleInfo != NULL) { \
+ fetch_wave = (audiowave_t)fetch_pSampleInfo->samplepointer; \
+ fetch_params.volume = ( fetch_pSampleInfo->volume == -1 ) ? \
+ AUD_MAX_VOLUME : fetch_pSampleInfo->volume; \
+ fetch_params.flags = SOUNDPARAMS_VOLUME; \
+ }
+
+
+// macro to fetch a wave for sample x, fallback to sample z, store id in y ----
+//
+#define AUD_FETCHSAMPLE_FALLBACK_EX(x,y,z) \
+\
+ audiowave_t fetch_wave = NULL; \
+ sampleinfo_s* fetch_pSampleInfo; \
+ SoundParams_s fetch_params; \
+ memset( &fetch_params, 0, sizeof( fetch_params ) ); \
+ if ( (y) == -1 ) { \
+ fetch_pSampleInfo = AUD_FetchSampleByName( (x) ,&(y)); \
+ if(fetch_pSampleInfo == NULL) { \
+ fetch_pSampleInfo = AUD_FetchSampleByName( (z) ,&(y)); \
+ } \
+ } else { \
+ fetch_pSampleInfo = AUD_FetchSampleById((y)); \
+ } \
+ if(fetch_pSampleInfo != NULL) { \
+ fetch_wave = (audiowave_t)fetch_pSampleInfo->samplepointer; \
+ fetch_params.volume = ( fetch_pSampleInfo->volume == -1 ) ? \
+ AUD_MAX_VOLUME : fetch_pSampleInfo->volume; \
+ fetch_params.flags = SOUNDPARAMS_VOLUME; \
+ }
+
+
+// encapsulate global audio disabling -----------------------------------------
+//
+#define DISABLE_AUDIO_FUNCTIONS (!Op_SoundEffects)
+#define DISABLE_MUSIC_FUNCTIONS (!Op_Music)
+
+
+// external functions ---------------------------------------------------------
+//
+sampleinfo_s* AUD_FetchSampleByName( const char *name, int *id );
+sampleinfo_s* AUD_FetchSampleById( int id );
+int AUD_SetSampleVolume( int id, int volume );
+int AUD_PlaySampleOnChannel( sample_channel_info_s *info );
+
+
+#endif // _AUD_SUPP_H_
+
+
diff --git a/src/parsec/include/con_act.h b/src/parsec/include/con_act.h
new file mode 100644
index 0000000..a4f6294
--- /dev/null
+++ b/src/parsec/include/con_act.h
@@ -0,0 +1,239 @@
+/*
+ * PARSEC HEADER: con_act.h
+ */
+
+#ifndef _CON_ACT_H_
+#define _CON_ACT_H_
+
+
+// action commands
+
+enum {
+
+ ACM_SIGNATURE,
+
+ ACM_IDLEWAIT,
+
+ ACM_PITCH,
+ ACM_YAW,
+ ACM_ROLL,
+ ACM_SLIDEX,
+ ACM_SLIDEY,
+ ACM_MOVE,
+
+ ACM_CAMROT1,
+ ACM_CAMROT2,
+ ACM_CAMROT3,
+ ACM_CAMORIGIN,
+
+ ACM_FIXROT1,
+ ACM_FIXROT2,
+ ACM_FIXROT3,
+
+ ACM_PACKET,
+
+ ACM_FADEOUT,
+ ACM_FADEIN,
+ ACM_WFADEOUT,
+ ACM_WFADEIN,
+ ACM_BLACK,
+ ACM_WHITE,
+ ACM_STDPALETTE,
+
+ ACM_SAVESCREEN,
+ ACM_SAVELIST,
+ ACM_SAVECAMERA,
+ ACM_SAVEFSTARS,
+ ACM_SAVEPSTARS,
+ ACM_SAVEREMOTE,
+
+ ACM_KILLPSTARS,
+ ACM_ADDPSTAR,
+
+ ACM_PREPRESTORE,
+
+ ACM_CREATEOBJECT,
+ ACM_CREATEEXTRA,
+ ACM_DESTROYLIST,
+
+ ACM_REMOTEPLAYER,
+ ACM_REMOTEMATRIX,
+ ACM_REMOTENAME,
+ ACM_REMOTEJOIN,
+ ACM_REMOTEUNJOIN,
+
+ ACM_CLEARDEMO,
+
+ ACM_OBJMATRXCOL1,
+ ACM_OBJMATRXCOL2,
+ ACM_OBJMATRXCOL3,
+ ACM_OBJMATRXCOL4,
+
+ ACM_LASER_SPEED,
+ ACM_LASER_DIRVEC,
+ ACM_LASER_OWNER,
+ ACM_MISSL_SPEED,
+ ACM_MISSL_DIRVEC,
+ ACM_MISSL_OWNER,
+ ACM_MISSL_TARGET,
+ ACM_MINE_OWNER,
+
+ ACM_ENERGYFIELD,
+ ACM_SPREADFIRE,
+ ACM_LIGHTNINGON,
+ ACM_LIGHTNINGOFF,
+
+ ACM_SETOBJECTID,
+ ACM_SETOBJECTHOSTID,
+
+ ACM_SIMULKEYPRESS,
+ ACM_SIMULKEYRELEASE,
+
+ ACM_MS_CURDAMAGE,
+ ACM_MS_MAXDAMAGE,
+ ACM_MS_CURENERGY,
+ ACM_MS_MAXENERGY,
+ ACM_MS_CURSPEED,
+ ACM_MS_MAXSPEED,
+ ACM_MS_NUMMISSLS,
+ ACM_MS_MAXNUMMISSLS,
+ ACM_MS_NUMHOMMISSLS,
+ ACM_MS_MAXNUMHOMMISSLS,
+ ACM_MS_NUMMINES,
+ ACM_MS_MAXNUMMINES,
+ ACM_MS_WEAPONS,
+ ACM_MS_SPECIALS,
+
+ ACM_GL_SELECTEDLASER,
+ ACM_GL_SELECTEDMISSILE,
+ ACM_GL_CURGUN,
+ ACM_GL_CURLAUNCHER,
+ ACM_GL_PANEL3CONTROL,
+ ACM_GL_PANEL4CONTROL,
+ ACM_GL_TARGETOBJNUMBER,
+
+ ACM_WRITESMALL,
+ ACM_WRITEBIG1,
+ ACM_WRITEBIG2,
+ ACM_WRITEBIG3,
+ ACM_CLEARTEXT,
+
+ ACM_PLAYSTREAM,
+ ACM_STOPSTREAM,
+ ACM_PLAYSOUND,
+
+ ACM_AUX,
+ ACM_ENTRYMODE,
+
+ ACM_SERVERMSG,
+
+ ACM_HELIXON,
+ ACM_HELIXOFF,
+
+ ACM_REMOTEMAXPLAYERS,
+
+ ACM_INCLUDEDEMO,
+
+ ACM_MS_WEAPONSACTIVE,
+ ACM_REMOTEWEAPONSACTIVE,
+
+ ACM_WRITECONSOLETEXT,
+ ACM_DISPLAYMESSAGE,
+
+ ACM_CD_OPEN,
+ ACM_CD_CLOSE,
+ ACM_CD_PLAY,
+ ACM_CD_PAUSE,
+ ACM_CD_RESUME,
+ ACM_CD_STOP,
+ ACM_CD_VOLUME,
+
+ ACM_EXECCOMMAND,
+
+ ACM_CLASSMAPID,
+ ACM_CLASSMAPNAME,
+
+ ACM_AUXDATA,
+ ACM_SYSREFFRAMES,
+
+ ACM_SCHEDULECOMMAND,
+
+ ACM_LIGHTAMBIENT,
+ ACM_LIGHTDIFFUSE,
+ ACM_LIGHTSPECULAR,
+
+ ACM_MS_NUMPARTMISSLS,
+ ACM_MS_MAXNUMPARTMISSLS,
+
+ ACM_PHOTONON,
+ ACM_PHOTONOFF,
+
+ ACM_EMPON,
+ ACM_EMPOFF,
+ ACM_EMP,
+
+ ACM_NUM_COMMANDS // must be last!!
+};
+
+
+// action commands flags
+
+#define ACF_NODIRECT 0x0000 // command not directly callable
+#define ACF_DIRECT 0x0001 // command directly callable
+#define ACF_NOCOMPILE 0x0000 // command not compilable
+#define ACF_COMPILE 0x0002 // command is compilable
+#define ACF_NOPARAMS 0x0000 // command has no parameters
+#define ACF_INTPARAMS 0x0010 // command has int parameters
+#define ACF_FLOATPARAMS 0x0020 // command has float parameters
+#define ACF_STRINGPARAM 0x0040 // command has a string parameter
+#define ACF_PACKETPARAM 0x0080 // command has a packet attached
+#define ACF_DEMOPARAM 0x0100 // command has an entire demo attached
+#define ACF_SCHEDPARAM 0x0200 // command has a command to schedule
+
+#define ACF_STRIP_SPACE 0x1000 // strip leading and trailing whitespace
+#define ACF_STRINGSTRIP ( ACF_STRINGPARAM | ACF_STRIP_SPACE )
+
+#define ACM_EAT_SPACE(c) ( ( action_commands[ c ].flags & ACF_STRIP_SPACE ) != 0 )
+#define ACF_EAT_SPACE(f) ( ( (f) & ACF_STRIP_SPACE ) != 0 )
+
+
+// action command description
+
+struct act_command_s {
+
+ const char *command; // command string
+ void (*func)(void); // function responsible for command execution
+ dword flags; // flag word
+ int numparameters; // number of parameters the command takes
+};
+
+extern act_command_s action_commands[];
+
+
+// macro to retrieve action command strings
+#define ACMSTR(x) (action_commands[x].command)
+
+// macro to retrieve string length of action commmands
+#define ACMLEN(x) strlen(action_commands[x].command)
+
+// macro to determine if action command is directly callable
+#define ACMCALLABLE(x) ((action_commands[x].flags&ACF_DIRECT)!=0)
+
+
+// external functions
+
+int ExecBinCommands( char* &data, int interactive );
+void ResetClassMapTable();
+void ResetScheduledActions();
+void SaveGameState();
+void ActionCommand( char *cstr );
+
+
+// external variables
+
+extern int con_audio_stream_started;
+
+
+#endif // _CON_ACT_H_
+
+
diff --git a/src/parsec/include/con_aux.h b/src/parsec/include/con_aux.h
new file mode 100644
index 0000000..2d73b78
--- /dev/null
+++ b/src/parsec/include/con_aux.h
@@ -0,0 +1,331 @@
+/*
+ * PARSEC HEADER: con_aux.h
+ */
+
+#ifndef _CON_AUX_H_
+#define _CON_AUX_H_
+
+
+// size of aux arrays
+#define MAX_AUX_ENABLING 512
+#define MAX_AUX_DATA 128
+
+//FIXME_SERVER: seperate aux flags for client and server
+
+
+// auxenabling functionality (AuxEnabling[]) :
+//
+// 0: Polygons do not fill the z-buffer
+// 1: Enable gouraud shading
+// 2: BSP: Extended sprod check
+// 3: if [2]: draw node itself; otherwise don't
+// 4: if [2]: draw back node, then front node (otherwise the other way around)
+// 5: if [2]: if ( |sprod| < eps ) skip entire subtree
+// 6: Disable ShipObjects
+// 7: Disable ExtraObjects
+// 8: Disable LaserObjects
+// 9: Disable MisslObjects
+// 10: Show speed as number after change
+// 11: Show energy as number after change
+// 12: Don't show player names (panel)
+// 13: Don't show missile stats (panel)
+// 14: Show missile grafix panel
+// 15: Use simple explosion
+// 16: Don't show sent text in console
+// ...well, the number of flags outpaced my motivation
+// to describe them here; see defines below.
+
+#define AUX_POLYGONS_DONT_FILL_ZBUFFER AuxEnabling[ 0 ]
+#define AUX_ENABLE_GOURAUD_SHADING AuxEnabling[ 1 ]
+#define AUX_BSP_DO_EXTENDED_SPROD_CHECK AuxEnabling[ 2 ]
+#define AUX_BSP_EXTCHECK_DRAW_NODE AuxEnabling[ 3 ]
+#define AUX_BSP_EXTCHECK_BACKNODE_FIRST AuxEnabling[ 4 ]
+#define AUX_BSP_EXTCHECK_SKIPSUBTREE AuxEnabling[ 5 ]
+#define AUX_OBJCTRL_DISABLE_SHIPOBJECTS AuxEnabling[ 6 ]
+#define AUX_OBJCTRL_DISABLE_EXTRAOBJECTS AuxEnabling[ 7 ]
+#define AUX_OBJCTRL_DISABLE_LASEROBJECTS AuxEnabling[ 8 ]
+#define AUX_OBJCTRL_DISABLE_MISSLOBJECTS AuxEnabling[ 9 ]
+#define AUX_HUD_SHOW_CHANGED_SPEED_NUMBER AuxEnabling[ 10 ]
+#define AUX_HUD_SHOW_CHANGED_ENERGY_NUMBER AuxEnabling[ 11 ]
+#define AUX_HUD_PANEL_3_CONTROL AuxEnabling[ 12 ]
+#define AUX_HUD_MISSILE_BAR_NUMBERS AuxEnabling[ 13 ]
+#define AUX_HUD_PANEL_4_CONTROL AuxEnabling[ 14 ]
+#define AUX_USE_SIMPLE_EXPLOSION AuxEnabling[ 15 ]
+#define AUX_DISABLE_CONSOLE_SAY_OUTPUT AuxEnabling[ 16 ]
+#define AUX_HUD_DISABLE_USER_DISPLAYS AuxEnabling[ 17 ]
+#define AUX_DONT_DRAW_BLUEPRINTS AuxEnabling[ 18 ]
+#define AUX_CREATE_PROPULSION_FUMES AuxEnabling[ 19 ]
+#define AUX_DISABLE_SERVER_SETTINGS_BUTTON AuxEnabling[ 20 ]
+#define AUX_DISABLE_SERVER_MENU_BUTTON AuxEnabling[ 21 ]
+#define AUX_DISABLE_ZBUFFER_CLEAR AuxEnabling[ 22 ]
+#define AUX_DISALLOW_USERCONTROLLED_MOTION AuxEnabling[ 23 ]
+#define AUX_DISABLE_SOUNDEFFECTS AuxEnabling[ 24 ]
+#define AUX_DISABLE_CLEARDEMO_ON_REPSTOP AuxEnabling[ 25 ]
+#define AUX_DISPLAY_RATE_IN_VIEWERS AuxEnabling[ 26 ]
+#define AUX_AWAITRETRACE_ON_FRAMEFINISH AuxEnabling[ 27 ]
+#define AUX_DISABLE_FIXED_STAR_RENDERING AuxEnabling[ 28 ]
+#define AUX_DISABLE_PSEUDO_STAR_RENDERING AuxEnabling[ 29 ]
+#define AUX_DISABLE_FLASHWHITE_ON_GAMEENTRY AuxEnabling[ 30 ]
+#define AUX_WAIT_FOR_KEYPRESS_AFTER_FADEIN AuxEnabling[ 31 ]
+#define AUX_DISABLE_REORTHO_CAMERA_IN_GAME AuxEnabling[ 32 ]
+#define AUX_DISABLE_REORTHO_IN_VIEWERS AuxEnabling[ 33 ]
+#define AUX_DONT_CULL_PARTICLE_OBJECTS AuxEnabling[ 34 ]
+#define AUX_DISABLE_PARTICLE_SYSTEM AuxEnabling[ 35 ]
+#define AUX_ENABLE_TEXTURE_OVERLOADING AuxEnabling[ 36 ]
+#define AUX_ENABLE_OBJECT_OVERLOADING AuxEnabling[ 37 ]
+#define AUX_ENABLE_BITMAP_OVERLOADING AuxEnabling[ 38 ]
+#define AUX_DISABLE_POLYGON_MIPMAPPING AuxEnabling[ 39 ]
+#define AUX_DISABLE_BITMAP_MIPMAPPING AuxEnabling[ 40 ]
+#define AUX_DISABLE_POLYGON_FILTERING AuxEnabling[ 41 ]
+#define AUX_DISABLE_BITMAP_FILTERING AuxEnabling[ 42 ]
+#define AUX_ENABLE_PANORAMIC_BACKGROUND AuxEnabling[ 43 ]
+#define AUX_DISABLE_PANORAMIC_LAYER_1 AuxEnabling[ 44 ]
+#define AUX_DISABLE_PANORAMIC_LAYER_2 AuxEnabling[ 45 ]
+#define AUX_DISABLE_PANORAMIC_LAYER_3 AuxEnabling[ 46 ]
+#define AUX_DISABLE_TEXTURE_WRAPPING AuxEnabling[ 47 ]
+#define AUX_DISABLE_BUFFER_CLEAR AuxEnabling[ 48 ]
+#define AUX_SPREADFIRE_PARTICLES_EXTINFO AuxEnabling[ 49 ]
+#define AUX_LIGHTNING_PARTICLES_EXTINFO AuxEnabling[ 50 ]
+#define AUX_EXPLOSION_PARTICLES_EXTINFO AuxEnabling[ 51 ]
+#define AUX_ENERGYFIELD_PARTICLES_EXTINFO AuxEnabling[ 52 ]
+#define AUX_PROTSHIELD_PARTICLES_EXTINFO AuxEnabling[ 53 ]
+#define AUX_MEGASHIELD_PARTICLES_EXTINFO AuxEnabling[ 54 ]
+#define AUX_DONT_FLASH_SCREEN_ON_FLARE AuxEnabling[ 55 ]
+#define AUX_DONT_DRAW_FLARE_CIRCLES AuxEnabling[ 56 ]
+#define AUX_DISABLE_SCREENSHOT_MESSAGE AuxEnabling[ 57 ]
+#define AUX_DISABLE_FLOATLOGO_ROTATION AuxEnabling[ 58 ]
+#define AUX_VERBOSE_TEXTURE_MEM_MANAGER AuxEnabling[ 59 ]
+#define AUX_DISABLE_OBJECT_DEPTH_SORT AuxEnabling[ 60 ]
+#define AUX_ENABLE_CONSOLE_DEBUG_MESSAGES AuxEnabling[ 61 ]
+#define AUX_ENABLE_CONSOLE_MESSAGE_LOG AuxEnabling[ 62 ]
+#define AUX_RECORD_PACKETS_INTO_SESSION AuxEnabling[ 63 ]
+#define AUX_CREATE_EXTRAS_DURING_REPLAY AuxEnabling[ 64 ]
+#define AUX_DISABLE_ABSOLUTE_RECORDING AuxEnabling[ 65 ]
+#define AUX_RECORD_VERBOSE_PACKETS AuxEnabling[ 66 ]
+#define AUX_PERFORM_AUTOMATIC_CONNECT AuxEnabling[ 67 ]
+#define AUX_DISABLE_REPLAY_NET_SIMULATION AuxEnabling[ 68 ]
+#define AUX_DISABLE_LOCAL_STARGATE AuxEnabling[ 69 ]
+#define AUX_PARTICLE_BASE_EXPLOSION AuxEnabling[ 70 ]
+#define AUX_NO_DELAYED_JOIN_REPLAY AuxEnabling[ 71 ]
+#define AUX_HUD_ENABLE_PACKET_LOSS_METER AuxEnabling[ 72 ]
+#define AUX_PACKETDROP_TESTING AuxEnabling[ 73 ]
+#define AUX_DISABLE_TALK_ESCAPE_ON_TAB AuxEnabling[ 74 ]
+#define AUX_USE_BIG_FONT_IN_MESSAGE_AREA AuxEnabling[ 75 ]
+#define AUX_HUD_DISABLE_NONBASIC_DISPLAYS AuxEnabling[ 76 ]
+#define AUX_HUD_ENABLE_DEBUGINFO AuxEnabling[ 77 ]
+#define AUX_HUD_DEBUGINFO_MEMORY AuxEnabling[ 78 ]
+#define AUX_HUD_DEBUGINFO_OBJECTS AuxEnabling[ 79 ]
+#define AUX_HUD_DEBUGINFO_POSITION AuxEnabling[ 80 ]
+#define AUX_HUD_DEBUGINFO_PACKETS AuxEnabling[ 81 ]
+#define AUX_HUD_DEBUGINFO_GEOMETRY AuxEnabling[ 82 ]
+#define AUX_HUD_DEBUGINFO_RASTERIZATION AuxEnabling[ 83 ]
+#define AUX_ADVANCED_PLAYERINTERPOLATION AuxEnabling[ 84 ]
+#define AUX_SAVE_PERSISTENT_INTCOMMANDS AuxEnabling[ 85 ]
+#define AUX_SAVE_PERSISTENT_USRCOMMANDS AuxEnabling[ 86 ]
+#define AUX_SAVE_PERSISTENT_AUX_ARRAY AuxEnabling[ 87 ]
+#define AUX_DISABLE_RC_SCRIPT_SAVING AuxEnabling[ 88 ]
+#define AUX_FORCE_WORKDIR_TO_CURRENT AuxEnabling[ 89 ]
+#define AUX_FORCE_FILEPATH_TO_CURRENT AuxEnabling[ 90 ]
+#define AUX_DISABLE_DEAD_RECKONING AuxEnabling[ 91 ]
+#define AUX_REDIRECT_TALK_TO_IRC_SERVER AuxEnabling[ 92 ]
+#define AUX_HUD_DEBUGINFO_OVER_CONSOLE AuxEnabling[ 93 ]
+#define AUX_EXPLOSION_DRAW_SHOCKWAVE AuxEnabling[ 94 ]
+#define AUX_CMD_WRITE_ACTIVE_IN_TEXTMODE AuxEnabling[ 95 ]
+#define AUX_ENABLE_VOLUMETRIC_CLOUDS AuxEnabling[ 96 ]
+#define AUX_SMALL_PARTICLE_TRIANGLES AuxEnabling[ 97 ]
+#define AUX_OBJ_SORT_POLYS_ON_TEXTURE AuxEnabling[ 98 ]
+#define AUX_NO_DEFAULT_RASTERIZER_STATE AuxEnabling[ 99 ]
+#define AUX_ALLOW_ONLY_TEXTURE_LOADING AuxEnabling[ 100 ]
+#define AUX_CMD_WRITE_DISABLE_OUTPUT AuxEnabling[ 101 ]
+#define AUX_ATTACH_OBJECT_PARTICLES AuxEnabling[ 102 ]
+#define AUX_STOP_DEMO_REPLAY_ON_CONNECT AuxEnabling[ 103 ]
+#define AUX_DISABLE_DISCONNECT_BUTTON AuxEnabling[ 104 ]
+#define AUX_ENABLE_SAMPLE_OVERLOADING AuxEnabling[ 105 ]
+#define AUX_ENABLE_SHADER_OVERLOADING AuxEnabling[ 106 ]
+#define AUX_ATTACH_THRUST_OBJECTS AuxEnabling[ 107 ]
+#define AUX_DISABLE_GENOBJECT_PARTICLES AuxEnabling[ 108 ]
+#define AUX_AUTOSTART_BACKGROUNDPLAYER AuxEnabling[ 109 ]
+#define AUX_HUD_ADVANCED_KILLSTATS AuxEnabling[ 110 ]
+#define AUX_DISABLE_PACKAGE_SCRIPTS AuxEnabling[ 111 ]
+#define AUX_ENABLE_KILLED_SHIP_EXTRAS AuxEnabling[ 112 ]
+#define AUX_STOP_AT_END_OF_CD_TRACK AuxEnabling[ 113 ]
+#define AUX_DIRECT_CLUSTER_RENDERING AuxEnabling[ 114 ]
+#define AUX_ENABLE_ELITE_RADAR AuxEnabling[ 115 ]
+#define AUX_DRAW_MISSILES_ON_RADAR AuxEnabling[ 116 ]
+#define AUX_DRAW_COCKPIT AuxEnabling[ 117 ]
+#define AUX_DRAW_COCKPIT_DAMAGE AuxEnabling[ 118 ]
+#define AUX_DRAW_COCKPIT_WEAPONS AuxEnabling[ 119 ]
+#define AUX_DRAW_COCKPIT_RADAR AuxEnabling[ 120 ]
+#define AUX_DRAW_COCKPIT_ICONBAR AuxEnabling[ 121 ]
+#define AUX_OBJCTRL_DISABLE_CUSTOMOBJECTS AuxEnabling[ 122 ]
+#define AUX_DRAW_COCKPIT_CROSSHAIR AuxEnabling[ 123 ]
+#define AUX_ENABLE_CUSTOMOBJECT_HUDDISPLAY AuxEnabling[ 124 ]
+#define AUX_DRAW_STARGATES_ON_RADAR AuxEnabling[ 125 ]
+#define AUX_ENABLE_COCKPIT_SWAYING AuxEnabling[ 126 ]
+#define AUX_ENABLE_COCKPIT_RATTLING AuxEnabling[ 127 ]
+#define AUX_ENABLE_SMOOTH_SHIP_CONTROL AuxEnabling[ 128 ]
+#define AUX_ENABLE_EXTENDED_TARGET_CARET AuxEnabling[ 129 ]
+#define AUX_SHOW_PING_IN_SERVERLIST AuxEnabling[ 130 ]
+#define AUX_DRAW_COCKPIT_ICONBAR_BACKGROUND AuxEnabling[ 131 ]
+#define AUX_ENABLE_MISSILE_PROPULSION_FUMES AuxEnabling[ 132 ]
+#define AUX_LASERBEAM_INSTEAD_OF_LASER AuxEnabling[ 133 ]
+#define AUX_ENABLE_FREE_CAMERA AuxEnabling[ 134 ]
+#define AUX_FLAGWORD_SCREENSHOT_HELPERS AuxEnabling[ 135 ]
+#define AUX_DISPLAY_REMOTE_JOIN_OBJECT_ID AuxEnabling[ 136 ]
+#define AUX_ENABLE_REFFRAME_TIMEPLOT AuxEnabling[ 137 ]
+#define AUX_DISABLE_NEARPLANE_TOUCH_CULLING AuxEnabling[ 138 ]
+#define AUX_DISABLE_MSGAREA_IF_CONSOLE_OPEN AuxEnabling[ 139 ]
+#define AUX_ENABLE_MISSILE_POLYGON_TRAILS AuxEnabling[ 140 ]
+#define AUX_ENABLE_FUNKY_AUDIO_COMMENTS AuxEnabling[ 141 ]
+#define AUX_DISABLE_PACKAGE_SCRIPT_LISTING AuxEnabling[ 142 ]
+#define AUX_DISABLE_DEMO_REPLAY_IN_MENU AuxEnabling[ 143 ]
+#define AUX_NO_DELAYED_CREATE_OBJECT_REPLAY AuxEnabling[ 144 ]
+#define AUX_DISABLE_SORTED_PLAYERLIST AuxEnabling[ 145 ]
+#define AUX_DISABLE_OBJECT_FREE_ON_CLEARDEMO AuxEnabling[ 146 ]
+#define AUX_ENABLE_DEMO_REPLAY_INFO_DISPLAY AuxEnabling[ 147 ]
+#define AUX_DISABLE_JOYSTICK_THROTTLE AuxEnabling[ 148 ]
+#define AUX_DISABLE_PACKAGE_DATA_FILES AuxEnabling[ 149 ]
+#define AUX_DONT_OVERLOAD_TEXTURE_GEOMETRY AuxEnabling[ 150 ]
+#define AUX_ENABLE_GAME_STATUS_WINDOW AuxEnabling[ 151 ]
+#define AUX_DISABLE_QUIT_BUTTON AuxEnabling[ 152 ]
+#define AUX_DISABLE_MESSAGE_AREA AuxEnabling[ 153 ]
+#define AUX_ENABLE_DEMO_REPLAY_USER_INPUT AuxEnabling[ 154 ]
+#define AUX_DISABLE_USER_GAMELOOP_EXIT AuxEnabling[ 155 ]
+#define AUX_DISABLE_FLOATING_MENU_DRAWING AuxEnabling[ 156 ]
+#define AUX_SAVE_AUX_ARRAY_ON_DEMO_REPLAY AuxEnabling[ 157 ]
+#define AUX_SAVE_AUX_ARRAY_ON_DEMO_RECORD AuxEnabling[ 158 ]
+#define AUX_SAVE_PLAYER_NAME_ON_DEMO_REPLAY AuxEnabling[ 159 ]
+#define AUX_KILL_LIMIT_FOR_GAME_END AuxEnabling[ 160 ]
+#define AUX_DISABLE_JOIN_GAME_BUTTON AuxEnabling[ 161 ]
+#define AUX_KILL_LIMIT_RESET_ON_GAME_END AuxEnabling[ 162 ]
+#define AUX_ENABLE_JOYSTICK_BINDING AuxEnabling[ 163 ]
+#define AUX_ENABLE_DEPTHCUED_RADAR_DOTS AuxEnabling[ 164 ]
+#define AUX_ENABLE_MOUSE_FOR_MENU_SCREENS AuxEnabling[ 165 ]
+#define AUX_CHEAT_DISABLE_AMMO_CHECKS AuxEnabling[ 166 ]
+#define AUX_CHEAT_DISABLE_ENERGY_CHECKS AuxEnabling[ 167 ]
+#define AUX_CHEAT_DISABLE_DEVICE_CHECKS AuxEnabling[ 168 ]
+#define AUX_DRAW_WIREFRAME AuxEnabling[ 169 ]
+#define AUX_DRAW_NORMALS AuxEnabling[ 170 ]
+#define AUX_ENABLE_LIGHTING_TYPES AuxEnabling[ 171 ]
+#define AUX_ENABLE_COLANIM_OVERLOADING AuxEnabling[ 172 ]
+#define AUX_ENABLE_TRILINEAR_FILTERING AuxEnabling[ 173 ]
+#define AUX_ENABLE_MOVIE_WRITING AuxEnabling[ 174 ]
+#define AUX_ENABLE_VOLUMETRIC_FOG AuxEnabling[ 175 ]
+#define AUX_ENABLE_MAX_DISPLAY_FREQ AuxEnabling[ 176 ]
+#define AUX_ENABLE_FOV_CONTROL AuxEnabling[ 177 ]
+#define AUX_ALLOW_CACHE_TEXTURE_EVICT AuxEnabling[ 178 ]
+#define AUX_DISABLE_CLEAR_TEXT_ON_CLEARDEMO AuxEnabling[ 179 ]
+#define AUX_DISABLE_CLASS_MAP_TABLE_RESET AuxEnabling[ 180 ]
+#define AUX_SAVE_REFFRAMEFREQ_ON_DEMO_REPLAY AuxEnabling[ 181 ]
+#define AUX_SAVE_LIGHTINGCONF_ON_DEMO_REPLAY AuxEnabling[ 182 ]
+#define AUX_ENABLE_MULTIPLE_TEXTURE_UNITS AuxEnabling[ 183 ]
+#define AUX_DISABLE_CAMFILT_RESET_ON_CLEARDEMO AuxEnabling[ 184 ]
+#define AUX_DISABLE_DYING_SHIP_MOVEMENT AuxEnabling[ 185 ]
+#define AUX_DISABLE_PANEL_DECORATIONS AuxEnabling[ 186 ]
+#define AUX_DISABLE_KILLS_LEFT_ANNOUNCEMENT AuxEnabling[ 187 ]
+#define AUX_DISABLE_AUTOMATIC_NEBULA_LIGHTING AuxEnabling[ 188 ]
+#define AUX_DISABLE_BACKGROUNDPLAYER_ITEM_FILL AuxEnabling[ 189 ]
+#define AUX_DRAW_PLANETS_ON_RADAR AuxEnabling[ 190 ]
+#define AUX_DRAW_SERVER_PING AuxEnabling[ 191 ]
+#define AUX_DISABLE_POINT_VISIBILITY_DETECTION AuxEnabling[ 192 ]
+#define AUX_ENABLE_TEXTURE_PRECACHING AuxEnabling[ 193 ]
+#define AUX_DISABLE_LEVEL_SYNC AuxEnabling[ 194 ]
+#define AUX_DRAW_TELEPORTERS_ON_RADAR AuxEnabling[ 195 ]
+#define AUX_DISABLE_LEVEL_CONSOLE_MESSAGES AuxEnabling[ 196 ]
+#define AUX_NEBULA_FLAGS AuxEnabling[ 197 ]
+#define AUX_NETCODE_FLAGS AuxEnabling[ 198 ]
+#define AUX_ENABLE_BEEP_ON_RECV AuxEnabling[ 199 ]
+#define AUX_DEBUG_NETSTREAM_DUMP AuxEnabling[ 200 ]
+#define AUX_ANISOTROPIC_FILTERING AuxEnabling[ 201 ]
+#define AUX_MSAA AuxEnabling[ 202 ]
+
+#define AUX_ARRAY_NUM_ENTRIES_USED 203 // UPDATE THIS!! <==
+
+#if ( AUX_ARRAY_NUM_ENTRIES_USED > MAX_AUX_ENABLING )
+ #error "MAX_AUX_ENABLING too small!"
+#endif
+
+// auxdata functionality (AuxData[]) :
+//
+// 0: Set to least 1/z of all polygons drawn up to now (set by RenderPolygonEx() )
+// 1: Set to greatest 1/z
+// 2: Set to 1 if FillZBuffer() was called at least once
+// 3: sprod in BSP, if |sprod| < eps
+// 4: eps to use for BSP sprod check
+// 5: eps to use for BSP backface check
+// 6: pixelvalue in center of lens flare object
+//
+// 8: number of particle clusters
+// 9: number of particle clusters currently visible
+// 10: particle object creation code (trigger)
+// 11: radius of particle sphere to create
+// 12: animation type of particle sphere to create
+// 13: last return code of a soundsystem call
+// 14: next available location in texture memory
+// 15: number of downloaded (resident) textures
+// 16: number of resident textures that are nondiscardable
+// 17: size of current tail bubble in texmem
+// 18: size of current bubble in texmem
+// 19: number of remote players
+// 20: output format for screenshots
+// 21: output flags for screenshots (subformat)
+// 24: lifetime of messages in message area
+// 25: number of lines (height) of message area
+
+#define AUXDATA_LEAST_VERTEX_1_OVER_Z AuxData[ 0 ]
+#define AUXDATA_GREATEST_VERTEX_1_OVER_Z AuxData[ 1 ]
+#define AUXDATA_FILLZBUFFER_WAS_CALLED AuxData[ 2 ]
+#define AUXDATA_BSP_SCALARPRODUCT_VALUE AuxData[ 3 ]
+#define AUXDATA_BSP_ERROR_EPS AuxData[ 4 ]
+#define AUXDATA_BSP_BACKFACE_TOLERANCE_EPS AuxData[ 5 ]
+#define AUXDATA_LENSFLARE_CENTER_PIXEL AuxData[ 6 ]
+
+#define AUXDATA_NUM_PARTICLE_CLUSTERS AuxData[ 8 ]
+#define AUXDATA_NUM_VISIBLE_PCLUSTERS AuxData[ 9 ]
+#define AUXDATA_PSPHERE_CREATION_CODE AuxData[ 10 ]
+#define AUXDATA_PSPHERE_RADIUS AuxData[ 11 ]
+#define AUXDATA_PSPHERE_TYPE AuxData[ 12 ]
+
+#define AUXDATA_TMM_NEXT_TEXMEM_LOCATION AuxData[ 13 ]
+#define AUXDATA_TMM_NUM_DOWNLOADED AuxData[ 14 ]
+#define AUXDATA_TMM_NUM_NONDISCARDABLE AuxData[ 15 ]
+#define AUXDATA_TMM_NUM_HASHTABLE_ENTRIES AuxData[ 16 ]
+#define AUXDATA_TMM_CUR_TAILBUBBLE_SIZE AuxData[ 17 ]
+#define AUXDATA_TMM_CUR_BUBBLE_SIZE AuxData[ 18 ]
+#define AUXDATA_TMM_MIPMAP_LOD_BIAS AuxData[ 19 ] // set
+
+#define AUXDATA_SCREENSHOT_FORMAT AuxData[ 20 ] // set
+#define AUXDATA_SCREENSHOT_SUBFORMAT AuxData[ 21 ] // set
+
+#define AUXDATA_MOVIE_FORMAT AuxData[ 22 ] // set
+#define AUXDATA_MOVIE_SUBFORMAT AuxData[ 23 ] // set
+
+#define AUXDATA_MESSAGE_LIFETIME AuxData[ 24 ] // set
+#define AUXDATA_MESSAGE_AREA_SIZE AuxData[ 25 ] // set
+
+#define AUXDATA_MOUSE_SENSITIVITY AuxData[ 26 ] // set
+
+#define AUXDATA_PLAYERLERP_TRANSITION_TIME AuxData[ 27 ] // set
+
+#define AUXDATA_LOD_DISCRETE_GEOMETRY_BIAS AuxData[ 28 ] // set
+
+#define AUXDATA_SMOOTH_SHIP_CONTROL_FACTOR AuxData[ 29 ] // set
+
+#define AUXDATA_BACKGROUND_NEBULA_ID AuxData[ 30 ] // set
+
+#define AUXDATA_SKILL_AMAZING_TIME AuxData[ 31 ] // set
+#define AUXDATA_SKILL_BRILLIANT_TIME AuxData[ 32 ] // set
+
+#define AUXDATA_LAST_SOUNDSYS_RETURNCODE AuxData[ 33 ]
+#define AUXDATA_NUMREMPLAYERS_COPY AuxData[ 34 ]
+
+#define AUXDATA_ARRAY_NUM_ENTRIES_USED 35 // UPDATE THIS!! <==
+
+#if ( AUXDATA_ARRAY_NUM_ENTRIES_USED > MAX_AUX_DATA )
+ #error "MAX_AUX_DATA too small!"
+#endif
+
+
+#endif // _CON_AUX_H_
+
+
diff --git a/src/parsec/include/con_cani.h b/src/parsec/include/con_cani.h
new file mode 100644
index 0000000..b124208
--- /dev/null
+++ b/src/parsec/include/con_cani.h
@@ -0,0 +1,16 @@
+/*
+ * PARSEC HEADER: con_cani.h
+ */
+
+#ifndef _CON_CANI_H_
+#define _CON_CANI_H_
+
+
+// external functions
+
+int Cmd_DefColAnim( char *command );
+
+
+#endif // _CON_CANI_H_
+
+
diff --git a/src/parsec/include/con_com.h b/src/parsec/include/con_com.h
new file mode 100644
index 0000000..a25afdc
--- /dev/null
+++ b/src/parsec/include/con_com.h
@@ -0,0 +1,71 @@
+/*
+ * PARSEC HEADER: con_com.h
+ */
+
+#ifndef _CON_COM_H_
+#define _CON_COM_H_
+
+
+// user commands table entry
+
+struct user_command_s {
+
+ const char* command; // command string
+ short commlen; // length of string
+ short numparams; // num of parameters (used by tab-completion)
+ int (*execute)(char*); // command function
+ char* (*statedump)(); // returns statedump string; (NULL==volatile)
+};
+
+
+// handle user commands not taking any parameters
+
+#define USERCOMMAND_NOPARAM(x) \
+{ \
+ char *whsp = (x); \
+ for ( ; *whsp; whsp++ ) \
+ if ( *whsp != ' ' ) \
+ break; \
+ if ( *whsp != 0 ) { \
+ if ( *(x) == ' ' ) { \
+ CON_AddLine( dont_use_params ); \
+ return TRUE; \
+ } else { \
+ return FALSE; \
+ } \
+ } \
+} \
+
+
+// macro to retrieve user command strings
+#define USRSTR(x) (user_commands[x].command)
+
+// macro to retrieve string length of user commmands
+#define USRLEN(x) (user_commands[x].commlen)
+
+// macro to determine number of arguments of user commmands
+#define USRARG(x) (user_commands[x].numparams)
+
+
+// external variables
+
+extern user_command_s* user_commands;
+extern int num_user_commands;
+extern char dont_use_params[];
+
+
+// external functions
+
+void CheckPlayerName( const char *name );
+
+int CheckCmdsNoParam( const char *command );
+int CheckCmdsCustomString( const char *command );
+int CheckCmdsUserDefined( const char *command );
+
+int CON_RegisterUserCommand( user_command_s *regcom );
+int CON_ReplaceUserCommand( user_command_s* repcom );
+
+
+#endif // _CON_COM_H_
+
+
diff --git a/src/parsec/include/con_conf.h b/src/parsec/include/con_conf.h
new file mode 100644
index 0000000..8d5bcd2
--- /dev/null
+++ b/src/parsec/include/con_conf.h
@@ -0,0 +1,36 @@
+/*
+ * PARSEC HEADER: con_conf.h
+ */
+
+#ifndef _CON_CONF_H_
+#define _CON_CONF_H_
+
+
+
+// color command spec
+
+struct colcomm_s {
+
+ const char *cmd;
+ colrgba_s *col;
+ void (*func)();
+};
+
+
+// external functions
+
+void DisplayCurrentNetSubsys();
+
+int CheckColorConfig( char *scan );
+int CheckConfigCommand( char *scan );
+
+
+// external variables
+
+extern colcomm_s col_comms[];
+extern int num_col_commands;
+
+
+#endif // _CON_CONF_H_
+
+
diff --git a/src/parsec/include/con_ext.h b/src/parsec/include/con_ext.h
new file mode 100644
index 0000000..4891078
--- /dev/null
+++ b/src/parsec/include/con_ext.h
@@ -0,0 +1,91 @@
+/*
+ * PARSEC HEADER: con_ext.h
+ */
+
+#ifndef _CON_EXT_H_
+#define _CON_EXT_H_
+
+
+// types of external commands (relating to their directory)
+enum {
+
+ COMTYPE_PACKAGE, // 0
+ COMTYPE_ROOT, // 1
+ COMTYPE_REFERENCE, // 2
+ COMTYPE_STANDARD, // 3
+ COMTYPE_RECORDING, // 4
+ COMTYPE_MODIFICATION // 5
+};
+
+// maximum valid length of command (script) name (filesystem dependent)
+#define COMMAND_NAME_VALID_LEN 8
+
+// allocated memory for command (script) name (excluding zero term.)
+#define COMMAND_NAME_ALLOC_LEN 63
+
+// maximum number of external scripts that will be recognized
+#define MAX_EXTERNAL_COMMANDS 1024
+
+// maximum number of registered mods (more than one is useful for data only)
+#define MAX_REGISTERED_MODS 64
+
+
+// external variables
+
+extern int processing_batch;
+extern int idle_reclevel;
+extern int rec_depth;
+
+extern int preempt_action_commands;
+
+extern FILE * log_fp;
+extern int log_commands;
+extern char external_commands[][ COMMAND_NAME_ALLOC_LEN + 1 ];
+extern int external_command_types[];
+extern int num_external_commands;
+
+extern char packet_record_name[];
+extern char packet_replay_name[];
+
+extern char* mod_names[];
+extern int mod_numnames;
+extern int mod_override;
+
+
+// external functions
+
+int ProcessExternalLine( char *scan );
+void ExecConsoleFile( char *fname, int echo );
+int AddExternalCommands( char *path, int comtype );
+void BuildExternalCommandList();
+int CheckExternalCommand( char *com );
+int InsertCommandLog( char *command );
+int ExecExternalFile( char *command );
+int CompileDemoCut( FILE *fp, char *script );
+int ScriptReplayActive();
+int RestartExternalCommand( int echo );
+int OpenOutputBatch( char *cstr, int type );
+void CloseOutputBatch();
+int StartRecording( char *cstr, int savestate );
+void CloseRecording();
+void CallExternalCommand( int extcom, int echo );
+void ScriptStopReplay();
+
+int Cmd_CatExternalCommands( char *cstr );
+int Cmd_SetGameLoopBatchName( char *cstr );
+void Cmd_CloseOutputBatch();
+void Cmd_StopBatchReplay();
+void Cmd_QueryReplayInfo();
+void Cmd_RescanExternalCommands();
+
+
+// macro to retrieve external command strings
+#define ECMSTR(x) (external_commands[x])
+
+// macro to retrieve string length of external commmands
+#define ECMLEN(x) strlen(external_commands[x])
+
+
+#endif // _CON_EXT_H_
+
+
diff --git a/src/parsec/include/con_geom.h b/src/parsec/include/con_geom.h
new file mode 100644
index 0000000..c6d6d3f
--- /dev/null
+++ b/src/parsec/include/con_geom.h
@@ -0,0 +1,15 @@
+/*
+ * PARSEC HEADER: con_geom.h
+ */
+
+#ifndef _CON_GEOM_H_
+#define _CON_GEOM_H_
+
+
+// external functions
+
+
+
+#endif // _CON_GEOM_H_
+
+
diff --git a/src/parsec/include/con_info.h b/src/parsec/include/con_info.h
new file mode 100644
index 0000000..a06da72
--- /dev/null
+++ b/src/parsec/include/con_info.h
@@ -0,0 +1,63 @@
+/*
+ * PARSEC HEADER: con_info.h
+ */
+
+#ifndef _CON_INFO_H_
+#define _CON_INFO_H_
+
+
+// callback function type
+typedef int (*notify_callback_fpt)( GenObject *base );
+
+
+// access information for single object property (type/class field)
+
+struct proplist_s {
+
+ const char* propname; // name property can be accessed by
+ size_t propoffset; // offset of property in obj structure
+ int bmin; // minimum value of property
+ int bmax; // maximum value of property
+ int fieldtype; // field's data type
+ notify_callback_fpt notify_callback; // callback on field value changes
+};
+
+//NOTE:
+// bmin and bmax (value bounds) for all types other than
+// PROPTYPE_INT have to be specified in fixed-point!
+
+//NOTE:
+// for PROPTYPE_STRING and PROPTYPE_CHARPTR bmin and bmax specify
+// minimum and maximum number of chars (excluding the '\0').
+
+#define PROPTYPE_INT 0
+#define PROPTYPE_FLOAT 1
+#define PROPTYPE_GEOMV 2
+#define PROPTYPE_FIXED 3
+#define PROPTYPE_STRING 4
+#define PROPTYPE_CHARPTR 5
+
+
+// external functions
+
+void CON_RegisterCustomType( dword objtypeid, proplist_s *proplist );
+
+char* BuildTypeInfo( int typeindex );
+char* BuildClassInfo( int classindex );
+
+int CheckSetObjTypeProperty( const char *query, const char *scan );
+int CheckSetObjClassProperty( const char *query, const char *scan );
+int CheckSetObjInstanceProperty( const char *query, const char *scan );
+
+int CheckTypeInfo( const char *scan );
+int CheckClassInfo( const char *scan );
+int CheckInstanceInfo( const char *scan );
+
+int WritePropList( FILE* fp, dword objid );
+
+int Cmd_FaceInfo( char *command );
+
+
+#endif // _CON_INFO_H_
+
+
diff --git a/src/parsec/include/con_int.h b/src/parsec/include/con_int.h
new file mode 100644
index 0000000..fb070f8
--- /dev/null
+++ b/src/parsec/include/con_int.h
@@ -0,0 +1,59 @@
+/*
+ * PARSEC HEADER: con_int.h
+ */
+
+#ifndef _CON_INT_H_
+#define _CON_INT_H_
+
+
+// integer commands table entry
+
+struct int_command_s {
+
+ int persistence; // persistent int commands are saved on exit
+ const char* command; // name of command
+ int bmin; // lower bound
+ int bmax; // upper bound
+ int* intref; // pointer to actual int var
+ void (*realize)(); // will be called after modification (optional)
+ int (*fetch)(); // will be called before reading (optional)
+ int default_val; // default value for int var
+};
+
+
+// integer commands list
+extern int_command_s * int_commands;
+
+// number of integer variable commands
+extern int num_int_commands;
+
+// integer input/output configuration
+extern const char * int_print_base;
+extern int int_calc_base;
+
+
+// macro to retrieve intvar command strings
+#define ICMSTR(x) (int_commands[x].command)
+
+// macro to retrieve string length of intvar commmands
+#define ICMLEN(x) strlen(int_commands[x].command)
+
+
+// position of console geometry variables in table
+enum {
+
+ CONINFOINDX_CONWINX = 0,
+ CONINFOINDX_CONWINY = 1,
+ CONINFOINDX_CONWIDTH = 2,
+ CONINFOINDX_CONHEIGHT = 3
+};
+
+
+// external functions
+
+void CON_RegisterIntCommand( int_command_s *regcom );
+
+
+#endif // _CON_INT_H_
+
+
diff --git a/src/parsec/include/con_kmap.h b/src/parsec/include/con_kmap.h
new file mode 100644
index 0000000..e4de560
--- /dev/null
+++ b/src/parsec/include/con_kmap.h
@@ -0,0 +1,49 @@
+/*
+ * PARSEC HEADER: con_kmap.h
+ */
+
+#ifndef _CON_KMAP_H_
+#define _CON_KMAP_H_
+
+
+// command mapped to key ------------------------------------------------------
+//
+struct keycom_s {
+
+ char* command; // console command string
+ int echo; // echo flag (display, add to history)
+};
+
+
+// textual description of key code --------------------------------------------
+//
+struct textkeymap_s {
+
+ dword code; // key code
+ const char* text; // name of corresponding key
+};
+
+
+// external variables
+
+extern keycom_s key_com_mappings[];
+extern textkeymap_s make_codes[];
+extern textkeymap_s key_com_names[];
+extern const char *const functional_keys[];
+
+
+// external functions
+
+char * GetAKCDescription( int num );
+char * GetMKCDescription( int num );
+char * GetGameFuncDescription( int num );
+
+int CheckKeyMappingEcho( char *scan );
+int CheckKeyMappingSilent( char *scan );
+
+void ExecBoundKeyCommands();
+
+
+#endif // _CON_KMAP_H_
+
+
diff --git a/src/parsec/include/con_list.h b/src/parsec/include/con_list.h
new file mode 100644
index 0000000..2b5a730
--- /dev/null
+++ b/src/parsec/include/con_list.h
@@ -0,0 +1,34 @@
+/*
+ * PARSEC HEADER: con_list.h
+ */
+
+#ifndef _CON_LIST_H_
+#define _CON_LIST_H_
+
+
+// external functions
+
+void Cmd_ShipInfo();
+void Cmd_ListTypes();
+void Cmd_ListClasses();
+void Cmd_ListSayMacros();
+void Cmd_ListKeyBindings();
+void Cmd_ListKeyFunctions();
+void Cmd_ListVidModes();
+void Cmd_ListBinaryDemos();
+int Cmd_ListExternalCommands( char *command );
+int Cmd_ListDataTable( char *command );
+int Cmd_ListIntCommands( char *command );
+int Cmd_ListStdCommands( char *command );
+
+
+// external variables
+
+extern int await_keypress;
+extern void (*com_cont_func)();
+extern int cur_vis_conlines;
+
+
+#endif // _CON_LIST_H_
+
+
diff --git a/src/parsec/include/con_load.h b/src/parsec/include/con_load.h
new file mode 100644
index 0000000..23e98ca
--- /dev/null
+++ b/src/parsec/include/con_load.h
@@ -0,0 +1,16 @@
+/*
+ * PARSEC HEADER: con_load.h
+ */
+
+#ifndef _CON_LOAD_H_
+#define _CON_LOAD_H_
+
+
+// external functions
+
+int Cmd_ExecLoadCommand( char *command );
+
+
+#endif // _CON_LOAD_H_
+
+
diff --git a/src/parsec/include/con_main.h b/src/parsec/include/con_main.h
new file mode 100644
index 0000000..4d7e651
--- /dev/null
+++ b/src/parsec/include/con_main.h
@@ -0,0 +1,157 @@
+/*
+ * PARSEC HEADER: con_main.h
+ */
+
+#ifndef _CON_MAIN_H_
+#define _CON_MAIN_H_
+
+
+#include "inp_defs.h"
+
+
+// if this is defined command parsing will be a lot slower
+//#define NO_UNNECESSARY_COMMAND_DOMAINS
+
+
+// maximum length of single console line
+#define MAX_CONSOLE_LINE_LENGTH 255
+
+// number of console lines (storage)
+#define NUM_CONSOLE_LINES 256
+#define NUM_CONSOLE_LINES_MASK ( NUM_CONSOLE_LINES - 1 )
+
+// number of history list lines
+#define NUM_HISTORY_LINES 128
+#define NUM_HISTORY_LINES_MASK ( NUM_HISTORY_LINES - 1 )
+
+// size of console prompt (in chars)
+#define PROMPT_SIZE 2
+
+
+/*
+// additional directories for console scripts
+#if defined( SYSTEM_WIN32_UNUSED )
+ #define REFCON_COMMANDS_DIR "refs\\"
+ #define STDCON_COMMANDS_DIR "cons\\"
+ #define RECORD_COMMANDS_DIR "recs\\"
+#elif defined( SYSTEM_LINUX_UNUSED ) || defined( SYSTEM_MACOSX_UNUSED )*/
+ #define REFCON_COMMANDS_DIR "refs/"
+ #define STDCON_COMMANDS_DIR "cons/"
+ #define RECORD_COMMANDS_DIR "recs/"
+/*#else
+ #error "system not defined!"
+#endif
+ */
+// file extension of console scripts
+#define CON_FILE_EXTENSION ".con"
+
+
+// file extension of compiled console scripts
+#define CON_FILE_COMPILED_EXTENSION ".dem"
+
+
+// command domain restriction handling
+
+#ifdef NO_UNNECESSARY_COMMAND_DOMAINS
+
+ #define HANDLE_COMMAND_DOMAIN(x) \
+ if ( ( *(x) != ' ' ) && ( *(x) != 0 ) ) { \
+ return FALSE; \
+ } else { \
+ }
+
+ #define HANDLE_COMMAND_DOMAIN_SEP(x) HANDLE_COMMAND_DOMAIN(x)
+
+#else // NO_UNNECESSARY_COMMAND_DOMAINS
+
+ #define HANDLE_COMMAND_DOMAIN(x)
+
+ #define HANDLE_COMMAND_DOMAIN_SEP(x) \
+ if ( ( *(x) != ' ' ) && ( *(x) != 0 ) ) { \
+ CON_AddLine( unknown_command ); \
+ return TRUE; \
+ } else { \
+ }
+
+#endif // NO_UNNECESSARY_COMMAND_DOMAINS
+
+
+// external variables
+
+extern int compile_script;
+extern FILE * compile_fp;
+
+extern int con_back_view;
+extern int con_content;
+extern int con_bottom;
+extern int cursor_x;
+extern int press_space_curs_x;
+
+extern int con_in_talk_mode;
+extern int con_talk_line;
+extern char talk_escape_char;
+
+extern int con_non_interactive;
+
+extern int con_no_login_check;
+
+extern char con_prompt[];
+extern char ok_prompt[];
+extern char press_space[];
+extern char too_many_args[];
+extern char arg_missing[];
+extern char invalid_arg[];
+extern char range_error[];
+extern char unknown_command[];
+extern char line_separator[];
+
+extern char con_lines[][ MAX_CONSOLE_LINE_LENGTH + 1 ];
+
+
+// external functions
+
+void CheckConExtents();
+
+void ClearConScreen();
+void EraseConLine( int line );
+void CreateSeparatorLine( int line );
+
+char* SubstCurWorkDir( char *path );
+
+void WritePersistentCommands();
+
+void ExecNonCompilableCommand( char *command );
+void ExecConsoleCommand( char *command, int echo );
+
+void FlushConsoleBuffer();
+
+void CON_AddMessage( const char *text );
+void CON_AddLine( const char *text );
+void CON_AddLineFeed();
+void CON_EnableLineFeed();
+void CON_DisableLineFeed();
+void CON_DelLine();
+char* CON_GetLine();
+void CON_ListCtdPrompt();
+void CON_ListEndPrompt();
+
+void CON_HandleTextInput(const char character);
+void CON_HandleKeyPress(dword key);
+
+int QuicksayConsole();
+void SetQuicksayConsole( int enable );
+
+void ConsoleControl();
+void ToggleConsole();
+
+void ExecStartupScript( int echo );
+
+void InitConsole();
+void KillConsole();
+
+void InitConsoleFileHandling();
+
+
+#endif // _CON_MAIN_H_
+
+
diff --git a/src/parsec/include/con_path.h b/src/parsec/include/con_path.h
new file mode 100644
index 0000000..28d8e0f
--- /dev/null
+++ b/src/parsec/include/con_path.h
@@ -0,0 +1,15 @@
+/*
+ * PARSEC HEADER: con_path.h
+ */
+
+#ifndef _CON_PATH_H_
+#define _CON_PATH_H_
+
+
+// external functions
+
+
+
+#endif // _CON_PATH_H_
+
+
diff --git a/src/parsec/include/con_rc.h b/src/parsec/include/con_rc.h
new file mode 100644
index 0000000..9c96aeb
--- /dev/null
+++ b/src/parsec/include/con_rc.h
@@ -0,0 +1,16 @@
+/*
+ * PARSEC HEADER: con_rc.h
+ */
+
+#ifndef _CON_RC_H_
+#define _CON_RC_H_
+
+
+// external functions
+
+void WritePersistentCommands();
+
+
+#endif // _CON_RC_H_
+
+
diff --git a/src/parsec/include/con_say.h b/src/parsec/include/con_say.h
new file mode 100644
index 0000000..baeb3d3
--- /dev/null
+++ b/src/parsec/include/con_say.h
@@ -0,0 +1,41 @@
+/*
+ * PARSEC HEADER: con_say.h
+ */
+
+#ifndef _CON_SAY_H_
+#define _CON_SAY_H_
+
+
+#define NUM_TEXT_MACROS 10
+#define MAX_TEXTMACRO_LEN 127
+
+
+// modes of talk display
+
+enum enum_talk_modes {
+
+ TALK_PUBLIC, // name in < >
+ TALK_PRIVATE, // name in * *
+ TALK_STATUS, // no name in front of text
+
+ // must be last in list!!
+ NUM_TALK_MODES
+};
+
+
+// external variables
+
+extern char text_macros[][ MAX_TEXTMACRO_LEN + 1 ];
+
+
+// external functions
+
+int Cmd_SayText( char *cstr );
+int Cmd_SetTextMacro( char *cstr );
+
+void ShowSentText( const char *name, const char *text, int mode );
+
+
+#endif
+
+
diff --git a/src/parsec/include/con_shad.h b/src/parsec/include/con_shad.h
new file mode 100644
index 0000000..d47fb9d
--- /dev/null
+++ b/src/parsec/include/con_shad.h
@@ -0,0 +1,26 @@
+/*
+ * PARSEC HEADER: con_shad.h
+ */
+
+#ifndef _CON_SHAD_H_
+#define _CON_SHAD_H_
+
+
+// forward declarations
+struct shader_s;
+struct key_value_s;
+
+
+// external functions
+
+shader_s* DetermineODTShader( key_value_s *shaderspec );
+
+char* GetShaderDescription( dword shaderid );
+
+int Cmd_DefShader( char *command );
+int Cmd_SetShader( char *command );
+
+
+#endif // _CON_SHAD_H_
+
+
diff --git a/src/parsec/include/con_std.h b/src/parsec/include/con_std.h
new file mode 100644
index 0000000..7ae1c0b
--- /dev/null
+++ b/src/parsec/include/con_std.h
@@ -0,0 +1,127 @@
+/*
+ * PARSEC HEADER: con_std.h
+ */
+
+#ifndef _CON_STD_H_
+#define _CON_STD_H_
+
+
+// standard commands table entry ----------------------------------------------
+//
+struct std_command_s {
+
+ const char* command; // command string
+ short commlen; // length of string
+ short numparams; // number of parameters (used by tab-completion)
+};
+
+
+// enumeration of standard commands -------------------------------------------
+//
+enum enum_std_commands {
+
+ CM_APPEND,
+ CM_BASE,
+ CM_BIND,
+ CM_BUILD,
+ CM_CAT,
+ CM_CLASSINFO,
+ CM_CLEAR,
+ CM_CLOSE,
+ CM_CLS,
+ CM_COLANIM,
+ CM_COMPILE,
+ CM_CONNECT,
+ CM_CREATE,
+ CM_DEC,
+ CM_DISABLE,
+ CM_NOMACROS,
+ CM_DISCONNECT,
+ CM_DISPLAY,
+ CM_ENABLE,
+ CM_ENABLEMACROS,
+ CM_EXIT,
+ CM_EXITGAME,
+ CM_FACEINFO,
+ CM_FLASHBLUE,
+ CM_FLASHWHITE,
+ CM_GAMELOOPBATCH,
+ CM_HEX,
+ CM_HIDE,
+ CM_KEY,
+ CM_LISTBINDINGS,
+ CM_LISTCLASSES,
+ CM_LISTSTDCOMMANDS,
+ CM_LISTDATA,
+ CM_LISTDEMOS,
+ CM_LISTGAMEFUNCKEYS,
+ CM_LISTINTCOMMANDS,
+ CM_LISTTEXTMACS,
+ CM_LISTTYPES,
+ CM_LOAD,
+ CM_LOGIN,
+ CM_LOGOUT,
+ CM_LISTEXTCOMMS,
+ CM_NAME,
+ CM_NET_SUBSYS,
+ CM_OBJECTCLEAR,
+ CM_OBJECTCOUNT,
+ CM_OBJECTINFO,
+ CM_OCT,
+ CM_OPEN,
+ CM_PATH_ANIM_INTRO,
+ CM_PATH_ASTREAM_INTRO,
+ CM_PATH_ASTREAM_MENU,
+ CM_PATH_ASTREAM,
+ CM_PLAYDEMO,
+ CM_PROP,
+ CM_PROPC,
+ CM_PROPO,
+ CM_QUIT,
+ CM_RECDEM,
+ CM_RECORD,
+ CM_REPINFO,
+ CM_REPSTOP,
+ CM_RESCAN,
+ CM_SAY,
+ CM_SET_MACRO,
+ CM_SETORIGIN,
+ CM_DEFSHADER,
+ CM_SETSHADER,
+ CM_SHIPS,
+ CM_SHOWPOSITION,
+ CM_TALKMODE,
+ CM_TYPEINFO,
+ CM_VID_LISTMODES,
+ CM_VID_SETMODE,
+ CM_VID_SUBSYS,
+ CM_WORKINGDIRECTORY,
+ CM_WRITESTRING,
+ CM_AUD_CONF,
+ CM_INP_CONF,
+
+ // must be last in list!!
+ NUM_STD_COMMAND_CONSTANTS
+};
+
+
+// command list and length array
+extern std_command_s std_commands[];
+
+// number of standard commands
+extern int num_std_commands;
+
+
+// macro to retrieve standard command strings
+#define CMSTR(x) (std_commands[x].command)
+
+// macro to retrieve string length of standard commmands
+#define CMLEN(x) (std_commands[x].commlen)
+
+// macro to determine number of arguments of standard commmands
+#define CMARG(x) (std_commands[x].numparams)
+
+
+#endif // _CON_STD_H_
+
+
diff --git a/src/parsec/include/con_tani.h b/src/parsec/include/con_tani.h
new file mode 100644
index 0000000..854402c
--- /dev/null
+++ b/src/parsec/include/con_tani.h
@@ -0,0 +1,16 @@
+/*
+ * PARSEC HEADER: con_tani.h
+ */
+
+#ifndef _CON_TANI_H_
+#define _CON_TANI_H_
+
+
+// external functions
+
+int Cmd_DefTexAnim( char *command );
+
+
+#endif // _CON_TANI_H_
+
+
diff --git a/src/parsec/include/d_bmap.h b/src/parsec/include/d_bmap.h
new file mode 100644
index 0000000..905fc76
--- /dev/null
+++ b/src/parsec/include/d_bmap.h
@@ -0,0 +1,26 @@
+/*
+ * PARSEC HEADER: d_bmap.h
+ */
+
+#ifndef _D_BMAP_H_
+#define _D_BMAP_H_
+
+
+// ----------------------------------------------------------------------------
+// DRAWING SUBSYSTEM (D) BMAP group -
+// ----------------------------------------------------------------------------
+
+
+void D_PutTrBitmap( char *bitmap, dword width, dword height, ugrid_t putx, ugrid_t puty );
+void D_PutTrMapBitmap( char *bitmap, char *maps, dword width, dword height, ugrid_t putx, ugrid_t puty, dword color );
+void D_PutClipBitmap( char *bitmap, dword width, dword height, sgrid_t putx, sgrid_t puty );
+void D_PutTrClipBitmap( char *bitmap, dword width, dword height, sgrid_t putx, sgrid_t puty );
+void D_PutSTCBitmap( char *bitmap, dword srcw, dword srch, dword dstw, dword dsth, sgrid_t putx, sgrid_t puty );
+void D_PutSTCBitmapZ( char *bitmap, dword srcw, dword srch, dword dstw, dword dsth, sgrid_t putx, sgrid_t puty, dword zvalue );
+void D_DrawTrRect( ugrid_t putx, ugrid_t puty, dword width, dword height, dword brightx );
+
+
+
+#endif // _D_BMAP_H_
+
+
diff --git a/src/parsec/include/d_font.h b/src/parsec/include/d_font.h
new file mode 100644
index 0000000..410f6c7
--- /dev/null
+++ b/src/parsec/include/d_font.h
@@ -0,0 +1,24 @@
+/*
+ * PARSEC HEADER: d_font.h
+ */
+
+#ifndef _D_FONT_H_
+#define _D_FONT_H_
+
+
+// ----------------------------------------------------------------------------
+// DRAWING SUBSYSTEM (D) FONT group -
+// ----------------------------------------------------------------------------
+
+
+void D_SetWStrContext( char *charset, dword *geometry, char *outseg, dword width, dword height );
+void D_WriteString( const char *string, ugrid_t putx, ugrid_t puty );
+void D_WriteTrString( const char *string, ugrid_t putx, ugrid_t puty, dword brightx );
+int D_GetPStringWidth( char *string );
+void D_TexfontWrite( const char *string, IterTexfont *itexfont );
+int D_TexfontGetWidth( const char *string, IterTexfont *itexfont );
+
+
+#endif // _D_FONT_H_
+
+
diff --git a/src/parsec/include/d_fontt.h b/src/parsec/include/d_fontt.h
new file mode 100644
index 0000000..74e36bd
--- /dev/null
+++ b/src/parsec/include/d_fontt.h
@@ -0,0 +1,435 @@
+/*
+ * PARSEC HEADER: dg_fontt.h
+ */
+
+#ifndef _DG_FONTT_H_
+#define _DG_FONTT_H_
+
+
+// ----------------------------------------------------------------------------
+//
+dword Char16x16Geom[ 91 ] = {
+
+ 32*320 + 5*16 , // ' '
+ 16*320 + 17*16 , // !
+ 16*320 + 18*16 , // "
+ 32*320 + 3*16 , // #
+ 32*320 + 4*16 , // $ -> (c)
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 16 , // ,
+ 32*320 + 32 , // -
+ 32*320 , // .
+ 16*320 + 19*16 , // /
+
+ 16*320 + 16*16 , // 0
+ 16*320 + 7*16 , // 1
+ 16*320 + 8*16 , // 2
+ 16*320 + 9*16 , // 3
+ 16*320 + 10*16 , // 4
+ 16*320 + 11*16 , // 5
+ 16*320 + 12*16 , // 6
+ 16*320 + 13*16 , // 7
+ 16*320 + 14*16 , // 8
+ 16*320 + 15*16 , // 9
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 0 , // @
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 32*320 + 5*16 ,
+ 16 , // a
+ 32 , // b
+ 3*16 , // c
+ 4*16 , // d
+ 5*16 , // e
+ 6*16 , // f
+ 7*16 , // g
+ 8*16 , // h
+ 9*16 , // i
+ 10*16 , // j
+ 11*16 , // k
+ 12*16 , // l
+ 13*16 , // m
+ 14*16 , // n
+ 15*16 , // o
+ 16*16 , // p
+ 17*16 , // q
+ 18*16 , // r
+ 19*16 , // s
+ 16*320 , // t
+ 16*320 + 16 , // u
+ 16*320 + 32 , // v
+ 16*320 + 3*16 , // w
+ 16*320 + 4*16 , // x
+ 16*320 + 5*16 , // y
+ 16*320 + 6*16 , // z
+};
+
+
+// ----------------------------------------------------------------------------
+//
+struct char_dat {
+
+ word location;
+ byte width;
+ byte height;
+};
+
+#define MAKE_CHARDAT(a,b,c) SWAP_32(((dword)(a))|(((dword)(b))<<16)|(((dword)(c))<<24))
+
+
+// ----------------------------------------------------------------------------
+//
+dword CharGoldGeom[ 95 ] = {
+
+ MAKE_CHARDAT( 17429-10881, 9, 16 ), // ' '
+ MAKE_CHARDAT( 17424-10881, 6, 16 ), // !
+ MAKE_CHARDAT( 0, 0, 0 ), // "
+ MAKE_CHARDAT( 0, 0, 0 ), // #
+ MAKE_CHARDAT( 0, 0, 0 ), // $
+ MAKE_CHARDAT( 0, 0, 0 ), // %
+ MAKE_CHARDAT( 0, 0, 0 ), // &
+ MAKE_CHARDAT( 0, 0, 0 ), // '
+ MAKE_CHARDAT( 0, 0, 0 ), // (
+ MAKE_CHARDAT( 0, 0, 0 ), // )
+ MAKE_CHARDAT( 17409-10881, 14, 16 ), // *
+ MAKE_CHARDAT( 0, 0, 0 ), // +
+ MAKE_CHARDAT( 17393-10881, 6, 18 ), // ,
+ MAKE_CHARDAT( 12800, 17, 16 ), // -
+ MAKE_CHARDAT( 17377-10881, 6, 16 ), // .
+ MAKE_CHARDAT( 23824-10881, 9, 16 ), // /
+ MAKE_CHARDAT( 17438-10881, 16, 16 ), // 0
+ MAKE_CHARDAT( 17456-10881, 10, 16 ), // 1
+ MAKE_CHARDAT( 17471-10881, 14, 16 ), // 2
+ MAKE_CHARDAT( 17487-10881, 14, 16 ), // 3
+ MAKE_CHARDAT( 17503-10881, 14, 16 ), // 4
+ MAKE_CHARDAT( 17519-10881, 14, 16 ), // 5
+ MAKE_CHARDAT( 17535-10881, 14, 16 ), // 6
+ MAKE_CHARDAT( 17552-10881, 14, 16 ), // 7
+ MAKE_CHARDAT( 17568-10881, 14, 16 ), // 8
+ MAKE_CHARDAT( 17584-10881, 14, 16 ), // 9
+ MAKE_CHARDAT( 17385-10881, 6, 13 ), // :
+ MAKE_CHARDAT( 17400-10881, 6, 18 ), // ;
+ MAKE_CHARDAT( 0, 0, 0 ), // <
+ MAKE_CHARDAT( 0, 0, 0 ), // =
+ MAKE_CHARDAT( 0, 0, 0 ), // >,
+ MAKE_CHARDAT( 0, 0, 0 ), // ?
+ MAKE_CHARDAT( 12820, 20, 16 ), // @
+ MAKE_CHARDAT( 10881-10881, 15, 16 ), // A
+ MAKE_CHARDAT( 10897-10881, 14, 16 ), // B
+ MAKE_CHARDAT( 10913-10881, 15, 16 ), // C
+ MAKE_CHARDAT( 10928-10881, 14, 16 ), // D
+ MAKE_CHARDAT( 10945-10881, 14, 16 ), // E
+ MAKE_CHARDAT( 10961-10881, 14, 16 ), // F
+ MAKE_CHARDAT( 10977-10881, 15, 16 ), // G
+ MAKE_CHARDAT( 10993-10881, 14, 16 ), // H
+ MAKE_CHARDAT( 11012-10881, 8, 16 ), // I
+ MAKE_CHARDAT( 11025-10881, 14, 16 ), // J
+ MAKE_CHARDAT( 11042-10881, 14, 16 ), // K
+ MAKE_CHARDAT( 11058-10881, 14, 16 ), // L
+ MAKE_CHARDAT( 11074-10881, 16, 16 ), // M
+ MAKE_CHARDAT( 11090-10881, 14, 16 ), // N
+ MAKE_CHARDAT( 11106-10881, 16, 16 ), // O
+ MAKE_CHARDAT( 11122-10881, 14, 16 ), // P
+ MAKE_CHARDAT( 11138-10881, 16, 16 ), // Q
+ MAKE_CHARDAT( 11154-10881, 14, 16 ), // R
+ MAKE_CHARDAT( 11170-10881, 14, 16 ), // S
+ MAKE_CHARDAT( 11186-10881, 14, 16 ), // T
+ MAKE_CHARDAT( 17281-10881, 14, 16 ), // U
+ MAKE_CHARDAT( 17297-10881, 14, 16 ), // V
+ MAKE_CHARDAT( 17313-10881, 16, 16 ), // W
+ MAKE_CHARDAT( 17329-10881, 14, 16 ), // X
+ MAKE_CHARDAT( 17345-10881, 14, 16 ), // Y
+ MAKE_CHARDAT( 17361-10881, 14, 16 ), // Z
+ MAKE_CHARDAT( 0, 0, 0 ), // [
+ MAKE_CHARDAT( 0, 0, 0 ), // '\'
+ MAKE_CHARDAT( 0, 0, 0 ), // ]
+ MAKE_CHARDAT( 0, 0, 0 ), // ^
+ MAKE_CHARDAT( 0, 0, 0 ), // _
+ MAKE_CHARDAT( 0, 0, 0 ), // `
+ MAKE_CHARDAT( 10881-10881, 15, 16 ), // a
+ MAKE_CHARDAT( 10897-10881, 14, 16 ), // b
+ MAKE_CHARDAT( 10913-10881, 15, 16 ), // c
+ MAKE_CHARDAT( 10928-10881, 14, 16 ), // d
+ MAKE_CHARDAT( 10945-10881, 14, 16 ), // e
+ MAKE_CHARDAT( 10961-10881, 14, 16 ), // f
+ MAKE_CHARDAT( 10977-10881, 15, 16 ), // g
+ MAKE_CHARDAT( 10993-10881, 14, 16 ), // h
+ MAKE_CHARDAT( 11012-10881, 8, 16 ), // i
+ MAKE_CHARDAT( 11025-10881, 14, 16 ), // j
+ MAKE_CHARDAT( 11042-10881, 14, 16 ), // k
+ MAKE_CHARDAT( 11058-10881, 14, 16 ), // l
+ MAKE_CHARDAT( 11074-10881, 16, 16 ), // m
+ MAKE_CHARDAT( 11090-10881, 14, 16 ), // n
+ MAKE_CHARDAT( 11106-10881, 16, 16 ), // o
+ MAKE_CHARDAT( 11122-10881, 14, 16 ), // p
+ MAKE_CHARDAT( 11138-10881, 16, 16 ), // q
+ MAKE_CHARDAT( 11154-10881, 14, 16 ), // r
+ MAKE_CHARDAT( 11170-10881, 14, 16 ), // s
+ MAKE_CHARDAT( 11186-10881, 14, 16 ), // t
+ MAKE_CHARDAT( 17281-10881, 14, 16 ), // u
+ MAKE_CHARDAT( 17297-10881, 14, 16 ), // v
+ MAKE_CHARDAT( 17313-10881, 16, 16 ), // w
+ MAKE_CHARDAT( 17329-10881, 14, 16 ), // x
+ MAKE_CHARDAT( 17345-10881, 14, 16 ), // y
+ MAKE_CHARDAT( 17361-10881, 14, 16 ), // z
+ MAKE_CHARDAT( 0, 0, 0 ), // {
+ MAKE_CHARDAT( 0, 0, 0 ), // |
+ MAKE_CHARDAT( 0, 0, 0 ), // }
+ MAKE_CHARDAT( 0, 0, 0 ) // ~
+};
+
+
+// ----------------------------------------------------------------------------
+//
+dword Char04x09Geom[ 96 ] = {
+
+ 3200 + 26*4 , // space (0x20)
+ 40*4 , // !
+ 41*4 , // "
+ 42*4 , // #
+ 43*4 , // $
+ 44*4 , // %
+ 3200 + 26*4 , // &
+ 54*4 , // '
+ 46*4 , // (
+ 47*4 , // )
+ 55*4 , // *
+ 49*4 , // +
+ 38*4 , // ,
+ 50*4 , // -
+ 39*4 , // .
+ 45*4 , // /
+ 26*4 , // 0
+ 27*4 , // 1
+ 28*4 , // 2
+ 29*4 , // 3
+ 30*4 , // 4
+ 31*4 , // 5
+ 32*4 , // 6
+ 33*4 , // 7
+ 34*4 , // 8
+ 35*4 , // 9
+ 36*4 , // :
+ 37*4 , // ;
+ 52*4 , // <
+ 51*4 , // =
+ 53*4 , // >
+ 3200 + 26*4 , // ?
+ 48*4 , // @
+ 3200 , // A
+ 3200 + 1*4 , // B
+ 3200 + 2*4 , // C
+ 3200 + 3*4 , // D
+ 3200 + 4*4 , // E
+ 3200 + 5*4 , // F
+ 3200 + 6*4 , // G
+ 3200 + 7*4 , // H
+ 3200 + 8*4 , // I
+ 3200 + 9*4 , // J
+ 3200 + 10*4 , // K
+ 3200 + 11*4 , // L
+ 3200 + 12*4 , // M
+ 3200 + 13*4 , // N
+ 3200 + 14*4 , // O
+ 3200 + 15*4 , // P
+ 3200 + 16*4 , // Q
+ 3200 + 17*4 , // R
+ 3200 + 18*4 , // S
+ 3200 + 19*4 , // T
+ 3200 + 20*4 , // U
+ 3200 + 21*4 , // V
+ 3200 + 22*4 , // W
+ 3200 + 23*4 , // X
+ 3200 + 24*4 , // Y
+ 3200 + 25*4 , // Z
+ 56*4 , // [
+ 3200 + 26*4 ,
+ 57*4 , // ]
+ 3200 + 26*4 ,
+ 58*4 , // _
+ 3200 + 26*4 ,
+ 0 , // a
+ 1*4 , // b
+ 2*4 , // c
+ 3*4 , // d
+ 4*4 , // e
+ 5*4 , // f
+ 6*4 , // g
+ 7*4 , // h
+ 8*4 , // i
+ 9*4 , // j
+ 10*4 , // k
+ 11*4 , // l
+ 12*4 , // m
+ 13*4 , // n
+ 14*4 , // o
+ 15*4 , // p
+ 16*4 , // q
+ 17*4 , // r
+ 18*4 , // s
+ 19*4 , // t
+ 20*4 , // u
+ 21*4 , // v
+ 22*4 , // w
+ 23*4 , // x
+ 24*4 , // y
+ 25*4 , // z
+ 3200 + 26*4 , // {
+ 59*4 , // |
+ 3200 + 26*4 , // }
+ 3200 + 26*4 , // ~
+ 3200 + 26*4 , // (0x7f)
+};
+
+
+// geometry of small 8x8 font used mainly for console -------------------------
+//
+dword Char08x08Geom[ 96 ] = {
+
+ 8*320 + 23*8, // space (0x20)
+ 8*320 + 10*8, // !
+ 8*320 + 11*8, // "
+ 8*320 + 12*8, // #
+ 8*320 + 13*8, // $
+ 8*320 + 14*8, // %
+ 0, // &
+ 8*320 + 16*8, // '
+ 8*320 + 4*8, // (
+ 8*320 + 5*8, // )
+ 8*320 + 22*8, // *
+ 8*320 + 3*8, // +
+ 36*8, // ,
+ 39*8, // -
+ 37*8, // .
+ 38*8, // /
+
+ 26*8, // 0 (0x30)
+ 27*8, // 1
+ 28*8, // 2
+ 29*8, // 3
+ 30*8, // 4
+ 31*8, // 5
+ 32*8, // 6
+ 33*8, // 7
+ 34*8, // 8
+ 35*8, // 9
+ 8*320 + 1*8, // :
+ 8*320 + 0*8, // ;
+ 8*320 + 17*8, // <
+ 8*320 + 15*8, // =
+ 8*320 + 18*8, // >
+ 8*320 + 19*8, // ?
+
+ 8*320 + 9*8, // @ (0x40)
+ 0*8, // A
+ 1*8, // B
+ 2*8, // C
+ 3*8, // D
+ 4*8, // E
+ 5*8, // F
+ 6*8, // G
+ 7*8, // H
+ 8*8, // I
+ 9*8, // J
+ 10*8, // K
+ 11*8, // L
+ 12*8, // M
+ 13*8, // N
+ 14*8, // O
+
+ 15*8, // P (0x50)
+ 16*8, // Q
+ 17*8, // R
+ 18*8, // S
+ 19*8, // T
+ 20*8, // U
+ 21*8, // V
+ 22*8, // W
+ 23*8, // X
+ 24*8, // Y
+ 25*8, // Z
+ 8*320 + 6*8, // [
+ 38*8, // backslash
+ 8*320 + 7*8, // ]
+ 8*320 + 8*8, // ^ (0x5e) == block cursor
+ 8*320 + 2*8, // _
+
+ 0, // ` (0x60)
+ 0*8, // a
+ 1*8, // b
+ 2*8, // c
+ 3*8, // d
+ 4*8, // e
+ 5*8, // f
+ 6*8, // g
+ 7*8, // h
+ 8*8, // i
+ 9*8, // j
+ 10*8, // k
+ 11*8, // l
+ 12*8, // m
+ 13*8, // n
+ 14*8, // o
+
+ 15*8, // p (0x70)
+ 16*8, // q
+ 17*8, // r
+ 18*8, // s
+ 19*8, // t
+ 20*8, // u
+ 21*8, // v
+ 22*8, // w
+ 23*8, // x
+ 24*8, // y
+ 25*8, // z
+ 0, // {
+ 8*320 + 20*8, // |
+ 0, // }
+ 0, // ~
+ 0, // (0x7f)
+};
+
+
+#endif // _DG_FONTT_H_
+
+
diff --git a/src/parsec/include/d_glob.h b/src/parsec/include/d_glob.h
new file mode 100644
index 0000000..07d9aa9
--- /dev/null
+++ b/src/parsec/include/d_glob.h
@@ -0,0 +1,31 @@
+/*
+ * PARSEC HEADER: d_glob.h
+ */
+
+#ifndef _D_GLOB_H_
+#define _D_GLOB_H_
+
+
+// ----------------------------------------------------------------------------
+// DRAWING SUBSYSTEM (D) related global declarations and definitions -
+// ----------------------------------------------------------------------------
+
+
+// BMAP group
+
+//char * GlobalColXlat;
+//char * BrightxMap;
+
+
+// FONT group
+
+extern dword Char16x16Geom[];
+extern dword Char08x08Geom[];
+extern dword Char04x09Geom[];
+extern dword CharGoldGeom[];
+extern char* CharsetDataBase;
+
+
+#endif // _D_GLOB_H_
+
+
diff --git a/src/parsec/include/d_iter.h b/src/parsec/include/d_iter.h
new file mode 100644
index 0000000..59756b7
--- /dev/null
+++ b/src/parsec/include/d_iter.h
@@ -0,0 +1,37 @@
+/*
+ * PARSEC HEADER: d_iter.h
+ */
+
+#ifndef _D_ITER_H_
+#define _D_ITER_H_
+
+
+// ----------------------------------------------------------------------------
+// DRAWING SUBSYSTEM (D) ITER group -
+// ----------------------------------------------------------------------------
+
+
+void D_BiasIterDepth( int bias );
+void D_LoadIterMatrix( Xmatrx matrix );
+void D_DrawIterPoint2( IterPoint2 *itpoint );
+void D_DrawIterPoint3( IterPoint3 *itpoint, dword cullmask );
+void D_DrawIterLine2( IterLine2 *itline );
+void D_DrawIterLine3( IterLine3 *itline, dword cullmask );
+void D_DrawIterTriangle2( IterTriangle2 *ittri );
+void D_DrawIterTriangle3( IterTriangle3 *ittri, dword cullmask );
+void D_DrawIterRectangle2( IterRectangle2 *itrect );
+void D_DrawIterRectangle3( IterRectangle3 *itrect, dword cullmask );
+void D_DrawIterPolygon2( IterPolygon2 *itpoly );
+void D_DrawIterPolygon3( IterPolygon3 *itpoly, dword cullmask );
+void D_DrawIterTriStrip2( IterTriStrip2 *itstrip );
+void D_DrawIterTriStrip3( IterTriStrip3 *itstrip, dword cullmask );
+void D_LockIterArray2( IterArray2 *itarray, dword first, dword count );
+void D_LockIterArray3( IterArray3 *itarray, dword first, dword count );
+void D_UnlockIterArray();
+void D_DrawIterArray( dword mode, dword first, dword count, dword cullmask );
+void D_DrawIterArrayIndexed( dword mode, dword count, dword *indexes, dword cullmask );
+
+
+#endif // _D_ITER_H_
+
+
diff --git a/src/parsec/include/d_misc.h b/src/parsec/include/d_misc.h
new file mode 100644
index 0000000..74001d8
--- /dev/null
+++ b/src/parsec/include/d_misc.h
@@ -0,0 +1,43 @@
+/*
+ * PARSEC HEADER: d_misc.h
+ */
+
+#ifndef _D_MISC_H_
+#define _D_MISC_H_
+
+
+// ----------------------------------------------------------------------------
+// DRAWING SUBSYSTEM (D) MISC group -
+// ----------------------------------------------------------------------------
+
+
+// line drawing styles
+
+#define D_DRAWLINE_STYLE_DEFAULT 0x0000
+#define D_DRAWLINE_STYLE_ANTIALIASED 0x0001
+#define D_DRAWLINE_STYLE_THICK 0x0002
+#define D_DRAWLINE_STYLE_STIPPLED 0x0004
+#define D_DRAWLINE_STYLE_CLOSE_STRIP 0x0008
+
+
+// external functions
+
+int D_DrawSquare( ugrid_t xko, ugrid_t yko, visual_t col, dword siz );
+int D_DrawSquareZ( ugrid_t xko, ugrid_t yko, visual_t col, dword siz, dword zvalue );
+void D_DrawRadarObj( ugrid_t xko, ugrid_t yko, visual_t col );
+void D_DrawHorzBar( ugrid_t xko, ugrid_t yko, visual_t col, dword leng );
+void D_DrawVertBar( ugrid_t xko, ugrid_t yko, visual_t col, dword leng );
+void D_DrawLine( ugrid_t xko1, ugrid_t yko1, ugrid_t xko2, ugrid_t yko2, visual_t col1, visual_t col2, dword mode );
+void D_DrawLineStrip( ugrid_t *vtxs, dword numvtxs, visual_t col, dword mode );
+
+
+// subsystem independet external functions ------------------------------------
+//
+void D_LineWorld( const Vector3* start, const Vector3* end, const colrgba_s* color );
+void D_FrameOfReference( const Xmatrx frame, const Vector3* transl );
+
+
+
+#endif // D_MISC.H
+
+
diff --git a/src/parsec/include/d_patch.h b/src/parsec/include/d_patch.h
new file mode 100644
index 0000000..379ca8a
--- /dev/null
+++ b/src/parsec/include/d_patch.h
@@ -0,0 +1,17 @@
+/*
+ * PARSEC HEADER: d_patch.h
+ */
+
+#ifndef _D_PATCH_H_
+#define _D_PATCH_H_
+
+
+// ----------------------------------------------------------------------------
+// DRAWING SUBSYSTEM (D) patching function -
+// ----------------------------------------------------------------------------
+
+
+
+#endif // _D_PATCH_H_
+
+
diff --git a/src/parsec/include/do_bmap.h b/src/parsec/include/do_bmap.h
new file mode 100644
index 0000000..ff385b9
--- /dev/null
+++ b/src/parsec/include/do_bmap.h
@@ -0,0 +1,28 @@
+/*
+ * PARSEC HEADER: do_bmap.h
+ */
+
+#ifndef _DO_BMAP_H_
+#define _DO_BMAP_H_
+
+
+// do_bmap.c implements the following functions
+// --------------------------------------------
+// void D_PutTrBitmap( char *bitmap, dword width, dword height, ugrid_t putx, ugrid_t puty );
+// void D_PutTrMapBitmap( char *bitmap, char *maps, dword width, dword height, ugrid_t putx, ugrid_t puty, dword color );
+// void D_PutClipBitmap( char *bitmap, dword width, dword height, sgrid_t putx, sgrid_t puty );
+// void D_PutTrClipBitmap( char *bitmap, dword width, dword height, sgrid_t putx, sgrid_t puty );
+// void D_PutSTCBitmap( char *bitmap, dword srcw, dword srch, dword dstw, dword dsth, sgrid_t putx, sgrid_t puty );
+// void D_PutSTCBitmapZ( char *bitmap, dword srcw, dword srch, dword dstw, dword dsth, sgrid_t putx, sgrid_t puty, dword zvalue );
+// void D_DrawTrRect( ugrid_t putx, ugrid_t puty, dword width, dword height, dword brightx );
+
+// do_bmap.c implements the following variables
+// --------------------------------------------
+// char * GlobalColXlat;
+// char * BrightxMap;
+
+
+
+#endif // _DO_BMAP_H_
+
+
diff --git a/src/parsec/include/do_font.h b/src/parsec/include/do_font.h
new file mode 100644
index 0000000..ef26a4e
--- /dev/null
+++ b/src/parsec/include/do_font.h
@@ -0,0 +1,29 @@
+/*
+ * PARSEC HEADER: do_font.h
+ */
+
+#ifndef _DO_FONT_H_
+#define _DO_FONT_H_
+
+
+// do_font.c implements the following functions
+// --------------------------------------------
+// void D_SetWStrContext( char *charset, dword *geometry, char *outseg, dword width, dword height );
+// void D_WriteString( const char *string, ugrid_t putx, ugrid_t puty );
+// void D_WriteTrString( const char *string, ugrid_t putx, ugrid_t puty, dword brightx );
+// int D_GetPStringWidth( char *string );
+// void D_TexfontWrite( const char *string, IterTexfont *itexfont );
+// int D_TexfontGetWidth( const char *string, IterTexfont *itexfont );
+
+// do_font.c implements the following variables
+// --------------------------------------------
+// dword Char16x16Geom[];
+// dword Char08x08Geom[];
+// dword Char04x09Geom[];
+// dword CharGoldGeom[];
+// char * CharsetDataBase;
+
+
+#endif // _DO_FONT_H_
+
+
diff --git a/src/parsec/include/do_iter.h b/src/parsec/include/do_iter.h
new file mode 100644
index 0000000..97b8bbb
--- /dev/null
+++ b/src/parsec/include/do_iter.h
@@ -0,0 +1,34 @@
+/*
+ * PARSEC HEADER: do_iter.h
+ */
+
+#ifndef _DO_ITER_H_
+#define _DO_ITER_H_
+
+
+// do_iter.c implements the following functions
+// --------------------------------------------
+// void D_BiasIterDepth( int bias );
+// void D_LoadIterMatrix( Xmatrx matrix );
+// void D_DrawIterPoint2( IterPoint2 *itpoint );
+// void D_DrawIterPoint3( IterPoint3 *itpoint, dword cullmask );
+// void D_DrawIterLine2( IterLine2 *itline );
+// void D_DrawIterLine3( IterLine3 *itline, dword cullmask );
+// void D_DrawIterTriangle2( IterTriangle2 *ittri );
+// void D_DrawIterTriangle3( IterTriangle3 *ittri, dword cullmask );
+// void D_DrawIterRectangle2( IterRectangle2 *itrect );
+// void D_DrawIterRectangle3( IterRectangle3 *itrect, dword cullmask );
+// void D_DrawIterPolygon2( IterPolygon2 *itpoly );
+// void D_DrawIterPolygon3( IterPolygon3 *itpoly, dword cullmask );
+// void D_DrawIterTriStrip2( IterTriStrip2 *itstrip );
+// void D_DrawIterTriStrip3( IterTriStrip3 *itstrip, dword cullmask );
+// void D_LockIterArray2( IterArray2 *itarray, dword first, dword count );
+// void D_LockIterArray3( IterArray3 *itarray, dword first, dword count );
+// void D_UnlockIterArray();
+// void D_DrawIterArray( dword mode, dword first, dword count, dword cullmask );
+// void D_DrawIterArrayIndexed( dword mode, dword count, dword *indexes, dword cullmask );
+
+
+#endif // _DO_ITER_H_
+
+
diff --git a/src/parsec/include/do_misc.h b/src/parsec/include/do_misc.h
new file mode 100644
index 0000000..b9b5233
--- /dev/null
+++ b/src/parsec/include/do_misc.h
@@ -0,0 +1,21 @@
+/*
+ * PARSEC HEADER: do_misc.h
+ */
+
+#ifndef _DO_MISC_H_
+#define _DO_MISC_H_
+
+
+// do_misc.c implements the following functions
+// --------------------------------------------
+// int D_DrawSquare( ugrid_t xko, ugrid_t yko, visual_t col, dword siz );
+// int D_DrawSquareZ( ugrid_t xko, ugrid_t yko, visual_t col, dword siz, dword zvalue );
+// void D_DrawRadarObj( ugrid_t xko, ugrid_t yko, visual_t col );
+// void D_DrawHorzBar( ugrid_t xko, ugrid_t yko, visual_t col, dword leng );
+// void D_DrawVertBar( ugrid_t xko, ugrid_t yko, visual_t col, dword leng );
+// void D_DrawLine( ugrid_t xko1, ugrid_t yko1, ugrid_t xko2, ugrid_t yko2, visual_t col1, visual_t col2, dword mode );
+// void D_DrawLineStrip( ugrid_t *vtxs, dword numvtxs, visual_t col, dword mode );
+
+#endif // _DO_MISC_H_
+
+
diff --git a/src/parsec/include/do_patch.h b/src/parsec/include/do_patch.h
new file mode 100644
index 0000000..51d525d
--- /dev/null
+++ b/src/parsec/include/do_patch.h
@@ -0,0 +1,15 @@
+/*
+ * PARSEC HEADER: do_patch.h
+ */
+
+#ifndef _DO_PATCH_H_
+#define _DO_PATCH_H_
+
+
+// do_patch.c implements the following functions
+// ---------------------------------------------
+
+
+#endif
+
+
diff --git a/src/parsec/include/e_callbk.h b/src/parsec/include/e_callbk.h
new file mode 100644
index 0000000..a557bd0
--- /dev/null
+++ b/src/parsec/include/e_callbk.h
@@ -0,0 +1,62 @@
+/*
+ * PARSEC HEADER: e_callbk.h
+ */
+
+#ifndef _E_CALLBK_H_
+#define _E_CALLBK_H_
+
+
+// type for specification of callback type/attributes -------------------------
+//
+enum callbacktype_t {
+
+ CBTYPE_DRAW_OBJECTS = 0x0000, // called before R_DrawWorld()
+ CBTYPE_DRAW_PARTICLES = 0x0001, // called before R_DrawParticles()
+ CBTYPE_DRAW_EFFECTS = 0x0002, // called before R_DrawLensFlare()
+
+ CBTYPE_DRAW_PRE_WORLD = 0x0003, // called by R_DrawWorld() (begin)
+ CBTYPE_DRAW_POST_WORLD = 0x0004, // called by R_DrawWorld() (end)
+ CBTYPE_DRAW_PRE_PARTICLES = 0x0005, // called by R_DrawParticles() (begin)
+ CBTYPE_DRAW_POST_PARTICLES = 0x0006, // called by R_DrawParticles() (end)
+
+ CBTYPE_DRAW_CUSTOM_ITER = 0x0007, // drawing of custom iter objects
+
+ CBTYPE_DRAW_OVERLAYS = 0x0008, // called at overlay drawing time
+
+ CBTYPE_VIDMODE_CHANGED = 0x0009, // notify of video mode change
+
+ CBTYPE_STREAM_ENDED = 0x000A, // notify of audiostream end
+
+ CBTYPE_USER_INPUT = 0x000B, // called before GameLoop calls INP_UserProcessInput()
+
+ CBTYPE_NUM_TYPES = 12, // ==> UPDATE THIS!! <==
+
+ CBTYPE_MASK = 0x00ff, // mask for callback type (256 types possible)
+
+ CBFLAG_REMOVE = 0x0000, // flag to remove the callback info from the list after calling
+ CBFLAG_PERSISTENT = 0x0100, // callback info stays in list until removed
+ CBFLAG_MASK = 0x0f00 //
+};
+
+
+// callback function type -----------------------------------------------------
+//
+typedef int (*global_callback_fpt)( void *param );
+
+
+// special callback id indicating registration failed -------------------------
+//
+#define CBID_FAILED -1
+
+
+// external functions ---------------------------------------------------------
+//
+int CALLBACK_RegisterCallback( int callbacktype, global_callback_fpt callback, void* param );
+int CALLBACK_DeleteCallback( int callbacktype, int callbackid );
+int CALLBACK_DestroyCallback( int callbacktype, void *param );
+int CALLBACK_WalkCallbacks( int callbacktype );
+
+
+#endif // _E_CALLBK_H_
+
+
diff --git a/src/parsec/include/e_colani.h b/src/parsec/include/e_colani.h
new file mode 100644
index 0000000..d7b23a8
--- /dev/null
+++ b/src/parsec/include/e_colani.h
@@ -0,0 +1,34 @@
+/*
+ * PARSEC HEADER: e_colani.h
+ */
+
+#ifndef _E_COLANI_H_
+#define _E_COLANI_H_
+
+
+// colanim spec
+
+struct colanimreg_s {
+
+ char* name;
+ dword _pad32[ 3 ];
+ colanim_s colanim;
+};
+
+
+// external functions
+
+colanimreg_s* FetchColAnim( char *name, dword *colanimid );
+void InitAnimStateColAnim( FaceAnimState *animstate, colanim_s *colanim, dword colflags );
+int RegisterColAnim( colanimreg_s *colanimref );
+
+
+// external variables
+
+extern int num_registered_colanims;
+extern colanimreg_s registered_colanims[];
+
+
+#endif // _E_COLANI_H_
+
+
diff --git a/src/parsec/include/e_color.h b/src/parsec/include/e_color.h
new file mode 100644
index 0000000..6cb8968
--- /dev/null
+++ b/src/parsec/include/e_color.h
@@ -0,0 +1,94 @@
+/*
+ * PARSEC HEADER: e_color.h
+ */
+
+#ifndef _E_COLOR_H_
+#define _E_COLOR_H_
+
+
+// external functions
+
+visual_t ColorIndexToVisual( int colindx );
+void ColorIndexToRGBA( colrgba_s *colrgba, int colindx );
+void VisualToRGBA( colrgba_s *colrgba, visual_t visual );
+visual_t RGBAToVisual( colrgba_s *colrgba );
+
+void SetupTranslationPalette( char *palette );
+void SetupSingleBitmapColors( int bmid );
+void SetupSingleCharsetColors( int ftid );
+void SetupBitmapColors();
+
+void InitColorMaps();
+void KillColorMaps();
+
+
+// color index translation
+
+#define COLINDX_TO_VISUAL(x) IndexToVisualTab[ (x) & 0xff ]
+//#define COLINDX_TO_VISUAL(x) ColorIndexToVisual( x )
+
+#define COLINDX_TO_RGBA(c,x) { *(c) = IndexToRGBATab[ (x) & 0xff ]; }
+//#define COLINDX_TO_RGBA(c,x) ColorIndexToRGBA( (c), (x) )
+
+
+// translucency table ids
+
+enum {
+
+ TRTAB_PANELBACK,
+ TRTAB_PANELTEXT,
+ TRTAB_FLAREBASE,
+
+ TRTAB_NUMTABLES // has to be last!!
+};
+
+
+// color bit-resolution translation tables
+
+extern byte colbits_1_to_8[];
+extern byte colbits_2_to_8[];
+extern byte colbits_3_to_8[];
+extern byte colbits_4_to_8[];
+extern byte colbits_5_to_8[];
+extern byte colbits_6_to_8[];
+
+
+// color setup (conversion) flags
+
+#define COLORSETUP_DEFAULT 0x00000000
+#define COLORSETUP_32BPP_PAL_SWAP_RGB 0x00000001
+#define COLORSETUP_32BPP_PAL_ALPHA_IN_LSB 0x00000002
+#define COLORSETUP_32BPP_PAL_SET_ALPHA 0x00000004
+#define COLORSETUP_32BPP_BITMAP_YINVERSE 0x00000008
+#define COLORSETUP_32BPP_FONT_YINVERSE 0x00000010
+#define COLORSETUP_32BPP_ENABLE_TRANSPARENCY 0x00000020
+#define COLORSETUP_32BPP_CONVERT_SCALE_BITMAPS 0x00000040
+#define COLORSETUP_STANDARD_TO_RGB_565 0x00000100
+#define COLORSETUP_STANDARD_TO_RGBA_1555 0x00000200
+#define COLORSETUP_STANDARD_TO_RGB_888 0x00000400
+#define COLORSETUP_STANDARD_TO_RGBA_8888 0x00000800
+#define COLORSETUP_STANDARD_DO_CONVERSION 0x00000f00
+#define COLORSETUP_GLIDE3DF_TO_RGB_565 0x00001000
+#define COLORSETUP_GLIDE3DF_TO_RGBA_1555 0x00002000
+#define COLORSETUP_GLIDE3DF_TO_RGB_888 0x00004000
+#define COLORSETUP_GLIDE3DF_TO_RGBA_8888 0x00008000
+#define COLORSETUP_GLIDE3DF_DO_CONVERSION 0x0000f000
+#define COLORSETUP_FONT_TO_TEXTURE_ALPHA 0x00010000
+#define COLORSETUP_FONT_TO_TEXTURE_INTENSITY 0x00020000
+#define COLORSETUP_FONT_TO_TEXTURE_LUMINANCE 0x00040000
+#define COLORSETUP_FONT_TO_TEXTURE_RGBA 0x00080000
+#define COLORSETUP_FONT_DO_CONVERSION 0x000f0000
+#define COLORSETUP_ALPHA_8_TO_RGBA_8888 0x00100000
+#define COLORSETUP_INTENSITY_8_TO_RGBA_8888 0x00200000
+//#define COLORSETUP_GENERAL_TO_GLIDE3DF 0x00400000
+#define COLORSETUP_SWAP_BITMAPS_16BPP 0x01000000
+#define COLORSETUP_SWAP_BITMAPS_32BPP 0x02000000
+#define COLORSETUP_SWAP_FONTS_16BPP 0x04000000
+#define COLORSETUP_SWAP_FONTS_32BPP 0x08000000
+
+extern dword ColorSetupFlags;
+
+
+#endif // _E_COLOR_H_
+
+
diff --git a/src/parsec/include/e_demo.h b/src/parsec/include/e_demo.h
new file mode 100644
index 0000000..4e48860
--- /dev/null
+++ b/src/parsec/include/e_demo.h
@@ -0,0 +1,55 @@
+/*
+ * PARSEC HEADER: e_demo.h
+ */
+
+#ifndef _E_DEMO_H_
+#define _E_DEMO_H_
+
+
+// external functions
+
+size_t DEMO_ParseDemoHeader( FILE *fp, int demoid, int verbose );
+void DEMO_RegisterInitialDemos();
+
+void DEMO_UserInputDisabling();
+
+int DEMO_ReplayActive();
+void DEMO_StopReplay();
+void DEMO_ClearDemo( int stopreplay );
+void DEMO_InitInfo();
+void DEMO_CountDemoFrame();
+
+int DEMO_TimedemoActive();
+refframe_t DEMO_GetTimedemoBase();
+
+int DEMO_BinaryReplayActive();
+void DEMO_BinaryStopReplay();
+FILE* DEMO_BinaryOpenDemo( const char *demoname );
+void DEMO_BinaryExecCommands( int interactive );
+
+int DEMO_PlayBehindMenu( const char *demoname );
+int DEMO_PlayFromMenu( const char *demoname );
+
+int Cmd_PlayBinaryDemoFile( char *command );
+
+
+// external variables
+
+extern int num_registered_demos;
+extern int max_registered_demos;
+extern char* registered_demo_names[];
+extern char* registered_demo_titles[];
+
+extern refframe_t demoinfo_curtime;
+extern int demoinfo_curline;
+extern int demoinfo_curframe;
+extern dword demoinfo_curofs;
+extern refframe_t demoinfo_lastwait;
+
+struct keyfunc_s;
+extern keyfunc_s* key_replay_map;
+
+
+#endif // _E_DEMO_H_
+
+
diff --git a/src/parsec/include/e_draw.h b/src/parsec/include/e_draw.h
new file mode 100644
index 0000000..6fdd324
--- /dev/null
+++ b/src/parsec/include/e_draw.h
@@ -0,0 +1,55 @@
+/*
+ * PARSEC HEADER: e_draw.h
+ */
+
+#ifndef _E_DRAW_H_
+#define _E_DRAW_H_
+
+
+// colored screen rectangle info
+
+struct colscreenrect_s {
+
+ int x;
+ int y;
+ int w;
+ int h;
+
+ dword itertype;
+ colrgba_s color;
+};
+
+
+// textured screen rectangle info
+
+struct texscreenrect_s {
+
+ int x;
+ int y;
+ int w;
+ int h;
+
+ int scaled_w;
+ int scaled_h;
+
+ int texofsx;
+ int texofsy;
+
+ int alpha;
+
+ dword itertype;
+ TextureMap* texmap;
+};
+
+
+// external functions
+
+void DRAW_PanelDecorations( sgrid_t putx, sgrid_t puty, int width, int height );
+void DRAW_ClippedTrRect( sgrid_t putx, sgrid_t puty, int width, int height, dword brightx );
+void DRAW_ColoredScreenRect( colscreenrect_s *rect );
+void DRAW_TexturedScreenRect( texscreenrect_s *rect, Rectangle2 *cliprect );
+
+
+#endif // _E_DRAW_H_
+
+
diff --git a/src/parsec/include/e_events.h b/src/parsec/include/e_events.h
new file mode 100644
index 0000000..08f2554
--- /dev/null
+++ b/src/parsec/include/e_events.h
@@ -0,0 +1,66 @@
+/*
+ * PARSEC HEADER: e_events.h
+ */
+
+#ifndef _E_EVENTS_H_
+#define _E_EVENTS_H_
+
+
+
+// event parameter flags ------------------------------------------------------
+//
+#define EVENT_PARAM_LOOP_MASK 0x000f // mask for loop parameter
+#define EVENT_PARAM_ONESHOT 0x0000 // execute event once
+#define EVENT_PARAM_LOOP_COUNT 0x0001 // execute event loopinfo times
+#define EVENT_PARAM_LOOP_INDEFINITE 0x0002 // execute event until removed
+
+#define EVENT_PARAM_ONE_PER_TYPE 0x0010 // remove any other event of same type
+#define EVENT_PARAM_DEPENDENT 0x0020 // trigger of event depends on other event's trigger
+#define EVENT_PARAM_AUTOFREE 0x0040 // event is automatically freed after it's last fired
+#define EVENT_PARAM_AUTOFREE_CALLBACK 0x0080 // callback data is automatically freed after it's last fired
+#define EVENT_PARAM_AUTOTRIGGER 0x0100 // event is automatically triggered when added to the list
+
+#define EVENT_UNTRIGGERED -1 // event is not triggered yet
+
+
+// generic event information --------------------------------------------------
+//
+struct event_s {
+
+ event_s* next;
+ event_s* prec;
+ dword type; // type information of event
+ int (*callback)(void *); // callback function to be called, when event is fired
+ void* callback_params; // parameters passed to the callback function
+ refframe_t refframe_delay; // delay in refframes for event from trigger to fire
+ dword flags; // flags describing the event
+ dword loopcount; // loop count for looping events
+ dword dependent_on; // id of event this event depends on
+ refframe_t refframe_trigger; // refframe when event is to trigger
+ int _mksiz64[6];
+};
+
+
+// for easy casting of event callback function pointers -----------------------
+//
+typedef int (*event_callback_t)(void*);
+
+
+// external functions ---------------------------------------------------------
+//
+int EVT_InitManager();
+int EVT_KillManager();
+size_t EVT_AddEvent( event_s *event );
+void EVT_RemoveEvent( size_t id );
+void EVT_RemoveEventType( dword type );
+void EVT_Maintain();
+
+
+// include event definitions --------------------------------------------------
+//
+#include "e_evtdef.h"
+
+
+#endif // _E_EVENTS_H_
+
+
diff --git a/src/parsec/include/e_evtdef.h b/src/parsec/include/e_evtdef.h
new file mode 100644
index 0000000..2fb3304
--- /dev/null
+++ b/src/parsec/include/e_evtdef.h
@@ -0,0 +1,48 @@
+/*
+ * PARSEC HEADER (ENGINE CORE)
+ * Eventmanager Definitions V1.02
+ *
+ * Copyright (c) Clemens Beer 1999
+ * All Rights Reserved.
+ */
+
+#ifndef _EVTDEFS_H_
+#define _EVTDEFS_H_
+
+
+// general event types ---------------------------------------------------------
+//
+#define EVT_TYPE_GENERAL 0x0000
+
+
+// sound event types ----------------------------------------------------------
+//
+#define EVT_TYPE_SND_GENERAL 0x1000
+#define EVT_TYPE_SND_GUN_SELECT 0x1001
+#define EVT_TYPE_SND_MISSILE_SELECT 0x1002
+#define EVT_TYPE_SND_COUNTDOWN 0x1003
+#define EVT_TYPE_SND_SHIPDESTROYED 0x1004
+#define EVT_TYPE_SND_THRUST_FADEOUT 0x1005
+#define EVT_TYPE_SND_SLIDETHRUST_FADEOUT 0x1006
+#define EVT_TYPE_SND_INCOMING_STOP 0x1007
+#define EVT_TYPE_SND_LASERBEAM_STOP 0x1008
+#define EVT_TYPE_SND_LIGHTNING_VOLUME 0x1009
+#define EVT_TYPE_SND_HELIX_VOLUME 0x100A
+#define EVT_TYPE_SND_EXPLOSION_DELAY 0x100B
+#define EVT_TYPE_SND_KILLSLEFT 0x100C
+#define EVT_TYPE_SND_SWARM_VOLUME 0x100D
+#define EVT_TYPE_SND_PHOTON_VOLUME 0x100E
+#define EVT_TYPE_SND_TELEPORTER_VOLUME 0x100F
+
+
+// background event types -----------------------------------------------------
+//
+#define EVT_TYPE_BKGN_GENERAL 0x1100
+#define EVT_TYPE_BKGN_CDTRACK_END 0x1101
+#define EVT_TYPE_BKGN_SAMPLE_END 0x1102
+#define EVT_TYPE_BKGN_SILENCE_END 0x1104
+
+
+#endif //_EVTDEFS_H_
+
+
diff --git a/src/parsec/include/e_getopt.h b/src/parsec/include/e_getopt.h
new file mode 100644
index 0000000..48b5121
--- /dev/null
+++ b/src/parsec/include/e_getopt.h
@@ -0,0 +1,55 @@
+/*
+ * PARSEC HEADER: e_getopt.h
+ */
+
+#ifndef _E_GETOPT_H_
+#define _E_GETOPT_H_
+
+
+// command line options table entry
+
+struct cli_option_s {
+
+ const char* opt_short;
+ const char* opt_long;
+
+ dword _mksiz32;
+
+ byte _dummy;
+ byte num_int;
+ byte num_float;
+ byte num_string;
+
+ int (*exec_set)();
+ int (*exec_int)(int*);
+ int (*exec_float)(float*);
+ int (*exec_string)(char**);
+};
+
+
+// application name option table entry
+
+struct app_option_s {
+
+ const char* appname;
+ void (*appmain)(int,char**);
+};
+
+
+// external functions
+
+int OPT_RegisterSetOption( const char *optshort, const char *optlong, int (*func)() );
+int OPT_RegisterIntOption( const char *optshort, const char *optlong, int (*func)(int*) );
+int OPT_RegisterFloatOption( const char *optshort, const char *optlong, int (*func)(float*) );
+int OPT_RegisterStringOption( const char *optshort, const char *optlong, int (*func)(char**) );
+int OPT_RegisterOption( cli_option_s *regopt );
+int OPT_RegisterApplication( const char *appname, void (*appmain)(int,char**) );
+
+void OPT_ClearOptions();
+
+int OPT_ExecRegisteredOptions( int argc, char **argv );
+
+
+#endif // _E_GETOPT_H_
+
+
diff --git a/src/parsec/include/e_global.h b/src/parsec/include/e_global.h
new file mode 100644
index 0000000..ebb3d32
--- /dev/null
+++ b/src/parsec/include/e_global.h
@@ -0,0 +1,177 @@
+/*
+ * PARSEC HEADER: e_global.h
+ */
+
+#ifndef _E_GLOBAL_H_
+#define _E_GLOBAL_H_
+
+
+// include data info tables -------------------------------
+
+#include "gd_tabs.h"
+
+
+// global externals (ENGINE CORE) -------------------------
+
+extern int NumLoadedObjects;
+extern int NumLoadedTextures;
+extern int NumLoadedTexfonts;
+extern int NumLoadedBitmaps;
+extern int NumLoadedCharsets;
+extern int NumLoadedSamples;
+extern int NumLoadedSongs;
+extern int NumLoadedPalettes;
+
+extern objectinfo_s ObjectInfo[];
+extern textureinfo_s TextureInfo[];
+extern texfontinfo_s TexfontInfo[];
+extern bitmapinfo_s BitmapInfo[];
+extern charsetinfo_s CharsetInfo[];
+extern sampleinfo_s SampleInfo[];
+extern songinfo_s SongInfo[];
+
+extern char CurWorkDir[];
+
+extern char ForcedPlayerName[];
+
+extern int ParticleSysEnabled;
+extern int ZBufferEnabled;
+extern int ParticlesTranslucent;
+
+extern char* sys_ProgramName;
+extern char* TextureMem;
+extern char* BitmapMem;
+extern char* SampleMem;
+extern char* PaletteMem;
+extern visual_t IndexToVisualTab[];
+extern colrgba_s IndexToRGBATab[];
+
+extern colrgba_s PanelBackColor;
+extern colrgba_s PanelTextColor;
+extern colrgba_s FlareBaseColor;
+
+extern colrgba_s LightColorAmbient;
+extern colrgba_s LightColorDiffuse;
+extern colrgba_s LightColorSpecular;
+
+extern Vector3 GlobalDirLight;
+
+extern int NumRenderedPolygons;
+
+extern refframe_t CurScreenRefFrames;
+extern refframe_t ScreenFrameBase;
+extern refframe_t CurPacketRefFrames;
+extern refframe_t PacketFrameBase;
+extern refframe_t RefFrameFrequency;
+
+#define VISFRAME_NEVER 0xFFFFFFFF
+#define VISFRAME_START 1
+extern dword CurVisibleFrame;
+
+extern int ShowFrameRate;
+
+extern int FixedFrameRate;
+extern refframe_t FixedFrameRateVal;
+
+extern refframe_t MaxRefFrameVal;
+
+extern int RecordingActive;
+extern FILE* RecordingFp;
+extern int RecordRemotePackets;
+extern int RemoteRecSessionId;
+extern int RemoteRecPacketId;
+
+extern int SoundAvailable;
+extern int SoundDisabled;
+
+extern int SkipCalibrationCode;
+extern int JoystickDisabled;
+extern int DirectNetPlay;
+extern int PrintVidModeList;
+extern int PlayDemo;
+extern int FloatingMenu;
+extern int EnableLogWindow;
+
+extern int QueryJoystick;
+extern int UserInputDisabled;
+
+extern int DoLensFlare;
+extern int FlareIntensity;
+
+extern int ConsoleSliding;
+extern int ConsoleHeight;
+
+extern bams_t CurYaw;
+extern bams_t CurPitch;
+extern bams_t CurRoll;
+extern geomv_t CurSlideHorz;
+extern geomv_t CurSlideVert;
+
+extern bams_t RecYaw;
+extern bams_t RecPitch;
+extern bams_t RecRoll;
+extern geomv_t RecSlideHorz;
+extern geomv_t RecSlideVert;
+
+extern bams_t LastPitch;
+extern bams_t LastYaw;
+extern bams_t LastRoll;
+extern geomv_t LastSlideHorz;
+extern geomv_t LastSlideVert;
+extern fixed_t LastSpeed;
+extern int IdleDuration;
+
+extern int CurActionWait;
+extern bams_t AutomaticPitch;
+extern bams_t AutomaticYaw;
+extern bams_t AutomaticRoll;
+extern geomv_t AutomaticSlideHorz;
+extern geomv_t AutomaticSlideVert;
+extern fixed_t AutomaticMovement;
+
+extern int ReplayObjCamActive;
+
+extern bams_t AbsYaw;
+extern bams_t AbsPitch;
+extern bams_t AbsRoll;
+
+extern Camera ViewCamera;
+extern Camera ObjectCamera;
+extern Camera ShipViewCamera;
+
+extern int ObjCameraActive;
+
+extern int LocalShipClass;
+extern ShipObject* MyShip;
+extern size_t MyShipMaxInstanceSize;
+
+extern ShipObject* PShipObjects;
+extern LaserObject* LaserObjects;
+extern MissileObject* MisslObjects;
+extern ExtraObject* ExtraObjects;
+extern CustomObject* CustmObjects;
+extern GenObject* VObjList;
+extern GenObject* ObjClasses[];
+extern int NumObjClasses;
+
+extern dword NextObjNumber;
+
+extern int CurrentNumExtras;
+extern int CurrentNumPrtExtras;
+extern int MaxNumExtras;
+
+extern int CameraMoved;
+
+extern float SetScreenBlue;
+extern float SetScreenWhite;
+extern int SetScreenFade;
+extern int SetScreenFadeSpeed;
+extern colrgba_s SetScreenFadeColor;
+
+extern int AuxEnabling[];
+extern int AuxData[];
+
+
+#endif // _E_GLOBAL_H_
+
+
diff --git a/src/parsec/include/e_level.h b/src/parsec/include/e_level.h
new file mode 100644
index 0000000..9d9b4d6
--- /dev/null
+++ b/src/parsec/include/e_level.h
@@ -0,0 +1,19 @@
+/*
+ * PARSEC HEADER: e_level.h
+ */
+
+#ifndef _E_LEVEL_H_
+#define _E_LEVEL_H_
+
+
+// external functions ---------------------------------------------------------
+//
+int LVL_LoadLevel ( const char* levelname );
+int LVL_LoadIntLevel( int level );
+int LVL_SaveLevel ( const char* levelname );
+
+
+
+#endif // _E_LEVEL_H_
+
+
diff --git a/src/parsec/include/e_loader.h b/src/parsec/include/e_loader.h
new file mode 100644
index 0000000..6fc0e6d
--- /dev/null
+++ b/src/parsec/include/e_loader.h
@@ -0,0 +1,20 @@
+/*
+ * PARSEC HEADER: e_loader.h
+ */
+
+#ifndef _E_LOADER_H_
+#define _E_LOADER_H_
+
+
+// external functions
+
+void LoadData( char *cfn, int dispinfo );
+void ReloadResData( char *cfn );
+void ReloadDetailData( char *cfn );
+void FreeLoaderDataBuffers();
+void ShowFilesLoaded( int flag );
+
+
+#endif // _E_LOADER_H_
+
+
diff --git a/src/parsec/include/e_mouse.h b/src/parsec/include/e_mouse.h
new file mode 100644
index 0000000..b9985d1
--- /dev/null
+++ b/src/parsec/include/e_mouse.h
@@ -0,0 +1,51 @@
+/*
+ * PARSEC HEADER: e_mouse.h
+ */
+
+#ifndef _E_MOUSE_H_
+#define _E_MOUSE_H_
+
+
+// mouse area definition in reference size
+
+struct mouse_area_s {
+
+ int xpos;
+ int ypos;
+ int width;
+ int height;
+};
+
+
+// mouse area definition for scaled coordinates
+
+struct mouse_area_scaled_s {
+
+ int xleft;
+ int xright;
+ int ytop;
+ int ybottom;
+};
+
+
+// external functions
+
+void MouseCalcScaledAreas( mouse_area_s *src, mouse_area_scaled_s *dst, int numareas );
+int DrawMouseCursor();
+
+
+// determine whether a position is within the supplied area -------------------
+//
+inline
+int MouseOverArea( mouse_area_scaled_s *area, int mousex, int mousey )
+{
+ ASSERT( area != NULL );
+
+ return ( ( mousex >= area->xleft ) && ( mousex < area->xright ) &&
+ ( mousey >= area->ytop ) && ( mousey < area->ybottom ) );
+}
+
+
+#endif // _E_MOUSE_H_
+
+
diff --git a/src/parsec/include/e_record.h b/src/parsec/include/e_record.h
new file mode 100644
index 0000000..60c9064
--- /dev/null
+++ b/src/parsec/include/e_record.h
@@ -0,0 +1,79 @@
+/*
+ * PARSEC HEADER: e_record.h
+ */
+
+#ifndef _E_RECORD_H_
+#define _E_RECORD_H_
+
+
+// external functions
+
+
+void REC_InitMatrices();
+
+void REC_RecordActions();
+void REC_RecordFiring();
+void REC_RecordKeys();
+
+int REC_IsRecordingPackets();
+void REC_RecordRemotePacket( NetPacketExternal* ext_gamepacket );
+void REC_PlayRemotePacket( int session, int packetno );
+size_t REC_PlayRemotePacketBin( NetPacketExternal* ext_gamepacket );
+size_t REC_FetchRemotePacket( NetPacketExternal* ext_gamepacket, int session, int packetno );
+void REC_RecordServerMessage( char *message );
+
+void Save_StateInfo( FILE *fp );
+void Save_PrepRestore( FILE *fp );
+void Save_MyShipState( FILE *fp );
+void Save_RemoteState( FILE *fp );
+void Save_ObjListShips( FILE *fp );
+void Save_ObjListLasers( FILE *fp );
+void Save_ObjListMissls( FILE *fp );
+void Save_ObjListExtras( FILE *fp );
+void Save_ObjListCustom( FILE *fp );
+void Save_Camera( FILE *fp );
+void Save_PseudoStars( FILE *fp );
+
+void Record_LaserCreation( LaserObject *laserpo );
+void Record_MissileCreation( MissileObject *missilepo );
+void Record_TargetMissileCreation( TargetMissileObject *missilepo );
+void Record_MineCreation( MineObject *minepo );
+void Record_ExtraCreation( ExtraObject *extrapo );
+void Record_CustomCreation( CustomObject *custompo );
+void Record_EnergyFieldCreation( Vertex3& origin );
+void Record_SpreadFireFiring();
+void Record_LightningActivation();
+void Record_LightningDeactivation();
+void Record_HelixActivation();
+void Record_HelixDeactivation();
+void Record_PhotonActivation();
+void Record_PhotonDeactivation();
+void Record_EmpActivation();
+void Record_EmpDeactivation();
+void Record_EmpCreation();
+
+void Record_LocalPlayerState();
+void Record_Join();
+void Record_Unjoin( byte flag );
+
+void Record_MyShipStateWeapons();
+void Record_MyShipStateSpecials();
+void Record_MyShipStateCurDamage();
+void Record_MyShipStateCurEnergy();
+void Record_MyShipStateCurSpeed();
+void Record_MyShipStateNumMissls();
+void Record_MyShipStateNumHomMissls();
+void Record_MyShipStateNumPartMissls();
+void Record_MyShipStateNumMines();
+void Record_MyShipStateMaxDamage();
+void Record_MyShipStateMaxEnergy();
+void Record_MyShipStateMaxSpeed();
+void Record_MyShipStateMaxNumMissls();
+void Record_MyShipStateMaxNumHomMissls();
+void Record_MyShipStateMaxNumPartMissls();
+void Record_MyShipStateMaxNumMines();
+
+
+#endif // _E_RECORD_H_
+
+
diff --git a/src/parsec/include/e_replay.h b/src/parsec/include/e_replay.h
new file mode 100644
index 0000000..62c40c3
--- /dev/null
+++ b/src/parsec/include/e_replay.h
@@ -0,0 +1,17 @@
+/*
+ * PARSEC HEADER: e_replay.h
+ */
+
+#ifndef _E_REPLAY_H_
+#define _E_REPLAY_H_
+
+
+// external functions
+
+void REPLAY_StopAutomaticActions();
+void REPLAY_PerformAutomaticActions();
+
+
+#endif // _E_REPLAY_H_
+
+
diff --git a/src/parsec/include/e_shader.h b/src/parsec/include/e_shader.h
new file mode 100644
index 0000000..4ca6b8f
--- /dev/null
+++ b/src/parsec/include/e_shader.h
@@ -0,0 +1,69 @@
+/*
+ * PARSEC HEADER: e_shader.h
+ */
+
+#ifndef _E_SHADER_H_
+#define _E_SHADER_H_
+
+
+// shader spec
+
+struct shader_s {
+
+ char* name;
+ word iter;
+ word flags;
+ texanim_s* texanim;
+ colrgba_s facecolor;
+ colanim_s* colanim;
+ dword colflags;
+ dword _pad32[ 2 ];
+};
+
+
+// special lod argument for SetFaceShader()
+
+#define ACTIVE_LOD (~0)
+
+
+// argument specification for face shader overriding
+
+enum {
+
+ OVERRIDE_ARG_IDLIST,
+ OVERRIDE_ARG_TEXTURE,
+ OVERRIDE_ARG_GLOBAL,
+
+ OVERRIDE_ARG_NUM_ARGS
+};
+
+
+// external functions
+
+int SetFaceShader( GenObject *obj, dword lod, dword faceid, shader_s *shader );
+
+shader_s* FetchShaderByName( const char *name, dword *shaderid );
+shader_s* FetchShaderById( dword shaderid );
+int RegisterShader( shader_s *shader );
+
+void OverrideShaderFaceByIdList( dword objclass, shader_s *shader, dword *faceids, int count );
+void OverrideShaderFaceByTexture( dword objclass, shader_s *shader, char *texname );
+void OverrideShaderFaceGlobal( dword objclass, shader_s *shader );
+void OverrideShaderFaceGlobalInstanced( GenObject *gobj, shader_s *shader );
+void OverrideShaderFaces( dword objclass, shader_s *shader, int arg );
+void OverrideShaderLodFaces( dword objclass, shader_s *shader, int lod, int arg );
+
+
+// external variables
+
+extern int num_registered_shaders;
+extern shader_s registered_shaders[];
+
+extern dword* override_arg_faceids;
+extern int override_arg_count;
+extern char* override_arg_texname;
+
+
+#endif // _E_SHADER_H_
+
+
diff --git a/src/parsec/include/e_supp.h b/src/parsec/include/e_supp.h
new file mode 100644
index 0000000..fe48f0a
--- /dev/null
+++ b/src/parsec/include/e_supp.h
@@ -0,0 +1,32 @@
+/*
+ * PARSEC HEADER: e_supp.h
+ */
+
+#ifndef _E_SUPP_H_
+#define _E_SUPP_H_
+
+
+// external functions
+
+void InitRefFrameVars();
+void DoFrameTimeCalculations();
+void SaveScreenShot();
+
+int CeilPow2Exp( int number );
+
+TextureMap* FetchTextureMap( const char *texname );
+texfont_s* FetchTexfont( const char *fontname );
+
+int FetchBitmapId( const char *bmname );
+
+int EvictUnsupportedTextureFormatData();
+int ReloadFreedTextureBitmaps();
+
+#ifdef PARSEC_SERVER
+ #undef KillAllObjects
+#endif // PARSEC_SERVER
+void KillAllObjects();
+
+#endif // _E_SUPP_H_
+
+
diff --git a/src/parsec/include/e_texani.h b/src/parsec/include/e_texani.h
new file mode 100644
index 0000000..b5da632
--- /dev/null
+++ b/src/parsec/include/e_texani.h
@@ -0,0 +1,34 @@
+/*
+ * PARSEC HEADER: e_texani.h
+ */
+
+#ifndef _E_TEXANI_H_
+#define _E_TEXANI_H_
+
+
+// texanim spec
+
+struct texanimreg_s {
+
+ char* name;
+// dword _pad32[ 3 ];
+// colanim_s colanim;
+};
+
+
+// external functions
+
+texanimreg_s* FetchTexAnim( char *name, dword *texanimid );
+void InitAnimStateTexAnim( FaceAnimState *animstate, texanim_s *texanim );
+int RegisterTexAnim( texanimreg_s *texanimref );
+
+
+// external variables
+
+extern int num_registered_texanims;
+extern texanimreg_s registered_texanims[];
+
+
+#endif // _E_TEXANI_H_
+
+
diff --git a/src/parsec/include/e_vtxani.h b/src/parsec/include/e_vtxani.h
new file mode 100644
index 0000000..c667300
--- /dev/null
+++ b/src/parsec/include/e_vtxani.h
@@ -0,0 +1,17 @@
+/*
+ * PARSEC HEADER: e_vtxani.h
+ */
+
+#ifndef _E_VTXANI_H_
+#define _E_VTXANI_H_
+
+
+// external functions
+
+int VtxAnimMakeCurrent( GenObject *gobj, dword animid );
+VtxAnimState* VtxAnimCreateFromFaceList( GenObject *gobj, dword lod, int numfaces, dword *faceids );
+
+
+#endif // _E_VTXANI_H_
+
+
diff --git a/src/parsec/include/g_boot.h b/src/parsec/include/g_boot.h
new file mode 100644
index 0000000..41a549b
--- /dev/null
+++ b/src/parsec/include/g_boot.h
@@ -0,0 +1,19 @@
+/*
+ * PARSEC HEADER: g_boot.h
+ */
+
+#ifndef _G_BOOT_H_
+#define _G_BOOT_H_
+
+
+// external functions
+
+void StartupMessages();
+
+int GameBoot();
+int GameInit( int use_net );
+
+
+#endif // _G_BOOT_H_
+
+
diff --git a/src/parsec/include/g_bot_cl.h b/src/parsec/include/g_bot_cl.h
new file mode 100644
index 0000000..66e3871
--- /dev/null
+++ b/src/parsec/include/g_bot_cl.h
@@ -0,0 +1,404 @@
+#ifndef G_BOT_CL_H_
+#define G_BOT_CL_H_
+
+// simple timeout handling ----------------------------------------------------
+//
+class UTL_RefFrameTimeout
+{
+protected:
+ refframe_t m_RefFrames;
+ refframe_t m_Base;
+ refframe_t m_Timeout;
+
+public:
+ // ctors
+ UTL_RefFrameTimeout()
+ {
+ m_Timeout = 0;
+ Reset();
+ }
+ UTL_RefFrameTimeout( refframe_t _Timeout )
+ {
+ Set( _Timeout );
+ }
+
+ // set the timeout value
+ void Set( refframe_t _Timeout )
+ {
+ m_Timeout = _Timeout;
+ Reset();
+ }
+
+ // reset timeout
+ void Reset()
+ {
+ m_RefFrames = m_Timeout;
+ m_Base = SYSs_GetRefFrameCount();
+ }
+
+ // check for timeout
+ bool_t IsTimeout()
+ {
+ refframe_t diff = SYSs_GetRefFrameCount() - m_Base;
+ m_RefFrames -= diff;
+ if ( m_RefFrames < 0 ) {
+ m_RefFrames += m_Timeout;
+ return true;
+ } else {
+ return false;
+ }
+ }
+};
+
+
+// ****************************************************************************
+// ****************************************************************************
+// ****************************************************************************
+//FIXME:
+// this belongs into seperate OCT module
+// ****************************************************************************
+// ****************************************************************************
+// ****************************************************************************
+
+// object control orientations ------------------------------------------------
+//
+#define OCT_PITCH_UP -1
+#define OCT_PITCH_DOWN +1
+#define OCT_YAW_LEFT +1
+#define OCT_YAW_RIGHT -1
+#define OCT_ROLL_LEFT +1
+#define OCT_ROLL_RIGHT -1
+#define OCT_ACCELERATE +1
+#define OCT_DECELERATE -1
+
+// object control structure ---------------------------------------------------
+//
+struct object_control_s
+{
+ ShipObject* pShip;
+
+ float rot_x; // do a rotation around the x axis - PITCH - ( -1 = divedown, +1 = pullup )
+ float rot_y; // do a rotation around the y axis - YAW - ( -1 = left, +1 = right )
+ float rot_z; // do a rotation around the z axis - ROLL - ( -1 = right, +1 = left )
+ float accel; // accel control ( +1 accelerate, -1 decelerate )
+
+ //FIXME: slide horiz/vert
+
+ //FIXME: numerically sane versions
+ bool_t IsPitch() const { return rot_x != 0.0f; }
+ bool_t IsYaw() const { return rot_y != 0.0f; }
+ bool_t IsRoll() const { return rot_z != 0.0f; }
+ bool_t IsMove() const { return accel != 0.0f; }
+};
+
+// do the desired object control
+int OCT_DoControl( object_control_s* objctl );
+
+// dump an object control to the console
+void OCT_Dump(object_control_s* objctl );
+
+// ****************************************************************************
+// ****************************************************************************
+// ****************************************************************************
+
+
+
+
+// ----------------------------------------------------------------------------
+//
+class UTL_LocomotionController
+{
+protected:
+
+ int m_nRelaxedHeadingAngle;
+ int m_nFullSpeedHeading;
+ float m_fMinSpeedTurn; // min. speed to keep when doing a sharp turn
+
+public:
+ // standard ctor
+ UTL_LocomotionController()
+ {
+ m_nRelaxedHeadingAngle = 5;
+ m_nFullSpeedHeading = 30;
+ m_fMinSpeedTurn = FIXED_TO_FLOAT( 500 );
+ }
+
+ // set the max. degrees the heading and the desired heading can differ
+ void SetRelaxedHeadingAngle( int nRelaxedHeadingAngle )
+ {
+ m_nRelaxedHeadingAngle = nRelaxedHeadingAngle;
+ }
+
+ // set the heading at which we should go full speed again after a turn
+ void SetFullSpeedHeading( int nFullSpeedHeading )
+ {
+ m_nFullSpeedHeading = nFullSpeedHeading;
+ }
+
+ // set the min. speed to keep during a turn
+ void SetMinSpeedTurn( fixed_t _MinSpeedTurn )
+ {
+ m_fMinSpeedTurn = FIXED_TO_FLOAT( _MinSpeedTurn );
+ }
+
+ void ControlOjbect( object_control_s* pObjctl, Vector3* pDesiredVelocity, fixed_t _DesiredSpeed );
+};
+
+
+// bot character properties ---------------------------------------------------
+//
+class BOT_Character
+{
+protected:
+ float m_fPlanInterval; // planning interval in secs
+ float m_fGoalCheckInterval; // goal checking interval in secs
+ float m_fInputChangeInterval; // input change interval in secs
+
+public:
+
+ //ctor
+ BOT_Character();
+
+ // reset to defaults
+ void Reset();
+
+ // select the attack target
+ ShipObject* SelectAttackTarget( ShipObject* pAttacker );
+ ExtraObject* SelectEnergyObject();
+ ExtraObject* SelectRepairObject();
+
+ // getters
+ float GetPlanInterval_sec() const { return m_fPlanInterval; }
+ float GetGoalCheckInterval_sec() const { return m_fGoalCheckInterval; }
+ float GetInputChangeInterval_sec() const { return m_fInputChangeInterval; }
+
+ // friend functions
+ friend void RealizeBotChar();
+};
+
+// bot goal -------------------------------------------------------------------
+//
+class BOT_Goal
+{
+protected:
+ Vector3 m_Pos;
+ GenObject* m_pObject;
+
+public:
+ BOT_Goal()
+ {
+ Reset();
+ }
+
+ void Reset()
+ {
+ memset( &m_Pos, 0, sizeof( Vector3 ) );
+ m_pObject = NULL;
+ }
+
+ // get the position the goal is at
+ Vector3* GetGoalPosition()
+ {
+ return &m_Pos;
+ }
+
+ // set/get target object
+ void SetTargetObject( GenObject* pObject ) { m_pObject = pObject; }
+ GenObject* GetTargetObject() const { return m_pObject; }
+};
+
+
+// current state of the bot ---------------------------------------------------
+//
+class BOT_State
+{
+protected:
+ BOT_Goal m_CurGoal;
+ object_control_s m_oc;
+public:
+
+ BOT_State()
+ {
+ }
+
+ // reset the dynamic state of the bot
+ void Reset( ShipObject* pShip )
+ {
+ m_CurGoal.Reset();
+ memset( &m_oc, 0, sizeof( object_control_s ) );
+ m_oc.pShip = pShip;
+ }
+
+ BOT_Goal* GetCurGoal() { return &m_CurGoal; }
+ object_control_s* GetObjectControl() { return &m_oc; }
+};
+
+
+// type specifying the agent modes --------------------------------------------
+//
+enum agentmode_t {
+ AGENTMODE_IDLE = 1,
+ AGENTMODE_POWERUP = 2,
+ AGENTMODE_ATTACK = 3,
+ AGENTMODE_RETREAT = 4,
+
+ AGENTMODE_MAX = AGENTMODE_RETREAT
+};
+
+// main class for handling the bot AI -----------------------------------------
+//
+class BOT_AI
+{
+protected:
+ agentmode_t m_nAgentMode;
+ BOT_State m_State;
+ BOT_Character m_Character;
+ ShipObject* m_pShip;
+
+ UTL_RefFrameTimeout m_PlanTimeout;
+ UTL_RefFrameTimeout m_GoalCheckTimeout;
+ UTL_RefFrameTimeout m_InputTimeout;
+
+ Vector3 m_AgentPos;
+
+public:
+
+ BOT_AI()
+ {
+ Reset();
+ }
+
+ // reset the bot AI
+ void Reset()
+ {
+ //m_nAgentMode = AGENTMODE_IDLE;
+ m_nAgentMode = AGENTMODE_ATTACK;
+ m_pShip = NULL;
+ m_State.Reset( m_pShip );
+
+ m_PlanTimeout.Set ( (refframe_t)m_Character.GetPlanInterval_sec() * FRAME_MEASURE_TIMEBASE );
+ m_GoalCheckTimeout.Set ( (refframe_t)m_Character.GetGoalCheckInterval_sec() * FRAME_MEASURE_TIMEBASE );
+ m_InputTimeout.Set ( (refframe_t)m_Character.GetInputChangeInterval_sec() * FRAME_MEASURE_TIMEBASE );
+ }
+
+ // set the ship object we want to control
+ void SetShipObject( ShipObject* pShip )
+ {
+ m_pShip = pShip;
+ m_State.Reset( pShip );
+ }
+
+
+
+ // main think function, called every render or sim frame ( client or server )
+ void DoThink();
+
+ // get the character of the bot
+ BOT_Character* GetCharacter() { return &m_Character; }
+
+protected:
+
+ void _DoPlan();
+
+ void _GoalCheck_AgentMode_Idle();
+ void _GoalCheck_AgentMode_Powerup();
+ void _GoalCheck_AgentMode_Attack();
+ void _GoalCheck_AgentMode_Retreat();
+
+ void _SteerToPosition( Vector3* targetPos, object_control_s* pObjctl );
+};
+
+
+
+// easy access to the singleton -----------------------------------------------
+//
+#define TheBot ( BOT_ClientSide::GetClientSideBot() )
+
+
+// forward decls --------------------------------------------------------------
+//
+PRIVATE int BOT_CallThink( void* param );
+
+// the timeout in refframes to wait between status checks ---------------------
+//
+#define BOT_STATUS_CHECK_TIMEOUT DEFAULT_REFFRAME_FREQUENCY
+
+// class for the client-side bot ----------------------------------------------
+//
+class BOT_ClientSide : public BOT_AI
+{
+protected:
+
+ // standard ctor
+ BOT_ClientSide() :
+ m_Started( FALSE ),
+ m_bWantToBeConnected( TRUE ),
+ m_bWantToBeJoined( TRUE ),
+ m_NextStatusCheckRefFrame( 0 )
+ {
+ memset( m_szServer, 0, MAX_SERVER_NAME * sizeof( char ) );
+ }
+
+ // standard dtor
+ ~BOT_ClientSide()
+ {
+ }
+
+ // check whether current status (connected/joined etc. ) matches the desired one
+ void _CheckStatus();
+
+protected:
+ int m_Started;
+ char m_szServer[ MAX_SERVER_NAME ];
+
+ int m_bWantToBeConnected;
+ int m_bWantToBeJoined;
+
+ // next refframe, we check for connect/disconnect/joined/unjoined
+ refframe_t m_NextStatusCheckRefFrame;
+
+public:
+ // SINGLETON pattern
+ static BOT_ClientSide* GetClientSideBot()
+ {
+ static BOT_ClientSide _TheClientSideBot;
+ return &_TheClientSideBot;
+ }
+
+ // set/get of status flags
+ int GetDesiredConnStatus() const { return m_bWantToBeConnected; }
+ int GetDesiredJoinStatus() const { return m_bWantToBeJoined; }
+ void SetDesiredConnStatus( int bWantToBeConnected ) { m_bWantToBeConnected = bWantToBeConnected; }
+ void SetDesiredJoinStatus( int bWantToBeJoined ) { m_bWantToBeJoined = bWantToBeJoined; }
+
+ // overwritten think method to allow special client-side things
+ void DoThink();
+
+ // start the bot
+ void Start();
+
+ // stop the bot
+ void Stop();
+
+ // get the servername the client bot should connect to
+ char* GetConnectServer()
+ {
+ return m_szServer;
+ }
+
+ // set the server we want to connect to
+ void SetConnectServer( char* pszServer )
+ {
+ // trim left
+ char *p = NULL;
+ for( p = pszServer; *p == ' '; p++ );
+
+ if ( strncmp( p, "\"\"", 2 ) == 0 ) {
+ m_szServer[ 0 ] = '\0';
+ } else {
+ strncpy( m_szServer, p, MAX_SERVER_NAME );
+ }
+ }
+};
+
+#endif // G_BOT_CL_H_
diff --git a/src/parsec/include/g_camera.h b/src/parsec/include/g_camera.h
new file mode 100644
index 0000000..4cd2126
--- /dev/null
+++ b/src/parsec/include/g_camera.h
@@ -0,0 +1,32 @@
+/*
+ * PARSEC HEADER: g_camera.h
+ */
+
+#ifndef _G_CAMERA_H_
+#define _G_CAMERA_H_
+
+
+// external functions
+
+void CAMERA_InitShipOrigin();
+void CAMERA_MakeFixedStarCam( Camera dstcam );
+
+void CAMERA_GetViewCamera();
+
+void CAMERA_ResetFilter();
+void CAMERA_BeginModify();
+void CAMERA_EndModify();
+
+void CAMERA_BeginFrameView();
+void CAMERA_EndFrameView();
+
+
+// external variables
+
+extern int pseudo_framecam_is_id;
+extern Xmatrx pseudo_framecam;
+
+
+#endif // _G_CAMERA_H_
+
+
diff --git a/src/parsec/include/g_cloud.h b/src/parsec/include/g_cloud.h
new file mode 100644
index 0000000..4ca8361
--- /dev/null
+++ b/src/parsec/include/g_cloud.h
@@ -0,0 +1,20 @@
+/*
+ * PARSEC HEADER: s_cloud.h
+ */
+
+#ifndef _S_CLOUD_H_
+#define _S_CLOUD_H_
+
+
+// external functions
+
+void DrawSmokeCloud();
+int DrawCloudLayers();
+void ModulateDistance();
+void ModulateColor();
+void ModulateAlpha();
+
+
+#endif // _S_CLOUD_H_
+
+
diff --git a/src/parsec/include/g_explod.h b/src/parsec/include/g_explod.h
new file mode 100644
index 0000000..4273178
--- /dev/null
+++ b/src/parsec/include/g_explod.h
@@ -0,0 +1,16 @@
+/*
+ * PARSEC HEADER: s_explod.h
+ */
+
+#ifndef _S_EXPLOD_H_
+#define _S_EXPLOD_H_
+
+
+// external functions
+
+void DrawExpAnim( const ShipObject *shippo );
+
+
+#endif // _S_EXPLOD_H_
+
+
diff --git a/src/parsec/include/g_gameloop.h b/src/parsec/include/g_gameloop.h
new file mode 100644
index 0000000..834b02b
--- /dev/null
+++ b/src/parsec/include/g_gameloop.h
@@ -0,0 +1,16 @@
+/*
+ * PARSEC HEADER: g_main.h
+ */
+
+#ifndef _G_MAIN_H_
+#define _G_MAIN_H_
+
+
+// external functions
+
+void GameLoop();
+
+
+#endif // _G_MAIN_H_
+
+
diff --git a/src/parsec/include/g_global.h b/src/parsec/include/g_global.h
new file mode 100644
index 0000000..8088f03
--- /dev/null
+++ b/src/parsec/include/g_global.h
@@ -0,0 +1,119 @@
+/*
+ * PARSEC HEADER: g_global.h
+ */
+
+#ifndef _G_GLOBAL_H_
+#define _G_GLOBAL_H_
+
+
+// global externals (GAME CODE) ---------------------------
+
+extern int FireDisable;
+extern int FireRepeat;
+extern int CurGun;
+extern int MissileDisable;
+extern int CurLauncher;
+
+extern int InFloatingMenu;
+extern int InStarMap;
+extern int InGameLoop;
+extern int ExitGameLoop;
+
+extern dword CurStreamReplayPos;
+
+extern int Op_DetailLevel;
+extern int Op_PacketSendFreq;
+extern int Op_FixFrameRate;
+extern int Op_SoundEffects;
+extern int Op_Music;
+extern int Op_Joystick;
+extern int Op_Mouse;
+
+extern int HelpActive;
+
+extern dword TargetObjNumber;
+extern int TargetVisible;
+extern int TargetLocked;
+extern int TargetRemId;
+extern dword TargetScreenX;
+extern dword TargetScreenY;
+
+extern int MaxNumShots;
+extern int NumShots;
+extern int MaxNumMissiles;
+extern int NumMissiles;
+
+extern int SelectedLaser;
+extern int SelectedMissile;
+
+extern int HitCurTarget;
+extern int IncomingMissile;
+
+
+// game control data
+
+extern int EnergyExtraBoost;
+extern int RepairExtraBoost;
+
+extern int DumbPackNumMissls;
+extern int HomPackNumMissls;
+extern int SwarmPackNumMissls;
+extern int ProxPackNumMines;
+
+extern int ExtraProbability;
+extern int MaxExtraArea;
+extern int MinExtraDist;
+
+extern int ProbHelixCannon;
+extern int ProbLightningDevice;
+extern int ProbPhotonCannon;
+
+extern int ProbProximityMine;
+
+extern int ProbMissilePack;
+extern int ProbDumbMissPack;
+extern int ProbHomMissPack;
+extern int ProbSwarmMissPack;
+
+extern int ProbRepairExtra;
+extern int ProbAfterburner;
+extern int ProbHoloDecoy;
+extern int ProbInvisibility;
+extern int ProbInvulnerability;
+extern int ProbEnergyField;
+
+extern int ProbLaserUpgrade;
+extern int ProbLaserUpgrade1;
+extern int ProbLaserUpgrade2;
+
+extern int ProbEmpUpgrade1;
+extern int ProbEmpUpgrade2;
+
+extern int MegaShieldStrength;
+
+
+// fixed/pseudo star structures
+
+// star number of sun
+#define SUN_STAR_NO 52
+
+struct fixedstar_s {
+
+ Vertex3 location;
+ dword type;
+};
+
+typedef Vertex3 pseudostar_s;
+
+extern pXmatrx PseudoStarMovement;
+extern pseudostar_s PseudoStars[];
+extern int NumPseudoStars;
+extern int MaxPseudoStars;
+
+extern fixedstar_s FixedStars[];
+extern int NumFixedStars;
+
+
+#endif // _G_GLOBAL_H_
+
+
diff --git a/src/parsec/include/g_laser.h b/src/parsec/include/g_laser.h
new file mode 100644
index 0000000..cab0f7d
--- /dev/null
+++ b/src/parsec/include/g_laser.h
@@ -0,0 +1,17 @@
+/*
+ * PARSEC HEADER: s_laser.h
+ */
+
+#ifndef _S_LASER_H_
+#define _S_LASER_H_
+
+
+// external functions
+
+int CreateLaserBeam( GenObject *ownerpo, dword targetobjno, dword *laserbeamobjno );
+int KillLaserBeam( dword laserbeamobjno );
+
+
+#endif // _S_LASER_H_
+
+
diff --git a/src/parsec/include/g_main_cl.h b/src/parsec/include/g_main_cl.h
new file mode 100644
index 0000000..5731048
--- /dev/null
+++ b/src/parsec/include/g_main_cl.h
@@ -0,0 +1,258 @@
+#ifndef _G_MAIN_CL_H_
+#define _G_MAIN_CL_H_
+
+// ----------------------------------------------------------------------------
+//
+class G_Extracted
+{
+protected:
+
+ // remember time last kill was achieved, needed for medals
+ refframe_t last_kill_time;
+
+protected:
+
+ // check kill announcements and medals ----------------------------------------
+ //
+ void _CheckKillAnnouncements( int nKiller )
+ {
+ if ( !AUX_DISABLE_KILLS_LEFT_ANNOUNCEMENT ) {
+
+ // check if somebody is approaching the kill limit
+ int leaderkills = 0;
+
+ for ( int pid = 0; pid < MAX_NET_PROTO_PLAYERS; pid++ ) {
+ if ( Player_Status[ pid ] == PLAYER_INACTIVE )
+ continue;
+ if ( Player_KillStat[ pid ] > leaderkills )
+ leaderkills = Player_KillStat[ pid ];
+ }
+
+ if ( AUX_KILL_LIMIT_FOR_GAME_END > 0 ) {
+ if ( AUX_KILL_LIMIT_FOR_GAME_END >= leaderkills ) {
+ int killsleft = AUX_KILL_LIMIT_FOR_GAME_END - leaderkills;
+ AUD_KillsLeft( killsleft );
+ }
+ }
+ }
+
+ // check if we downed that ship ourselves
+ if ( nKiller == LocalPlayerId ) {
+
+ refframe_t timesincekill = SYSs_GetRefFrameCount() - last_kill_time;
+
+ if ( timesincekill < AUXDATA_SKILL_AMAZING_TIME ) {
+
+ AUD_SkillAmazing();
+
+ } else if ( timesincekill < AUXDATA_SKILL_BRILLIANT_TIME ) {
+
+ AUD_SkillBrilliant();
+
+ } else {
+
+ AUD_JimCommenting( JIM_COMMENT_EATTHIS );
+ }
+
+ last_kill_time = SYSs_GetRefFrameCount();
+ }
+ }
+
+public:
+
+ G_Extracted()
+ {
+ last_kill_time = 0;
+ }
+
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ // UI Code
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+
+
+ // UI feedback for player has joined --------------------------------------
+ //
+ bool_t UI_PlayerJoinedFeedback( RE_PlayerStatus* playerstatus )
+ {
+ ASSERT( playerstatus != NULL );
+
+ // nothing todo for local client
+ if ( playerstatus->senderid == LocalPlayerId ) {
+ return false;
+ }
+
+ // show join message
+ if ( !EntryMode ) {
+ CopyRemoteName( paste_str, Player_Name[ playerstatus->senderid ] );
+ strcat( paste_str, " has joined" );
+ ShowMessage( paste_str );
+
+ // play sound "player has joined"
+ AUD_NewPlayerJoined();
+ }
+
+ return true;
+ }
+
+ // UI feedback when player has unjoined -----------------------------------
+ //
+ bool_t UI_PlayerUnjoinedFeedback( RE_PlayerStatus* playerstatus )
+ {
+ ASSERT( playerstatus != NULL );
+
+ // nothing todo for local client
+ if ( playerstatus->senderid == LocalPlayerId ) {
+ return false;
+ }
+
+ // show appropriate message
+ if ( !EntryMode ) {
+ CopyRemoteName( paste_str, Player_Name[ playerstatus->senderid ] );
+ if ( playerstatus->params[ 0 ] == USER_EXIT ) {
+
+ strcat( paste_str, " has left" );
+
+ } else if ( playerstatus->params[ 0 ] == SHIP_DOWNED ) {
+
+ strcat( paste_str, " was killed by " );
+ strcat( paste_str, Player_Name[ playerstatus->params[ 2 ] - KILLERID_BIAS ] );
+ }
+ ShowMessage( paste_str );
+ }
+
+ return true;
+ }
+
+ // UI feedback when player connects ---------------------------------------
+ //
+ bool_t UI_PlayerConnectedFeedback( int playerid )
+ {
+ return true;
+ }
+
+ // UI feedback when player disconnects ------------------------------------
+ //
+ bool_t UI_PlayerDisconnectedFeedback( int playerid )
+ {
+ return true;
+ }
+
+ // UI feedback when player is removed ( timeout ) -------------------------
+ //
+ bool_t UI_PlayerWasRemovedFeedback( int playerid )
+ {
+ // show appropriate message
+ if ( !EntryMode ) {
+ CopyRemoteName( paste_str, Player_Name[ playerid ] );
+ strcat( paste_str, " has been removed" );
+ ShowMessage( paste_str );
+ }
+
+ return true;
+ }
+
+
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ // GAMECODE
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+
+ // the local player is killed -------------------------------------------------
+ //
+ void GC_LocalPlayerKill( int nClientID_Killer, int weapon )
+ {
+ // remember the last killer
+ CurKiller = nClientID_Killer;
+
+ ShipDowned = TRUE;
+ // this causes the correct case to be taken in G_MAIN::Gm_CancelGameLoop()
+ ExitGameLoop = 2;
+
+ KillDurationWeapons( MyShip );
+ OBJ_CreateShipExtras( MyShip );
+
+ //FIXME: different texts for different ways the local player can get killed
+ switch ( weapon ) {
+ case 0:
+ default:
+ strcpy( paste_str, "killed by " );
+ strcat( paste_str, NET_FetchPlayerName( nClientID_Killer ) );
+ break;
+ }
+ ShowMessage( paste_str );
+
+ // play sample
+ AUD_PlayerKilled();
+ }
+
+
+ // GameCode called when player unjoins due to ship downed -----------------
+ //
+ bool_t GC_UnjoinPlayer_ShipDowned( int nClientID_Downed, int nClientID_Killer, int nWeapon )
+ {
+ ASSERT( ( nClientID_Downed >= 0 ) && ( nClientID_Downed < MAX_NET_PROTO_PLAYERS ) );
+ ASSERT( ( nClientID_Killer >= 0 ) && ( nClientID_Killer < MAX_NET_PROTO_PLAYERS ) );
+ ASSERT( nClientID_Downed != LocalPlayerId );
+
+ // local player downing MUST be handled differently
+ ASSERT( nClientID_Downed != LocalPlayerId );
+
+ ShipObject *shippo = (ShipObject *) Player_Ship[ nClientID_Downed ];
+ ASSERT( shippo != NULL );
+
+ if ( shippo != NULL ) {
+
+ //NOTE:
+ // the ship will be deleted automatically by the
+ // explosion (in a certain animation frame).
+
+ // start explosion by setting count greater than zero
+ if ( shippo->ExplosionCount == 0 ) {
+ shippo->ExplosionCount = MAX_EXPLOSION_COUNT;
+
+ AUD_ShipDestroyed( shippo );
+ }
+ }
+
+ _CheckKillAnnouncements( nClientID_Killer );
+
+ return true;
+ }
+
+ // GameCode called when player unjoins due to user exit -------------------
+ //
+ bool_t GC_UnjoinPlayer_UserExit( RE_PlayerStatus* playerstatus )
+ {
+ ASSERT( playerstatus != NULL );
+ ASSERT( playerstatus->params[ 0 ] == USER_EXIT );
+
+ ShipObject *shippo = (ShipObject *) Player_Ship[ playerstatus->senderid ];
+ ASSERT( shippo != NULL );
+
+ // open stargate
+ SFX_CreateStargate( shippo );
+
+ //FIXME: [1/27/2002] shouldn't we move this to the engine core
+ // kill ship object
+ KillSpecificObject( Player_ShipId[ playerstatus->senderid ], PShipObjects );
+
+ return true;
+ }
+
+};
+
+// UI/GameCode ----------------------------------------------------------------
+//
+extern G_Extracted TheGameExtraction;
+#define GAMECODE( x ) ( TheGameExtraction.x )
+
+#endif // _G_MAIN_CL_H_
+
+
+
+
+
+
diff --git a/src/parsec/include/g_planet.h b/src/parsec/include/g_planet.h
new file mode 100644
index 0000000..54633f1
--- /dev/null
+++ b/src/parsec/include/g_planet.h
@@ -0,0 +1,47 @@
+/*
+ * PARSEC HEADER: s_planet.h
+ */
+
+#ifndef _S_PLANET_H_
+#define _S_PLANET_H_
+
+
+// planet limits and constants ------------------------------------------------
+//
+#define MAX_PLANET_NAME 255
+#define MAX_RING_TEXNAME 63
+
+#define PLANET_RING_SEGMENTS 128
+
+#define PLANET_RING_TEXTURE "ringtex1"
+#define PLANET_RING_TEX_WIDTH 16
+#define PLANET_RING_TEX_HEIGHT 64
+
+
+// planet custom type structure -----------------------------------------------
+//
+struct Planet : PlanetObject {
+
+ bams_t RotSpeed;
+ bams_t CurOrbitPos;
+ bams_t OrbitSpeed;
+ geomv_t OrbitRadius;
+ GenObject* OrbitParent;
+ int HasRing;
+ geomv_t RingInnerRadius;
+ geomv_t RingOuterRadius;
+ char RingTexName[ MAX_RING_TEXNAME + 1 ];
+ TextureMap* RingTexture;
+
+ char Name[ MAX_PLANET_NAME + 1 ];
+ int NumOrbitShips;
+};
+
+
+// external functions
+
+// ...
+
+#endif // _S_PLANET_H_
+
+
diff --git a/src/parsec/include/g_sfx.h b/src/parsec/include/g_sfx.h
new file mode 100644
index 0000000..26efbe4
--- /dev/null
+++ b/src/parsec/include/g_sfx.h
@@ -0,0 +1,35 @@
+/*
+ * PARSEC HEADER: g_sfx.h
+ */
+
+#ifndef _G_SFX_H_
+#define _G_SFX_H_
+
+
+// external functions
+
+void SFX_InitParticleSizes( float resoscale );
+
+void SFX_CreateEnergyField( Vertex3& origin );
+void SFX_ParticleExplosion( ShipObject *shippo );
+void SFX_FlashProtectiveShield( ShipObject *shippo );
+int SFX_EnableInvulnerabilityShield( ShipObject *shippo );
+void SFX_HullImpact( ShipObject *shippo, Vertex3 *impact, Plane3 *plane );
+
+struct basesphere_pcluster_s;
+basesphere_pcluster_s *
+ SFX_FetchInvulnerabilityShield( ShipObject *shippo, float *strength );
+
+void SFX_RemoteEnableInvulnerabilityShield( int owner );
+
+void SFX_CreatePropulsionParticles( ShipObject *shippo );
+void SFX_MissilePropulsion( MissileObject *missile );
+
+void SFX_CreateStargate( ShipObject *shippo );
+void SFX_CreateExtra( ExtraObject *extra );
+void SFX_VanishExtra( ExtraObject *extra );
+
+
+#endif //_G_SFX_H_
+
+
diff --git a/src/parsec/include/g_shkwav.h b/src/parsec/include/g_shkwav.h
new file mode 100644
index 0000000..f104ea4
--- /dev/null
+++ b/src/parsec/include/g_shkwav.h
@@ -0,0 +1,16 @@
+/*
+ * PARSEC HEADER: s_shkwav.h
+ */
+
+#ifndef _S_SHKWAV_H_
+#define _S_SHKWAV_H_
+
+
+// external functions
+
+void ExplosionShockWave( const ShipObject *shippo );
+
+
+#endif // _S_SHKWAV_H_
+
+
diff --git a/src/parsec/include/g_stars.h b/src/parsec/include/g_stars.h
new file mode 100644
index 0000000..3a7a418
--- /dev/null
+++ b/src/parsec/include/g_stars.h
@@ -0,0 +1,20 @@
+/*
+ * PARSEC HEADER: g_stars.h
+ */
+
+#ifndef _G_STARS_H_
+#define _G_STARS_H_
+
+
+// external functions
+
+void InitFixedStars();
+void DrawFixedStars();
+
+void InitPseudoStars();
+void DrawPseudoStars();
+
+
+#endif // _G_STARS_H_
+
+
diff --git a/src/parsec/include/g_supp.h b/src/parsec/include/g_supp.h
new file mode 100644
index 0000000..b5b3ae9
--- /dev/null
+++ b/src/parsec/include/g_supp.h
@@ -0,0 +1,37 @@
+/*
+ * PARSEC HEADER: g_supp.h
+ */
+
+#ifndef _G_SUPP_H_
+#define _G_SUPP_H_
+
+
+// external functions
+
+void PrepInfoScreenKeys();
+int CheckInfoScreenExit();
+void InitLocalShipStatus( dword myclassid );
+void MoveLocalShip();
+void ObjCamOn();
+void ObjCamOff();
+void ObjectCameraControl();
+void InitFloatingMyShip();
+void InitJoinPosition();
+void InitJoinReplay();
+void Cmd_SetShipOrigin();
+void SelectCrosshairTarget();
+void SelectNextTarget();
+void ShipIntelligence();
+void MaintainDurationWeapons( int playerid );
+void KillDurationWeapons( ShipObject *shippo );
+
+
+
+// determine if standard game mode active -------------------------------------
+//
+#define GAME_MODE_ACTIVE() ( !EntryMode && !InFloatingMenu )
+
+
+#endif // _G_SUPP_H_
+
+
diff --git a/src/parsec/include/g_swarm.h b/src/parsec/include/g_swarm.h
new file mode 100644
index 0000000..2322d0b
--- /dev/null
+++ b/src/parsec/include/g_swarm.h
@@ -0,0 +1,20 @@
+/*
+ * PARSEC HEADER: s_swarm.h
+ */
+
+#ifndef _S_SWARM_H_
+#define _S_SWARM_H_
+
+
+struct callback_pcluster_s;
+
+// external functions
+
+GenObject * SWARM_Init( int owner, Vertex3 *origin, ShipObject *targetpo, int randseed );
+int SWARM_Animate( callback_pcluster_s* cluster );
+void SWARM_TimedAnimate( callback_pcluster_s* cluster );
+
+
+#endif // _S_SWARM_H_
+
+
diff --git a/src/parsec/include/g_telep.h b/src/parsec/include/g_telep.h
new file mode 100644
index 0000000..8ac127c
--- /dev/null
+++ b/src/parsec/include/g_telep.h
@@ -0,0 +1,79 @@
+/*
+ * PARSEC HEADER: s_telep.h
+ */
+
+#ifndef _S_TELEP_H_
+#define _S_TELEP_H_
+
+
+// teleporter limits ----------------------------------------------------------
+//
+#define TELEPORTER_MAX_TEX_NAME 63
+
+
+// teleporter custom type structure -------------------------------------------
+
+struct Teleporter : CustomObject {
+
+ // object properties that can be modified via the console
+ geomv_t exit_delta_x;
+ geomv_t exit_delta_y;
+ geomv_t exit_delta_z;
+ float exit_rot_phi;
+ float exit_rot_theta;
+ geomv_t actoffset;
+ int active; // enable/disable the teleporter
+ char tex_name_interior[ TELEPORTER_MAX_TEX_NAME + 1 ]; // texture name of the teleporter start interior
+ char tex_name_tunnel [ TELEPORTER_MAX_TEX_NAME + 1 ]; // texture name of the texture for the tunnel
+ int start_tex_sec_layer; // enable/disable second texture layer at teleporter start
+ geomv_t u_variation[ 2 ];
+ geomv_t v_variation[ 2 ];
+ int start_tex_alpha; // alpha for the start interior texture
+ geomv_t act_cone_angle; // cone angle of the activation cone
+ int tunnel_slerp; // 0/1 is SLERP on/off
+ int tunnel_lerp; // 0/1/2 is LERP off/LERP normal/LERP Hermite way
+ float tunnel_anim_speed; // animation speed in sec
+ float tunnel_tangent_scale1; // tangent scale for hermite interpolation ( start tangent )
+ float tunnel_tangent_scale2; // tangent scale for hermite interpolation ( end tangent )
+ int tunnel_spline; // 2 bits toggling spline drawing for the center of the tunnel and the boundaries ( bit0 set -> center, bit1 set ->boundaries )
+ int tunnel_spline_cords; // # of steps to use for the spline interpolation when drawing center/boundaries of tunnel
+ int tunnel_tex_alpha; // alpha for the tunnel interior texture
+ int tunnel_len; // length of the tunnel in spline cords
+ Vector3 start; // coordinates of the teleporter start
+ float start_rot_phi; // start rotations ( phi )
+ float start_rot_theta; // start rotations ( theta )
+
+ // internal data
+ Vertex3* start_vtxlist; // vtxs in object space
+ TextureMap* start_texmap;
+ TextureMap* tunnel_texmap;
+ geomv_t u_delta[ 2 ];
+ geomv_t v_delta[ 2 ];
+ bams_t u_phi[ 2 ];
+ bams_t v_phi[ 2 ];
+ bams_t u_phi_delta[ 2 ];
+ bams_t v_phi_delta[ 2 ];
+ geomv_t u_maxdelta[ 2 ];
+ geomv_t v_maxdelta[ 2 ];
+ GenObject* child_object;
+ Xmatrx tunnel_frame;
+ float tunnel_t;
+ Vertex3* tunnel_verts;
+ geomv_t tunnel_cur_anim_step;
+ geomv_t tunnel_spline_arclen;
+ CullBox3 tunnel_cullbox;
+
+ // hacks :)
+ Xmatrx start_frame, end_frame;
+ Xmatrx* spline_frames;
+};
+
+
+// external functions
+
+// (none)
+
+
+#endif // _S_TELEP_H_
+
+
diff --git a/src/parsec/include/g_vapor.h b/src/parsec/include/g_vapor.h
new file mode 100644
index 0000000..15817fe
--- /dev/null
+++ b/src/parsec/include/g_vapor.h
@@ -0,0 +1,16 @@
+/*
+ * PARSEC HEADER: s_vapor.h
+ */
+
+#ifndef _S_VAPOR_H_
+#define _S_VAPOR_H_
+
+
+// external functions
+
+void CreateVaporTrail( GenObject *ownerpo );
+
+
+#endif // _S_VAPOR_H_
+
+
diff --git a/src/parsec/include/g_wfx.h b/src/parsec/include/g_wfx.h
new file mode 100644
index 0000000..4385d16
--- /dev/null
+++ b/src/parsec/include/g_wfx.h
@@ -0,0 +1,51 @@
+/*
+ * PARSEC HEADER: part_wfx.h
+ */
+
+#ifndef _PART_WFX_H_
+#define _PART_WFX_H_
+
+
+// constants for particle weapons
+
+enum {
+
+ PARTICLEGUN_SPREADFIRE
+};
+
+
+// external functions
+
+void WFX_InitParticleSizes( float resoscale );
+
+int WFX_ShootParticleWeapon( ShipObject *shippo, int type );
+void WFX_RemoteShootSpreadfire( int playerid );
+
+int WFX_MaintainHelix( ShipObject *shippo, int playerid );
+int WFX_ActivateHelix( ShipObject *shippo );
+void WFX_DeactivateHelix( ShipObject *shippo );
+void WFX_RemoteActivateHelix( int playerid );
+void WFX_RemoteDeactivateHelix( int playerid );
+void WFX_EnsureHelixInactive( ShipObject *shippo );
+
+void WFX_MaintainLightning( ShipObject *shippo );
+int WFX_ActivateLightning( ShipObject *shippo );
+void WFX_DeactivateLightning( ShipObject *shippo );
+void WFX_RemoteActivateLightning( int playerid );
+void WFX_RemoteDeactivateLightning( int playerid );
+void WFX_EnsureLightningInactive( ShipObject *shippo );
+
+struct photon_sphere_pcluster_s;
+void WFX_CalcPhotonSphereAnimation( photon_sphere_pcluster_s *cluster );
+int WFX_ActivatePhoton( ShipObject *shippo );
+void WFX_DeactivatePhoton( ShipObject *shippo );
+void WFX_RemoteActivatePhoton( int playerid );
+void WFX_RemoteDeactivatePhoton( int playerid );
+void WFX_EnsurePhotonInactive( ShipObject *shippo );
+
+void WFX_EnsureParticleWeaponsInactive( ShipObject *shippo );
+
+
+#endif // _PART_WFX_H_
+
+
diff --git a/src/parsec/include/h_cockpt.h b/src/parsec/include/h_cockpt.h
new file mode 100644
index 0000000..e6b00da
--- /dev/null
+++ b/src/parsec/include/h_cockpt.h
@@ -0,0 +1,78 @@
+/*
+ * PARSEC HEADER: h_cockpt.h
+ */
+
+#ifndef _H_COCKPT_H_
+#define _H_COCKPT_H_
+
+
+// geometry of all cockpit elements -------------------------------------------
+//
+struct cockpitinfo_s {
+
+ float xpos;
+ float ypos;
+ float width;
+ float height;
+ int owidth;
+ int oheight;
+
+ TextureMap* texmap;
+ const char* texname;
+};
+
+
+// indices into cockpitinfo[] structure ---------------------------------------
+//
+enum {
+
+ DAMAGE1,
+ DAMAGE1_SLICE,
+ DAMAGE2,
+ DAMAGE2_SLICE,
+ WEAPONS1,
+ WEAPONS1_SLICE,
+ WEAPONS2,
+ WEAPONS2_WORM,
+ WEAPONS2_ELITE,
+ RADAR,
+ RADAR_SLICE,
+ RADAR_ELITE,
+ ICONBAR1,
+ ICONBAR2,
+ ENERGYBAR,
+ ENERGYBAR_EMPTY,
+ SPEEDBAR,
+ SPEEDBAR_EMPTY,
+ DAMAGEBAR1,
+ DAMAGEBAR1_EMPTY,
+ DAMAGEBAR2,
+ DAMAGEBAR2_EMPTY,
+ CROSS,
+ CROSS2,
+ INCOMING
+};
+
+
+// external functions
+
+void COCKPIT_DrawDisplay();
+void COCKPIT_DrawQuickSayBuffer();
+
+void FadeInCockpit();
+void FadeOutCockpit();
+
+
+// external variables
+
+extern cockpitinfo_s cockpitinfo[];
+extern int cp_scale;
+extern float scale_tab[];
+extern int cockpit_messagearea_yoffs;
+extern float Scaled_Screen_Width;
+extern float Scaled_Screen_Height;
+
+
+#endif // _H_COCKPT_H_
+
+
diff --git a/src/parsec/include/h_drwhud.h b/src/parsec/include/h_drwhud.h
new file mode 100644
index 0000000..88aaa71
--- /dev/null
+++ b/src/parsec/include/h_drwhud.h
@@ -0,0 +1,30 @@
+/*
+ * PARSEC HEADER: h_drwhud.h
+ */
+
+#ifndef _H_DRWHUD_H_
+#define _H_DRWHUD_H_
+
+
+// external functions
+
+void InitHudDisplay();
+
+void DrawOnlineHelp();
+
+void HUD_DrawTrackingText( int targetvisible );
+void HUD_DrawBitmaps();
+void HUD_WriteAmmoString( int ammo, int x, int y );
+
+void HUD_DrawHUD();
+
+
+// external variables
+
+extern int obj_cam_x;
+extern int obj_cam_y;
+
+
+#endif // _H_DRWHUD_H_
+
+
diff --git a/src/parsec/include/h_frmplt.h b/src/parsec/include/h_frmplt.h
new file mode 100644
index 0000000..e0873a7
--- /dev/null
+++ b/src/parsec/include/h_frmplt.h
@@ -0,0 +1,17 @@
+/*
+ * PARSEC HEADER: h_frmplt.h
+ */
+
+#ifndef _H_FRMPLT_H_
+#define _H_FRMPLT_H_
+
+
+// external variables
+
+extern time_t limit_timeval_old;
+extern time_t limit_timeval_cur;
+
+
+#endif // _H_FRMPLT_H_
+
+
diff --git a/src/parsec/include/h_global.h b/src/parsec/include/h_global.h
new file mode 100644
index 0000000..52aa3cd
--- /dev/null
+++ b/src/parsec/include/h_global.h
@@ -0,0 +1,47 @@
+/*
+ * PARSEC HEADER: h_global.h
+ */
+
+#ifndef _H_GLOBAL_H_
+#define _H_GLOBAL_H_
+
+
+// global externals (GAME CODE/HUD) -----------------------
+
+
+// message maintenance
+
+struct msgmaint_s {
+
+ int lifetimecount;
+ char message[ MAX_MESSAGELEN + 1 ];
+};
+
+extern msgmaint_s MsgMaint[];
+
+
+// texfont messages
+
+struct texfontmsg_s {
+
+ char* message;
+ IterTexfont* itexfont;
+
+ short msgtype;
+ word flags;
+
+ short maxpulses;
+ short refalpha;
+ float decalpha;
+
+ int lifetime;
+ int starttime;
+ float curalpha;
+};
+
+extern texfontmsg_s TexfontMsgs[];
+
+
+#endif // _H_GLOBAL_H_
+
+
diff --git a/src/parsec/include/h_radar.h b/src/parsec/include/h_radar.h
new file mode 100644
index 0000000..50af6a4
--- /dev/null
+++ b/src/parsec/include/h_radar.h
@@ -0,0 +1,28 @@
+/*
+ * PARSEC HEADER: h_radar.h
+ */
+
+#ifndef _H_RADAR_H_
+#define _H_RADAR_H_
+
+
+// external variables
+
+extern int hud_radar_w;
+extern int hud_radar_h;
+extern int hud_radar_x;
+extern int hud_radar_y;
+
+extern int hud_radar_bitm_x;
+extern int hud_radar_bitm_y;
+
+
+// external functions
+
+void HUD_DrawHUDRadarFrame();
+void HUD_DrawHUDRadar();
+
+
+#endif // _H_RADAR_H_
+
+
diff --git a/src/parsec/include/h_strmap.h b/src/parsec/include/h_strmap.h
new file mode 100644
index 0000000..85e0248
--- /dev/null
+++ b/src/parsec/include/h_strmap.h
@@ -0,0 +1,35 @@
+/*
+ * PARSEC HEADER: h_strmap.h
+ */
+
+#ifndef _H_STRMAP_H_
+#define _H_STRMAP_H_
+
+
+// external functions ---------------------------------------------------------
+//
+void MAP_FadeInStarmap();
+void MAP_FadeOutStarmap();
+void MAP_ActivateStarmap();
+int MAP_ShowStarmap( void *param );
+void MAP_KeyHandler();
+
+
+// ----------------------------------------------------------------------------
+//
+struct starmap_bg_info_s {
+
+ float xpos;
+ float ypos;
+ float width;
+ float height;
+ int owidth;
+ int oheight;
+
+ TextureMap* texmap;
+ const char* texname;
+};
+
+#endif // _H_STRMAP_H_
+
+
diff --git a/src/parsec/include/h_supp.h b/src/parsec/include/h_supp.h
new file mode 100644
index 0000000..7755b10
--- /dev/null
+++ b/src/parsec/include/h_supp.h
@@ -0,0 +1,40 @@
+/*
+ * PARSEC HEADER: h_supp.h
+ */
+
+#ifndef _H_SUPP_H_
+#define _H_SUPP_H_
+
+
+// external functions
+
+char* CalcHudCharAddress( int no );
+void SetHudCharColor( int no );
+
+void ResetMessageArea();
+void MaintainMessages();
+void ShowMessage( const char *msg );
+
+void ShowTexfontMessage( texfontmsg_s *msg );
+
+void WriteFrameRate();
+void WriteGameTime();
+void WriteServerPing();
+void WriteExtraCollectMessage( char* pszText );
+
+
+
+// external variables
+
+extern int Msg_ScreenTop;
+extern int cur_hud_char_color;
+extern char* Hud_Char_ColOfs[];
+
+
+// number of different colors in hud font
+#define NUM_HUD_CHARSET_COLORS 6
+
+
+#endif // _H_SUPP_H_
+
+
diff --git a/src/parsec/include/h_text.h b/src/parsec/include/h_text.h
new file mode 100644
index 0000000..ba4757f
--- /dev/null
+++ b/src/parsec/include/h_text.h
@@ -0,0 +1,23 @@
+/*
+ * PARSEC HEADER: h_text.h
+ */
+
+#ifndef _H_TEXT_H_
+#define _H_TEXT_H_
+
+#if 0
+
+// external functions
+
+void HUD_InitDemoText();
+void HUD_DrawDemoText();
+
+void HUD_ClearDemoText();
+void HUD_SetDemoText( int lineid, char *text );
+
+#endif
+
+
+#endif // _H_TEXT_H_
+
+
diff --git a/src/parsec/include/il_joy.h b/src/parsec/include/il_joy.h
new file mode 100644
index 0000000..37f9bdc
--- /dev/null
+++ b/src/parsec/include/il_joy.h
@@ -0,0 +1,25 @@
+/*
+ * PARSEC HEADER: il_joy.h
+ */
+
+#ifndef _IL_JOY_H_
+#define _IL_JOY_H_
+
+
+// external functions ---------------------------------------------------------
+//
+void IL_JoyInitHandler();
+void IL_JoyKillHandler();
+void IL_JoyCollect();
+
+
+// device/platform dependend constraints --------------------------------------
+//
+#define JOY_DEVICE_MIN -32767
+#define JOY_DEVICE_MAX 32767
+#define JOY_DEVICE_RANGE 65535
+
+
+#endif // _IL_JOY_H_
+
+
diff --git a/src/parsec/include/il_mouse.h b/src/parsec/include/il_mouse.h
new file mode 100644
index 0000000..7b69735
--- /dev/null
+++ b/src/parsec/include/il_mouse.h
@@ -0,0 +1,19 @@
+/*
+ * PARSEC HEADER: il_mouse.h
+ */
+
+#ifndef _IL_MOUSE_H_
+#define _IL_MOUSE_H_
+
+
+// il_mouse.c implements the following functions
+// ---------------------------------------------
+// void INPs_MouseInitHandler();
+// void INPs_MouseKillHandler();
+// int INPs_MouseSetState( mousestate_s *state );
+// int INPs_MouseGetState( mousestate_s *state );
+
+
+#endif // _IL_MOUSE_H_
+
+
diff --git a/src/parsec/include/il_supp.h b/src/parsec/include/il_supp.h
new file mode 100644
index 0000000..d10f265
--- /dev/null
+++ b/src/parsec/include/il_supp.h
@@ -0,0 +1,18 @@
+/*
+ * PARSEC HEADER: il_supp.h
+ */
+
+#ifndef _IL_SUPP_H_
+#define _IL_SUPP_H_
+
+
+// external functions
+
+int IL_ActivateGun();
+int IL_ActivateMissile();
+void IL_UserProcessAuxInput();
+
+
+#endif // _IL_SUPP_H_
+
+
diff --git a/src/parsec/include/img_3df.h b/src/parsec/include/img_3df.h
new file mode 100644
index 0000000..28ca61a
--- /dev/null
+++ b/src/parsec/include/img_3df.h
@@ -0,0 +1,28 @@
+/*
+ * PARSEC HEADER: img_3df.h
+ */
+
+#ifndef _IMG_3DF_H_
+#define _IMG_3DF_H_
+
+
+// 3df format info
+
+struct format_3df_s {
+
+ const char* spec;
+ dword format;
+ int texelsize;
+ int _mksiz16;
+};
+
+
+// external functions
+
+format_3df_s* TDF_DecodeFormatInfo( char *formatspec );
+int TDF_LoadTexture( char *fname, int insertindex, char *loaderparams, texfont_s *texfont );
+
+
+#endif // _IMG_3DF_H_
+
+
diff --git a/src/parsec/include/img_api.h b/src/parsec/include/img_api.h
new file mode 100644
index 0000000..ca2834d
--- /dev/null
+++ b/src/parsec/include/img_api.h
@@ -0,0 +1,78 @@
+/*
+ * PARSEC HEADER: img_api.h
+ */
+
+#ifndef _IMG_API_H_
+#define _IMG_API_H_
+
+
+// buffer formats
+
+enum buffer_formats {
+
+ BUFFERFORMAT_INVALID = 0x0000,
+
+ BUFFERFORMAT_INDEXED = 0x0001,
+ BUFFERFORMAT_RGB_332 = 0x0002,
+ BUFFERFORMAT_ALPHA_8 = 0x0003,
+ BUFFERFORMAT_INTENSITY_8 = 0x0004,
+ BUFFERFORMAT_RGB_555 = 0x0005,
+ BUFFERFORMAT_RGB_565 = 0x0006,
+ BUFFERFORMAT_ARGB_1555 = 0x0007,
+ BUFFERFORMAT_ARGB_4444 = 0x0008,
+ BUFFERFORMAT_AP_88 = 0x0009,
+ BUFFERFORMAT_AI_88 = 0x000a,
+ BUFFERFORMAT_RGB_888 = 0x000b,
+ BUFFERFORMAT_ARGB_8888 = 0x000c,
+
+ BUFFERFORMAT_BASE_MASK = 0x00ff,
+
+ BUFFERFORMAT_VGA_PAL = 0x0100,
+ BUFFERFORMAT_RGB_PAL = 0x0200,
+ BUFFERFORMAT_RGBA_PAL = 0x0400,
+
+ BUFFERFORMAT_PREFIX_PAL = 0x1000,
+ BUFFERFORMAT_POSTFIX_PAL = 0x2000
+};
+
+
+// recognized image formats
+
+enum image_formats {
+
+ IMAGEFORMAT_INVALID,
+
+ IMAGEFORMAT_RAW,
+ IMAGEFORMAT_TGA,
+ IMAGEFORMAT_3DF,
+ IMAGEFORMAT_PCX,
+ IMAGEFORMAT_BMP,
+ IMAGEFORMAT_JPG,
+ IMAGEFORMAT_PNG
+};
+
+
+// generic image info
+
+struct img_info_s {
+
+ int format;
+ int width;
+ int height;
+ size_t buffsize;
+ int userinfo[ 4 ];
+};
+
+
+// external functions
+
+int IMG_DetermineFormat( char *fname );
+int IMG_BufferPixelSize( int format );
+int IMG_CopyConvertBuffer( char *dstbuff, int dstfmt, char *srcbuff, int srcfmt, size_t bsiz );
+int IMG_SaveBuffer( const char *filename, char *buff, img_info_s *info );
+int IMG_LoadTexture( char *fname, int insertindex, char *loaderparams, texfont_s *texfont );
+
+
+#endif // _IMG_API_H_
+
+
diff --git a/src/parsec/include/img_conv.h b/src/parsec/include/img_conv.h
new file mode 100644
index 0000000..26528b5
--- /dev/null
+++ b/src/parsec/include/img_conv.h
@@ -0,0 +1,61 @@
+/*
+ * PARSEC HEADER: img_conv.h
+ */
+
+#ifndef _IMG_CONV_H_
+#define _IMG_CONV_H_
+
+
+
+// retiling info to create a texfont texture
+
+struct retileinfo_s {
+
+ int srcwidth;
+ int srcheight;
+
+ int tilewidth;
+ int tileheight;
+
+ int spacing;
+ texfont_s* texfont;
+};
+
+
+// forward declaration
+struct format_3df_s;
+
+
+// image to texture conversion info
+
+struct imgtotexdata_s {
+
+ char* texbitmap;
+ int width;
+ int height;
+ int lodloaded;
+ int lodlarge;
+ int lodsmall;
+ dword format; // TEXFMT
+ format_3df_s* texfmtgr;
+ retileinfo_s* retileinfo;
+};
+
+
+// external functions
+
+char *IMG_ConvertTextureImageData( imgtotexdata_s *imgtotexdata, int swaprgba );
+
+
+// external variables
+
+extern int image_mirror_vertically;
+extern int image_invert_pixels;
+extern int image_compress_data;
+
+extern int image_lods[];
+
+
+#endif // _IMG_CONV_H_
+
+
diff --git a/src/parsec/include/img_jpg.h b/src/parsec/include/img_jpg.h
new file mode 100644
index 0000000..ead405f
--- /dev/null
+++ b/src/parsec/include/img_jpg.h
@@ -0,0 +1,16 @@
+/*
+ * PARSEC HEADER: img_jpg.h
+ */
+
+#ifndef _IMG_JPG_H_
+#define _IMG_JPG_H_
+
+
+// external functions
+
+int JPG_SaveBuffer( const char *filename, char *buff, int width, int height );
+
+
+#endif // _IMG_JPG_H_
+
+
diff --git a/src/parsec/include/img_load.h b/src/parsec/include/img_load.h
new file mode 100644
index 0000000..5d1c113
--- /dev/null
+++ b/src/parsec/include/img_load.h
@@ -0,0 +1,45 @@
+/*
+ * PARSEC HEADER: img_load.h
+ */
+
+#ifndef _IMG_LOAD_H_
+#define _IMG_LOAD_H_
+
+
+// forward declarations
+struct format_3df_s;
+struct imgreadinfo_s;
+struct imgtotexdata_s;
+
+
+// image reading info
+
+struct imgreadinfo_s {
+
+ int mapwidth; // -1 == use default
+ int mapheight; // -1 == use default
+
+ int lodlarge; // -1 == use default
+ int lodsmall; // -1 == use default
+
+ int retilewidth; // -1 == use default
+ int retileheight; // -1 == use default
+
+ int spacing;
+
+ format_3df_s* texfmtgr;
+};
+
+
+// external functions
+
+int IMG_ParseLoadingParameters( const char *loaderparams, imgreadinfo_s *imgreadinfo );
+int IMG_CheckMapGeometry( imgreadinfo_s *imgreadinfo, int width, int height );
+void IMG_CheckLodSpecs( imgreadinfo_s *imgreadinfo, int lgside );
+void IMG_CreateTexture( int insertindex, imgtotexdata_s *imgtotexdata, dword texgeometry, int inputwidth, int inputheight, texfont_s *texfont );
+int IMG_LoadGenericTexture(const char *fname, int insertindex, char *loaderparams, texfont_s *texfont);
+
+
+#endif // _IMG_LOAD_H_
+
+
diff --git a/src/parsec/include/img_supp.h b/src/parsec/include/img_supp.h
new file mode 100644
index 0000000..8117846
--- /dev/null
+++ b/src/parsec/include/img_supp.h
@@ -0,0 +1,20 @@
+/*
+ * PARSEC HEADER: img_supp.h
+ */
+
+#ifndef _IMG_SUPP_H_
+#define _IMG_SUPP_H_
+
+
+// external functions
+
+dword IMG_DetermineTexGeoAspect( dword width, dword height );
+int IMG_DetermineTexGeoAspectExt( dword width, dword height );
+dword IMG_DetermineTexGeoScale( dword maxside );
+
+dword IMG_CountMipmapTexels( dword texw, dword texh, dword lodlarge, dword lodsmall );
+
+
+#endif // _IMG_SUPP_H_
+
+
diff --git a/src/parsec/include/img_tga.h b/src/parsec/include/img_tga.h
new file mode 100644
index 0000000..e4e3e60
--- /dev/null
+++ b/src/parsec/include/img_tga.h
@@ -0,0 +1,16 @@
+/*
+ * PARSEC HEADER: img_tga.h
+ */
+
+#ifndef _IMG_TGA_H_
+#define _IMG_TGA_H_
+
+
+// external functions
+
+int TGA_SaveBuffer( const char *filename, char *buff, int width, int height );
+
+
+#endif // _IMG_TGA_H_
+
+
diff --git a/src/parsec/include/inp_comm.h b/src/parsec/include/inp_comm.h
new file mode 100644
index 0000000..1109866
--- /dev/null
+++ b/src/parsec/include/inp_comm.h
@@ -0,0 +1,16 @@
+/*
+ * PARSEC HEADER: INP_COMM.H
+ */
+
+#ifndef _INP_COMM_H_
+#define _INP_COMM_H_
+
+
+// external functions
+
+// none
+
+
+#endif
+
+
diff --git a/src/parsec/include/inp_defs.h b/src/parsec/include/inp_defs.h
new file mode 100644
index 0000000..ed06e6d
--- /dev/null
+++ b/src/parsec/include/inp_defs.h
@@ -0,0 +1,220 @@
+/*
+ * PARSEC HEADER: inp_defs.h
+ */
+
+#ifndef _INP_DEFS_H_
+#define _INP_DEFS_H_
+
+
+// ----------------------------------------------------------------------------
+// INPUT SUBSYSTEM (INP) related definitions -
+// ----------------------------------------------------------------------------
+
+
+// keys corresponding to game functions (gamefunckeys) ---------------------
+
+struct keyfunc_s {
+
+ dword key_Escape; // 00
+ dword key_TurnLeft; // 01
+ dword key_TurnRight; // 02
+ dword key_DiveDown; // 03
+ dword key_PullUp; // 04
+ dword key_RollLeft; // 05
+ dword key_RollRight; // 06
+ dword key_ShootWeapon; // 07
+ dword key_LaunchMissile; // 08
+ dword key_NextWeapon; // 09
+ dword key_NextMissile; // 10
+ dword key_Accelerate; // 11
+ dword key_Decelerate; // 12
+ dword key_SlideLeft; // 13
+ dword key_SlideRight; // 14
+ dword key_SlideUp; // 15
+ dword key_SlideDown; // 16
+ dword key_NextTarget; // 17
+ dword key_ToggleFrameRate; // 18
+ dword key_ToggleObjCamera; // 19
+ dword key_ToggleHelp; // 20
+ dword key_ToggleConsole; // 21
+ dword key_SaveScreenShot; // 22
+ dword key_ShowKillStats; // 23
+ dword key_SpeedZero; // 24
+ dword key_TargetSpeed; // 25
+ dword key_AfterBurner; // 26
+ dword key_FrontTarget; // 27
+ dword key_Select; // 28
+ dword key_CursorLeft; // 29
+ dword key_CursorRight; // 30
+ dword key_CursorUp; // 31
+ dword key_CursorDown; // 32
+
+};
+
+#define NUM_GAMEFUNC_KEYS ( sizeof( keyfunc_s ) / sizeof( ((keyfunc_s*)0)->key_Escape ) )
+
+
+// single entry in table of additional key mappings
+struct keyaddition_s {
+
+ dword code; // AKC_ code (full 32 bit valid!)
+ int state; // 0: released 1: depressed
+};
+
+
+//CAVEAT: MUST BE CONSISTENT WITH DEFINITION IN ID_KEYB.INC!!
+#define KEY_ADDITIONS_MAX 128
+
+// header of table containing additional key mappings
+struct keyaddctrl_s {
+
+ int size; // number of key entries in table
+ keyaddition_s table[KEY_ADDITIONS_MAX]; // first entry
+};
+
+
+// various keyboard state flags
+struct keybflags_s {
+
+ byte ConEnabled; // console visible and may potentially be typed into
+ byte ConActive; // enables keyboard routing into console
+ byte ConTogReleased; // -1 if contoggle is released (internal use only)
+ byte ExtOn; // extended key (keyboard-code internal use only)
+ byte ShiftOn; // shift is down (keyboard-code internal use only)
+};
+
+//NOTE:
+// if ( ConEnabled == TRUE ) the console is visible and enabled. that is,
+// the console toggle key is checked and used to toggle keyboard routing into
+// the console on/off. routing is achieved by using ConActive.
+//
+// that is:
+// console enabled/visible and may be typed into:
+// ( ConEnabled == TRUE ) && ( ConActive == TRUE )
+// console enabled/visible but may not be typed into:
+// ( ConEnabled == TRUE ) && ( ConActive == FALSE )
+// console disabled/invisible (also no typing, of course)
+// ( ConEnabled == FALSE ) && ( ConActive == DONT_CARE )
+//
+// therefore, ConActive stores the current state of console
+// keyboard routing (also if the console is disabled
+// in the meantime!)
+
+
+// generic joystick data structure --------------------------------------------
+//
+struct joystate_s {
+
+ int32 X; // x-axis position
+ int32 Y; // y-axis position
+ int32 Z; // z-axis position
+ int32 Rx; // x-axis rotation
+ int32 Ry; // y-axis rotation
+ int32 Rz; // z-axis rotation
+ int32 Slider[ 2 ]; // extra axes positions
+ int32 POV[ 4 ]; // POV directions
+ byte Buttons[ 32 ]; // 32 buttons
+};
+
+
+// button query masks ---------------------------------------------------------
+//
+#define JOYBUTT1MASK 0x10
+#define JOYBUTT2MASK 0x20
+#define JOYBUTT3MASK 0x30 // both buttons pressed -> button 3
+#define JOYBUTTFIELDMASK 0x30
+
+
+// external variables ---------------------------------------------------------
+//
+extern keyfunc_s * DepressedKeys;
+extern keyfunc_s * KeyAssignments;
+extern keyaddctrl_s * KeyAdditional;
+extern keybflags_s * KeybFlags;
+
+
+// joystick resolution --------------------------------------------------------
+//
+#define JOY_FLAT_CENTER 0.15
+#define JOY_HALF_RES 32
+#define EP_WAIT 50
+
+
+// joystick constraints -------------------------------------------------------
+//
+#define JOY_THROTTLE_MIN 0
+#define JOY_THROTTLE_MAX 255
+#define JOY_THROTTLE_DEADZONE_MASK 0xFFFFFFF0
+#define JOY_THROTTLE_RANGE 256
+
+#define JOY_X_MIN -32
+#define JOY_X_ZERO 0
+#define JOY_X_MAX 32
+#define JOY_X_RANGE 65
+
+#define JOY_Y_MIN -32
+#define JOY_Y_ZERO 0
+#define JOY_Y_MAX 32
+//FIXME: range should be 64 ??????
+#define JOY_Y_RANGE 65
+
+#define JOY_RUDDER_MIN -32
+#define JOY_RUDDER_ZERO 0
+#define JOY_RUDDER_MAX 32
+//FIXME: range should be 64 ??????
+#define JOY_RUDDER_RANGE 65
+
+
+// mouse constants ------------------------------------------------------------
+//
+enum {
+
+ MOUSE_BUTTON_LEFT,
+ MOUSE_BUTTON_MIDDLE,
+ MOUSE_BUTTON_RIGHT,
+
+ NUM_MOUSE_BUTTONS // must be last!
+};
+
+#define MOUSE_BUTTON_RELEASED 0
+#define MOUSE_BUTTON_PRESSED 1
+
+
+// generic mouse data structure -----------------------------------------------
+//
+struct mousestate_s {
+ float xpos; // normalized [ 0.0, 1.0 ]
+ float ypos; // normalized [ 0.0, 1.0 ]
+ byte drawcursor; // custom cursor drawing
+ byte buttons[ NUM_MOUSE_BUTTONS ]; // button state
+};
+
+
+// check if one of the select keys is pressed ---------------------------------
+//
+inline int SELECT_KEYS_PRESSED()
+{
+ return ( DepressedKeys->key_Select ||
+ DepressedKeys->key_ShootWeapon ||
+ DepressedKeys->key_LaunchMissile );
+}
+
+
+// reset all select keys ------------------------------------------------------
+//
+inline void SELECT_KEYS_RESET()
+{
+ DepressedKeys->key_Select = 0;
+ DepressedKeys->key_ShootWeapon = 0;
+ DepressedKeys->key_LaunchMissile = 0;
+}
+
+
+// include system-specific subsystem prototypes -------------------------------
+//
+#include "inp_subh.h"
+
+
+#endif // _INP_DEFS_H_
+
+
diff --git a/src/parsec/include/inp_glob.h b/src/parsec/include/inp_glob.h
new file mode 100644
index 0000000..a780d3b
--- /dev/null
+++ b/src/parsec/include/inp_glob.h
@@ -0,0 +1,26 @@
+/*
+ * PARSEC HEADER: inp_glob.h
+ */
+
+#ifndef _INP_GLOB_H_
+#define _INP_GLOB_H_
+
+
+// ----------------------------------------------------------------------------
+// INPUT SUBSYSTEM (INP) related global declarations and definitions -
+// ----------------------------------------------------------------------------
+
+// current joystick sensitivity (timing)
+
+extern float joy_yaw_corr_refframe;
+extern float joy_pitch_corr_refframe;
+extern float joy_roll_corr_refframe;
+extern float joy_acc_corr_refframe;
+
+extern int inp_mouse_invert_yaxis;
+extern int inp_mouse_sensitivity;
+extern int inp_mouse_drift;
+
+#endif // _INP_GLOB_H_
+
+
diff --git a/src/parsec/include/inp_init.h b/src/parsec/include/inp_init.h
new file mode 100644
index 0000000..d2f5a3e
--- /dev/null
+++ b/src/parsec/include/inp_init.h
@@ -0,0 +1,17 @@
+/*
+ * PARSEC HEADER: inp_init.h
+ */
+
+#ifndef _INP_INIT_H_
+#define _INP_INIT_H_
+
+
+// external functions
+
+void INP_InitSubsystem();
+void INP_KillSubsystem();
+
+
+#endif // _INP_INIT_H_
+
+
diff --git a/src/parsec/include/inp_keyn.h b/src/parsec/include/inp_keyn.h
new file mode 100755
index 0000000..a8a496d
--- /dev/null
+++ b/src/parsec/include/inp_keyn.h
@@ -0,0 +1,109 @@
+/*
+ * inp_keyn.h
+ *
+ * Created on: Nov 3, 2012
+ * Author: jasonw
+ */
+
+#ifndef INP_KEYN_H_
+#define INP_KEYN_H_
+
+// C++ STL map
+#include <map>
+
+#include "keycodes.h"
+
+// "constructor" for the key_names hash table
+// (STL maps can only use initializer lists in C++11)
+static std::map<int, const char *> create_key_names()
+{
+ std::map<int, const char *> m;
+
+ m[MKC_NIL] = "None";
+ m[MKC_ESCAPE] = "Escape";
+ m[MKC_1] = "1";
+ m[MKC_2] = "2";
+ m[MKC_3] = "3";
+ m[MKC_4] = "4";
+ m[MKC_5] = "5";
+ m[MKC_6] = "6";
+ m[MKC_7] = "7";
+ m[MKC_8] = "8";
+ m[MKC_9] = "9";
+ m[MKC_0] = "0";
+ m[MKC_MINUS] = "-";
+ m[MKC_EQUALS] = "=";
+ m[MKC_BACKSPACE] = "Backspace";
+ m[MKC_TAB] = "Tab";
+ m[MKC_Q] = "Q";
+ m[MKC_W] = "W";
+ m[MKC_E] = "E";
+ m[MKC_R] = "R";
+ m[MKC_T] = "T";
+ m[MKC_U] = "U";
+ m[MKC_I] = "I";
+ m[MKC_O] = "O";
+ m[MKC_P] = "P";
+ m[MKC_LBRACKET] = "[";
+ m[MKC_RBRACKET] = "]";
+ m[MKC_BACKSLASH] = "\\";
+ m[MKC_A] = "A";
+ m[MKC_S] = "S";
+ m[MKC_D] = "D";
+ m[MKC_F] = "F";
+ m[MKC_G] = "G";
+ m[MKC_H] = "H";
+ m[MKC_J] = "J";
+ m[MKC_K] = "K";
+ m[MKC_L] = "L";
+ m[MKC_SEMICOLON] = ";";
+ m[MKC_APOSTROPHE] = "'";
+ m[MKC_ENTER] = "Enter";
+ m[MKC_LSHIFT] = "Left Shift";
+ m[MKC_RSHIFT] = "Right Shift";
+ m[MKC_Z] = "Z";
+ m[MKC_X] = "X";
+ m[MKC_C] = "C";
+ m[MKC_V] = "V";
+ m[MKC_B] = "B";
+ m[MKC_N] = "N";
+ m[MKC_M] = "M";
+ m[MKC_COMMA] = ",";
+ m[MKC_PERIOD] = ".";
+ m[MKC_SLASH] = "/";
+ m[MKC_LCONTROL] = "Left Control";
+ m[MKC_RCONTROL] = "Right Control";
+ m[MKC_LALT] = "Left Alt";
+ m[MKC_RALT] = "Right Alt";
+ m[MKC_CURSORUP] = "Up Arrow";
+ m[MKC_CURSORLEFT] = "Left Arrow";
+ m[MKC_CURSORDOWN] = "Down Arrow";
+ m[MKC_CURSORRIGHT] = "Right Arrow";
+ m[MKC_SPACE] = "Spacebar";
+ m[MKC_F1] = "F1";
+ m[MKC_F2] = "F2";
+ m[MKC_F3] = "F3";
+ m[MKC_F4] = "F4";
+ m[MKC_F5] = "F5";
+ m[MKC_F6] = "F6";
+ m[MKC_F7] = "F7";
+ m[MKC_F8] = "F8";
+ m[MKC_F9] = "F9";
+ m[MKC_F10] = "F10";
+ m[MKC_F11] = "F11";
+ m[MKC_F12] = "F12";
+ m[MKC_TILDE] = "Tilde";
+ m[MKC_HOME] = "Home";
+ m[MKC_INSERT] = "Insert";
+ m[MKC_DELETE] = "Delete";
+ m[MKC_PAGEUP] = "Page Up";
+ m[MKC_PAGEDOWN] = "Page Down";
+
+ return m;
+}
+
+// create the hash table
+static std::map<int, const char*> key_names = create_key_names();
+
+
+#endif /* INP_KEYN_H_ */
diff --git a/src/parsec/include/inp_sdl.h b/src/parsec/include/inp_sdl.h
new file mode 100644
index 0000000..02aed25
--- /dev/null
+++ b/src/parsec/include/inp_sdl.h
@@ -0,0 +1,26 @@
+/*
+ * PARSEC HEADER: inp_sdl.h
+ */
+
+#ifndef _INP_SDL_H_
+#define _INP_SDL_H_
+
+
+// il_sdl.c implements the following functions
+// --------------------------------------------
+// void INPs_InitGeneral();
+// void INPs_KillGeneral();
+// void INPs_KeybInitHandler();
+// void INPs_KeybKillHandler();
+// void INPs_JoyInitHandler();
+// void INPs_JoyKillHandler();
+// int INPs_ActivateGun();
+// int INPs_ActivateMissile();
+// void INPs_Collect();
+// void INPs_UserProcessAuxInput();
+
+
+#endif //_INP_SDL_H_
+
+
+
diff --git a/src/parsec/include/inp_subh.h b/src/parsec/include/inp_subh.h
new file mode 100644
index 0000000..64a5d00
--- /dev/null
+++ b/src/parsec/include/inp_subh.h
@@ -0,0 +1,36 @@
+/*
+ * PARSEC HEADER: inp_subh.h
+ */
+
+#ifndef _INP_SUBH_H_
+#define _INP_SUBH_H_
+
+
+// ----------------------------------------------------------------------------
+// INPUT SUBSYSTEM (INP) system-dependent function declarations -
+// ----------------------------------------------------------------------------
+
+void INPs_InitGeneral();
+void INPs_KillGeneral();
+
+void INPs_KeybInitHandler();
+void INPs_KeybKillHandler();
+
+void INPs_JoyInitHandler();
+void INPs_JoyKillHandler();
+
+void INPs_MouseInitHandler();
+void INPs_MouseKillHandler();
+int INPs_MouseSetState( mousestate_s *state );
+int INPs_MouseGetState( mousestate_s *state );
+
+
+int INPs_ActivateGun();
+int INPs_ActivateMissile();
+
+void INPs_Collect();
+void INPs_UserProcessAuxInput();
+
+#endif // _INP_SUBH_H_
+
+
diff --git a/src/parsec/include/inp_user.h b/src/parsec/include/inp_user.h
new file mode 100644
index 0000000..4480db0
--- /dev/null
+++ b/src/parsec/include/inp_user.h
@@ -0,0 +1,42 @@
+/*
+ * PARSEC HEADER: inp_user.h
+ */
+
+#ifndef _INP_USER_H_
+#define _INP_USER_H_
+
+
+// number selectable gun and missile types
+
+#define NUMBER_OF_SELECTABLE_GUNTYPES 4
+#define NUMBER_OF_SELECTABLE_MISSILETYPES 4
+
+
+// external functions
+
+void INP_UserRotX( bams_t angle );
+void INP_UserRotY( bams_t angle );
+void INP_UserRotZ( bams_t angle );
+void INP_UserSlideX( geomv_t slideval );
+void INP_UserSlideY( geomv_t slideval );
+
+void INP_UserAcceleration( fixed_t c_speed );
+
+void INP_UserCycleGuns();
+void INP_UserCycleMissiles();
+void INP_UserCycleTargets();
+
+void INP_UserSelectFrontTarget();
+
+void INP_UserZeroSpeed();
+void INP_UserTrackTargetSpeed();
+
+void INP_UserResetActivityChecking();
+
+void INP_UserProcessInput();
+void INP_UserCheckFiring();
+
+
+#endif // _INP_USER_H_
+
+
diff --git a/src/parsec/include/isdl_joy.h b/src/parsec/include/isdl_joy.h
new file mode 100644
index 0000000..e5867f3
--- /dev/null
+++ b/src/parsec/include/isdl_joy.h
@@ -0,0 +1,30 @@
+/*
+ * PARSEC HEADER: isdl_joy.h
+ */
+
+#ifndef _ISDL_JOY_H_
+#define _ISDL_JOY_H_
+
+
+// external functions ---------------------------------------------------------
+//
+void ISDL_JoyInitHandler();
+void ISDL_JoyKillHandler();
+void ISDL_JoyCollect();
+
+
+// device/platform dependend constraints --------------------------------------
+//
+#define JOY_DEVICE_MIN -32767
+#define JOY_DEVICE_MAX 32767
+#define JOY_DEVICE_RANGE 65535
+
+#define JOY_X_DIV 1024 //JOY_DEVICE_RANGE / JOY_X_RANGE;
+#define JOY_Y_DIV 1024 //JOY_DEVICE_RANGE / JOY_Y_RANGE;
+#define JOY_THROTTLE_DIV 256 //JOY_DEVICE_RANGE / JOY_THROTTLE_RANGE
+#define JOY_THROTTLE_OFF 128 //JOY_THROTTLE_RANGE / 2
+#define JOY_RUDDER_DIV 1024 //JOY_DEVICE_RANGE / JOY_RUDDER_RANGE
+
+#endif // _ISDL_JOY_H_
+
+
diff --git a/src/parsec/include/isdl_keydf.h b/src/parsec/include/isdl_keydf.h
new file mode 100644
index 0000000..cf57ab1
--- /dev/null
+++ b/src/parsec/include/isdl_keydf.h
@@ -0,0 +1,89 @@
+/*
+ * PARSEC HEADER: isdl_keydf.h
+ */
+
+#ifndef _ISDL_KEYDF_H_
+#define _ISDL_KEYDF_H_
+
+
+// ----------------------------------------------------------
+// game function keys
+// ----------------------------------------------------------
+
+struct keyfunc_s _keyassignments[ 2 ] = {
+ { // primary assignments --
+ MKC_ESCAPE,
+ MKC_CURSORLEFT,
+ MKC_CURSORRIGHT,
+ MKC_CURSORUP,
+ MKC_CURSORDOWN,
+ MKC_Q,
+ MKC_E,
+ MKC_SPACE,
+ MKC_ENTER,
+ MKC_G,
+ MKC_M,
+ MKC_R,
+ MKC_F,
+ MKC_A,
+ MKC_D,
+ MKC_W,
+ MKC_S,
+ MKC_T,
+ MKC_I,
+ MKC_F6,
+ MKC_F1,
+ MKC_TILDE,
+ MKC_F12,
+ MKC_TAB,
+ MKC_BACKSPACE,
+ MKC_Z,
+ MKC_LSHIFT,
+ MKC_B,
+ MKC_ENTER,
+ MKC_CURSORLEFT,
+ MKC_CURSORRIGHT,
+ MKC_CURSORUP,
+ MKC_CURSORDOWN,
+ },
+ { // secondary assignments --
+ MKC_ESCAPE,
+ MKC_CURSORLEFT_GRAY,
+ MKC_CURSORRIGHT_GRAY,
+ MKC_CURSORUP_GRAY,
+ MKC_CURSORDOWN_GRAY,
+ MKC_Q,
+ MKC_E,
+ MKC_SPACE,
+ MKC_ENTER_GRAY,
+ MKC_G,
+ MKC_M,
+ MKC_R,
+ MKC_F,
+ MKC_A,
+ MKC_D,
+ MKC_W,
+ MKC_S,
+ MKC_T,
+ MKC_I,
+ MKC_F6,
+ MKC_F1,
+ MKC_TILDE,
+ MKC_F12,
+ MKC_TAB,
+ MKC_BACKSPACE,
+ MKC_Z,
+ MKC_LSHIFT,
+ MKC_B,
+ MKC_ENTER_GRAY,
+ MKC_CURSORLEFT_GRAY,
+ MKC_CURSORRIGHT_GRAY,
+ MKC_CURSORUP_GRAY,
+ MKC_CURSORDOWN_GRAY,
+ }
+};
+
+
+#endif // _ISDL_KEYDF_H_
+
+
diff --git a/src/parsec/include/isdl_keyn.h b/src/parsec/include/isdl_keyn.h
new file mode 100644
index 0000000..7ca4f39
--- /dev/null
+++ b/src/parsec/include/isdl_keyn.h
@@ -0,0 +1,117 @@
+/*
+ * PARSEC HEADER: isdl_keyn.h
+ */
+
+#ifndef _ISDL_KEYN_H_
+#define _ISDL_KEYN_H_
+
+
+#define MAX_KEYCODE 0x5f
+
+// english keyboard
+static char *key_names[ MAX_KEYCODE + 1 ] = {
+
+ "None", // 00
+ "Escape", // 01
+ "1", // 02
+ "2", // 03
+ "3", // 04
+ "4", // 05
+ "5", // 06
+ "6", // 07
+ "7", // 08
+ "8", // 09
+ "9", // 0a
+ "0", // 0b
+ "-", // 0c
+ "=", // 0d
+ "Backspace", // 0e
+ "Tab", // 0f
+ "Q", // 10
+ "W", // 11
+ "E", // 12
+ "R", // 13
+ "T", // 14
+ "Y", // 15
+ "U", // 16
+ "I", // 17
+ "O", // 18
+ "P", // 19
+ "[", // 1a
+ "]", // 1b
+ "Enter", // 1c
+ "Control", // 1d
+ "A", // 1e
+ "S", // 1f
+ "D", // 20
+ "F", // 21
+ "G", // 22
+ "H", // 23
+ "J", // 24
+ "K", // 25
+ "L", // 26
+ ";", // 27
+ "'", // 28
+ "Tilde", // 29
+ "Left Shift", // 2a
+ "\\", // 2b
+ "Z", // 2c
+ "X", // 2d
+ "C", // 2e
+ "V", // 2f
+ "B", // 30
+ "N", // 31
+ "M", // 32
+ ",", // 33
+ ".", // 34
+ "/", // 35
+ "Right Shift", // 36
+ "Numpad *", // 37
+ "Alt", // 38
+ "Space", // 39
+ "Caps Lock", // 3a
+ "F1", // 3b
+ "F2", // 3c
+ "F3", // 3d
+ "F4", // 3e
+ "F5", // 3f
+ "F6", // 40
+ "F7", // 41
+ "F8", // 42
+ "F9", // 43
+ "F10", // 44
+ "NumLock", // 45
+ "ScrollLock", // 46
+ "Home", // 47
+ "Cursur Up", // 48
+ "Page Up", // 49
+ "Numpad -", // 4a
+ "Cursor Left", // 4b
+ "NumPad 5", // 4c
+ "Cursor Right", // 4d
+ "Numpad +", // 4e
+ "End", // 4f
+ "Cursor Down", // 50
+ "Page Down", // 51
+ "Insert", // 52
+ "Delete", // 53
+ " ", // 54
+ " ", // 55
+ "<", // 56
+ "F11", // 57
+ "F12", // 58
+ " ", // 59
+ " ", // 5a
+ "Left Win", // 5b
+ "Right Win", // 5c
+ "Apps", // 5d
+ " ", // 5e
+ " ", // 5f
+
+ };
+
+
+#endif // _ISDL_KEYN_H_
+
+
+
diff --git a/src/parsec/include/isdl_mouse.h b/src/parsec/include/isdl_mouse.h
new file mode 100644
index 0000000..127b7c6
--- /dev/null
+++ b/src/parsec/include/isdl_mouse.h
@@ -0,0 +1,19 @@
+/*
+ * PARSEC HEADER: isdl_mouse.h
+ */
+
+#ifndef _ISDL_MOUSE_H_
+#define _ISDL_MOUSE_H_
+
+
+// il_mouse.c implements the following functions
+// ---------------------------------------------
+// void INPs_MouseInitHandler();
+// void INPs_MouseKillHandler();
+// int INPs_MouseSetState( mousestate_s *state );
+// int INPs_MouseGetState( mousestate_s *state );
+
+
+#endif // _ISDL_MOUSE_H_
+
+
diff --git a/src/parsec/include/isdl_supp.h b/src/parsec/include/isdl_supp.h
new file mode 100644
index 0000000..c9fc62b
--- /dev/null
+++ b/src/parsec/include/isdl_supp.h
@@ -0,0 +1,18 @@
+/*
+ * PARSEC HEADER: isdl_supp.h
+ */
+
+#ifndef _ISDL_SUPP_H_
+#define _ISDL_SUPP_H_
+
+
+// external functions
+
+int ISDL_ActivateGun();
+int ISDL_ActivateMissile();
+void ISDL_UserProcessAuxInput();
+
+
+#endif // _IL_SUPP_H_
+
+
diff --git a/src/parsec/include/m_button.h b/src/parsec/include/m_button.h
new file mode 100644
index 0000000..92080ac
--- /dev/null
+++ b/src/parsec/include/m_button.h
@@ -0,0 +1,92 @@
+/*
+ * PARSEC HEADER: m_button.h
+ */
+
+#ifndef _M_BUTTON_H_
+#define _M_BUTTON_H_
+
+
+// menu item ids
+
+enum {
+
+ M_GAME,
+ M_SERVER,
+ M_CONFIG,
+ M_QUIT,
+
+ M_CONNECT,
+ M_JOIN_GAME,
+ M_STARMAP,
+ M_PLAY_DEMO,
+ M_DISCONNECT,
+
+ M_CREATE,
+ M_GAME_MOD,
+ M_SETTINGS,
+
+ M_SPACECRAFT,
+ M_CONTROLS,
+ M_OPTIONS,
+ M_BACK,
+
+ M_BUTTON_CAP
+};
+
+
+// button metrics
+//
+#define BUTTON_WIDTH 320
+#define BUTTON_HEIGHT 79
+#define BUTTON_ALPHA 255
+
+#define BUTTON_SLIDE_SPEED 12
+
+#define BUTTON_POS_LEFT 0
+#define BUTTON_POS_RIGHT ( m_sintab_size - 1 )
+
+#define BUTTON_PHASE_OFS ( m_sintab_size >> 3 )
+
+#define BUTTON_ALPHA_LOW 0
+#define BUTTON_ALPHA_MID 128
+#define BUTTON_ALPHA_HIGH 255
+
+#define BUTTON_FADE_SPEED 6
+#define BUTTON_FADE_QUANTUM 10
+
+
+// number of items comprising every menu --------------------------------------
+//
+#define NUM_MENU_ITEMS 5
+
+
+// external functions
+
+void MenuButtonsEnterSubmenu();
+void MenuButtonsLeaveSubmenu();
+int MenuButtonsSelection();
+int MenuButtonsEscape();
+void MenuButtonsCursorUp();
+void MenuButtonsCursorDown();
+void MenuButtonsToggleConnect();
+void MenuButtonsToggleDisconnect();
+
+int MouseOverMenuButton( int mousex, int mousey );
+
+void MoveInButtons();
+void MoveOutButtons();
+void SlideInButtons();
+void SlideOutButtons();
+int SlideFinishedButtons();
+void FadeInButtons();
+void FadeOutButtons( int target );
+int FadeFinishedButtons();
+
+void DrawMenuButtons();
+void DrawMenuConnected();
+void DrawMenuLoading();
+
+
+#endif // _M_BUTTON_H_
+
+
diff --git a/src/parsec/include/m_list.h b/src/parsec/include/m_list.h
new file mode 100644
index 0000000..a231a55
--- /dev/null
+++ b/src/parsec/include/m_list.h
@@ -0,0 +1,46 @@
+/*
+ * PARSEC HEADER: m_list.h
+ */
+
+#ifndef _M_LIST_H_
+#define _M_LIST_H_
+
+
+// list window modes
+
+enum {
+
+ LISTWIN_DEMOLIST,
+ LISTWIN_PLAYERLIST,
+ LISTWIN_SERVERLIST
+};
+
+
+// external functions
+
+int DemoListSelection();
+void DemoListCursorUp();
+void DemoListCursorDown();
+void DemoListMouseSet();
+
+int MouseOverListItem( int mousex, int mousey );
+
+void MoveInListWindow();
+void MoveOutListWindow();
+void SlideInListWindow();
+void SlideOutListWindow();
+int SlideFinishedListWindow();
+
+void DrawRemotePlayerListWindow();
+void DrawMenuListWindow();
+
+
+// external variables
+
+extern int listwin_mode;
+extern int listwin_active;
+
+
+#endif // _M_LIST_H_
+
+
diff --git a/src/parsec/include/m_logo.h b/src/parsec/include/m_logo.h
new file mode 100644
index 0000000..afe62e1
--- /dev/null
+++ b/src/parsec/include/m_logo.h
@@ -0,0 +1,21 @@
+/*
+ * PARSEC HEADER: m_logo.h
+ */
+
+#ifndef _M_LOGO_H_
+#define _M_LOGO_H_
+
+
+// external functions
+
+void SlideInLogo();
+void SlideOutLogo();
+void MoveInLogo();
+void MoveOutLogo();
+
+void DrawMenuLogo();
+
+
+#endif // _M_LOGO_H_
+
+
diff --git a/src/parsec/include/m_main.h b/src/parsec/include/m_main.h
new file mode 100644
index 0000000..521ef04
--- /dev/null
+++ b/src/parsec/include/m_main.h
@@ -0,0 +1,85 @@
+/*
+ * PARSEC HEADER: m_main.h
+ */
+
+#ifndef _M_MAIN_H_
+#define _M_MAIN_H_
+
+
+// menu mouse states
+
+enum {
+
+ MOUSE_OVER_NOTHING = 0x0000,
+
+ MOUSE_OVER_ENTER_SIMUL = 0x0100,
+ MOUSE_OVER_CURUP_SIMUL = 0x0200,
+ MOUSE_OVER_CURDN_SIMUL = 0x0400,
+ MOUSE_OVER_CURLF_SIMUL = 0x0800,
+ MOUSE_OVER_CURRT_SIMUL = 0x1000,
+
+ MOUSE_OVER_BUTTON = 0x0001 | MOUSE_OVER_ENTER_SIMUL,
+ MOUSE_OVER_OPTION = 0x0002 | MOUSE_OVER_ENTER_SIMUL,
+ MOUSE_OVER_UPARROW = 0x0003 | MOUSE_OVER_CURUP_SIMUL,
+ MOUSE_OVER_DOWNARROW = 0x0004 | MOUSE_OVER_CURDN_SIMUL,
+ MOUSE_OVER_LEFTARROW = 0x0005 | MOUSE_OVER_CURLF_SIMUL,
+ MOUSE_OVER_RIGHTARROW = 0x0006 | MOUSE_OVER_CURRT_SIMUL,
+ MOUSE_OVER_SHIP = 0x0007 | MOUSE_OVER_ENTER_SIMUL
+};
+
+
+// metrics of list window
+
+struct list_window_metrics_s {
+
+ int valid;
+
+ int frame_l;
+ int frame_r;
+ int frame_t;
+ int frame_b;
+ int chwidth;
+ int chheight;
+ int text_x;
+ int text_y;
+ int maxcontwidth;
+ int maxcontheight;
+};
+
+
+// external functions
+
+void DrawFloatingMenu();
+void FloatingMenuKeyHandler();
+
+void MenuNotifyConnect();
+void MenuNotifyDisconnect();
+
+void ActivateFloatingMenu( int statuswin );
+
+void SlideInFloatingMenu();
+void SlideOutFloatingMenu();
+void MoveInFloatingMenu();
+void MoveOutFloatingMenu();
+void HideFloatingMenu();
+
+void ExitOptionsMenu();
+
+// externally callable functions for automation -------------------------------
+//
+void MENU_FloatingMenuEnterGame();
+
+
+
+
+// external variables
+
+extern int m_sintab[];
+extern int m_sintab_size;
+extern int m_sintab_ampl;
+extern int disable_join_game;
+
+
+#endif // _M_MAIN_H_
+
+
diff --git a/src/parsec/include/m_option.h b/src/parsec/include/m_option.h
new file mode 100644
index 0000000..5324040
--- /dev/null
+++ b/src/parsec/include/m_option.h
@@ -0,0 +1,67 @@
+/*
+ * PARSEC HEADER: m_option.h
+ */
+
+#ifndef _M_OPTION_H_
+#define _M_OPTION_H_
+
+extern bool mod_player_name;
+
+// options menu item ids
+
+enum {
+
+ RES_OPT,
+ DEPTH_OPT,
+ FULL_OPT,
+ SYNC_OPT,
+ APPLY_VID_OPT,
+ TEXDETAIL_OPT,
+ GEOMDETAIL_OPT,
+ SFXDETAIL_OPT,
+ APPLY_DETAIL_OPT,
+ PROTOCOL_OPT,
+ KILL_LIMIT_OPT,
+ SOLAR_OPT,
+ APPLY_NET_OPT,
+ SOUND_OPT,
+ CTRL_OPT,
+ INVERT_OPT,
+ SENSITIVITY_OPT,
+ CENTER_OPT,
+// APPLY_MOUSE_OPT,
+ NAME_OPT,
+ EXIT_OPT,
+
+ NUM_OPTIONS
+};
+
+
+
+
+// external functions
+
+int OptionsListSelection();
+void OptionsListSelectDefault();
+void OptionsListCursorUp();
+void OptionsListCursorDown();
+void OptionsKeyPressed(char key);
+
+int MouseOverOption( int mousex, int mousey );
+
+void MoveInOptions();
+void MoveOutOptions();
+void SlideInOptions();
+void SlideOutOptions();
+int SlideFinishedOptions();
+
+void InitOptionsSubsystemInfo();
+void InitOptionsWindow();
+
+void ExecOptionSelection( int optno );
+void DrawOptionsMenuWindow();
+
+
+#endif // _M_OPTION_H_
+
+
diff --git a/src/parsec/include/m_status.h b/src/parsec/include/m_status.h
new file mode 100644
index 0000000..d382049
--- /dev/null
+++ b/src/parsec/include/m_status.h
@@ -0,0 +1,21 @@
+/*
+ * PARSEC HEADER: m_status.h
+ */
+
+#ifndef _M_STATUS_H_
+#define _M_STATUS_H_
+
+
+// external functions
+
+void DrawStatusWindow();
+
+int FadeFinishedStatusWindow();
+void FadeOutStatusWindow();
+void FadeInStatusWindow();
+void HideStatusWindow();
+
+
+#endif // _M_STATUS_H_
+
+
diff --git a/src/parsec/include/m_viewer.h b/src/parsec/include/m_viewer.h
new file mode 100644
index 0000000..3ec0e5e
--- /dev/null
+++ b/src/parsec/include/m_viewer.h
@@ -0,0 +1,42 @@
+/*
+ * PARSEC HEADER: m_viewer.h
+ */
+
+#ifndef _M_VIEWER_H_
+#define _M_VIEWER_H_
+
+
+// possible active viewer modes
+
+enum {
+
+ SCVMODE_SPACECRAFT,
+ SCVMODE_OBJECTSRING
+};
+
+
+#define NUM_SCV_OBJECTS 15
+
+
+// external functions
+
+int MouseOverViewerItem( int mousex, int mousey );
+
+void FadeInBackground();
+void FadeOutBackground();
+int FadeFinishedBackground();
+
+void SlideInShip();
+void SlideOutShip();
+int SlideFinishedShip();
+
+void SlideInRing();
+void SlideOutRing();
+int SlideFinishedRing();
+
+void DrawSpacecraftViewer();
+
+
+#endif // _M_VIEWER_H_
+
+
diff --git a/src/parsec/include/net_conn.h b/src/parsec/include/net_conn.h
new file mode 100644
index 0000000..366ac99
--- /dev/null
+++ b/src/parsec/include/net_conn.h
@@ -0,0 +1,34 @@
+/*
+ * PARSEC HEADER: net_conn.h
+ */
+
+#ifndef _NET_CONN_H_
+#define _NET_CONN_H_
+
+
+// external functions
+
+const char* NET_GetCurrentProtocolName();
+int NET_SwitchNetSubsys( const char *protocol );
+
+int NET_AutomaticConnect();
+int NET_CommandConnect( const char *server );
+int NET_CommandDisconnect();
+
+
+// structure definitions
+
+struct protocol_s {
+ const char* name;
+ int id;
+};
+
+
+// external variables
+
+extern protocol_s* protocol_table;
+
+
+#endif // _NET_CONN_H_
+
+
diff --git a/src/parsec/include/net_game.h b/src/parsec/include/net_game.h
new file mode 100644
index 0000000..15cdf07
--- /dev/null
+++ b/src/parsec/include/net_game.h
@@ -0,0 +1,92 @@
+/*
+ * PARSEC HEADER: net_game.h
+ */
+
+#ifndef _NET_GAME_H_
+#define _NET_GAME_H_
+
+// value alive counter is set to immediately
+// after a packet has been received
+#define MAX_ALIVE_COUNTER 12000 // 20 seconds
+
+// bufferno for virtual buffer
+#define VIRTUAL_BUFFER_ID -1 // packet is virtual (packet replay)
+
+// ping packet type
+#define PING_REQUEST 1 // request packet
+#define PING_REPLY 0 // reply packet
+
+// special ship ids
+#define SHIPID_LOCALPLAYER 0 // ship belongs to local player
+#define SHIPID_NOSHIP -1 // there is no ship (player not joined)
+
+// special slot ids
+#define SLOTID_CONNECT_REFUSED -1 // connection refused (all slots used)
+#define SLOTID_DELETED -2 // skip request in slot-request queue
+#define SLOTID_LOCALHOST -3 // slot id flag for local player
+#define SLOTID_NOT_ASSIGNED -4 // slot id has not been assigned yet
+
+// connect/join status macros
+#define REMOTE_PLAYER_ACTIVE(x) ( ( Player_Status[ x ] != PLAYER_INACTIVE ) && ( Player_ShipId[ x ] != SHIPID_LOCALPLAYER ) )
+#define REMOTE_PLAYER_JOINED(x) ( ( Player_Status[ x ] == PLAYER_JOINED ) && ( Player_ShipId[ x ] != SHIPID_LOCALPLAYER ) )
+
+
+// inline functions
+
+inline
+void CopyRemoteNode( node_t& dest, node_t& src )
+{
+ dest = src;
+}
+
+inline
+void CopyRemoteName( char *dest, const char *src )
+{
+ strncpy( dest, src, MAX_PLAYER_NAME );
+ dest[ MAX_PLAYER_NAME ] = 0;
+}
+
+
+// external functions
+
+void NET_ForceDisconnect();
+
+void NET_InitLocalPlayer();
+void NET_InitRemotePlayerTables();
+void NET_RemoveRemotePlayers();
+
+void NET_SetRemotePlayerState( int id, int status, int objclass, int killstat );
+void NET_SetRemotePlayerMatrix( int id, const Xmatrx matrix );
+void NET_SetRemotePlayerName( int id, const char *name );
+
+int NET_RegisterRemotePlayer( int slotid, node_t *node, char *name );
+
+void NET_RmEvListReset();
+void NET_RmEvListUpdateLocations();
+
+void NET_RmEvSingleClear ( RE_Header* relist );
+void NET_RmEvSinglePlayerName ( RE_Header* relist );
+void NET_RmEvSinglePlayerStatus ( RE_Header* relist, word desired_player_state, int unjoin_flag, int killer );
+void NET_RmEvSinglePlayerAndShipStatus( RE_Header* relist, word desired_player_state, int unjoin_flag, int killer );
+
+void NET_InterpolatePlayer( int playerid );
+void NET_FillShipRemInfo( ShipRemInfo *info, ShipObject *shippo, int playerid );
+void NET_ExecShipRemInfo( ShipRemInfo *info, ShipObject *shippo, int senderid );
+void NET_FreezeKillStats( int freeze );
+
+void NET_SetDesiredPlayerStatus( RE_PlayerAndShipStatus* pas_status );
+void NET_PlayerDisconnected( int playerid );
+void NET_RemovePlayer( int playerid );
+
+
+// external variables
+
+extern node_t LocalNode;
+extern node_t LocalBroadcast;
+extern node_t Server_Node;
+extern node_t Player_Node[];
+extern char REListMem[];
+
+#endif // _NET_GAME_H_
+
+
diff --git a/src/parsec/include/net_game_gmsv.h b/src/parsec/include/net_game_gmsv.h
new file mode 100644
index 0000000..d71900d
--- /dev/null
+++ b/src/parsec/include/net_game_gmsv.h
@@ -0,0 +1,30 @@
+/*
+ * PARSEC HEADER: net_game_gmsv.h
+ */
+
+#ifndef _NET_GAME_GMSV_H_
+#define _NET_GAME_GMSV_H_
+
+
+// net_game_gmsv.c implements the following functions
+// --------------------------------------------------
+// size_t NETs_RmEvList_GetMaxSize();
+// void NETs_UpdateKillStats( RE_KillStats* killstats );
+
+
+
+// external functions ---------------------------------------------------------
+//
+void NET_DisconnectNoConnection();
+void NET_ResyncLocalPlayer( RE_PlayerAndShipStatus* pas_status );
+
+// declare prototypes when we do not compile for shared lib gamecode support --
+//
+void NET_PingCurrentServer();
+void NET_ProcessPingPacket( NetPacket_GMSV* gamepacket );
+void NET_Handle_STREAM ( NetPacket_GMSV* gamepacket );
+
+
+#endif // _NET_PEER_H_
+
+
diff --git a/src/parsec/include/net_game_peer.h b/src/parsec/include/net_game_peer.h
new file mode 100644
index 0000000..c17c9d1
--- /dev/null
+++ b/src/parsec/include/net_game_peer.h
@@ -0,0 +1,60 @@
+/*
+ * PARSEC HEADER: net_game_peer.h
+ */
+
+#ifndef _NET_GAME_PEER_H_
+#define _NET_GAME_PEER_H_
+
+
+// net_game_peer.c implements the following functions
+// --------------------------------------------------
+// size_t NETs_RmEvList_GetMaxSize();
+// void NETs_UpdateKillStats( RE_KillStats* killstats );
+
+
+// external functions ---------------------------------------------------------
+//
+
+
+// declare prototypes when we do not compile for shared lib gamecode support --
+//
+int NET_AcquireRemoteSlot ( node_t *node );
+int NET_AddSlotRequest ( node_t *node, char *name, int timetag );
+int NET_DelSlotRequest ( node_t *node );
+int NET_MergeSlotRequests ( NetPacket_PEER* gamepacket, int timetag );
+void NET_ResetSlotReqQueue ();
+void NET_RmEvSinglePlayerTable ( NetPacket_PEER* gamepacket );
+void NET_RmEvSingleConnectQueue ( NetPacket_PEER* gamepacket );
+void NET_SetPacketKillStats ( NetPacket_PEER* gamepacket );
+void NET_Translate_PKTP_JOIN ( NetPacket_PEER* gamepacket, RE_PlayerAndShipStatus* pShipStatus );
+void NET_Translate_PKTP_GAME_STATE ( NetPacket_PEER* gamepacket, RE_PlayerAndShipStatus* pShipStatus, RE_KillStats* pKillStats );
+void NET_Translate_PKTP_UNJOIN ( NetPacket_PEER* gamepacket, RE_PlayerAndShipStatus* pShipStatus, RE_KillStats* pKillStats );
+void NET_Translate_PKTP_NODE_ALIVE ( NetPacket_PEER* gamepacket, RE_PlayerAndShipStatus* pShipStatus, RE_KillStats* pKillStats );
+
+
+// special slotrequest timetags -----------------------------------------------
+//
+#define TIMETAG_LOCALHOST -1
+#define TIMETAG_REPLYNOW -2
+
+
+// slot request structure (entry in slot request queue) -----------------------
+//
+struct slotrequest_s {
+
+ int slotid;
+ int timetag;
+ node_t node;
+ char name[ MAX_PLAYER_NAME + 1 ];
+};
+
+
+// external variables ---------------------------------------------------------
+//
+extern int NumSlotRequests;
+extern slotrequest_s SlotReqQueue[];
+
+
+#endif // _NET_PEER_H_
+
+
diff --git a/src/parsec/include/net_glob.h b/src/parsec/include/net_glob.h
new file mode 100644
index 0000000..c21e259
--- /dev/null
+++ b/src/parsec/include/net_glob.h
@@ -0,0 +1,144 @@
+/*
+ * PARSEC HEADER: net_glob.h
+ */
+
+#ifndef _NET_GLOB_H_
+#define _NET_GLOB_H_
+
+
+// ----------------------------------------------------------------------------
+// NETWORKING SUBSYSTEM (NET) related global declarations and definitions -
+// ----------------------------------------------------------------------------
+
+
+// forward declarations -------------------------------------------------------
+//
+struct node_t;
+struct RE_Header;
+struct RE_KillStats;
+struct NetPacket;
+struct NetPacketExternal;
+struct ShipRemInfo;
+class NET_Stream;
+
+
+extern int LocalPlayerId;
+extern char LocalPlayerName[];
+
+extern int NetAvailable;
+extern int NetworkGameMask;
+extern int NetConnected;
+extern int NetJoined;
+extern int EntryMode;
+extern int ShipDowned;
+extern int Packet_Send_Frametime;
+extern int Packet_Send_Frequency;
+extern int Packet_Recv_Rate;
+extern int HaveFullPlayerState; // indicates whether we have received a full playerstate from the server
+
+extern refframe_t ServerTimeoutFrames; // # of refframes the server times out
+
+extern int NetInterfaceSelect;
+
+extern char* CurServerToResolve;
+extern int CurServerID;
+extern char* CurServerName;
+extern int CurServerPing;
+extern node_t* CurJumpServerNode;
+extern int CurMaxPlayers;
+extern int CurMaxDataLength;
+extern int CurKillUpdate;
+extern int CurKiller;
+extern int MyUniverse;
+extern int NumRemPlayers;
+extern int CurSendMessageId_PEER;
+extern int CurGameTime;
+extern int ServerPingTime;
+
+extern int RE_List_Avail;
+extern char* RE_List_CurPos;
+
+extern int Player_Status[];
+extern GenObject* Player_Ship[];
+extern int Player_ShipId[];
+extern int Player_AliveCounter[];
+extern int Player_UpToDate[];
+extern int Player_KillStat[];
+extern int Player_LastMsgId[];
+extern int Player_LastUpdateGameStateMsgId[];
+extern char Player_Name[][ MAX_PLAYER_NAME + 1 ];
+
+extern char* Masters[];
+
+
+// NETWORKING subsystem jump table for dynamic function binding ---------------
+//
+struct net_subsys_jtab_s {
+
+ // PROTOCOL API
+
+ int (* Connect ) ();
+ int (* Disconnect ) ();
+ int (* Join ) ();
+ int (* Unjoin ) ( byte flag );
+
+ int (* UpdateName ) ();
+
+ void (* MaintainNet ) ();
+
+ // PROTOCOL API - GAME
+
+ size_t (* RmEvList_GetMaxSize) ();
+ void (* UpdateKillStats) ( RE_KillStats* killstats );
+
+ // PROTOCOL API - PACKET HANDLING
+
+ size_t (* HandleOutPacket) ( const NetPacket* int_gamepacket, NetPacketExternal* ext_gamepacket );
+ size_t (* HandleOutPacket_DEMO ) ( const NetPacket* int_gamepacket, NetPacketExternal* ext_gamepacket );
+ int (* HandleInPacket) ( const NetPacketExternal* ext_gamepacket, const int ext_pktsize, NetPacket* int_gamepacket );
+ int (* HandleInPacket_DEMO ) ( const NetPacketExternal* ext_gamepacket, NetPacket* int_gamepacket, size_t* psize_external );
+ void (* StdGameHeader) ( byte command, NetPacket* gampacket );
+ size_t (* NetPacketExternal_DEMO_GetSize ) ( const NetPacketExternal* ext_gamepacket );
+ void (* WritePacketInfo ) ( FILE *fp, NetPacketExternal* ext_gamepacket );
+
+ // PACKET API
+
+ int (* CompareNodes )( node_t *node1, node_t *node2 );
+ int (* VirtualNode )( node_t *node );
+ void (* SetVirtualAddress )( node_t *node );
+ void (* SetBroadcastAddress )( node_t *node );
+
+ void (* ResolveNode )( node_t* node_dst, node_t* node_src );
+ void (* MakeNodeRaw )( node_t* node_dst, node_t* node_src );
+ node_t* (* GetSender )( int bufid );
+ void (* ResolveSender )( node_t *node, int bufid );
+
+ void (* PrintNode )( node_t *node );
+
+ void (* ProcessPacketChain ) ( void (*procfunc)( NetPacket* gamepacket, int bufid ) );
+ void (* FlushListenBuffers )();
+ int (* InsertVirtualPacket )( NetPacket* gamepacket );
+ int (* DeterminePacketLoss )( char **info, int *isiz, int incoming );
+
+ int (* SleepUntilInput) ( int timeout_msec );
+
+ void (* SendPacket ) ( NetPacket *gamepacket, node_t *node );
+ void (* AuxSendPacket ) ( NetPacket *gamepacket, node_t *node );
+
+ int (* ResetAPI )();
+ int (* InitAPI )();
+ int (* KillAPI )();
+
+};
+
+// exported by NET_GLOB.C -----------------------------------------------------
+//
+extern net_subsys_jtab_s net_subsys_jtab;
+
+// exported by NET_UDP.C ------------------------------------------------------
+//
+extern NET_Stream ServerStream;
+
+#endif // _NET_GLOB_H_
+
+
diff --git a/src/parsec/include/net_gmsv.h b/src/parsec/include/net_gmsv.h
new file mode 100644
index 0000000..7a2c25c
--- /dev/null
+++ b/src/parsec/include/net_gmsv.h
@@ -0,0 +1,46 @@
+/*
+ * PARSEC HEADER: net_gmsv.h
+ */
+
+#ifndef _NET_GMSV_H_
+#define _NET_GMSV_H_
+
+
+// net_gmsv.c implements the following functions
+// ---------------------------------------------
+// int NETs_Connect( char *server );
+// int NETs_Disconnect();
+// int NETs_Join();
+// int NETs_Unjoin( byte flag );
+// int NETs_UpdateName();
+// void NETs_MaintainNet();
+
+
+#ifdef DBIND_PROTOCOL
+
+ #undef NETs_Connect
+ #undef NETs_Disconnect
+ #undef NETs_Join
+ #undef NETs_Unjoin
+ #undef NETs_UpdateName
+ #undef NETs_MaintainNet
+
+ #define NETs_Connect NETs_GAMESERVER_Connect
+ #define NETs_Disconnect NETs_GAMESERVER_Disconnect
+ #define NETs_Join NETs_GAMESERVER_Join
+ #define NETs_Unjoin NETs_GAMESERVER_Unjoin
+ #define NETs_UpdateName NETs_GAMESERVER_UpdateName
+ #define NETs_MaintainNet NETs_GAMESERVER_MaintainNet
+
+#endif // DBIND_PROTOCOL
+
+
+// external functions ---------------------------------------------------------
+//
+void NET_ProcPacketLoop_GMSV( NetPacket* int_gamepacket, int bufid );
+void NET_ProcPacketLoop_Disconnected_GMSV( NetPacket* int_gamepacket, int bufid );
+
+
+#endif // _NET_GMSV_H_
+
+
diff --git a/src/parsec/include/net_pckt_peer.h b/src/parsec/include/net_pckt_peer.h
new file mode 100644
index 0000000..a1ef16e
--- /dev/null
+++ b/src/parsec/include/net_pckt_peer.h
@@ -0,0 +1,23 @@
+/*
+ * PARSEC HEADER: net_pckt_peer.h
+ */
+
+#ifndef _NET_PCKT_PEER_H_
+#define _NET_PCKT_PEER_H_
+
+// net_pckt_peer.c implements the following functions
+// ---------------------------------------------
+// size_t NETs_HandleOutPacket ( const NetPacket* int_gamepacket, NetPacketExternal* ext_gamepacket );
+// size_t NETs_HandleOutPacket_DEMO ( const NetPacket* int_gamepacket, NetPacketExternal* ext_gamepacket );
+// int NETs_HandleInPacket ( const NetPacketExternal* ext_gamepacket, const int ext_pktlen, NetPacket* int_gamepacket );
+// int NETs_HandleInPacket_DEMO ( const NetPacketExternal* ext_gamepacket, NetPacket* int_gamepacket, size_t& psize );
+// size_t NETs_NetPacketExternal_DEMO_GetSize ( const NetPacketExternal* ext_gamepacket );
+// void NETs_StdGameHeader ( byte command, NetPacket* gamepacket );
+// void NETs_WritePacketInfo ( FILE *fp, NetPacketExternal* ext_gamepacket );
+
+// external functions
+
+
+#endif // _NET_PCKT_PEER_H_
+
+
diff --git a/src/parsec/include/net_peer.h b/src/parsec/include/net_peer.h
new file mode 100644
index 0000000..1a2aa7c
--- /dev/null
+++ b/src/parsec/include/net_peer.h
@@ -0,0 +1,40 @@
+/*
+ * PARSEC HEADER: net_peer.h
+ */
+
+#ifndef _NET_PEER_H_
+#define _NET_PEER_H_
+
+
+// net_peer.c implements the following functions
+// ---------------------------------------------
+// int NETs_Connect();
+// int NETs_Disconnect();
+// int NETs_Join();
+// int NETs_Unjoin( byte flag );
+// int NETs_UpdateName();
+// void NETs_MaintainNet();
+
+
+#ifdef DBIND_PROTOCOL
+
+#undef NETs_Connect
+#undef NETs_Disconnect
+#undef NETs_Join
+#undef NETs_Unjoin
+#undef NETs_UpdateName
+#undef NETs_MaintainNet
+
+#define NETs_Connect NETs_PEERTOPEER_Connect
+#define NETs_Disconnect NETs_PEERTOPEER_Disconnect
+#define NETs_Join NETs_PEERTOPEER_Join
+#define NETs_Unjoin NETs_PEERTOPEER_Unjoin
+#define NETs_UpdateName NETs_PEERTOPEER_UpdateName
+#define NETs_MaintainNet NETs_PEERTOPEER_MaintainNet
+
+#endif
+
+
+#endif // _NET_PEER_H_
+
+
diff --git a/src/parsec/include/net_prediction.h b/src/parsec/include/net_prediction.h
new file mode 100644
index 0000000..05795ea
--- /dev/null
+++ b/src/parsec/include/net_prediction.h
@@ -0,0 +1,93 @@
+#ifndef NET_PredICTIONMANAGER_H_
+#define NET_PredICTIONMANAGER_H_
+
+// forward decls --------------------------------------------------------------
+//
+class NET_Stream;
+
+// constants ------------------------------------------------------------------
+//
+#define MAX_NUM_PREDICTIONS 1000
+
+// virtual base class for all prediction events -------------------------------
+//
+class NET_PredEvent
+{
+public:
+ NET_PredEvent() : m_nMessageId( 0 ), m_nDoCount(0) {}
+ virtual ~NET_PredEvent() {};
+ virtual void Do() { m_nDoCount++; }
+ void SetMessageId( dword nMessageId ) { m_nMessageId = nMessageId; }
+ dword GetMessageId() { return m_nMessageId; }
+ int GetDoCount() { return m_nDoCount; }
+protected:
+ dword m_nMessageId;
+ int m_nDoCount;
+};
+
+
+// typedefs -------------------------------------------------------------------
+//
+typedef UTL_listentry_s<NET_PredEvent*> LE_PredEvt;
+
+
+// special implementation for an extra collect prediction event ---------------
+//
+class G_PredEventExtraCollect : public NET_PredEvent
+{
+public:
+ G_PredEventExtraCollect( ExtraObject* pExtra );
+ void Do();
+
+protected:
+ ExtraObject* m_pExtra;
+};
+
+
+// the prediction manager -----------------------------------------------------
+//
+class NET_PredictionManager
+{
+public:
+ //NOTE: stores information about events that were predicted in the game-engine
+ // whenever the game-engine modifies the local world, we save a prediction that includes a checkpoint ( = next outgoing message id )
+ // whenever we receive a packet, we clear all predictions inserted before the ACK checkpoint
+ // and we re-apply all pending predictions not yet ACK ( checkpoint # is synonym for message id )
+
+ // INITIALIZERS
+ // standard ctor
+ NET_PredictionManager( NET_Stream* pStream );
+
+ // standard dtor
+ ~NET_PredictionManager();
+
+
+ // MODIFIERS
+ // reset all data
+ void Reset();
+
+ // clear all predictions up to the message# and reapply all predictions after the message#
+ void DoCheckpoint( dword MessageId );
+
+ // predictions
+ void PredictExtraCollect( ExtraObject* pExtra );
+
+ // ACCESSORS
+ // return the # of predictions pending
+ int GetNumPredictions() { return m_predictions->GetNumEntries(); }
+
+protected:
+ UTL_List<NET_PredEvent*>* m_predictions;
+ NET_Stream* m_pStream;
+
+protected:
+ // add a predictionevent
+ // ensures that MAX_NUM_PREDICTIONS is not exceeded
+ void _AddPrediction( NET_PredEvent* pEvent );
+};
+
+// external global ------------------------------------------------------------
+//
+extern NET_PredictionManager ThePredictionManager;
+
+#endif // NET_PredICTIONMANAGER_H_
diff --git a/src/parsec/include/net_rmev.h b/src/parsec/include/net_rmev.h
new file mode 100644
index 0000000..b2ded5b
--- /dev/null
+++ b/src/parsec/include/net_rmev.h
@@ -0,0 +1,95 @@
+/*
+ * PARSEC HEADER: net_rmev.h
+ */
+
+#ifndef _NET_RMEV_H_
+#define _NET_RMEV_H_
+
+
+// net_rmev.c implements the following functions
+// ---------------------------------------------
+// int NET_RmEvAllowed( int re_type );
+// size_t NET_RmEvGetSize( RE_Header *relist );
+// int NET_RmEvPlayerName( char *name );
+// int NET_RmEvSendText( const char *text );
+// int NET_RmEvObject( const GenObject *objpo );
+// int NET_RmEvLaser( const LaserObject *laserpo );
+// int NET_RmEvMissile( const MissileObject *missilepo, dword targetobjid );
+// int NET_RmEvExtra( const ExtraObject *extrapo );
+// int NET_RmEvParticleObject( int type, const Vertex3& origin );
+// int NET_RmEvKillObject( dword objid, byte listno );
+// int NET_RmEvWeaponState( dword weapon, byte state, int energy, dword specials );
+// int NET_RmEvStateSync( dword statekey, dword stateval );
+// int NET_RmEvCreateSwarm( dword owner, dword targetobjid, dword seed );
+// int NET_RmEvCreateEmp( int upgradelevel );
+// RE_PlayerAndShipStatus* NET_RmEvPlayerAndShipStatus();
+//
+// void NET_ExecRmEvCreateObject ( RE_Header *rmev, int ownerid );
+// void NET_ExecRmEvCreateLaser ( RE_Header *rmev, int ownerid );
+// void NET_ExecRmEvCreateMissile ( RE_Header *rmev, int ownerid );
+// void NET_ExecRmEvParticleObject ( RE_Header *rmev, int ownerid );
+// void NET_ExecRmEvCreateExtra ( RE_Header *rmev, int ownerid );
+// void NET_ExecRmEvKillObject ( RE_Header *rmev );
+// void NET_ExecRmEvSendText ( RE_Header *rmev, int ownerid );
+// void NET_ExecRmEvPlayerName ( RE_Header *rmev, int ownerid );
+// void NET_ExecRmEvWeaponState ( RE_Header *rmev, int ownerid );
+// void NET_ExecRmEvStateSync ( RE_Header *rmev, int ownerid );
+// void NET_ExecRmEvCreateSwarm ( RE_Header *rmev, int ownerid );
+// void NET_ExecRmEvCreateEmp ( RE_Header *rmev, int ownerid );
+
+// void NET_ExecRmEvGameState ( RE_GameState* gamestate );
+// void NET_ExecRmEvKillStats ( RE_KillStats* killstats );
+// void NET_ExecRmEvCommandInfo ( RE_CommandInfo* commandinfo );
+
+
+// syncable remote state ids
+
+enum {
+
+ RMEVSTATE_NEBULAID,
+ RMEVSTATE_PROBEXTRA,
+ RMEVSTATE_PROBHELIX,
+ RMEVSTATE_PROBLIGHTNING,
+ RMEVSTATE_PROBPHOTON,
+ RMEVSTATE_PROBMINE,
+ RMEVSTATE_PROBREPAIR,
+ RMEVSTATE_PROBAFTERBURNER,
+ RMEVSTATE_PROBHOLODECOY,
+ RMEVSTATE_PROBINVISIBILITY,
+ RMEVSTATE_PROBINVULNERABILITY,
+ RMEVSTATE_PROBENERGYFIELD,
+ RMEVSTATE_PROBLASERUPGRADE,
+ RMEVSTATE_PROBLASERUPGRADE1,
+ RMEVSTATE_PROBLASERUPGRADE2,
+ RMEVSTATE_PROBMISSPACK,
+ RMEVSTATE_PROBDUMBPACK,
+ RMEVSTATE_PROBGUIDEPACK,
+ RMEVSTATE_PROBSWARMPACK,
+ RMEVSTATE_PROBEMPUPGRADE1,
+ RMEVSTATE_PROBEMPUPGRADE2,
+ RMEVSTATE_AMAZING,
+ RMEVSTATE_BRILLIANT,
+ RMEVSTATE_KILLLIMIT,
+ RMEVSTATE_ENERGYBOOST,
+ RMEVSTATE_REPAIRBOOST,
+ RMEVSTATE_DUMBPACK,
+ RMEVSTATE_HOMPACK,
+ RMEVSTATE_SWARMPACK,
+ RMEVSTATE_PROXPACK,
+
+ RMEVSTATE_NUMSTATES
+};
+
+
+// external functions ---------------------------------------------------------
+//
+size_t NET_RmEvList_GetSize( RE_Header* relist );
+int NET_RmEvList_IsWellFormed( RE_Header* relist );
+
+#endif // _NET_RMEV_H_
+
+
+
+
+
+
diff --git a/src/parsec/include/net_rmev_gmsv.h b/src/parsec/include/net_rmev_gmsv.h
new file mode 100644
index 0000000..8d70230
--- /dev/null
+++ b/src/parsec/include/net_rmev_gmsv.h
@@ -0,0 +1,20 @@
+/*
+ * PARSEC HEADER: net_rmev_gmsv.h
+ */
+
+#ifndef _NET_RMEV_GMSV_H_
+#define _NET_RMEV_GMSV_H_
+
+
+// net_rmev_gmsv.c implements the following functions
+// --------------------------------------------------
+// void NET_ExecRmEvCommandInfo( RE_CommandInfo* commandinfo );
+
+// external functions ---------------------------------------------------------
+//
+void NET_ProcessRmEvList_GMSV( NetPacket_GMSV* gamepacket );
+RE_CommandInfo* NET_RmEvSingleCommandInfo( NetPacket_GMSV* gamepacket, const char* commandstring );
+
+#endif // _NET_RMEV_GMSV_H_
+
+
diff --git a/src/parsec/include/net_rmev_peer.h b/src/parsec/include/net_rmev_peer.h
new file mode 100644
index 0000000..340b956
--- /dev/null
+++ b/src/parsec/include/net_rmev_peer.h
@@ -0,0 +1,21 @@
+/*
+ * PARSEC HEADER: net_rmev_peer.h
+ */
+
+#ifndef _NET_RMEV_PEER_H_
+#define _NET_RMEV_PEER_H_
+
+
+// net_rmev_peer.c implements the following functions
+// --------------------------------------------------
+
+
+// external functions
+
+void NET_ProcessNodeAlive_PEER( NetPacket_PEER* gamepacket );
+void NET_UpdateGameState_PEER ( NetPacket_PEER* gamepacket );
+
+
+#endif // _NET_RMEV_PEER_H_
+
+
diff --git a/src/parsec/include/net_serv.h b/src/parsec/include/net_serv.h
new file mode 100644
index 0000000..f2c260d
--- /dev/null
+++ b/src/parsec/include/net_serv.h
@@ -0,0 +1,77 @@
+/*
+ * PARSEC HEADER: net_serv.h
+ */
+
+#ifndef _NET_SERV_H_
+#define _NET_SERV_H_
+
+
+//NOTE:
+// these functions are only needed by the GMSV protocol
+// they are implemented by NET_SERV.C.
+
+
+// server access functions
+
+int NET_ResolveServerNode();
+int NET_ServerConnect();
+int NET_ServerDisconnect();
+void NET_ServerDisconnectReset();
+int NET_ServerJump();
+void NET_ServerMessages();
+int NET_ServerUpdateName();
+int NET_ServerParseMessage( char* msg );
+void NET_ServerProcessPingPacket( NetPacket_GMSV* gamepacket );
+int NET_ServerList_Get( char* masterhostname, int serverid = -1 );
+int NET_ServerList_AddServer( RE_IPv4ServerInfo* pServerInfo );
+int NET_ServerList_UpdateServer( RE_IPv4ServerInfo* pServerInfo );
+int NET_ServerList_AddLinkInfo( RE_ServerLinkInfo* pServerLinkInfo );
+int NET_ServerList_AddMapObject( RE_MapObject* pMapObject );
+int NET_ServerList_SetPONG( int serverid, refframe_t sendframe, int curplayers, int maxplayers );
+int NET_ServerList_SetINFO( int serverid, refframe_t framediff, int curplayers, int maxplayers, int srv_version_minor, int srv_version_major, char* srv_name );
+int NET_ServerPing( node_t* node, int anon, int fullinfo = FALSE );
+
+// defaults for "SERVRLIST" command -------------------------------------------
+//
+#define DEFAULT_SERVERLIST_MIN_PING 0
+#define DEFAULT_SERVERLIST_MAX_PING 9999
+#define DEFAULT_SERVERLIST_MIN_PLAYERS 0
+#define DEFAULT_SERVERLIST_MAX_PLAYERS MAX_NET_ALLOC_SLOTS
+#define DEFAULT_SERVERLIST_LOCALE 1
+
+// all info about a "SERVERLIST" command --------------------------------------
+//
+struct serverlist_info_s {
+
+ int m_ListRequested;
+ int m_nMinPing;
+ int m_nMaxPing;
+ int m_nMinPlayers;
+ int m_nMaxPlayers;
+ int m_nLocale;
+
+ word m_RequestedServerIDs[ MAX_NUM_LINKS ];
+ int m_nNumRequestedServerIDs;
+
+ serverlist_info_s()
+ {
+ Reset();
+ }
+
+ void Reset()
+ {
+ m_ListRequested = FALSE;
+ m_nMinPing = DEFAULT_SERVERLIST_MIN_PING;
+ m_nMaxPing = DEFAULT_SERVERLIST_MAX_PING;
+ m_nMinPlayers = DEFAULT_SERVERLIST_MIN_PLAYERS;
+ m_nMaxPlayers = DEFAULT_SERVERLIST_MAX_PLAYERS;
+ m_nLocale = DEFAULT_SERVERLIST_LOCALE;
+ m_nNumRequestedServerIDs = 0;
+ }
+};
+
+extern serverlist_info_s serverlist_info;
+
+#endif // _NET_SERV_H_
+
+
diff --git a/src/parsec/include/net_subh.h b/src/parsec/include/net_subh.h
new file mode 100644
index 0000000..439a9b0
--- /dev/null
+++ b/src/parsec/include/net_subh.h
@@ -0,0 +1,167 @@
+/*
+ * PARSEC HEADER: net_subh.h
+ */
+
+#ifndef _NET_SUBH_H_
+#define _NET_SUBH_H_
+
+
+// ----------------------------------------------------------------------------
+// NETWORKING SUBSYSTEM (NET) system-dependent function declarations -
+// ----------------------------------------------------------------------------
+
+
+// remote event functions (RMEV)
+
+int NET_RmEvAllowed( int re_type );
+size_t NET_RmEvGetSize( RE_Header *relist );
+int NET_RmEvPlayerName( const char *name );
+int NET_RmEvSendText( const char *text );
+int NET_RmEvObject( const GenObject *objpo );
+int NET_RmEvLaser( const LaserObject *laserpo );
+int NET_RmEvMissile( const MissileObject *missilepo, dword targetobjid );
+int NET_RmEvExtra( const ExtraObject *extrapo );
+ int NET_RmEvMine( const ExtraObject *extrapo );
+int NET_RmEvParticleObject( int type, const Vertex3& origin );
+int NET_RmEvKillObject( dword objid, byte listno );
+int NET_RmEvWeaponState( dword weapon, byte state, int energy, dword specials );
+int NET_RmEvStateSync( dword statekey, dword stateval );
+int NET_RmEvCreateSwarm( Vector3 *origin, dword targetobjid, dword seed );
+int NET_RmEvCreateEmp( int upgradelevel );
+RE_PlayerStatus* NET_RmEvPlayerStatus( byte last_unjoin_flag );
+RE_PlayerAndShipStatus* NET_RmEvPlayerAndShipStatus( byte last_unjoin_flag );
+RE_ClientInfo* NET_RmEvClientInfo( int nSendFreq, int nRecvRate );
+
+void NET_ExecRmEvCreateObject ( RE_Header *rmev, int ownerid );
+void NET_ExecRmEvCreateLaser ( RE_Header *rmev, int ownerid );
+void NET_ExecRmEvCreateMissile ( RE_Header *rmev, int ownerid );
+void NET_ExecRmEvParticleObject ( RE_Header *rmev, int ownerid );
+void NET_ExecRmEvCreateExtra ( RE_Header *rmev, int ownerid );
+void NET_ExecRmEvKillObject ( RE_Header *rmev );
+void NET_ExecRmEvSendText ( RE_Header *rmev, int ownerid );
+void NET_ExecRmEvPlayerName ( RE_Header *rmev, int ownerid );
+void NET_ExecRmEvWeaponState ( RE_Header *rmev, int ownerid );
+void NET_ExecRmEvStateSync ( RE_Header *rmev, int ownerid );
+void NET_ExecRmEvCreateSwarm ( RE_Header *rmev, int ownerid );
+void NET_ExecRmEvCreateEmp ( RE_Header *rmev, int ownerid );
+
+void NET_ExecRmEvPlayerAndShipStatus ( RE_PlayerAndShipStatus* pas_status, dword messageid );
+void NET_ExecRmEvGameState ( RE_GameState* gamestate );
+void NET_ExecRmEvKillStats ( RE_KillStats* killstats );
+void NET_ExecRmEvCommandInfo ( RE_CommandInfo* commandinfo );
+void NET_ExecRmEvCreateExtra2 ( RE_Header *rmev, int ownerid );
+void NET_ExecRmEvIPv4ServerInfo ( RE_IPv4ServerInfo* pIPv4ServerInfo );
+void NET_ExecRmEvServerLinkInfo ( RE_ServerLinkInfo* pServerLinkInfo );
+void NET_ExecRmEvMapObject ( RE_MapObject* pMapObject );
+void NET_ExecRmEvStargate ( RE_Stargate* pRE_Stargate );
+
+// utility functions (UTIL)
+
+int NET_ProtocolPEER();
+int NET_ProtocolGMSV();
+
+int NET_ConnectedPEER();
+int NET_ConnectedGMSV();
+
+char* NET_FetchPlayerName( int playerid );
+int NET_SetPlayerName( const char *name );
+ShipObject* NET_FetchOwnersShip( int ownerid );
+void NET_SetPlayerKillStat( int playerid, int amount );
+
+int NET_KillStatLimitReached( int limit );
+void NET_KillStatForceIdleZero();
+
+void NET_DrawEntryModeText();
+
+
+#ifdef DBIND_PROTOCOL
+
+ // protocol api functions
+
+ #define NETs_Connect (*net_subsys_jtab.Connect)
+ #define NETs_Disconnect (*net_subsys_jtab.Disconnect)
+ #define NETs_Join (*net_subsys_jtab.Join)
+ #define NETs_Unjoin (*net_subsys_jtab.Unjoin)
+
+ #define NETs_UpdateName (*net_subsys_jtab.UpdateName)
+
+ #define NETs_MaintainNet (*net_subsys_jtab.MaintainNet)
+
+ // protocol api - game functions
+
+ #define NETs_RmEvList_GetMaxSize (*net_subsys_jtab.RmEvList_GetMaxSize)
+ #define NETs_UpdateKillStats (*net_subsys_jtab.UpdateKillStats)
+
+ // protocol api - packet handling functions
+
+ #define NETs_HandleOutPacket (*net_subsys_jtab.HandleOutPacket)
+ #define NETs_HandleOutPacket_DEMO (*net_subsys_jtab.HandleOutPacket_DEMO)
+ #define NETs_HandleInPacket (*net_subsys_jtab.HandleInPacket)
+ #define NETs_HandleInPacket_DEMO (*net_subsys_jtab.HandleInPacket_DEMO)
+ #define NETs_NetPacketExternal_DEMO_GetSize (*net_subsys_jtab.NetPacketExternal_DEMO_GetSize)
+ #define NETs_StdGameHeader (*net_subsys_jtab.StdGameHeader)
+ #define NETs_WritePacketInfo (*net_subsys_jtab.WritePacketInfo)
+
+#else // DBIND_PROTOCOL
+
+ // protocol api functions
+
+ int NETs_Connect();
+ int NETs_Disconnect();
+ int NETs_Join();
+ int NETs_Unjoin( byte flag );
+
+ int NETs_UpdateName();
+
+ void NETs_MaintainNet();
+
+ // protocol api - game functions
+
+ size_t NETs_RmEvList_GetMaxSize();
+ void NETs_UpdateKillStats( RE_KillStats* killstats );
+
+ // protocol api - packet handling functions
+
+ size_t NETs_HandleOutPacket ( const NetPacket* int_gamepacket, NetPacketExternal* ext_gamepacket );
+ size_t NETs_HandleOutPacket_DEMO ( const NetPacket* int_gamepacket, NetPacketExternal* ext_gamepacket );
+ int NETs_HandleInPacket ( const NetPacketExternal* ext_gamepacket, const int ext_pktsize, NetPacket* int_gamepacket );
+ int NETs_HandleInPacket_DEMO ( const NetPacketExternal* ext_gamepacket, NetPacket* int_gamepacket, size_t* psize_external );
+ size_t NETs_NetPacketExternal_DEMO_GetSize( NetPacketExternal* ext_gamepacket );
+ void NETs_StdGameHeader( byte command, NetPacket* gamepacket );
+ void NETs_WritePacketInfo( FILE *fp, NetPacketExternal* ext_gamepacket );
+
+#endif // DBIND_PROTOCOL
+
+
+// packet api functions
+
+int NETs_CompareNodes( node_t *node1, node_t *node2 );
+int NETs_VirtualNode( node_t *node );
+void NETs_SetVirtualAddress( node_t *node );
+void NETs_SetBroadcastAddress( node_t *node );
+
+void NETs_ResolveNode( node_t* node_dst, node_t* node_src );
+void NETs_MakeNodeRaw( node_t* node_dst, node_t* node_src );
+node_t* NETs_GetSender( int bufid );
+void NETs_ResolveSender( node_t *node, int bufid );
+
+void NETs_PrintNode( node_t *node );
+
+void NETs_FlushListenBuffers();
+void NETs_ProcessPacketChain ( void (*procfunc)(NetPacket* gamepacket,int bufid) );
+int NETs_InsertVirtualPacket( NetPacket* gamepacket );
+int NETs_DeterminePacketLoss( char **info, int *isiz, int incoming );
+
+int NETs_SleepUntilInput( int timeout_msec );
+
+void NETs_SendPacket ( NetPacket* gamepacket, node_t* node );
+void NETs_AuxSendPacket ( NetPacket* gamepacket, node_t* node );
+
+int NETs_ResetAPI();
+int NETs_InitAPI();
+int NETs_KillAPI();
+
+
+#endif // _NET_SUBH_H_
+
+
diff --git a/src/parsec/include/net_udp.h b/src/parsec/include/net_udp.h
new file mode 100644
index 0000000..f606e57
--- /dev/null
+++ b/src/parsec/include/net_udp.h
@@ -0,0 +1,33 @@
+/*
+ * PARSEC HEADER: net_udp.h
+ */
+
+#ifndef _NET_UDP_H_
+#define _NET_UDP_H_
+
+
+// net_udp.c implements the following functions
+// -------------------------------------------
+// int NETs_CompareNodes( node_t *node1, node_t *node2 );
+// int NETs_VirtualNode( node_t *node );
+// void NETs_SetVirtualAddress( node_t *node );
+// void NETs_SetBroadcastAddress( node_t *node );
+// void NETs_ResolveNode( node_t *node, node_t *noderaw );
+// void NETs_MakeNodeRaw( node_t *noderaw, node_t *node );
+// node_t* NETs_GetSender( int bufid );
+// void NETs_ResolveSender( node_t *node, int bufid );
+// void NETs_PrintNode( node_t *node );
+// void NETs_FlushListenBuffers();
+// void NETs_ProcessPacketChain( void (*procfunc)(NetPacket* gamepacket,int bufid) );
+// int NETs_InsertVirtualPacket( NetPacket* gamepacket );
+// int NETs_DeterminePacketLoss( char **info, int *isiz, int incoming );
+// void NETs_SendPacket( NetPacket* gamepacket, node_t* node );
+// void NETs_AuxSendPacket( NetPacket* gamepacket, node_t* node );
+// int NETs_ResetAPI();
+// int NETs_InitAPI();
+// int NETs_KillAPI();
+
+
+#endif // _NET_UDP_H_
+
+
diff --git a/src/parsec/include/net_udpdf.h b/src/parsec/include/net_udpdf.h
new file mode 100644
index 0000000..0003e49
--- /dev/null
+++ b/src/parsec/include/net_udpdf.h
@@ -0,0 +1,31 @@
+/*
+ * PARSEC HEADER: net_udpdf.h
+ */
+
+#ifndef _NET_UDPDF_H_
+#define _NET_UDPDF_H_
+
+#include "net_ports.h"
+
+// default timeout value for connection to server -----------------------------
+//
+#define DEFAULT_TIMEOUT_SERVER_CONNECTION 10 * FRAME_MEASURE_TIMEBASE
+
+
+// external functions ---------------------------------------------------------
+//
+void UDP_StoreNodePort( node_t *node, word port );
+word UDP_GetNodePort( node_t *node );
+int NET_ResolveHostName( const char* hostname, char* ipaddress, node_t* node );
+
+
+// UDP packet platform specific functions -------------------------------------
+//
+int UDPs_GetLocalIP();
+void UDPs_GetLocalBroadcast();
+int UDPs_InitOSNetAPI();
+void UDPs_KillOSNetAPI();
+
+#endif // _NET_UDPDF_H_
+
+
diff --git a/src/parsec/include/net_univ.h b/src/parsec/include/net_univ.h
new file mode 100644
index 0000000..e182be1
--- /dev/null
+++ b/src/parsec/include/net_univ.h
@@ -0,0 +1,40 @@
+/*
+ * PARSEC HEADER: net_univ.h
+ */
+
+#ifndef _NET_UNIV_H_
+#define _NET_UNIV_H_
+
+
+// for server_s ---------------------------------------------------------------
+//
+#include "net_csdf.h"
+
+// max. # of entries in the linklist ------------------------------------------
+//
+#define MAX_LINKLIST_SIZE MAX_SERVERS * MAX_NUM_LINKS / 2
+
+// forward decls --------------------------------------------------------------
+//
+struct Stargate;
+
+// external variables ---------------------------------------------------------
+//
+extern server_s server_list[];
+extern link_s link_list[];
+extern mapobj_s* map_objs[];
+
+extern int num_servers_joined;
+extern int g_nNumLinks;
+extern int num_map_objs;
+
+
+// external functions ---------------------------------------------------------
+//
+int NET_GetGameServerList();
+Stargate* NET_FindStargate( word serverid );
+
+
+#endif // _NET_UNIV_H_
+
+
diff --git a/src/parsec/include/net_util_cl.h b/src/parsec/include/net_util_cl.h
new file mode 100644
index 0000000..b767433
--- /dev/null
+++ b/src/parsec/include/net_util_cl.h
@@ -0,0 +1,29 @@
+/*
+ * PARSEC HEADER: net_util_cl.h
+ */
+
+#ifndef _NET_UTIL_CL_H_
+#define _NET_UTIL_CL_H_
+
+
+// net_util_cl.c implements the following functions
+// ------------------------------------------------
+// int NET_ProtocolPEER();
+// int NET_ProtocolGMSV();
+// int NET_ConnectedPEER();
+// int NET_ConnectedGMSV();
+// char* NET_FetchPlayerName( int playerid );
+// int NET_SetPlayerName( char *name );
+// ShipObject* NET_FetchOwnersShip( int ownerid );
+// void NET_SetPlayerKillStat( int playerid, int amount );
+// int NET_KillStatLimitReached( int limit );
+// void NET_KillStatForceIdleZero();
+// void NET_DrawEntryModeText();
+
+
+// external functions ---------------------------------------------------------
+//
+
+#endif // _NET_UTIL_CL_H_
+
+
diff --git a/src/parsec/include/nl_udp.h b/src/parsec/include/nl_udp.h
new file mode 100644
index 0000000..7670422
--- /dev/null
+++ b/src/parsec/include/nl_udp.h
@@ -0,0 +1,19 @@
+/*
+ * PARSEC HEADER: nl_udp.h
+ */
+
+#ifndef _NL_UDP_H_
+#define _NL_UDP_H_
+
+
+// nl_udp.c implements the following UDP platform specific functions
+// -----------------------------------------------------------------
+// int UDPs_GetLocalIP();
+// void UDPs_GetLocalBroadcast();
+// int UDPs_InitOSNetAPI();
+// void UDPs_KillOSNetAPI();
+
+
+#endif // _NL_UDP_H_
+
+
diff --git a/src/parsec/include/nw_udp.h b/src/parsec/include/nw_udp.h
new file mode 100644
index 0000000..3fe44e0
--- /dev/null
+++ b/src/parsec/include/nw_udp.h
@@ -0,0 +1,27 @@
+/*
+ * PARSEC HEADER: nw_udp.h
+ */
+
+#ifndef _NW_UDP_H_
+#define _NW_UDP_H_
+
+
+// nw_udp.c implements the following UDP platform specific functions
+// -----------------------------------------------------------------
+// int UDPs_GetLocalIP();
+// void UDPs_GetLocalBroadcast();
+// int UDPs_InitOSNetAPI();
+// void UDPs_KillOSNetAPI();
+
+
+// link winsock library
+#ifdef NEED_WINSOCK2
+ #pragma comment( lib, "ws2_32" )
+#else
+ #pragma comment( lib, "wsock32" )
+#endif
+
+
+#endif // _NW_UDP_H_
+
+
diff --git a/src/parsec/include/obj_ani.h b/src/parsec/include/obj_ani.h
new file mode 100644
index 0000000..ed2a9df
--- /dev/null
+++ b/src/parsec/include/obj_ani.h
@@ -0,0 +1,19 @@
+/*
+ * PARSEC HEADER: obj_ani.h
+ */
+
+#ifndef _OBJ_ANI_H_
+#define _OBJ_ANI_H_
+
+
+// external functions
+
+void OBJ_AnimateProjectiles();
+void OBJ_AnimateCustomObjects();
+void OBJ_BackgroundAnimateExtras();
+void OBJ_PerformShipActions();
+
+
+#endif // _OBJ_ANI_H_
+
+
diff --git a/src/parsec/include/obj_coll.h b/src/parsec/include/obj_coll.h
new file mode 100644
index 0000000..a16fede
--- /dev/null
+++ b/src/parsec/include/obj_coll.h
@@ -0,0 +1,16 @@
+/*
+ * PARSEC HEADER: obj_coll.h
+ */
+
+#ifndef _OBJ_COLL_H_
+#define _OBJ_COLL_H_
+
+
+// external functions
+
+void OBJ_CheckCollisions();
+
+
+#endif // _OBJ_COLL_H_
+
+
diff --git a/src/parsec/include/obj_comm.h b/src/parsec/include/obj_comm.h
new file mode 100644
index 0000000..5560def
--- /dev/null
+++ b/src/parsec/include/obj_comm.h
@@ -0,0 +1,21 @@
+/*
+ * PARSEC HEADER: obj_comm.h
+ */
+
+#ifndef _OBJ_COMM_H_
+#define _OBJ_COMM_H_
+
+
+// external functions
+
+// (none)
+
+
+// external variables
+
+extern dword last_summoned_objectid;
+
+
+#endif // _OBJ_COMM_H_
+
+
diff --git a/src/parsec/include/obj_ctrl.h b/src/parsec/include/obj_ctrl.h
new file mode 100644
index 0000000..4287979
--- /dev/null
+++ b/src/parsec/include/obj_ctrl.h
@@ -0,0 +1,132 @@
+/*
+ * PARSEC HEADER: obj_ctrl.h
+ */
+
+#ifndef _OBJ_CTRL_H_
+#define _OBJ_CTRL_H_
+
+#ifdef PARSEC_SERVER
+
+ #undef CreateObject
+ #undef FreeObjList
+ #undef KillAllObjects
+ #undef FetchObject
+ #undef FetchFirstShip
+ #undef FetchFirstLaser
+ #undef FetchFirstMissile
+ #undef FetchFirstExtra
+ #undef FetchFirstCustom
+ #undef KillClassInstances
+
+#endif // PARSEC_SERVER
+
+
+// external functions
+
+void InitObjCtrl();
+
+void FreeObjectMem( GenObject *objectpo );
+int FreeObjList( GenObject *listpo );
+int FreeObjects();
+
+GenObject* CreateObject( int objclass, const Xmatrx startmatrx );
+GenObject* SummonObject( int objclass, const Xmatrx startmatrx );
+GenObject* SummonObjectFromType( int objtype, const Xmatrx startmatrx );
+CustomObject* CreateVirtualObject( dword objtypeid );
+
+GenObject* FetchSpecificObject( dword objno, GenObject *listpo );
+GenObject* FetchSpecificHostObject( dword hostobjno, GenObject *listpo );
+GenObject* FetchObject( dword objno );
+GenObject* FetchHostObject( dword hostobjno );
+
+int KillSpecificObject( dword objno, GenObject *listpo );
+int KillSpecificHostObject( dword hostobjno, GenObject *listpo );
+int KillObject( dword objno );
+int KillHostObject( dword hostobjno );
+int KillClassInstances( int objclass );
+
+void OBJ_CorrectObjectInstance( GenObject *dstobj, GenObject *srcobj );
+void OBJ_SwitchObjectLod( GenObject *obj, dword lod );
+void OBJ_AutoSelectObjectLod( GenObject *obj );
+
+void ScanActiveObjects( const Camera camera );
+
+
+// return pointer to first ship in ship-objects list --------------------------
+//
+inline ShipObject *FetchShipListHead()
+{
+ // fetch head of ship-objects list
+ ShipObject *head = (ShipObject *) PShipObjects->NextObj;
+
+ return head;
+}
+
+
+// return pointer to first "real" ship in ship-objects list -------------------
+//
+inline ShipObject *FetchFirstShip()
+{
+ // fetch head of ship-objects list
+ ShipObject *head = (ShipObject *) PShipObjects->NextObj;
+
+#ifdef PARSEC_CLIENT
+
+ // if local ship is head of list return next object
+ if ( head == MyShip ) {
+ head = (ShipObject *) head->NextObj;
+ }
+
+#endif // PARSEC_CLIENT
+
+ return head;
+}
+
+
+// return pointer to first laser in laser-objects list ------------------------
+//
+inline LaserObject *FetchFirstLaser()
+{
+ // fetch head of laser-objects list
+ LaserObject *head = (LaserObject *) LaserObjects->NextObj;
+
+ return head;
+}
+
+
+// return pointer to first missile in missile-objects list --------------------
+//
+inline MissileObject *FetchFirstMissile()
+{
+ // fetch head of missile-objects list
+ MissileObject *head = (MissileObject *) MisslObjects->NextObj;
+
+ return head;
+}
+
+
+// return pointer to first extra in extra-objects list ------------------------
+//
+inline ExtraObject *FetchFirstExtra()
+{
+ // fetch head of extra-objects list
+ ExtraObject *head = (ExtraObject *) ExtraObjects->NextObj;
+
+ return head;
+}
+
+
+// return pointer to first custom object in custom-objects list ---------------
+//
+inline CustomObject *FetchFirstCustom()
+{
+ // fetch head of custom-objects list
+ CustomObject *head = (CustomObject *) CustmObjects->NextObj;
+
+ return head;
+}
+
+
+#endif // _OBJ_CTRL_H_
+
+
diff --git a/src/parsec/include/obj_expl.h b/src/parsec/include/obj_expl.h
new file mode 100644
index 0000000..ae9b057
--- /dev/null
+++ b/src/parsec/include/obj_expl.h
@@ -0,0 +1,24 @@
+/*
+ * PARSEC HEADER: obj_expl.h
+ */
+
+#ifndef _OBJ_EXPL_H_
+#define _OBJ_EXPL_H_
+
+
+// external functions
+
+void LetShipExplode( ShipObject *shippo );
+
+void OBJ_ShipHelixDamage( ShipObject *shippo, int owner );
+void OBJ_ShipLightningDamage( ShipObject *shippo, int owner );
+void OBJ_ShipPhotonDamage( ShipObject *shippo, int owner );
+void OBJ_ShipSwarmDamage( ShipObject *shippo, int owner );
+void OBJ_ShipEmpDamage( ShipObject *shippo, int owner, int hitpoints );
+
+void OBJ_CheckExplosions();
+
+
+#endif // _OBJ_EXPL_H_
+
+
diff --git a/src/parsec/include/obj_game.h b/src/parsec/include/obj_game.h
new file mode 100644
index 0000000..fa7eb54
--- /dev/null
+++ b/src/parsec/include/obj_game.h
@@ -0,0 +1,53 @@
+/*
+ * PARSEC HEADER: obj_game.h
+ */
+
+#ifndef _OBJ_GAME_H_
+#define _OBJ_GAME_H_
+
+
+// afterburner constants
+
+#define AFTERBURNER_SPEED 150000
+#define AFTERBURNER_ENERGY 2400
+
+
+// external functions
+
+int OBJ_DeviceAvailable( ShipObject *shippo, int mask );
+
+void OBJ_ShootLaser( ShipObject *shippo );
+void OBJ_LaunchMissile( ShipObject *shippo, dword launcher );
+void OBJ_LaunchHomingMissile( ShipObject *shippo, dword launcher, dword targetid );
+void OBJ_LaunchMine( ShipObject *shippo );
+void OBJ_LaunchSwarmMissiles( ShipObject *shippo, dword targetid );
+
+void OBJ_EnableInvisibility( ShipObject *shippo );
+void OBJ_EnableInvulnerability( ShipObject *shippo );
+void OBJ_EnableDecoy( ShipObject *shippo );
+
+void OBJ_EnableLaserUpgrade1( ShipObject *shippo );
+void OBJ_EnableLaserUpgrade2( ShipObject *shippo );
+
+void OBJ_EnableEmpUpgrade1( ShipObject *shippo );
+void OBJ_EnableEmpUpgrade2( ShipObject *shippo );
+
+char* OBJ_BoostEnergy( ShipObject *shippo, int boost );
+
+void OBJ_EnableAfterBurner( ShipObject *shippo );
+void OBJ_DisableAfterBurner( ShipObject *shippo );
+void OBJ_ActivateAfterBurner( ShipObject *shippo );
+void OBJ_DeactivateAfterBurner( ShipObject *shippo );
+
+void OBJ_EventShipImpact( ShipObject *shippo, int shieldhit );
+
+
+// external variables
+
+extern int afterburner_active;
+extern int afterburner_energy;
+
+
+#endif // _OBJ_GAME_H_
+
+
diff --git a/src/parsec/include/obj_iter.h b/src/parsec/include/obj_iter.h
new file mode 100644
index 0000000..0568c87
--- /dev/null
+++ b/src/parsec/include/obj_iter.h
@@ -0,0 +1,22 @@
+/*
+ * PARSEC HEADER: obj_iter.h
+ */
+
+#ifndef _OBJ_ITER_H_
+#define _OBJ_ITER_H_
+
+
+// function pointer type for iter polygon attachment
+typedef void (*attach_iterpolys_fpt)( GenObject *obj, int inorder );
+
+
+// external functions
+
+void OBJ_AttachIterPolygons( GenObject *obj, int inorder );
+void OBJ_ResetRegisteredClassIterPolys( dword objclass );
+int OBJ_RegisterClassIterPolys( dword objclass, int apexid, int apexvtx, int apexcomp, int numprimvtxs, int numvtxs, float *vtxlist );
+
+
+#endif // _OBJ_ITER_H_
+
+
diff --git a/src/parsec/include/obj_part.h b/src/parsec/include/obj_part.h
new file mode 100644
index 0000000..cee0be3
--- /dev/null
+++ b/src/parsec/include/obj_part.h
@@ -0,0 +1,32 @@
+/*
+ * PARSEC HEADER: obj_part.h
+ */
+
+#ifndef _OBJ_PART_H_
+#define _OBJ_PART_H_
+
+
+// render modes for attached particles
+
+enum {
+
+ PARTICLE_RENDERMODE_POSLIGHT,
+ PARTICLE_RENDERMODE_THRUST,
+ PARTICLE_RENDERMODE_MISSILE
+};
+
+
+// function pointer type for particle attachment
+typedef void (*attach_particles_fpt)( GenObject *obj );
+
+
+// external functions
+
+void OBJ_AttachClassParticles( GenObject *obj );
+void OBJ_ResetRegisteredClassParticles( dword objclass );
+int OBJ_RegisterClassParticle( dword objclass, const char *pdefname, float refz, int rendmode, Vector3 *pos );
+
+
+#endif // _OBJ_PART_H_
+
+
diff --git a/src/parsec/include/obj_vani.h b/src/parsec/include/obj_vani.h
new file mode 100644
index 0000000..f00025a
--- /dev/null
+++ b/src/parsec/include/obj_vani.h
@@ -0,0 +1,20 @@
+/*
+ * PARSEC HEADER: obj_vani.h
+ */
+
+#ifndef _OBJ_VANI_H_
+#define _OBJ_VANI_H_
+
+
+// function pointer type for vtxanim registration
+typedef void (*register_vtxanim_fpt)( GenObject *obj );
+
+
+// external functions
+
+int OBJ_RegisterVtxAnimation( const char *classname, register_vtxanim_fpt regfunc );
+
+
+#endif // _OBJ_VANI_H_
+
+
diff --git a/src/parsec/include/obj_xtra.h b/src/parsec/include/obj_xtra.h
new file mode 100644
index 0000000..5034986
--- /dev/null
+++ b/src/parsec/include/obj_xtra.h
@@ -0,0 +1,21 @@
+/*
+ * PARSEC HEADER: obj_xtra.h
+ */
+
+#ifndef _OBJ_XTRA_H_
+#define _OBJ_XTRA_H_
+
+
+// external functions
+
+void OBJ_FillExtraMemberVars( ExtraObject *extrapo );
+void OBJ_KillExtra( ExtraObject *precnode, int collected );
+void OBJ_AnimateExtra( ExtraObject *extrapo );
+void OBJ_DoExtraPlacement();
+
+void OBJ_CreateShipExtras( ShipObject *shippo );
+
+
+#endif // _OBJ_XTRA_H_
+
+
diff --git a/src/parsec/include/part_ani.h b/src/parsec/include/part_ani.h
new file mode 100644
index 0000000..daeb9e2
--- /dev/null
+++ b/src/parsec/include/part_ani.h
@@ -0,0 +1,22 @@
+/*
+ * PARSEC HEADER: part_ani.h
+ */
+
+#ifndef _PART_ANI_H_
+#define _PART_ANI_H_
+
+
+// external functions
+
+void LinearParticleCollision( linear_pcluster_s *cluster, int pid );
+void CalcSphereParticlePosition( Vertex3& position, geomv_t radius, int spheretype );
+void CalcSphereParticleRotation( Vertex3& position, bams_t pitch, bams_t yaw, bams_t roll );
+int CalcSphereContraction( Vertex3& position, geomv_t speed );
+
+void PAN_InitParticleSizes( float resoscale );
+void PAN_AnimateParticles();
+
+
+#endif // _PART_ANI_H_
+
+
diff --git a/src/parsec/include/part_api.h b/src/parsec/include/part_api.h
new file mode 100644
index 0000000..8a6e978
--- /dev/null
+++ b/src/parsec/include/part_api.h
@@ -0,0 +1,435 @@
+/*
+ * PARSEC HEADER: part_api.h
+ */
+
+#ifndef _PART_API_H_
+#define _PART_API_H_
+
+
+// particle system API functions
+// -----------------------------
+// PRT_InitParticleSizes()
+// PRT_InitParticle()
+// PRT_InitClusterParticle()
+// PRT_NewCluster()
+// PRT_DeleteCluster()
+// PRT_DeleteCluster_NoListRemoval()
+// PRT_RemoveClusterFromAttachedList()
+// PRT_ObjectHasAttachedClusters()
+// PRT_ObjectHasAttachedClustersOfType()
+// PRT_DeleteAttachedClustersOfType()
+// PRT_AttachClusterToObject()
+// PRT_FreeAttachedClusterList()
+// PRT_AllocParticleDefinition()
+// PRT_RegisterParticleDefinition()
+// PRT_RegisterLoopTexParticle()
+// PRT_RegisterOneShotTexParticle()
+// PRT_AcquireParticleDefinition()
+// PRT_AcquireParticleDefinitionById()
+// PRT_InitParticleExtInfo()
+// PRT_CreateLinearParticle()
+// PRT_CreateCustomDrawParticle()
+// PRT_TranslateCustomParticles()
+// PRT_DrawCustomParticles()
+// PRT_CreateGenObjectParticleCluster()
+// PRT_CreateGenObjectParticle()
+// PRT_AddGenObjectParticle()
+// PRT_CreateObjectCenteredSphere()
+// PRT_CreateParticleSphereObject()
+
+
+// ensure particle type info is available
+#include "parttype.h"
+
+
+// init reference z values for particles according to resolution --------------
+//
+void
+
+PRT_InitParticleSizes (
+
+ float resoscale
+);
+
+
+// set members of particle structure ------------------------------------------
+//
+inline void
+
+PRT_InitParticle (
+
+ particle_s& particle, // particle to initialize
+ int bitmap, // bitmap id for particle
+ int color, // color for particle
+ int sizebound, // lod threshold
+ float refz, // reference distance
+ Vertex3* position, // position
+ Vector3* velocity, // velocity vector
+ int lifetime, // particle lifetime
+ int owner, // owner id (remote player id)
+ pextinfo_s* extinfo // extended drawing info
+)
+
+{
+ ASSERT( position != NULL );
+
+ particle.owner = owner;
+ particle.flags = PARTICLE_ACTIVE;
+ particle.lifetime = lifetime;
+ particle.extinfo = extinfo;
+ particle.bitmap = bitmap;
+ particle.color = color;
+ particle.sizebound = sizebound;
+ particle.ref_z = refz;
+ particle.position = *position;
+
+ if ( velocity ) {
+ particle.velocity = *velocity;
+ } else {
+ particle.velocity.X = particle.velocity.Y = particle.velocity.Z = 0;
+ }
+}
+
+
+// set members of particle structure and write into preexisting cluster -------
+//
+inline void
+
+PRT_InitClusterParticle (
+
+ pcluster_s* cluster, // cluster into which particle should be inserted
+ int pid, // id of particle to overwrite
+ int bitmap, // bitmap id for particle
+ int color, // color for particle
+ int sizebound, // lod threshold
+ float refz, // reference distance
+ Vertex3* position, // position
+ Vector3* velocity, // velocity vector
+ int lifetime, // particle lifetime
+ int owner, // owner id (remote player id)
+ pextinfo_s* extinfo // extended drawing info
+)
+
+{
+ ASSERT( pid < cluster->maxnumel );
+
+ //NOTE:
+ // the specified cluster member (particle)
+ // simply gets overwritten!!
+
+ PRT_InitParticle(
+ cluster->rep[ pid ],
+ bitmap,
+ color,
+ sizebound,
+ refz,
+ position,
+ velocity,
+ lifetime,
+ owner,
+ extinfo );
+
+ // increase number of elements
+ cluster->numel++;
+ Particles->numel++;
+}
+
+
+// allocate new particle cluster and insert into list -------------------------
+//
+pcluster_s *
+
+PRT_NewCluster (
+
+ dword type, // cluster type (CT_xx)
+ int numelements, // number of cluster elements (particles)
+ size_t auxstorage // size of user-defined storage in bytes
+);
+
+
+// delete entire particle cluster ---------------------------------------------
+//
+void
+
+PRT_DeleteCluster (
+
+ pcluster_s* cluster // cluster to delete
+);
+
+
+// delete entire particle cluster (don't check any attachment lists) ----------
+//
+void
+
+PRT_DeleteCluster_NoListRemoval (
+
+ pcluster_s* cluster // cluster to delete
+);
+
+
+// remove cluster from attachment list if contained ---------------------------
+//
+void
+
+PRT_RemoveClusterFromAttachedList (
+
+ objectbase_pcluster_s* cluster
+);
+
+
+// check if genobject has attached particle clusters --------------------------
+//
+int
+
+PRT_ObjectHasAttachedClusters (
+
+ GenObject* genobjpo
+);
+
+
+// check if genobject has attached particle clusters of a certain type --------
+//
+objectbase_pcluster_s *
+
+PRT_ObjectHasAttachedClustersOfType (
+
+ GenObject* genobjpo,
+ int animtype
+);
+
+
+// delete all clusters of certain type attached to a genobject ----------------
+//
+int
+
+PRT_DeleteAttachedClustersOfType (
+
+ const GenObject * genobjpo,
+ int animtype
+);
+
+
+// attach cluster to genobject (insert at head of attachment list) ------------
+//
+void
+
+PRT_AttachClusterToObject (
+
+ GenObject* genobjpo,
+ objectbase_pcluster_s* cluster
+);
+
+
+// free cluster list attached to genobject ------------------------------------
+//
+void
+
+PRT_FreeAttachedClusterList (
+
+ GenObject* genobjpo
+);
+
+
+// allocate particle definition (fields have to be set afterwards!) -----------
+//
+pdef_s *
+
+PRT_AllocParticleDefinition (
+
+ int numtexframes, // number of texture animation frames
+ int numxfoframes // number of texture transformation frames
+);
+
+
+// register particle definition (create struct and associate name with it) ----
+//
+pdef_s *
+
+PRT_RegisterParticleDefinition (
+
+ const char* pdefname, // unique name for particle definition
+ pdefreg_s* pdefreg, // definition info
+ int overwrite // overwrite old pdef if name already exists
+
+);
+
+
+// register particle definition with looping texture-only animation -----------
+//
+pdef_s *
+
+PRT_RegisterLoopTexParticle (
+
+ const char* pdefname, // unique name for particle definition
+ int numframes, // number of animation frames
+ const char**nametable, // pointer to table of texture names
+ int equidelta, // deltatime that is the same for all frames
+ int overwrite // overwrite old pdef if name already exists
+);
+
+
+// register particle definition with one-shot texture-only animation ----------
+//
+pdef_s *
+
+PRT_RegisterOneShotTexParticle (
+
+ const char* pdefname, // unique name for particle definition
+ int numframes, // number of animation frames
+ const char**nametable, // pointer to table of texture names
+ int equidelta, // deltatime that is the same for all frames
+ int overwrite // overwrite old pdef if name already exists
+
+);
+
+
+// acquire already registered particle definition via its unique name ---------
+//
+pdef_s *
+
+PRT_AcquireParticleDefinition (
+
+ const char* pdefname, // unique name for particle definition
+ int* retpdefid // id of returned particle definition
+);
+
+
+// acquire already registered particle definition via its id ------------------
+//
+pdef_s *
+
+PRT_AcquireParticleDefinitionById (
+
+ int pdefid // id of particle definition
+);
+
+
+// init extended particle info using particle definitions ---------------------
+//
+void
+
+PRT_InitParticleExtInfo (
+
+ pextinfo_s* extinfo, // pextinfo_s to initialize
+ pdef_s* partdef, // base particle definition (obligatory)
+ pdef_s* partdef_dest, // destruction particle definition (optional)
+ particle_s* particle // particle_s::extinfo will be set (optional)
+);
+
+
+// create new particle with linear animation (insert into next free slot) -----
+//
+particle_s *
+
+PRT_CreateLinearParticle (
+
+ particle_s& particle // already initialized particle
+);
+
+
+// create new particle with customdraw property -------------------------------
+//
+particle_s *
+
+PRT_CreateCustomDrawParticle (
+
+ particle_s& particle, // already initialized particle
+ const GenObject* baseobject // object customdraw particles belong to
+);
+
+
+// translate customdraw particles belonging to specified object ---------------
+//
+int
+
+PRT_TranslateCustomParticles (
+
+ Vector3& tvector, // translation vector that should be applied
+ const GenObject* baseobject // object customdraw particles belong to
+);
+
+
+// draw customdraw particles belonging to specified object --------------------
+//
+int
+
+PRT_DrawCustomParticles (
+
+ const GenObject* baseobject // object whose customdraw particles to draw
+);
+
+
+// create an empty genobject particle cluster ---------------------------------
+//
+genobject_pcluster_s *
+
+PRT_CreateGenObjectParticleCluster (
+
+ GenObject* baseobject, // object particle should be attached to
+ int numelements, // number of particles to allocate
+ genobject_pcluster_fpt callback, // callback for cluster animation
+ int use_bdsphere // indicate whether the bounding-sphere of the parent should be used
+);
+
+
+// create a genobject geometry particle and attach it to specified object -----
+//
+genobject_pcluster_s *
+
+PRT_CreateGenObjectParticle (
+
+ particle_s& particle, // already initialized particle
+ GenObject* baseobject, // object particle should be attached to
+ genobject_pcluster_s* trycluster // try this cluster before scanning
+);
+
+
+// create a genobject geometry particle and attach it to specified object -----
+//
+genobject_pcluster_s *
+
+PRT_AddGenObjectParticle (
+
+ particle_s& particle, // already initialized particle
+ GenObject* baseobject, // object particle should be attached to
+ genobject_pcluster_s* usecluster, // try this cluster before scanning
+ int numelements, // number of particles to allocate
+ genobject_pcluster_fpt callback // callback for cluster animation
+);
+
+
+// create a particle sphere centered around specific object origin ------------
+//
+basesphere_pcluster_s *
+
+PRT_CreateObjectCenteredSphere (
+
+ GenObject* objectpo, // object this sphere should be attached to
+ geomv_t radius, // radius of sphere (also used for bounding)
+ int animtype, // animation type (SAT_xx)
+ int clustersiz, // cluster size (number of particles in sphere)
+ int lifetime, // lifetime of sphere (each sphere particle)
+ pdrwinfo_s* pdinfo, // particle appearance (drawing) info
+ int owner // owner id (remote player id)
+);
+
+
+// create particle object comprising a sphere ---------------------------------
+//
+sphereobj_pcluster_s *
+
+PRT_CreateParticleSphereObject (
+
+ Vertex3& origin, // origin of particle object
+ geomv_t radius, // radius of sphere (also used for bounding)
+ int animtype, // animation type (SAT_xx)
+ int clustersiz, // cluster size (number of particles in sphere)
+ int lifetime, // lifetime of sphere (each sphere particle)
+ pdrwinfo_s* pdinfo, // particle appearance (drawing) info
+ int owner // owner id (remote player id)
+);
+
+
+#endif // _PART_API_H_
+
+
diff --git a/src/parsec/include/part_def.h b/src/parsec/include/part_def.h
new file mode 100644
index 0000000..4024ff3
--- /dev/null
+++ b/src/parsec/include/part_def.h
@@ -0,0 +1,29 @@
+/*
+ * PARSEC HEADER: part_def.h
+ */
+
+#ifndef _PART_DEF_H_
+#define _PART_DEF_H_
+
+
+// external functions
+
+pdef_s* PDEF_plight01();
+pdef_s* PDEF_psmoke01();
+pdef_s* PDEF_psmoke02();
+pdef_s* PDEF_pflare01();
+pdef_s* PDEF_pflare02();
+pdef_s* PDEF_pflare03();
+pdef_s* PDEF_pflare04();
+pdef_s* PDEF_pflare05();
+pdef_s* PDEF_pflare06();
+pdef_s* PDEF_stargate();
+pdef_s* PDEF_explode1();
+pdef_s* PDEF_expwave1();
+pdef_s* PDEF_misglow1();
+pdef_s* PDEF_extragen();
+
+
+#endif // _PART_DEF_H_
+
+
diff --git a/src/parsec/include/part_sys.h b/src/parsec/include/part_sys.h
new file mode 100644
index 0000000..6273b6c
--- /dev/null
+++ b/src/parsec/include/part_sys.h
@@ -0,0 +1,25 @@
+/*
+ * PARSEC HEADER: part_sys.h
+ */
+
+#ifndef _PART_SYS_H_
+#define _PART_SYS_H_
+
+
+// external functions
+
+void InitParticleSystem();
+void InitParticleSizes();
+void KillParticleSystem();
+void FreeParticles();
+
+int PRT_ParticleInBoundingSphere( ShipObject *shippo, Vertex3& point );
+
+int DrawCustomParticles( const GenObject *baseobject );
+
+void PRTSYS_DrawParticles();
+
+
+#endif // _PART_SYS_H_
+
+
diff --git a/src/parsec/include/r_gl.h b/src/parsec/include/r_gl.h
new file mode 100644
index 0000000..9fd36b5
--- /dev/null
+++ b/src/parsec/include/r_gl.h
@@ -0,0 +1,93 @@
+/*
+ * PARSEC HEADER: r_gl.h
+ */
+
+#ifndef _R_GL_H_
+#define _R_GL_H_
+
+
+// include OpenGL headers -----------------------------------------------------
+
+#include <glew/glew.h>
+
+
+
+// define basic vertex types --------------------------------------------------
+
+struct GLVertex2 {
+
+ GLfloat x; // viewspace x
+ GLfloat y; // viewspace y
+
+ GLfloat s; // texture s
+ GLfloat t; // texture t
+
+ GLubyte r; // red component
+ GLubyte g; // green component
+ GLubyte b; // blue component
+ GLubyte a; // alpha component
+};
+
+struct GLVertex3 {
+
+ GLfloat x; // viewspace x
+ GLfloat y; // viewspace y
+ GLfloat z; // viewspace z
+
+ GLubyte r; // red component
+ GLubyte g; // green component
+ GLubyte b; // blue component
+ GLubyte a; // alpha component
+
+ GLfloat s; // texture s
+ GLfloat t; // texture t
+ GLfloat p; // volume coordinate (r)
+ GLfloat q; // homogeneous component (w)
+};
+
+struct GLVertex3m {
+
+ GLfloat x; // viewspace x
+ GLfloat y; // viewspace y
+ GLfloat z; // viewspace z
+
+ GLubyte r; // red component
+ GLubyte g; // green component
+ GLubyte b; // blue component
+ GLubyte a; // alpha component
+
+ GLfloat s0; // texture s0
+ GLfloat t0; // texture t0
+ GLfloat s1; // texture s1
+ GLfloat t1; // texture t1
+};
+
+struct GLVertex4 {
+
+ GLfloat x; // viewspace x
+ GLfloat y; // viewspace y
+ GLfloat z; // viewspace z
+ GLfloat w; // viewspace w
+
+ GLfloat s; // texture s
+ GLfloat t; // texture t
+ GLfloat p; // volume coordinate (r)
+ GLfloat q; // homogeneous component (w)
+};
+
+struct GLVertex4m {
+
+ GLfloat x; // viewspace x
+ GLfloat y; // viewspace y
+ GLfloat z; // viewspace z
+ GLfloat w; // viewspace w
+
+ GLfloat s0; // texture s0
+ GLfloat t0; // texture t0
+ GLfloat s1; // texture s1
+ GLfloat t1; // texture t1
+};
+
+
+#endif // _R_GL_H_
+
diff --git a/src/parsec/include/r_glob.h b/src/parsec/include/r_glob.h
new file mode 100644
index 0000000..052ca87
--- /dev/null
+++ b/src/parsec/include/r_glob.h
@@ -0,0 +1,71 @@
+/*
+ * PARSEC HEADER: r_glob.h
+ */
+
+#ifndef _R_GLOB_H_
+#define _R_GLOB_H_
+
+
+// ----------------------------------------------------------------------------
+// RENDERING SUBSYSTEM (R) related global declarations and definitions -
+// ----------------------------------------------------------------------------
+
+
+// rasterization performance statistics
+
+struct rastperfstats_s {
+
+ dword fieldstate;
+
+ dword fragments;
+ dword pixels;
+ dword faildepth;
+ dword failalpha;
+ dword failchroma;
+};
+
+#define RASTPERF_NONE 0x0000
+#define RASTPERF_FRAGMENTS 0x0001
+#define RASTPERF_PIXELS 0x0002
+#define RASTPERF_FAILDEPTH 0x0004
+#define RASTPERF_FAILALPHA 0x0008
+#define RASTPERF_FAILCHROMA 0x0010
+
+
+// geometry performance statistics
+
+struct geomperfstats_s {
+
+ dword fieldstate;
+
+ dword vertices_in;
+ dword vertices_out;
+ dword polygons_in;
+ dword polygons_out;
+ dword triangles_in;
+ dword triangles_out;
+ dword edges;
+ dword spans_in;
+ dword spans_out;
+};
+
+#define GEOMPERF_NONE 0x0000
+#define GEOMPERF_VERTICES_IN 0x0001
+#define GEOMPERF_VERTICES_OUT 0x0002
+#define GEOMPERF_POLYGONS_IN 0x0004
+#define GEOMPERF_POLYGONS_OUT 0x0008
+#define GEOMPERF_TRIANGLES_IN 0x0010
+#define GEOMPERF_TRIANGLES_OUT 0x0020
+#define GEOMPERF_EDGES 0x0040
+#define GEOMPERF_SPANS_IN 0x0080
+#define GEOMPERF_SPANS_OUT 0x0100
+
+
+// make definition of pcluster pointers possible
+
+struct pcluster_s;
+
+
+#endif // _R_GLOB_H_
+
+
diff --git a/src/parsec/include/r_obj.h b/src/parsec/include/r_obj.h
new file mode 100644
index 0000000..1f5d41b
--- /dev/null
+++ b/src/parsec/include/r_obj.h
@@ -0,0 +1,21 @@
+/*
+ * PARSEC HEADER: r_obj.h
+ */
+
+#ifndef _R_OBJ_H_
+#define _R_OBJ_H_
+
+
+// ----------------------------------------------------------------------------
+// RENDERING SUBSYSTEM (R) OBJ group -
+// ----------------------------------------------------------------------------
+
+void R_RenderObject( GenObject *objectp );
+void R_ReCalcAndRenderObject( GenObject *objectp, const Camera camera );
+void R_DrawWorld( const Camera camera );
+void R_DirectObjectRendering( int flags );
+
+
+#endif // _R_OBJ_H_
+
+
diff --git a/src/parsec/include/r_part.h b/src/parsec/include/r_part.h
new file mode 100644
index 0000000..bd74b0d
--- /dev/null
+++ b/src/parsec/include/r_part.h
@@ -0,0 +1,20 @@
+/*
+ * PARSEC HEADER: r_part.h
+ */
+
+#ifndef _R_PART_H_
+#define _R_PART_H_
+
+
+// ----------------------------------------------------------------------------
+// RENDERING SUBSYSTEM (R) PART group -
+// ----------------------------------------------------------------------------
+
+
+int R_DrawParticleCluster( pcluster_s *cluster, int *numactive );
+void R_DrawParticles();
+
+
+#endif // _R_PART_H_
+
+
diff --git a/src/parsec/include/r_patch.h b/src/parsec/include/r_patch.h
new file mode 100644
index 0000000..d8f4091
--- /dev/null
+++ b/src/parsec/include/r_patch.h
@@ -0,0 +1,20 @@
+/*
+ * PARSEC HEADER: r_patch.h
+ */
+
+#ifndef _R_PATCH_H_
+#define _R_PATCH_H_
+
+
+// ----------------------------------------------------------------------------
+// RENDERING SUBSYSTEM (R) patching function -
+// ----------------------------------------------------------------------------
+
+
+void R_PatchSubSystem( );
+void R_InvalidateCachedTexture( TextureMap *tmap );
+
+
+#endif // _R_PATCH_H_
+
+
diff --git a/src/parsec/include/r_perf.h b/src/parsec/include/r_perf.h
new file mode 100644
index 0000000..1aaf09e
--- /dev/null
+++ b/src/parsec/include/r_perf.h
@@ -0,0 +1,22 @@
+/*
+ * PARSEC HEADER: r_perf.h
+ */
+
+#ifndef _R_PERF_H_
+#define _R_PERF_H_
+
+
+// ----------------------------------------------------------------------------
+// RENDERING SUBSYSTEM (R) PERF group -
+// ----------------------------------------------------------------------------
+
+
+void R_ResetGeometryPerfStats();
+void R_QueryGeometryPerfStats( geomperfstats_s *perfstats );
+void R_ResetRasterizationPerfStats();
+void R_QueryRasterizationPerfStats( rastperfstats_s *perfstats );
+
+
+#endif // _R_PERF_H_
+
+
diff --git a/src/parsec/include/r_sfx.h b/src/parsec/include/r_sfx.h
new file mode 100644
index 0000000..3d73356
--- /dev/null
+++ b/src/parsec/include/r_sfx.h
@@ -0,0 +1,21 @@
+/*
+ * PARSEC HEADER: r_sfx.h
+ */
+
+#ifndef _R_SFX_H_
+#define _R_SFX_H_
+
+
+// ----------------------------------------------------------------------------
+// RENDERING SUBSYSTEM (R) SFX group -
+// ----------------------------------------------------------------------------
+
+
+void R_DrawLensFlare();
+void R_DrawPanorama();
+void R_DrawPlanet( PlanetObject *planet );
+
+
+#endif // _R_SFX_H_
+
+
diff --git a/src/parsec/include/r_supp.h b/src/parsec/include/r_supp.h
new file mode 100644
index 0000000..10df562
--- /dev/null
+++ b/src/parsec/include/r_supp.h
@@ -0,0 +1,19 @@
+/*
+ * PARSEC HEADER: r_supp.h
+ */
+
+#ifndef _R_SUPP_H_
+#define _R_SUPP_H_
+
+
+// ----------------------------------------------------------------------------
+// RENDERING SUBSYSTEM (R) SUPP group -
+// ----------------------------------------------------------------------------
+
+
+int R_PrecacheTextures();
+
+
+#endif // _R_SUPP_H_
+
+
diff --git a/src/parsec/include/ro_api.h b/src/parsec/include/ro_api.h
new file mode 100644
index 0000000..b860840
--- /dev/null
+++ b/src/parsec/include/ro_api.h
@@ -0,0 +1,84 @@
+/*
+ * PARSEC HEADER: ro_api.h
+ */
+
+#ifndef _RO_API_H_
+#define _RO_API_H_
+
+// default state not necessary
+#define NO_DEFAULT_RASTERIZER_STATE
+
+
+// need opengl headers
+#include "r_gl.h"
+
+
+// client state bits
+enum {
+
+ VTXARRAY_NONE = 0x0000,
+ VTXARRAY_COLORS = 0x0001,
+ VTXARRAY_EDGEFLAGS = 0x0002,
+ VTXARRAY_NORMALS = 0x0004,
+ VTXARRAY_TEXCOORDS = 0x0008,
+ VTXARRAY_VERTICES = 0x0010
+};
+
+
+// vertex pointers config
+enum {
+
+ VTXPTRS_NONE,
+ VTXPTRS_DO_ITER_1,
+ VTXPTRS_DO_ITER_2,
+ VTXPTRS_DO_ITER_3,
+ VTXPTRS_DO_ITER_4,
+ VTXPTRS_DO_FONT_1,
+ VTXPTRS_DO_FONT_2,
+ VTXPTRS_RO_PART_1,
+ VTXPTRS_RO_POLY_1,
+ VTXPTRS_RO_POLY_2,
+ VTXPTRS_RO_POLY_3
+};
+
+
+// external functions
+
+void RO_InitializeState();
+
+void RO_SetCapability(GLenum cap, bool enable);
+
+int RO_DepthCmpEnabled();
+int RO_DepthWriteEnabled();
+
+void RO_EnableDepthTest( int enable );
+void RO_DepthFunc( GLenum func );
+void RO_DepthMask( GLboolean flag );
+void RO_BlendFunc( GLenum sfactor, GLenum dfactor );
+void RO_AlphaFunc( GLenum func, GLclampf ref );
+void RO_AlphaTest( int enable );
+void RO_PointSmooth( int enable );
+void RO_LineSmooth( int enable );
+void RO_PointSize( GLfloat size );
+
+void RO_ClientState( dword statebits );
+int RO_ArrayMakeCurrent( int userid, void *base );
+
+void RO_InvalidateRasterizerState();
+void RO_InitRasterizerState( dword itertype, dword raststate, dword rastmask );
+void RO_TextureCombineState( dword texcomb );
+
+
+#define RO_AllowsExtendedTexenv() FALSE
+
+
+#ifdef NO_DEFAULT_RASTERIZER_STATE
+ #define RO_DefaultRasterizerState() {}
+#else
+ void RO_DefaultRasterizerState();
+#endif
+
+
+#endif // _RO_API_H_
+
+
diff --git a/src/parsec/include/ro_obj.h b/src/parsec/include/ro_obj.h
new file mode 100644
index 0000000..40bab9c
--- /dev/null
+++ b/src/parsec/include/ro_obj.h
@@ -0,0 +1,19 @@
+/*
+ * PARSEC HEADER: ro_obj.h
+ */
+
+#ifndef _RO_OBJ_H_
+#define _RO_OBJ_H_
+
+
+// ro_obj.c implements the following functions
+// -------------------------------------------
+// void R_RenderObject( GenObject *objectp );
+// void R_ReCalcAndRenderObject( GenObject *objectp, const Camera camera );
+// void R_DrawWorld( const Camera camera );
+// void R_DirectObjectRendering( int flags );
+
+
+#endif // _RO_OBJ_H_
+
+
diff --git a/src/parsec/include/ro_objmc.h b/src/parsec/include/ro_objmc.h
new file mode 100644
index 0000000..5636e83
--- /dev/null
+++ b/src/parsec/include/ro_objmc.h
@@ -0,0 +1,156 @@
+/*
+ * PARSEC HEADER: ro_objmc.h
+ */
+
+#ifndef _RO_OBJMC_H_
+#define _RO_OBJMC_H_
+
+
+// --------------------------------------------------
+// messy macros for low level object rendering
+// --------------------------------------------------
+
+
+// don't check everything in debug mode --
+#ifdef RELAXED_DEBUG_MODE
+
+#undef CHECKHEAPBASEREF
+#undef CHECKHEAPREF
+#undef CHECKMEMINTEGRITY
+
+#define CHECKHEAPBASEREF( r ) {}
+#define CHECKHEAPREF( r ) {}
+#define CHECKMEMINTEGRITY() {}
+
+#endif
+
+
+// ------------------------------------
+#ifdef DEBUG
+ #define CHECKOBJECTREF( r ) if((r)==MyShip) {} else CHECKHEAPBASEREF((r))
+#else
+ #define CHECKOBJECTREF( r ) {}
+#endif
+
+
+// ------------------------------------
+#ifndef UPDATE_SOUND
+ #define AUDs_MaintainSound() {}
+#endif
+
+
+// ------------------------------------
+#ifndef COUNT_RENDERED_POLYGONS
+ #define COUNTPOLYGONS(a) (a)
+#else
+ #define COUNTPOLYGONS(a) if ((a)) { NumRenderedPolygons++; } else { }
+#endif
+
+
+// ------------------------------------
+//#define BACKFACE_TOL_EPS 600000
+#define BACKFACE_TOL_EPS AUXDATA_BSP_BACKFACE_TOLERANCE_EPS
+
+
+// ------------------------------------
+#ifndef CULL_BACKFACES_IN_BSP
+
+ #define BSPBACKFACETEST(a) (a)
+
+#else
+
+ #ifndef CHECK_BACKFACE_EPS
+
+ #define BSPBACKFACETEST(a) \
+ if ( ( bsp_objectp->ObjectType & TYPEBACKFACEMASK ) != 0 ) \
+ { (a); } else { }
+
+ #else
+
+ #define BSPBACKFACETEST(a) \
+ if ( ( sprod > -BACKFACE_TOL_EPS ) || \
+ ( ( bsp_objectp->ObjectType & TYPEBACKFACEMASK ) != 0 ) ) \
+ { (a); } else { }
+
+ #endif
+
+#endif
+
+
+// ------------------------------------
+#ifndef TWO_SIDES_POSSIBLE
+
+ #define BACKFACINGBSPNODE(n,p,v,f) {}
+
+#else
+
+ #define BACKFACINGBSPNODE(n,p,v,f) BSPBACKFACETEST( \
+ RO_DrawBSPNode( (n), (p), (v), (f) ) )
+
+#endif
+
+
+// ------------------------------------
+#define CALCTEXTUREGRADIENTS(o,f) { \
+ MtxMtxMUL( (o)->CurrentXmatrx, (f)->TexXmatrx, DestXmatrx ); \
+ AdjointMtx( DestXmatrx, (f)->CurTexXmatrx ); }
+
+/*
+ if ( ( (f)->Shading == persptex_shad ) || \
+ ( (f)->Shading == ipol1tex_shad ) ) { \
+ MtxMtxMUL( (o)->CurrentXmatrx, (f)->TexXmatrx, DestXmatrx ); \
+ AdjointMtx( DestXmatrx, (f)->CurTexXmatrx ); \
+ }
+*/
+
+
+// ------------------------------------
+//#define BSP_ERROR_EPS 80000
+#define BSP_ERROR_EPS AUXDATA_BSP_ERROR_EPS
+
+
+// ------------------------------------
+#ifdef ENABLE_BSP_ERROR_TRACING
+
+#define CHECKBSPPLANE(s,n,p,v,f) \
+ \
+ (s) > -BSP_ERROR_EPS && (s) < BSP_ERROR_EPS ) { \
+ \
+ if ( AUX_BSP_DO_EXTENDED_SPROD_CHECK ) { \
+ AUXDATA_BSP_SCALARPRODUCT_VALUE = abs( (s) ); \
+ \
+ if ( !AUX_BSP_EXTCHECK_SKIPSUBTREE ) { \
+ if ( AUX_BSP_EXTCHECK_DRAW_NODE ) \
+ RO_DrawBSPNode( (n), (p), (v), (f) ); \
+ \
+ if ( AUX_BSP_EXTCHECK_BACKNODE_FIRST ) { \
+ if ( bsp_objectp->BSPTree[ bspnode ].BackTree > 0 ) \
+ RO_TraverseBSPTree( bsp_objectp->BSPTree[ bspnode ].BackTree ); \
+ if ( bsp_objectp->BSPTree[ bspnode ].FrontTree > 0 ) \
+ RO_TraverseBSPTree( bsp_objectp->BSPTree[ bspnode ].FrontTree ); \
+ } else { \
+ if ( bsp_objectp->BSPTree[ bspnode ].FrontTree > 0 ) \
+ RO_TraverseBSPTree( bsp_objectp->BSPTree[ bspnode ].FrontTree ); \
+ if ( bsp_objectp->BSPTree[ bspnode ].BackTree > 0 ) \
+ RO_TraverseBSPTree( bsp_objectp->BSPTree[ bspnode ].BackTree ); \
+ } \
+ } \
+ \
+ } else { \
+ AUXDATA_BSP_SCALARPRODUCT_VALUE = abs( (s) ); \
+ if ( (s) > 0 ) (s) = BSP_ERROR_EPS; else (s) = -BSP_ERROR_EPS; \
+ goto testplane; \
+ } \
+ \
+ } else if ( (s) > 0
+
+#else
+
+#define CHECKBSPPLANE(s,n,p,v,f) ( (s) > 0 )
+
+#endif
+
+
+#endif // _RO_OBJMC_H_
+
+
diff --git a/src/parsec/include/ro_part.h b/src/parsec/include/ro_part.h
new file mode 100644
index 0000000..bf70f6f
--- /dev/null
+++ b/src/parsec/include/ro_part.h
@@ -0,0 +1,17 @@
+/*
+ * PARSEC HEADER: ro_part.h
+ */
+
+#ifndef _RO_PART_H_
+#define _RO_PART_H_
+
+
+// ro_part.c implements the following functions
+// --------------------------------------------
+// int R_DrawParticleCluster( pcluster_s *cluster, int *numactive );
+// void R_DrawParticles();
+
+
+#endif // _RO_PART_H_
+
+
diff --git a/src/parsec/include/ro_patch.h b/src/parsec/include/ro_patch.h
new file mode 100644
index 0000000..e4642f8
--- /dev/null
+++ b/src/parsec/include/ro_patch.h
@@ -0,0 +1,17 @@
+/*
+ * PARSEC HEADER: ro_patch.h
+ */
+
+#ifndef _RO_PATCH_H_
+#define _RO_PATCH_H_
+
+
+// ro_patch.c implements the following functions
+// ---------------------------------------------
+// void R_PatchSubSystem( );
+// void R_InvalidateCachedTexture( TextureMap *tmap );
+
+
+#endif // _RO_PATCH_H_
+
+
diff --git a/src/parsec/include/ro_perf.h b/src/parsec/include/ro_perf.h
new file mode 100644
index 0000000..0c93c0b
--- /dev/null
+++ b/src/parsec/include/ro_perf.h
@@ -0,0 +1,19 @@
+/*
+ * PARSEC HEADER: ro_perf.h
+ */
+
+#ifndef _RO_PERF_H_
+#define _RO_PERF_H_
+
+
+// ro_perf.c implements the following functions
+// --------------------------------------------
+// void R_ResetGeometryPerfStats();
+// void R_QueryGeometryPerfStats( geomperfstats_s *perfstats );
+// void R_ResetRasterizationPerfStats();
+// void R_QueryRasterizationPerfStats( rastperfstats_s *perfstats );
+
+
+#endif
+
+
diff --git a/src/parsec/include/ro_poly.h b/src/parsec/include/ro_poly.h
new file mode 100644
index 0000000..34b35fe
--- /dev/null
+++ b/src/parsec/include/ro_poly.h
@@ -0,0 +1,18 @@
+/*
+ * PARSEC HEADER: ro_poly.h
+ */
+
+#ifndef _RO_POLY_H_
+#define _RO_POLY_H_
+
+
+// external functions
+
+void RO_SolidFillPoly( SVertexExList *svertexlist, Face *face, int colorsvalid );
+void RO_TexMapPoly( SVertexExList *svertexlist, Face *face, int colorsvalid );
+int RO_RenderPolygon( GenObject *baseobj, dword polyid );
+
+
+#endif // _RO_POLY_H_
+
+
diff --git a/src/parsec/include/ro_sfx.h b/src/parsec/include/ro_sfx.h
new file mode 100644
index 0000000..5bf8473
--- /dev/null
+++ b/src/parsec/include/ro_sfx.h
@@ -0,0 +1,18 @@
+/*
+ * PARSEC HEADER: ro_sfx.h
+ */
+
+#ifndef _RO_SFX_H_
+#define _RO_SFX_H_
+
+
+// ro_sfx.c implements the following functions
+// -------------------------------------------
+// void R_DrawLensFlare();
+// void R_DrawPanorama();
+// void R_DrawPlanet( PlanetObject *planet );
+
+
+#endif // _RO_SFX_H_
+
+
diff --git a/src/parsec/include/ro_supp.h b/src/parsec/include/ro_supp.h
new file mode 100644
index 0000000..351640b
--- /dev/null
+++ b/src/parsec/include/ro_supp.h
@@ -0,0 +1,62 @@
+/*
+ * PARSEC HEADER: ro_supp.h
+ */
+
+#ifndef _RO_SUPP_H_
+#define _RO_SUPP_H_
+
+
+// ro_supp.c implements the following functions
+// -------------------------------------------
+// int R_PrecacheTextures( GenObject *objectp );
+
+
+// conversion factor from source (internal) depth to destination (opengl) depth
+
+#ifdef FRACTIONAL_DEPTH_VALUES
+ #define OPENGL_DEPTH_RANGE 1.0f // [ 0, 1 ] -> [ 0, 1 ]
+#else
+ #define OPENGL_DEPTH_RANGE (1/65535.0f) // [ 0, 65535 ] -> [ 0, 1 ]
+#endif
+
+
+// need opengl headers
+#include "r_gl.h"
+
+
+// structures
+
+struct GLTexInfo {
+
+ TextureMap* texmap;
+ void* data;
+ int width;
+ int height;
+ dword format;
+ float coscale;
+ float aratio;
+ word lodsmall;
+ word lodlarge;
+};
+
+
+// external functions
+
+void RO_EnableDepthBuffer( bool checking, bool writing );
+void RO_DisableDepthBuffer( bool checking, bool writing );
+void RO_RestoreDepthState( int zcmpstate, int zwritestate );
+void RO_InvalidateTextureMem();
+void RO_InvalidateCachedTexture( TextureMap *tmap );
+void RO_SelectTexelSource( GLTexInfo *texinfo );
+void RO_SelectTexelSource2( GLTexInfo *p2info );
+void RO_IterVertex2GLVertex( GLVertex3 *glvtxs, IterVertex2 *itervtxs, int num, GLTexInfo *texinfo );
+void RO_IterVertex3GLVertex( GLVertex3 *glvtxs, IterVertex3 *itervtxs, int num, GLTexInfo *texinfo );
+void RO_IterVertex2GLVertexRef( GLVertex3 *glvtxs, IterVertex2 **itervtxs, int num, GLTexInfo *texinfo );
+void RO_IterVertex3GLVertexRef( GLVertex3 *glvtxs, IterVertex3 **itervtxs, int num, GLTexInfo *texinfo );
+void RO_TextureMap2GLTexInfo( GLTexInfo *texinfo, TextureMap *texmap );
+void RO_Render2DRectangle( sgrid_t putx, sgrid_t puty, float srcw, float srch, dword dstw, dword dsth, dword zvalue, colrgba_s *color );
+
+
+#endif // _RO_SUPP_H_
+
+
diff --git a/src/parsec/include/sl_err.h b/src/parsec/include/sl_err.h
new file mode 100644
index 0000000..d142051
--- /dev/null
+++ b/src/parsec/include/sl_err.h
@@ -0,0 +1,21 @@
+/*
+ * PARSEC HEADER: sl_err.h
+ */
+
+#ifndef _SL_ERR_H_
+#define _SL_ERR_H_
+
+
+// sl_err.c implements the following functions
+// -------------------------------------------
+// void SYSs_InitErrorHandling();
+// void SYSs_PanicFunction( char *msg, char *file, unsigned line );
+// void SYSs_OutOfMemFunction( char *msg, char *file, unsigned line );
+// void SYSs_PError( char *message, ... );
+// void SYSs_SError( char *message );
+// void SYSs_FError( char *message, char *filename );
+
+
+#endif
+
+
diff --git a/src/parsec/include/sl_main.h b/src/parsec/include/sl_main.h
new file mode 100644
index 0000000..5d4e917
--- /dev/null
+++ b/src/parsec/include/sl_main.h
@@ -0,0 +1,18 @@
+/*
+ * PARSEC HEADER: sl_main.h
+ */
+
+#ifndef _SL_MAIN_H_
+#define _SL_MAIN_H_
+
+
+// sl_main.c implements the following functions
+// --------------------------------------------
+// void SYSs_CheckMemory();
+// void SL_CleanUp();
+// int main( int argc, char **argv );
+
+
+#endif
+
+
diff --git a/src/parsec/include/sl_msg.h b/src/parsec/include/sl_msg.h
new file mode 100644
index 0000000..c48872f
--- /dev/null
+++ b/src/parsec/include/sl_msg.h
@@ -0,0 +1,18 @@
+/*
+ * PARSEC HEADER: sl_msg.h
+ */
+
+#ifndef _SL_MSG_H_
+#define _SL_MSG_H_
+
+
+// sl_msg.c implements the following functions
+// -------------------------------------------
+// int SYSs_MsgOut( const char *format, ... );
+// int SYSs_MsgPut( const char *format, ... );
+// void SYSs_MsgPrompt();
+
+
+#endif // _SL_MSG_H_
+
+
diff --git a/src/parsec/include/sl_opt.h b/src/parsec/include/sl_opt.h
new file mode 100644
index 0000000..1b6d4a1
--- /dev/null
+++ b/src/parsec/include/sl_opt.h
@@ -0,0 +1,16 @@
+/*
+ * PARSEC HEADER: sl_opt.h
+ */
+
+#ifndef _SL_OPT_H_
+#define _SL_OPT_H_
+
+
+// sl_opt.c implements the following functions
+// ---------------------------------------------
+// void SYSs_CheckCommandLine( int argc, char **argv );
+
+
+#endif
+
+
diff --git a/src/parsec/include/snd_api.h b/src/parsec/include/snd_api.h
new file mode 100644
index 0000000..b43d653
--- /dev/null
+++ b/src/parsec/include/snd_api.h
@@ -0,0 +1,49 @@
+/*
+ * PARSEC HEADER: snd_api.h
+ */
+
+#ifndef _SND_API_H_
+#define _SND_API_H_
+
+
+// recognized sample formats
+
+enum sample_formats {
+
+ SAMPLEFORMAT_INVALID,
+
+ SAMPLEFORMAT_WAV,
+ SAMPLEFORMAT_VOC,
+ SAMPLEFORMAT_AU,
+ SAMPLEFORMAT_SAM
+};
+
+
+// generic sample info
+
+struct sample_s {
+
+ int format;
+ dword totalfilelength;
+ dword headerlength;
+ word datatype;
+ word numchannels;
+ dword samplerate;
+ word alignment;
+ word samplesize;
+ dword samplebytes;
+ byte* samplebuffer;
+};
+
+
+// external functions
+
+sample_s * SND_ReadSample( sampleinfo_s *pSampleInfo );
+void SND_FreeSample( sample_s *pSample );
+void SND_ConvertToMono( sample_s *pSample );
+void SND_ConvertRate( sample_s *pSample, int samplerate );
+
+
+#endif // _SND_API_H_
+
+
diff --git a/src/parsec/include/snd_wav.h b/src/parsec/include/snd_wav.h
new file mode 100644
index 0000000..288f0a3
--- /dev/null
+++ b/src/parsec/include/snd_wav.h
@@ -0,0 +1,20 @@
+/*
+ * PARSEC HEADER: snd_wav.h
+ */
+
+#ifndef _SND_WAV_H_
+#define _SND_WAV_H_
+
+
+// external functions
+
+void WAV_ParseHeader( FILE *fp, sampleinfo_s *pSampleInfo, sample_s *pSample );
+void WAV_ReadSample( sampleinfo_s *pSampleInfo, sample_s *pSample );
+void WAV_FreeSample( sample_s *pSample );
+void WAV_ConvertToMono( sample_s *pSample );
+void WAV_ConvertRate( sample_s *pSample, int samplerate );
+
+
+#endif // _SND_WAV_H_
+
+
diff --git a/src/parsec/include/sys_bind.h b/src/parsec/include/sys_bind.h
new file mode 100644
index 0000000..bf987af
--- /dev/null
+++ b/src/parsec/include/sys_bind.h
@@ -0,0 +1,36 @@
+/*
+ * PARSEC HEADER: sys_bind.h
+ */
+
+#ifndef _SYS_BIND_H_
+#define _SYS_BIND_H_
+
+
+// PROTOCOL bindings
+
+enum {
+
+ BT_PROTOCOL_PEERTOPEER,
+ BT_PROTOCOL_GAMESERVER,
+ BT_PROTOCOL_DEMONULL,
+
+ BT_PROTOCOL_NUMTYPES
+};
+
+
+
+// external variables
+
+extern int sys_BindType_PROTOCOL;
+
+
+// external functions
+
+void SYS_Bind_PROTOCOL();
+
+void SYS_BindDynamicFunctions();
+
+
+#endif // _SYS_BIND_H_
+
+
diff --git a/src/parsec/include/sys_conv.h b/src/parsec/include/sys_conv.h
new file mode 100644
index 0000000..e7af7e7
--- /dev/null
+++ b/src/parsec/include/sys_conv.h
@@ -0,0 +1,16 @@
+/*
+ * PARSEC HEADER: sys_conv.h
+ */
+
+#ifndef _SYS_CONV_H_
+#define _SYS_CONV_H_
+
+
+// external functions
+
+int SYS_ConvertPackageMP3s( const char *packname, size_t baseofs );
+
+
+#endif // _SYS_CONV_H_
+
+
diff --git a/src/parsec/include/sys_err.h b/src/parsec/include/sys_err.h
new file mode 100644
index 0000000..957204e
--- /dev/null
+++ b/src/parsec/include/sys_err.h
@@ -0,0 +1,40 @@
+/*
+ * PARSEC HEADER: sys_err.h
+ */
+
+#ifndef _SYS_ERR_H_
+#define _SYS_ERR_H_
+
+
+#include "debug.h"
+
+
+// ----------------------------------------------------------------------------
+// SYSTEM SUBSYSTEM (SYS) ERROR HANDLING -
+// ----------------------------------------------------------------------------
+
+void SYSs_InitErrorHandling();
+
+void SYSs_CriticalCleanUp();
+
+FUNCTION_NORETURN(void SYSs_PanicFunction( const char *msg, const char *file, unsigned line ));
+FUNCTION_NORETURN(void SYSs_OutOfMemFunction( const char *msg, const char *file, unsigned line ));
+
+FUNCTION_NORETURN(void SYSs_PError( const char *msg, ... ));
+FUNCTION_NORETURN(void SYSs_SError( const char *msg ));
+FUNCTION_NORETURN(void SYSs_FError( const char *msg, const char *filename ));
+
+
+// wrappers
+
+#define PANIC(x) SYSs_PanicFunction( (x), __FILE__, __LINE__ )
+#define OUTOFMEM(x) SYSs_OutOfMemFunction( (x), __FILE__, __LINE__ )
+
+#define PERROR SYSs_PError
+#define SERROR SYSs_SError
+#define FERROR SYSs_FError
+
+
+#endif // _SYS_ERR_H_
+
+
diff --git a/src/parsec/include/sys_glob.h b/src/parsec/include/sys_glob.h
new file mode 100644
index 0000000..196325d
--- /dev/null
+++ b/src/parsec/include/sys_glob.h
@@ -0,0 +1,16 @@
+/*
+ * PARSEC HEADER: sys_glob.h
+ */
+
+#ifndef _SYS_GLOB_H_
+#define _SYS_GLOB_H_
+
+
+// ----------------------------------------------------------------------------
+// SYSTEM SUBSYSTEM (SYS) related global declarations and definitions -
+// ----------------------------------------------------------------------------
+
+
+#endif // _SYS_GLOB_H_
+
+
diff --git a/src/parsec/include/sys_msg.h b/src/parsec/include/sys_msg.h
new file mode 100644
index 0000000..d7f7f26
--- /dev/null
+++ b/src/parsec/include/sys_msg.h
@@ -0,0 +1,41 @@
+/*
+ * PARSEC HEADER: sys_msg.h
+ */
+
+#ifndef _SYS_MSG_H_
+#define _SYS_MSG_H_
+
+
+// ----------------------------------------------------------------------------
+// SYSTEM SUBSYSTEM (SYS) MESSAGE OUTPUT -
+// ----------------------------------------------------------------------------
+
+int SYSs_MsgOut( const char *format, ... );
+int SYSs_MsgPut( const char *format, ... );
+void SYSs_MsgPrompt();
+
+// wrappers
+
+#define MSGOUT SYSs_MsgOut
+#define MSGPUT SYSs_MsgPut
+
+#define DBGOUT SYSs_MsgOut
+#define DMSGOUT SYSs_MsgOut
+
+#ifdef ENABLE_LOGOUT_COMMAND
+ #include "utl_logfile.h"
+ extern UTL_LogFile g_Logfile;
+ #define LOGOUT(x) g_Logfile.printf x
+#else // !ENABLE_LOGOUT_COMMAND
+
+ #ifdef SYSTEM_COMPILER_MSVC
+ #define LOGOUT(x)
+ #else // !SYSTEM_COMPILER_MSVC
+ #define LOGOUT(x)
+ #endif // !SYSTEM_COMPILER_MSVC
+
+#endif // !ENABLE_LOGOUT_COMMAND
+
+#endif // _SYS_MSG_H_
+
+
diff --git a/src/parsec/include/sys_subh.h b/src/parsec/include/sys_subh.h
new file mode 100644
index 0000000..fc8b600
--- /dev/null
+++ b/src/parsec/include/sys_subh.h
@@ -0,0 +1,46 @@
+/*
+ * PARSEC HEADER: sys_subh.h
+ */
+
+#ifndef _SYS_SUBH_H_
+#define _SYS_SUBH_H_
+
+
+// ----------------------------------------------------------------------------
+// SYSTEM SUBSYSTEM (SYS) system-dependent function declarations -
+// ----------------------------------------------------------------------------
+
+
+// init reference frame counting
+void SYSs_InitRefFrameCount();
+
+// get current reference frame count
+refframe_t SYSs_GetRefFrameCount();
+
+// pause reference frame counting
+void SYSs_PauseRefFrameCount();
+
+// resume reference frame counting
+void SYSs_ResumeRefFrameCount();
+
+// wait for specified number of reference frames
+void SYSs_Wait( refframe_t refframes );
+
+// called once per frame to pass control to a platform-specific handler
+int SYSs_Yield();
+
+// check if enough memory to boot game proper
+void SYSs_CheckMemory();
+
+// check and execute command line options
+void SYSs_CheckCommandLine( int argc, char **argv );
+
+
+// frame timer install/deinstall
+int SYSs_InitFrameTimer();
+int SYSs_KillFrameTimer();
+
+
+#endif // _SYS_SUBH_H_
+
+
diff --git a/src/parsec/include/t_pack.h b/src/parsec/include/t_pack.h
new file mode 100644
index 0000000..367d467
--- /dev/null
+++ b/src/parsec/include/t_pack.h
@@ -0,0 +1,14 @@
+/*
+ * PARSEC HEADER: t_pack.h
+ */
+
+#ifndef _T_PACK_H_
+#define _T_PACK_H_
+
+
+// external functions
+
+
+#endif // T_PACK_
+
+
diff --git a/src/parsec/include/vid_defs.h b/src/parsec/include/vid_defs.h
new file mode 100644
index 0000000..4c1c476
--- /dev/null
+++ b/src/parsec/include/vid_defs.h
@@ -0,0 +1,84 @@
+/*
+ * PARSEC HEADER: vid_defs.h
+ */
+
+#ifndef _VID_DEFS_H_
+#define _VID_DEFS_H_
+
+
+// ----------------------------------------------------------------------------
+// VIDEO SUBSYSTEM (VID) related definitions -
+// ----------------------------------------------------------------------------
+
+
+#define MODE_COL_16BPP 16 // depth (in bits per pixel)
+#define MODE_COL_32BPP 32
+
+
+// color mode ids irrespective of bit depth -----------------------------------
+//
+#define COLMODE_HICOLOR 1
+#define COLMODE_TRUECOLOR 2
+
+
+// color mode dependent constants ---------------------------------------------
+//
+#define VGA_PAL_NUMCOLORS 256 // number of distinct colors in vga palette
+#define VGA_PAL_SIZE 768 // size of vga palette in bytes
+#define VGA_PAL_COLBITS 6 // number of bits per color in vga palette
+#define VGA_PAL_FULLBRIGHT 63 // maximum value for vga color
+
+#define HICOLOR_NUMCOLORS 65536L // number of distinct colors in hicolor mode
+
+
+// global palette identifiers -------------------------------------------------
+//
+#define PAL_GAME ( VGA_PAL_SIZE * 0 )
+#define PAL_MENU ( VGA_PAL_SIZE * 1 )
+#define PAL_BEYOND ( VGA_PAL_SIZE * 2 ) // has to be last!!
+
+#define PAL_STANDARD PAL_GAME
+#define PAL_SHIP_VIEWER PAL_GAME
+#define PAL_OBJECT_VIEWER PAL_GAME
+#define PAL_CREDITS_SCROLL PAL_MENU
+
+
+// special color identifiers --------------------------------------------------
+//
+#define COL_BACKGROUND_BLACK -2
+#define COL_BACKGROUND_BLUE -3
+
+
+// special values for RGB color triplet (6 bits per color) --------------------
+//
+#define COLRGB_CHANNELBITS 6
+#define COLRGB_FULLBRIGHT 0x3f
+#define COLRGB_MUTECHANNEL 0x00
+#define COLRGB_BLACK { COLRGB_MUTECHANNEL, COLRGB_MUTECHANNEL, COLRGB_MUTECHANNEL }
+#define COLRGB_WHITE { COLRGB_FULLBRIGHT, COLRGB_FULLBRIGHT, COLRGB_FULLBRIGHT }
+
+
+// special values for RGBA color (8 bits per color) ---------------------------
+//
+#define COLRGBA_CHANNELBITS 8
+#define COLRGBA_FULLBRIGHT 0xff
+#define COLRGBA_MUTECHANNEL 0x00
+#define COLRGBA_FULLYOPAQUE 0xff
+#define COLRGBA_TRANSPARENT 0x00
+#define COLRGBA_BLACK { COLRGBA_MUTECHANNEL, COLRGBA_MUTECHANNEL, COLRGBA_MUTECHANNEL, COLRGBA_FULLYOPAQUE }
+#define COLRGBA_WHITE { COLRGBA_FULLBRIGHT, COLRGBA_FULLBRIGHT, COLRGBA_FULLBRIGHT, COLRGBA_FULLYOPAQUE }
+
+
+// wait for start of vertical retrace -----------------------------------------
+//
+#define AwaitVertSync() {}
+
+
+// include system-specific subsystem prototypes -------------------------------
+//
+#include "vid_subh.h"
+
+
+#endif // _VID_DEFS_H_
+
+
diff --git a/src/parsec/include/vid_glob.h b/src/parsec/include/vid_glob.h
new file mode 100644
index 0000000..3ccb660
--- /dev/null
+++ b/src/parsec/include/vid_glob.h
@@ -0,0 +1,108 @@
+/*
+ * PARSEC HEADER: vid_glob.h
+ */
+
+#ifndef _VID_GLOB_H_
+#define _VID_GLOB_H_
+
+
+// ----------------------------------------------------------------------------
+// VIDEO SUBSYSTEM (VID) related global declarations and definitions -
+// ----------------------------------------------------------------------------
+
+// C++ STL vector for the resolution list
+#include <vector>
+
+//NOTE:
+// the definition of hiresmodeinfo_s would belong into VID_DEFS.H
+// but is defined here in order to make the array extdef possible.
+
+struct resinfo_s {
+ word width, height;
+
+ resinfo_s();
+
+ resinfo_s(word w, word h);
+
+ // set to a new resolution
+ void set(word w, word h);
+
+ // has been set to a real resolution
+ bool isValid() const;
+
+ // sorting and comparing
+ bool operator < (const resinfo_s & res) const;
+ bool operator == (const resinfo_s & res) const;
+ bool operator != (const resinfo_s & res) const;
+};
+
+int GetResolutionIndex(word xres, word yres);
+
+
+extern int MaxScreenBPP;
+
+extern resinfo_s GameScreenRes;
+extern int GameScreenBPP;
+extern int GameScreenWindowed;
+
+extern int CurDataColorBits;
+extern int CurDataDetail;
+
+extern resinfo_s Op_Resolution;
+extern int Op_ColorDepth;
+extern int Op_WindowedMode;
+
+extern resinfo_s InitOp_Resolution;
+extern int InitOp_ColorDepth;
+extern int InitOp_WindowedMode;
+extern int InitOp_FlipSynched;
+
+extern float GammaCorrection;
+
+extern int TextModeActive;
+
+extern int FlipSynched;
+
+extern int Screen_Width;
+extern int Screen_Height;
+extern int Screen_XOfs;
+extern int Screen_YOfs;
+extern int Screen_BytesPerPixel;
+extern int D_Value;
+extern int Star_Siz;
+extern int RObj_Siz;
+
+extern geomv_t Near_View_Plane;
+extern geomv_t Far_View_Plane;
+extern geomv_t Criterion_X;
+extern geomv_t Criterion_Y;
+extern Plane3 View_Volume[ 6 ];
+extern CullPlane3 Cull_Volume[ 6 ];
+extern Plane3 World_ViewVolume[ 6 ];
+extern CullPlane3 World_CullVolume[ 6 ];
+extern Plane3 Object_ViewVolume[ 6 ];
+extern CullPlane3 Object_CullVolume[ 6 ];
+
+extern std::vector<resinfo_s> Resolutions;
+
+extern int VidInfo_NumTextureUnits;
+extern int VidInfo_MaxTextureSize;
+extern int VidInfo_MaxTextureLod;
+extern int VidInfo_UseIterForDemoTexts;
+extern int* VidInfo_SupportedTexFormats;
+
+
+// determine if video mode is available using mode info table
+#define VID_MODE_AVAILABLE(x) ( x >= 0 && x < Resolutions.size() )
+
+// determine current color depth
+#define VID_CUR_COLBITS ( GameScreenBPP )
+
+// determine whether translucency supported in current video mode
+#define VID_TRANSLUCENCY_SUPPORTED TRUE
+
+
+
+#endif // _VID_GLOB_H_
+
+
diff --git a/src/parsec/include/vid_init.h b/src/parsec/include/vid_init.h
new file mode 100644
index 0000000..089dc84
--- /dev/null
+++ b/src/parsec/include/vid_init.h
@@ -0,0 +1,30 @@
+/*
+ * PARSEC HEADER: vid_init.h
+ */
+
+#ifndef _VID_INIT_H_
+#define _VID_INIT_H_
+
+
+// external functions
+
+char * FetchCtrlFileName();
+void LoadResolutionData();
+void LoadDetailData();
+
+void VID_MapSpecifierToMode( char * modespec, int * modearray );
+
+void VID_SetupDependentData();
+int VID_MapBppToOpt( int bpp );
+int VID_MapOptToBpp( int bppopt );
+void VID_ApplyOptions();
+
+void VID_SwitchMode( int xres, int yres, int bpp );
+void VID_InitMode();
+
+void VID_InitSubsystem();
+
+
+#endif // _VID_INIT_H_
+
+
diff --git a/src/parsec/include/vid_plug.h b/src/parsec/include/vid_plug.h
new file mode 100644
index 0000000..7924928
--- /dev/null
+++ b/src/parsec/include/vid_plug.h
@@ -0,0 +1,17 @@
+/*
+ * PARSEC HEADER: vid_plug.h
+ */
+
+#ifndef _VID_PLUG_H_
+#define _VID_PLUG_H_
+
+
+// external functions
+
+int VID_PlugInSubsys( const char *subsysname );
+int VID_HotChangeMode( int xres, int yres, bool fullscreen, int bpp );
+
+
+#endif // _VID_PLUG_H_
+
+
diff --git a/src/parsec/include/vid_subh.h b/src/parsec/include/vid_subh.h
new file mode 100644
index 0000000..453217d
--- /dev/null
+++ b/src/parsec/include/vid_subh.h
@@ -0,0 +1,42 @@
+/*
+ * PARSEC HEADER: vid_subh.h
+ */
+
+#ifndef _VID_SUBH_H_
+#define _VID_SUBH_H_
+
+
+// ----------------------------------------------------------------------------
+// VIDEO SUBSYSTEM (VID) system-dependent function declarations -
+// ----------------------------------------------------------------------------
+
+
+// SUPP group
+
+int VIDs_FadeScreenFromBlack( int palno );
+int VIDs_FadeScreenToBlack( int palno, int fademusic );
+int VIDs_FadePaletteToBlack( char *palette, int fademusic );
+int VIDs_FadeScreenFromWhite( int palno );
+int VIDs_SetScreenToColor( colrgba_s col );
+int VIDs_SetScreenDazzle( float strength );
+int VIDs_SetColIndexZero( int color );
+int VIDs_SetGammaCorrection( float gamma );
+
+// BUFF group
+
+void VIDs_ClearRenderBuffer();
+void VIDs_CommitRenderBuffer();
+char* VIDs_ScreenshotBuffer( int create, int *size );
+
+// INIT group
+
+void VIDs_InitDisplay();
+void VIDs_RestoreDisplay();
+void VIDs_CalcProjectiveMatrix();
+void VIDs_CalcOrthographicMatrix();
+void VIDs_InitFrameBufferAPI();
+
+
+#endif // _VID_SUBH_H_
+
+
diff --git a/src/parsec/include/vid_supp.h b/src/parsec/include/vid_supp.h
new file mode 100644
index 0000000..7a95d46
--- /dev/null
+++ b/src/parsec/include/vid_supp.h
@@ -0,0 +1,18 @@
+/*
+ * PARSEC HEADER: vid_supp.h
+ */
+
+#ifndef _VID_SUPP_H_
+#define _VID_SUPP_H_
+
+
+// external functions
+int VID_GetFOV();
+int VID_SetFOV( int fov2set );
+void VID_SetViewParameters( int mode );
+void VID_SetViewingVolume();
+void VID_RealizeFOV();
+
+#endif // _VID_SUPP_H_
+
+
diff --git a/src/parsec/include/vsdl_buffo.h b/src/parsec/include/vsdl_buffo.h
new file mode 100644
index 0000000..cad7b6b
--- /dev/null
+++ b/src/parsec/include/vsdl_buffo.h
@@ -0,0 +1,18 @@
+/*
+ * PARSEC HEADER: vsdl_buffo.h
+ */
+
+#ifndef _VSDL_BUFFO_H_
+#define _VSDL_BUFFO_H_
+
+
+// vx_buffa.c implements the following functions
+// ---------------------------------------------
+// void VIDs_ClearRenderBuffer();
+// void VIDs_CommitRenderBuffer();
+// char* VIDs_ScreenshotBuffer( int create, int *size );
+
+
+#endif // _VSDL_BUFFO_H_
+
+
diff --git a/src/parsec/include/vsdl_inito.h b/src/parsec/include/vsdl_inito.h
new file mode 100644
index 0000000..4637c26
--- /dev/null
+++ b/src/parsec/include/vsdl_inito.h
@@ -0,0 +1,18 @@
+/*
+ * PARSEC HEADER: vsdl_inito.h
+ */
+
+#ifndef _VSDL_INITO_H_
+#define _VSDL_INITO_H_
+
+
+// vsdl_inito.c implements the following functions
+// ---------------------------------------------
+// void VIDs_InitDisplay();
+// void VIDs_RestoreDisplay();
+// void VIDs_InitFrameBufferAPI();
+
+
+#endif // _VSDL_INITO_H_
+
+
diff --git a/src/parsec/include/vsdl_ogl.h b/src/parsec/include/vsdl_ogl.h
new file mode 100644
index 0000000..5771bbb
--- /dev/null
+++ b/src/parsec/include/vsdl_ogl.h
@@ -0,0 +1,41 @@
+/*
+ * PARSEC HEADER: vsdl_ogl.h
+ */
+
+#ifndef _VSDL_OGL_H_
+#define _VSDL_OGL_H_
+
+#ifdef SYSTEM_TARGET_LINUX
+#include <SDL/SDL.h>
+#else
+#include <SDL.h>
+#endif
+
+
+#if SDL_VERSION_ATLEAST(2, 0, 0)
+
+extern SDL_Window * curwindow;
+extern SDL_GLContext curcontext;
+
+#endif
+
+
+// external functions
+
+
+void VSDL_CommitOGLBuff();
+
+int VSDL_InitOGLInterface( int printmodelistflags );
+int VSDL_InitOGLMode();
+
+void VSDL_CalcProjectiveMatrix();
+void VSDL_CalcOrthographicMatrix();
+
+void VSDL_ShutDownOGL();
+
+void SDL_RCDisplayInfo();
+
+
+#endif // _VSDL_OGL_H_
+
+
diff --git a/src/parsec/include/vsdl_suppo.h b/src/parsec/include/vsdl_suppo.h
new file mode 100644
index 0000000..d024c7d
--- /dev/null
+++ b/src/parsec/include/vsdl_suppo.h
@@ -0,0 +1,23 @@
+/*
+ * PARSEC HEADER: vsdl_suppo.h
+ */
+
+#ifndef _VSDL_SUPPO_H_
+#define _VSDL_SUPPO_H_
+
+
+// vm_suppa.c implements the following functions
+// ---------------------------------------------
+// int VIDs_FadeScreenFromBlack( int palno );
+// int VIDs_FadeScreenToBlack( int palno, int fademusic );
+// int VIDs_FadePaletteToBlack( char *palette, int fademusic );
+// int VIDs_FadeScreenFromWhite( int palno );
+// int VIDs_SetScreenToColor( colrgba_s col );
+// int VIDs_SetScreenDazzle( float strength );
+// int VIDs_SetColIndexZero( int color );
+// int VIDs_SetGammaCorrection( float gamma );
+
+
+#endif
+
+