296 lines
7.5 KiB
C
Executable File
296 lines
7.5 KiB
C
Executable File
/*
|
|
Copyright (C) 1994-1995 Apogee Software, Ltd.
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
See the GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*/
|
|
//***************************************************************************
|
|
//
|
|
// RT_PLAYR.C - Player movement and stuff
|
|
//
|
|
//***************************************************************************
|
|
|
|
#ifndef _rt_playr_public
|
|
#define _rt_playr_public
|
|
|
|
#include "rt_actor.h"
|
|
#include "rt_stat.h"
|
|
#include "states.h"
|
|
#include "rottnet.h"
|
|
#include "rt_battl.h"
|
|
#include "develop.h"
|
|
|
|
|
|
|
|
extern int mouse_ry_input_scale;
|
|
|
|
#define LOW_GRAVITY 10000
|
|
#define NORMAL_GRAVITY 30000
|
|
#define HIGH_GRAVITY 250000
|
|
#define TAGHANDHEIGHT 40
|
|
|
|
#define MAXDEAD 32
|
|
#define MAXBULLETS 64
|
|
|
|
#define MAXCODENAMELENGTH 9
|
|
|
|
#define ARMED(x) ( \
|
|
(gamestate.PlayerHasGun[x]) || \
|
|
(!BATTLEMODE) \
|
|
)
|
|
|
|
|
|
typedef struct
|
|
{
|
|
statetype *state;
|
|
int speed;
|
|
classtype obclass;
|
|
int offset;
|
|
int flags;
|
|
|
|
}missile_stats;
|
|
|
|
extern missile_stats PlayerMissileData[13];
|
|
|
|
extern int GetWeaponForItem(int itemnumber);
|
|
extern int GetItemForWeapon(int weapon);
|
|
|
|
|
|
typedef enum
|
|
{reset,
|
|
reset2,
|
|
done,
|
|
at_knife,
|
|
at_pulltrigger,
|
|
at_automatic,
|
|
at_dryheaving,
|
|
at_missileweapon
|
|
} attack_action;
|
|
|
|
|
|
typedef struct atkinf
|
|
{
|
|
attack_action attack;
|
|
char mtics,frame; // attack is 1 for gun, 2 for knife, 3 for machine guns,
|
|
// 4 for chaingun (orig. game)
|
|
} attack_t;
|
|
|
|
typedef struct weaptype
|
|
{const int screenheight;
|
|
int startammo;
|
|
int base_damage;
|
|
int impulse;
|
|
int numattacks;
|
|
attack_t attackinfo[14];
|
|
}williamdidthis;
|
|
|
|
//
|
|
// Interactive input status of device, returned by SWIFT_Get3DStatus
|
|
//
|
|
typedef struct {
|
|
short x;
|
|
short y;
|
|
short z;
|
|
short pitch;
|
|
short roll;
|
|
short yaw;
|
|
short buttons;
|
|
} SWIFT_3DStatus;
|
|
|
|
|
|
//
|
|
// Static data about device, returned by SWIFT_GetStaticDeviceInfo
|
|
//
|
|
typedef struct
|
|
{
|
|
unsigned char deviceType;
|
|
unsigned char majorVersion;
|
|
unsigned char minorVersion;
|
|
unsigned char coordDescriptor[6];
|
|
unsigned char reserved[1];
|
|
} SWIFT_StaticData;
|
|
|
|
typedef struct
|
|
{
|
|
int lives;
|
|
int health;
|
|
int triads;
|
|
signed char ammo;
|
|
short poweruptime;
|
|
short protectiontime;
|
|
int new_weapon;
|
|
int keys;
|
|
int weapon;
|
|
int missileweapon;
|
|
int bulletweapon;
|
|
signed char HASBULLETWEAPON[3];
|
|
int attackframe,attackcount,weaponframe;
|
|
byte player;
|
|
int topspeed;
|
|
int dmomx;
|
|
int dmomy;
|
|
int angle;
|
|
int anglefrac;
|
|
boolean buttonheld[NUMBUTTONS];
|
|
boolean buttonstate[NUMBUTTONS];
|
|
int horizon;
|
|
int lastmomz;
|
|
signed short playerheight;
|
|
signed short heightoffset;
|
|
signed short weaponheight;
|
|
byte weaponx,weapony;
|
|
word batblast;
|
|
signed char NETCAPTURED;
|
|
signed char HASKNIFE;
|
|
int oldweapon, oldmissileweapon;
|
|
signed short weapondowntics,weaponuptics;
|
|
int soundtime;
|
|
int healthtime;
|
|
objtype* guntarget;
|
|
int targettime;
|
|
// int steptime;
|
|
// int stepwhich;
|
|
boolean falling;
|
|
int oldshapeoffset;
|
|
int uniformcolor;
|
|
char codename[MAXCODENAMELENGTH];
|
|
int oldheightoffset;
|
|
int team;
|
|
} playertype;
|
|
|
|
|
|
typedef struct
|
|
{ int topspeed;
|
|
int toprunspeed;
|
|
int hitpoints;
|
|
int accuracy;
|
|
int height;
|
|
} ROTTCHARS;
|
|
|
|
|
|
#define M_LINKSTATE(x,y) \
|
|
{ y = &PLAYERSTATE[x->dirchoosetime];\
|
|
}
|
|
|
|
|
|
extern williamdidthis DOGSCRATCH;
|
|
extern int GRAVITY;
|
|
extern int controlupdatetime;
|
|
extern int controlupdatestarted;
|
|
extern statobj_t *DEADPLAYER[MAXDEAD];
|
|
extern int NUMDEAD;
|
|
extern objtype *PLAYER[MAXPLAYERS];
|
|
extern objtype *player;
|
|
extern playertype PLAYERSTATE[MAXPLAYERS],*locplayerstate;
|
|
|
|
extern ROTTCHARS characters[5];
|
|
|
|
extern williamdidthis FREE;
|
|
extern statetype s_player;
|
|
extern williamdidthis WEAPONS[MAXWEAPONS];
|
|
extern boolean cybermanenabled;
|
|
extern boolean spaceballenabled;
|
|
extern boolean SpaceBallPresent;
|
|
extern boolean CybermanPresent;
|
|
extern boolean mouseenabled;
|
|
extern boolean joystickenabled;
|
|
extern boolean joypadenabled;
|
|
extern boolean joystickprogressive;
|
|
extern int joystickport;
|
|
extern int joyxmax, joyymax, joyxmin, joyymin;
|
|
extern int buttonscan[NUMBUTTONS];
|
|
extern int buttonmouse[6];
|
|
extern int buttonjoy[8];
|
|
extern boolean buttonpoll[NUMBUTTONS];
|
|
extern boolean godmode;
|
|
extern boolean missilecam;
|
|
extern objtype * missobj;
|
|
extern int lastpolltime;
|
|
|
|
extern int controlbuf[3];
|
|
extern int buttonbits;
|
|
|
|
extern int pausedstartedticcount;
|
|
extern boolean RefreshPause;
|
|
|
|
|
|
void PlayNoWaySound(void);
|
|
int GetBonusTimeForItem(int);
|
|
int GetRespawnTimeForItem(int);
|
|
int GetItemForWeapon(int);
|
|
void SetWhoHaveWeapons(void);
|
|
int MaxHitpointsForCharacter(playertype*);
|
|
void RespawnPlayerobj(objtype*);
|
|
void RevivePlayerobj(int,int,int,objtype*);
|
|
void OperateElevatorSwitch(objtype*,int,int,int);
|
|
void ResetPlayerstate(playertype*);
|
|
void InitializeWeapons(playertype*);
|
|
void DropWeapon(objtype*ob);
|
|
void PollKeyboardButtons (void);
|
|
void PollMouseButtons (void);
|
|
void PollJoystickButtons (void);
|
|
void PollKeyboardMove (void);
|
|
void PollCyberman (void);
|
|
void PollMouseMove (void);
|
|
void PollJoystickMove (void);
|
|
void PollControls (void);
|
|
void AddDemoCmd (void);
|
|
void AddRemoteCmd (void);
|
|
void PlayerSlideMove(objtype * ob);
|
|
void SpawnSmoke(objtype*);
|
|
void GetBonus(objtype*,statobj_t*);
|
|
void SpawnPlayerobj(int,int,int,int);
|
|
void ClipPlayer(void);
|
|
void PlayerMove ( objtype * ob );
|
|
void Cmd_Use(objtype*);
|
|
void Cmd_Fire (objtype*ob);
|
|
void SpawnGunSmoke(int x, int y, int z, int angle, int bullethole);
|
|
void SpawnBlood(objtype * ob, int angle);
|
|
void SpawnMetalSparks(objtype * ob, int angle);
|
|
void CheckPlayerSpecials(objtype * ob);
|
|
void LoadPlayer ( void );
|
|
void PlayerTiltHead (objtype * ob);
|
|
boolean InRange (objtype *p, objtype *victim, int distance);
|
|
void CheckUnPause ( void );
|
|
void UpdatePlayers ( void );
|
|
void UnTargetActor ( objtype * target );
|
|
|
|
|
|
enum
|
|
{ RENORMALIZE = 1,
|
|
PITFALL,
|
|
PITRISE,
|
|
COLUMNCRUSH,
|
|
GODMODERISE,
|
|
GODMODEFALL,
|
|
DOGMODEFALL,
|
|
DOGMODERISE,
|
|
STEPUP,
|
|
STEPDOWN
|
|
};
|
|
|
|
extern void ResetWeapons(objtype *);
|
|
extern void SaveWeapons(objtype*);
|
|
|
|
extern int whichpath;
|
|
extern statobj_t *BulletHoles[MAXBULLETS];
|
|
|
|
extern boolean vrenabled;
|
|
|
|
void SetupBulletHoleLink (int num, statobj_t * item);
|
|
|
|
#endif
|