diff --git a/src/builtins.qh b/src/builtins.qh deleted file mode 100644 index 1ef7ffe..0000000 --- a/src/builtins.qh +++ /dev/null @@ -1,79 +0,0 @@ -/* these are the standard Quake engine builtins */ - -void makevectors(vector ang) = #1 -void setorigin(entity e, vector o) = #2; -void setmodel(entity e, string m) = #3; -void setsize(entity e, vector min, vector max) = #4; -/* 5 was removed */ -void break(void) = #6; -float random(void) = #7; -void sound(entity e, float chan, string samp, float vol, float atten) = #8; -vector normalize(vector v) = #9; -void error(string e) = #10; -void objerror(string e) = #11; -float vlen(vector v) = #12; -float vectoyaw(vector v) = #13; -entity spawn(void) = #14; -void remove(entity e) = #15; -void traceline(vector v1, vector v2, float nomonsters, entity forent) = #16; -entity checkclient(void) = #17; -entity find(entity start, .string fld, string match) = #18; -string precache_sound(string s) = #19; -string precache_model(string s) = #20; -void stuffcmd(entity client, string s) = #21; -entity findradius(vector org, float rad) = #22; -void bprint(string s) = #23; -void sprint(entity client, string s) = #24; -void dprint(string s) = #25; -string ftos(float f) = #26; -string vtos(vector v) = #27; -void coredump(void) = #28; -void traceon(void) = #29; -void traceoff(void) = #30; -void eprint(entity e) = #31; -float walkmove(float yaw, float dist) = #32; -// #33 was removed -float droptofloor(float yaw, float dist) = #34; -void lightstyle(float style, string value) = #35; -float rint(float v) = #36; -float floor(float v) = #37; -float ceil(float v) = #38; -// #39 was removed -float checkbottom(entity e) = #40; -float pointcontents(vector v) = #41; -// #42 was removed -float fabs(float f) = #43; -vector aim(entity e, float speed) = #44; -float cvar(string s) = #45; -void localcmd(string s) = #46; -entity nextent(entity e) = #47; -void particle(vector o, vector d, float color, float count) = #48; -void ChangeYaw(void) = #49; -vector vectoangles(vector v) = #51; -void WriteByte(float to, float f) = #52; -void WriteChar(float to, float f) = #53; -void WriteShort(float to, float f) = #54; -void WriteLong(float to, float f) = #55; -void WriteCoord(float to, float f) = #56; -void WriteAngle(float to, float f) = #57; -void WriteString(float to, string s) = #58; -void WriteEntity(float to, entity s) = #59; -/* 60 was removed */ -/* 61 was removed */ -/* 62 was removed */ -/* 63 was removed */ -/* 64 was removed */ -/* 65 was removed */ -/* 66 was removed */ -void movetogoal(float step) = #67; -string precache_file(string s) = #68; -void makestatic(entity e) = #69; -void changelevel(string s) = #70; -/* 71 was removed */ -void cvar_set(string var, string val) = #72; -void centerprint(entity client, string s) = #73; -void ambientsound(vector pos, string samp, float vol, float atten) = #74; -string precache_model2(string s) = #75; -string precache_sound2(string s) = #76; -string precache_file2(string s) = #77; -void setspawnparms(entity e) = #78; \ No newline at end of file diff --git a/src/constants.qh b/src/constants.qh index 8ddd761..faa6906 100644 --- a/src/constants.qh +++ b/src/constants.qh @@ -44,11 +44,11 @@ typedef enum typedef enum { - SOLID_NOT, // no interaction with other objects - SOLID_TRIGGER, // touch on edge, but not blocking - SOLID_BBOX, // touch on edge, block - SOLID_SLIDEBOX, // touch on edge, but not an onground - SOLID_BSP // bsp clip, touch on edge, block + SOLID_NOT, /* no interaction with other objects */ + SOLID_TRIGGER, /* touch on edge, but not blocking */ + SOLID_BBOX, /* touch on edge, block */ + SOLID_SLIDEBOX, /* touch on edge, but not an onground */ + SOLID_BSP /* bsp clip, touch on edge, block */ } solid_t; // range values @@ -161,6 +161,9 @@ typedef enum CHAN_VOICE, /** voice channel */ CHAN_ITEM, /** item noise channel */ CHAN_BODY, /** body sound channel */ + CHAN_UNUSED1, + CHAN_UNUSED2, + CHAN_UNUSED3 } channel_t; /** attenuation */ diff --git a/src/entities/func_wall.qc b/src/entities/func_wall.qc new file mode 100644 index 0000000..c66bffd --- /dev/null +++ b/src/entities/func_wall.qc @@ -0,0 +1,12 @@ +class idFuncWall:idEntity { + void idFuncWall( void ); +}; + +void idFuncWall:: idFuncWall( void ) { + SetAngles( [0, 0, 0] ); + SetMovetype(MOVETYPE_PUSH); + SetSolid(SOLID_BSP); + SetModel(GetModel()); /* relink with the above properties */ +} + +LINK_ENTITY_TO_CLASS(func_wall, idFuncWall) \ No newline at end of file diff --git a/src/entities/info_player_start.qc b/src/entities/info_player_start.qc new file mode 100644 index 0000000..3547021 --- /dev/null +++ b/src/entities/info_player_start.qc @@ -0,0 +1,30 @@ +class idPlayerStart:idEntity { + void idPlayerStart( void ); + + /** Moves a player to the first starting spawn point and returns the result. */ + nonvirtual idEntity MovePlayerToStart( idPlayer ); +}; + +void idPlayerStart::idPlayerStart( void ) { + SetSolid( SOLID_NOT ); + SetMovetype( MOVETYPE_NONE ); +} + +idEntity idPlayerStart::MovePlayerToStart( idPlayer player ) { + idEntity point = g_idEngine.Find( world, ::classname, "idPlayerStart" ); + + if ( point ) { + player.SetOrigin( point.GetOrigin() ); + player.SetAngles( point.GetAngles() ); + player.ForceUpdateClientAngle(); + return point; + } else { + g_idEngine.Error( "Cannot find idPlayerStart on level." ); + return __NULL__; + } +} + +LINK_ENTITY_TO_CLASS(info_player_start, idPlayerStart) +LINK_ENTITY_TO_CLASS(info_player_deathmatch, idPlayerStart) +LINK_ENTITY_TO_CLASS(info_player_coop, idPlayerStart) +LINK_ENTITY_TO_CLASS(info_player_start2, idPlayerStart) \ No newline at end of file diff --git a/src/entities/light.qc b/src/entities/light.qc new file mode 100644 index 0000000..e69de29 diff --git a/src/entities/sources.src b/src/entities/sources.src new file mode 100644 index 0000000..eadda71 --- /dev/null +++ b/src/entities/sources.src @@ -0,0 +1,5 @@ +#includelist +worldspawn.qc +info_player_start.qc +func_wall.qc +#endlist diff --git a/src/entities/worldspawn.qc b/src/entities/worldspawn.qc new file mode 100644 index 0000000..eb117da --- /dev/null +++ b/src/entities/worldspawn.qc @@ -0,0 +1,30 @@ +class worldspawn { + void worldspawn( void ); + + nonvirtual void InitLight( void ); +}; + +void worldspawn::worldspawn( void ) { + g_idEngine.Precache_Model( "progs/player.mdl" ); + InitLight(); +} + +void worldspawn::InitLight( void ) { + g_idEngine.LightStyle( 0, "m" ); + g_idEngine.LightStyle( 1, "mmnmmommommnonmmonqnmmo" ); + g_idEngine.LightStyle( 2, "abcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba" ); + g_idEngine.LightStyle( 3, "mmmmmaaaaammmmmaaaaaabcdefgabcdefg" ); + g_idEngine.LightStyle( 4, "mamamamamama" ); + g_idEngine.LightStyle( 5, "jklmnopqrstuvwxyzyxwvutsrqponmlkj" ); + g_idEngine.LightStyle( 6, "nmonqnmomnmomomno" ); + g_idEngine.LightStyle( 7, "mmmaaaabcdefgmmmmaaaammmaamm" ); + g_idEngine.LightStyle( 8, "mmmaaammmaaammmabcdefaaaammmmabcdefmmmaaaa" ); + g_idEngine.LightStyle( 9, "aaaaaaaazzzzzzzz" ); + g_idEngine.LightStyle( 10, "mmamammmmammamamaaamammma" ); + g_idEngine.LightStyle( 11, "abcdefghijklmnopqrrqponmlkjihgfedcba" ); +} + +void worldspawn( void ) +{ + spawnfunc_worldspawn(); +} \ No newline at end of file diff --git a/src/entry.qc b/src/entry.qc index 81c2805..200d30d 100644 --- a/src/entry.qc +++ b/src/entry.qc @@ -1,53 +1,50 @@ /* all standard game entry functions live here */ -void main(void) -{ +void main( void ) { } -void StartFrame(void) -{ - if (!g_gameRules) - g_gameRules = spawn(idRules); +void StartFrame( void ) { + /* if our rules class doesn't yet exist - create it! */ + if ( !g_gameRules ) { + g_gameRules = g_idEngine.Spawn(); + self = g_gameRules; + spawnfunc_idRules(); + self = world; + } } -void PlayerPreThink(void) -{ - idPlayer pl = (idPlayer)self; +void PlayerPreThink( void ) { + idPlayer pl = ( idPlayer ) self; + pl.PreThink(); } -void PlayerPostThink(void) -{ - idPlayer pl = (idPlayer)self; +void PlayerPostThink( void ) { + idPlayer pl = ( idPlayer ) self; + pl.PostThink(); } -void ClientKill(void) -{ +void ClientKill( void ) { } -void ClientConnect(void) -{ +void ClientConnect( void ) { /* initialize the player as an NSEntity class type */ spawnfunc_idPlayer(); - g_gameRules.PlayerConnects((idPlayer)self); + g_gameRules.PlayerConnects( ( idPlayer ) self ); } -void PutClientInServer(void) -{ - g_gameRules.PlayerFinishesJoining((idPlayer)self); +void PutClientInServer( void ) { + g_gameRules.PlayerFinishesJoining( ( idPlayer ) self ); } -void ClientDisconnect(void) -{ - g_gameRules.PlayerDisconnects((idPlayer)self); +void ClientDisconnect( void ) { + g_gameRules.PlayerDisconnects( ( idPlayer ) self ); } -void SetNewParms(void) -{ +void SetNewParms( void ) { } -void SetChangeParms(void) -{ -} \ No newline at end of file +void SetChangeParms( void ) { +} diff --git a/src/progs.src b/src/progs.src index 3151a90..720d653 100644 --- a/src/progs.src +++ b/src/progs.src @@ -3,12 +3,14 @@ #includelist defs.qh -builtins.qh constants.qh events.qh system/headers.src + entry.qc + +entities/sources.src system/sources.src #endlist \ No newline at end of file diff --git a/src/system/headers.src b/src/system/headers.src index eb9b0ce..e5a28c7 100644 --- a/src/system/headers.src +++ b/src/system/headers.src @@ -1,5 +1,6 @@ #includelist idEntity.qh +idEngine.qh idPlayer.qh idRules.qh #endlist diff --git a/src/system/idEngine.qc b/src/system/idEngine.qc new file mode 100644 index 0000000..dbbbfb2 --- /dev/null +++ b/src/system/idEngine.qc @@ -0,0 +1,327 @@ + +/* these are the standard Quake engine builtins */ +void makevectors(vector ang) = #1 +void setorigin(entity e, vector o) = #2; +void setmodel(entity e, string m) = #3; +void setsize(entity e, vector min, vector max) = #4; +/* 5 was removed */ +void break(void) = #6; +float random(void) = #7; +void sound(entity e, float chan, string samp, float vol, float atten) = #8; +vector normalize(vector v) = #9; +void error(string e) = #10; +void objerror(string e) = #11; +float vlen(vector v) = #12; +float vectoyaw(vector v) = #13; +entity spawn(void) = #14; +void remove(entity e) = #15; +void traceline(vector v1, vector v2, float nomonsters, entity forent) = #16; +entity checkclient(void) = #17; +entity find(entity start, .string fld, string match) = #18; +string precache_sound(string s) = #19; +string precache_model(string s) = #20; +void stuffcmd(entity client, string s) = #21; +entity findradius(vector org, float rad) = #22; +void bprint(string s) = #23; +void sprint(entity client, string s) = #24; +void dprint(string s) = #25; +string ftos(float f) = #26; +string vtos(vector v) = #27; +void coredump(void) = #28; +void traceon(void) = #29; +void traceoff(void) = #30; +void eprint(entity e) = #31; +float walkmove(float yaw, float dist) = #32; +// #33 was removed +float droptofloor(float yaw, float dist) = #34; +void lightstyle(float style, string value) = #35; +float rint(float v) = #36; +float floor(float v) = #37; +float ceil(float v) = #38; +// #39 was removed +float checkbottom(entity e) = #40; +float pointcontents(vector v) = #41; +// #42 was removed +float fabs(float f) = #43; +vector aim(entity e, float speed) = #44; +float cvar(string s) = #45; +void localcmd(string s) = #46; +entity nextent(entity e) = #47; +void particle(vector o, vector d, float color, float count) = #48; +void changeyaw(void) = #49; +vector vectoangles(vector v) = #51; +void writeByte(float to, float f) = #52; +void writeChar(float to, float f) = #53; +void writeShort(float to, float f) = #54; +void writeLong(float to, float f) = #55; +void writeCoord(float to, float f) = #56; +void writeAngle(float to, float f) = #57; +void writeString(float to, string s) = #58; +void writeEntity(float to, entity s) = #59; +/* 60 was removed */ +/* 61 was removed */ +/* 62 was removed */ +/* 63 was removed */ +/* 64 was removed */ +/* 65 was removed */ +/* 66 was removed */ +void movetogoal(float step) = #67; +string precache_file(string s) = #68; +void makestatic(entity e) = #69; +void changelevel(string s) = #70; +/* 71 was removed */ +void cvar_set(string var, string val) = #72; +void centerprint(entity client, string s) = #73; +void ambientsound(vector pos, string samp, float vol, float atten) = #74; +string precache_model2(string s) = #75; +string precache_sound2(string s) = #76; +string precache_file2(string s) = #77; +void setspawnparms(entity e) = #78; + +void idEngine::MakeVectors( vector ang ) { + return makevectors( ang ); +} + +void idEngine::SetOrigin( idEntity e, vector o ) { + setorigin( e, o ); +} + +void idEngine::SetModel( idEntity e, string m ) { + setmodel( e, m ); +} + +void idEngine::SetSize( idEntity e, vector min, vector max ) { + setsize( e, min, max ); +} + +void idEngine::Break( void ) { + break (); +} + +float idEngine::Random( void ) { + return random(); +} + +void idEngine::Sound( idEntity e, float chan, string samp, float vol, float atten ) { + sound( e, chan, samp, vol, atten ); +} + +vector idEngine::Normalize( vector v ) { + return normalize( v ); +} + +void idEngine::Error( string e ) { + error( e ); +} + +void idEngine::ObjError( string e ) { + objerror( e ); +} + +float idEngine::VLen( vector v ) { + return vlen( v ); +} + +float idEngine::VecToYaw( vector v ) { + return vectoyaw( v ); +} + +idEntity idEngine::Spawn( void ) { + return spawn(); +} + +void idEngine::Remove( idEntity e ) { + remove( e ); +} + +void idEngine::TraceLine( vector v1, vector v2, float nomonsters, idEntity forent ) { + traceline( v1, v2, nomonsters, forent ); +} + +idEntity idEngine::CheckClient( void ) { + return checkclient(); +} + +idEntity idEngine::Find( idEntity start,.string fld, string match ) { + return find( start, ::fld, match ); +} + +string idEngine::Precache_Sound( string s ) { + return precache_sound( s ); +} + +string idEngine::Precache_Model( string s ) { + return precache_model( s ); +} + +void idEngine::StuffCmd( idEntity client, string s ) { + stuffcmd( client, s ); +} + +idEntity idEngine::FindRadius( vector org, float rad ) { + return findradius( org, rad ); +} + +void idEngine::BPrint( string s ) { + bprint( s ); +} + +void idEngine::SPrint( idEntity client, string s ) { + sprint( client, s ); +} + +void idEngine::DPrint( string s ) { + dprint( s ); +} + +string idEngine::FloatToString( float f ) { + return ftos( f ); +} + +string idEngine::VectorToString( vector v ) { + return vtos( v ); +} + +void idEngine::CoreDump( void ) { + coredump(); +} + +void idEngine::TraceOn( void ) { + traceon(); +} + +void idEngine::TraceOff( void ) { + traceoff(); +} + +void idEngine::EPrint( idEntity e ) { + eprint( e ); +} + +float idEngine::WalkMove( float yaw, float dist ) { + return walkmove( yaw, dist ); +} + +float idEngine::DropToFloor( float yaw, float dist ) { + return droptofloor( yaw, dist ); +} + +void idEngine::LightStyle( float style, string value ) { + lightstyle( style, value ); +} + +float idEngine::RInt( float v ) { + return rint( v ); +} + +float idEngine::Floor( float v ) { + return floor( v ); +} + +float idEngine::Ceil( float v ) { + return ceil( v ); +} + +float idEngine::CheckBottom( idEntity e ) { + return checkbottom( e ); +} + +float idEngine::PointContents( vector v ) { + return pointcontents( v ); +} + +float idEngine::AbsoluteFloat( float f ) { + return fabs( f ); +} + +vector idEngine::Aim( idEntity e, float speed ) { + return aim( e, speed ); +} + +float idEngine::CVar( string s ) { + return cvar( s ); +} + +void idEngine::LocalCmd( string s ) { + localcmd( s ); +} + +idEntity idEngine::NextEnt( idEntity e ) { + return nextent( e ); +} + +void idEngine::Particle( vector o, vector d, float color, float count ) { + particle( o, d, color, count ); +} + +void idEngine::ChangeYaw( void ) { + changeyaw(); +} + +vector idEngine::VecToAngles( vector v ) { + return vectoangles( v ); +} + +void idEngine::WriteByte( float to, float f ) { + writeByte( to, f ); +} + +void idEngine::WriteChar( float to, float f ) { + writeChar( to, f ); +} + +void idEngine::WriteShort( float to, float f ) { + writeShort( to, f ); +} + +void idEngine::WriteLong( float to, float f ) { + writeLong( to, f ); +} + +void idEngine::WriteCoord( float to, float f ) { + writeCoord( to, f ); +} + +void idEngine::WriteAngle( float to, float f ) { + writeAngle( to, f ); +} + +void idEngine::WriteString( float to, string s ) { + writeString( to, s ); +} + +void idEngine::WriteEntity( float to, idEntity s ) { + writeEntity( to, s ); +} + +void idEngine::MoveToGoal( float step ) { + movetogoal( step ); +} + +string idEngine::Precache_File( string s ) { + return precache_file( s ); +} + +void idEngine::MakeStatic( idEntity e ) { + makestatic( e ); +} + +void idEngine::ChangeLevel( string s ) { + changelevel( s ); +} + +void idEngine::CVarSet( string variable, string val ) { + cvar_set( variable, val ); +} + +void idEngine::CenterPrint( idEntity client, string s ) { + centerprint( client, s ); +} + +void idEngine::AmbientSound( vector pos, string samp, float vol, float atten ) { + ambientsound( pos, samp, vol, atten ); +} + +void idEngine::SetSpawnParms( idEntity e ) { + setspawnparms( e ); +} diff --git a/src/system/idEngine.qh b/src/system/idEngine.qh new file mode 100644 index 0000000..5a6d624 --- /dev/null +++ b/src/system/idEngine.qh @@ -0,0 +1,68 @@ +class idEngine { + nonvirtual void MakeVectors( vector ang ); + nonvirtual void SetOrigin( idEntity e, vector o ); + nonvirtual void SetModel( idEntity e, string m ); + nonvirtual void SetSize( idEntity e, vector min, vector max ); + nonvirtual void Break( void ); + nonvirtual float Random( void ); + nonvirtual void Sound( idEntity e, float chan, string samp, float vol, float atten ); + nonvirtual vector Normalize( vector v ); + nonvirtual void Error( string e ); + nonvirtual void ObjError( string e ); + nonvirtual float VLen( vector v ); + nonvirtual float VecToYaw( vector v ); + nonvirtual idEntity Spawn( void ); + nonvirtual void Remove( idEntity e ); + nonvirtual void TraceLine( vector v1, vector v2, float nomonsters, idEntity forent ); + nonvirtual idEntity CheckClient( void ); + nonvirtual idEntity Find( idEntity start,.string fld, string match ); + nonvirtual string Precache_Sound( string s ); + nonvirtual string Precache_Model( string s ); + nonvirtual void StuffCmd( idEntity client, string s ); + nonvirtual idEntity FindRadius( vector org, float rad ); + nonvirtual void BPrint( string s ); + nonvirtual void SPrint( idEntity client, string s ); + nonvirtual void DPrint( string s ); + nonvirtual string FloatToString( float f ); + nonvirtual string VectorToString( vector v ); + nonvirtual void CoreDump( void ); + nonvirtual void TraceOn( void ); + nonvirtual void TraceOff( void ); + nonvirtual void EPrint( idEntity e ); + nonvirtual float WalkMove( float yaw, float dist ); + nonvirtual float DropToFloor( float yaw, float dist ); + nonvirtual void LightStyle( float style, string value ); + nonvirtual float RInt( float v ); + nonvirtual float Floor( float v ); + nonvirtual float Ceil( float v ); + nonvirtual float CheckBottom( idEntity e ); + nonvirtual float PointContents( vector v ); + nonvirtual float AbsoluteFloat( float f ); + nonvirtual vector Aim( idEntity e, float speed ); + nonvirtual float CVar( string s ); + nonvirtual void LocalCmd( string s ); + nonvirtual idEntity NextEnt( idEntity e ); + nonvirtual void Particle( vector o, vector d, float color, float count ); + nonvirtual void ChangeYaw( void ); + nonvirtual vector VecToAngles( vector v ); + nonvirtual void WriteByte( float to, float f ); + nonvirtual void WriteChar( float to, float f ); + nonvirtual void WriteShort( float to, float f ); + nonvirtual void WriteLong( float to, float f ); + nonvirtual void WriteCoord( float to, float f ); + nonvirtual void WriteAngle( float to, float f ); + nonvirtual void WriteString( float to, string s ); + nonvirtual void WriteEntity( float to, idEntity s ); + nonvirtual void MoveToGoal( float step ); + nonvirtual string Precache_File( string s ); + nonvirtual void MakeStatic( idEntity e ); + nonvirtual void ChangeLevel( string s ); + nonvirtual void CVarSet( string var, string val ); + nonvirtual void CenterPrint( idEntity client, string s ); + nonvirtual void AmbientSound( vector pos, string samp, float vol, float atten ); + nonvirtual void SetSpawnParms( idEntity e ); +}; + +idEngine g_idEngine; + +#define LINK_ENTITY_TO_CLASS(cname,classa) void cname(void) { spawnfunc_##classa(); } \ No newline at end of file diff --git a/src/system/idEntity.qc b/src/system/idEntity.qc index e7d08b8..7fa7d22 100644 --- a/src/system/idEntity.qc +++ b/src/system/idEntity.qc @@ -1,479 +1,386 @@ -void idEntity::idEntity(void) -{ +void idEntity::idEntity( void ) { + health = 0; + max_health = 100; } /* set functions */ -void idEntity::SetModelindex(float value) -{ +void idEntity::SetModelindex( float value ) { modelindex = value; } -void idEntity::SetMovetype(movetype_t value) -{ +void idEntity::SetMovetype( movetype_t value ) { movetype = value; } -void idEntity::SetSolid(solid_t value) -{ +void idEntity::SetSolid( solid_t value ) { solid = value; } -void idEntity::SetOrigin(vector value) -{ - setorigin(this, value); +void idEntity::SetOrigin( vector value ) { + g_idEngine.SetOrigin( this, value ); } -void idEntity::SetVelocity(vector value) -{ +void idEntity::SetVelocity( vector value ) { velocity = value; } -void idEntity::SetAngles(vector value) -{ +void idEntity::SetAngles( vector value ) { angles = value; } -void idEntity::SetAngularVelocity(vector value) -{ +void idEntity::SetAngularVelocity( vector value ) { avelocity = value; } -void idEntity::SetPunchangle(vector value) -{ +void idEntity::SetPunchangle( vector value ) { punchangle = value; } -void idEntity::SetModel(string value) -{ - setmodel(this, value); +void idEntity::SetModel( string value ) { + g_idEngine.SetModel( this, value ); } -void idEntity::SetFrame(float value) -{ +void idEntity::SetFrame( float value ) { frame = value; } -void idEntity::SetSkin(float value) -{ +void idEntity::SetSkin( float value ) { skin = value; } -void idEntity::AddEffect(effects_t value) -{ +void idEntity::AddEffect( effects_t value ) { effects |= value; } -void idEntity::RemoveEffect(effects_t value) -{ +void idEntity::RemoveEffect( effects_t value ) { effects &= ~value; } -void idEntity::ClearEffects(void) -{ +void idEntity::ClearEffects( void ) { effects = 0; } -void idEntity::SetSize(vector min, vector max) -{ - setsize(this, min, max); +void idEntity::SetSize( vector min, vector max ) { + g_idEngine.SetSize( this, min, max ); } -void idEntity::ScheduleThink(void(void) func, float timer) -{ +void idEntity::ScheduleThink( void ( void ) func, float timer ) { } -void idEntity::SetHealth(float value) -{ +void idEntity::SetHealth( float value ) { health = value; - if (health > max_health) + if ( health > max_health ) health = max_health; } -void idEntity::AddFrags(float value) -{ +void idEntity::AddFrags( float value ) { frags += value; } -void idEntity::RemoveFrags(float value) -{ +void idEntity::RemoveFrags( float value ) { frags -= value; } -void idEntity::ClearFrags(void) -{ +void idEntity::ClearFrags( void ) { frags = 0; } -void idEntity::SetWeapon(float value) -{ +void idEntity::SetWeapon( float value ) { weapon = value; } -void idEntity::SetWeaponmodel(string value) -{ +void idEntity::SetWeaponmodel( string value ) { weaponmodel = value; } -void idEntity::SetWeaponframe(float value) -{ +void idEntity::SetWeaponframe( float value ) { weaponframe = value; } -void idEntity::SetCurrentAmmo(float value) -{ +void idEntity::SetCurrentAmmo( float value ) { currentammo = value; } -void idEntity::SetAmmoType1(float value) -{ +void idEntity::SetAmmoType1( float value ) { ammo_shells = value; } -void idEntity::SetAmmoType2(float value) -{ +void idEntity::SetAmmoType2( float value ) { ammo_nails = value; } -void idEntity::SetAmmoType3(float value) -{ +void idEntity::SetAmmoType3( float value ) { ammo_rockets = value; } -void idEntity::SetAmmoType4(float value) -{ +void idEntity::SetAmmoType4( float value ) { ammo_cells = value; } -void idEntity::SetTakedamage(damage_t value) -{ +void idEntity::SetTakedamage( damage_t value ) { takedamage = value; } -void idEntity::SetViewOffset(vector value) -{ +void idEntity::SetViewOffset( vector value ) { view_ofs = value; } -void idEntity::ForceUpdateClientAngle(void) -{ +void idEntity::ForceUpdateClientAngle( void ) { fixangle = 1; } -void idEntity::AddFlags(flags_t value) -{ +void idEntity::AddFlags( flags_t value ) { flags |= value; } -void idEntity::RemoveFlags(flags_t value) -{ +void idEntity::RemoveFlags( flags_t value ) { flags &= ~value; } -void idEntity::ClearFlags(void) -{ +void idEntity::ClearFlags( void ) { flags = 0; } -void idEntity::SetColormap(float value) -{ +void idEntity::SetColormap( float value ) { colormap = value; } -void idEntity::SetDisplayname(string value) -{ +void idEntity::SetDisplayname( string value ) { netname = value; } -void idEntity::SetMaxHealth(float value) -{ +void idEntity::SetMaxHealth( float value ) { max_health = value; } -void idEntity::SetArmorType(float value) -{ +void idEntity::SetArmorType( float value ) { armortype = value; } -void idEntity::SetArmor(float value) -{ +void idEntity::SetArmor( float value ) { armorvalue = value; } -void idEntity::SetAimEntity(entity value) -{ +void idEntity::SetAimEntity( entity value ) { aiment = value; } -void idEntity::SetGoalEntity(entity value) -{ +void idEntity::SetGoalEntity( entity value ) { goalentity = value; } -void idEntity::SetTarget(string value) -{ +void idEntity::SetTarget( string value ) { target = value; } -void idEntity::SetTargetname(string value) -{ +void idEntity::SetTargetname( string value ) { targetname = value; } -void idEntity::SetOwner(entity value) -{ +void idEntity::SetOwner( entity value ) { owner = value; } -void idEntity::SetMovementDirection(vector value) -{ +void idEntity::SetMovementDirection( vector value ) { movedir = value; } -void idEntity::SetTriggerMessage(string value) -{ +void idEntity::SetTriggerMessage( string value ) { message = value; } -void idEntity::SetSoundStyle(float value) -{ +void idEntity::SetSoundStyle( float value ) { sounds = value; } -void idEntity::SetNoiseValue1(string value) -{ +void idEntity::SetNoiseValue1( string value ) { noise = value; } -void idEntity::SetNoiseValue2(string value) -{ +void idEntity::SetNoiseValue2( string value ) { noise1 = value; } -void idEntity::SetNoiseValue3(string value) -{ +void idEntity::SetNoiseValue3( string value ) { noise2 = value; } -void idEntity::SetNoiseValue4(string value) -{ +void idEntity::SetNoiseValue4( string value ) { noise3 = value; } /* get functions */ -float idEntity::GetModelindex(void) -{ +float idEntity::GetModelindex( void ) { return modelindex; } -movetype_t idEntity::GetMovetype(void) -{ - return (movetype_t)movetype; +movetype_t idEntity::GetMovetype( void ) { + return ( movetype_t ) movetype; } -solid_t idEntity::GetSolid(void) -{ - return (solid_t)solid; +solid_t idEntity::GetSolid( void ) { + return ( solid_t ) solid; } -vector idEntity::GetOrigin(void) -{ +vector idEntity::GetOrigin( void ) { return origin; } -vector idEntity::GetVelocity(void) -{ +vector idEntity::GetVelocity( void ) { return velocity; } -vector idEntity::GetAngles(void) -{ +vector idEntity::GetAngles( void ) { return angles; } -vector idEntity::GetAngularVelocity(void) -{ +vector idEntity::GetAngularVelocity( void ) { return avelocity; } -vector idEntity::GetPunchangle(void) -{ +vector idEntity::GetPunchangle( void ) { return punchangle; } -string idEntity::GetModel(void) -{ +string idEntity::GetModel( void ) { return model; } -float idEntity::GetFrame(void) -{ +float idEntity::GetFrame( void ) { return frame; } -float idEntity::GetSkin(void) -{ +float idEntity::GetSkin( void ) { return skin; } -bool idEntity::HasEffect(effects_t value) -{ - return (effects & value) ? 1 : 0; +bool idEntity::HasEffect( effects_t value ) { + return ( effects & value ) ? 1 : 0; } -vector idEntity::GetSize(void) -{ +vector idEntity::GetSize( void ) { return size; } -float idEntity::GetHealth(void) -{ +float idEntity::GetHealth( void ) { return health; } -float idEntity::GetFrags(void) -{ +float idEntity::GetFrags( void ) { return frags; } -float idEntity::GetWeapon(void) -{ +float idEntity::GetWeapon( void ) { return weapon; } -string idEntity::GetWeaponmodel(void) -{ +string idEntity::GetWeaponmodel( void ) { return weaponmodel; } -float idEntity::GetWeaponframe(void) -{ +float idEntity::GetWeaponframe( void ) { return weaponframe; } -float idEntity::GetCurrentAmmo(void) -{ +float idEntity::GetCurrentAmmo( void ) { return currentammo; } -float idEntity::GetAmmoType1(void) -{ +float idEntity::GetAmmoType1( void ) { return ammo_shells; } -float idEntity::GetAmmoType2(void) -{ +float idEntity::GetAmmoType2( void ) { return ammo_nails; } -float idEntity::GetAmmoType3(void) -{ +float idEntity::GetAmmoType3( void ) { return ammo_rockets; } -float idEntity::GetAmmoType4(void) -{ +float idEntity::GetAmmoType4( void ) { return ammo_cells; } -float idEntity::CanTakeDamage(void) -{ - return (takedamage != DAMAGE_NO) ? TRUE : FALSE; +float idEntity::CanTakeDamage( void ) { + return ( takedamage != DAMAGE_NO ) ? TRUE : FALSE; } -vector idEntity::GetViewOffset(void) -{ +vector idEntity::GetViewOffset( void ) { return view_ofs; } -bool idEntity::HasFlag(flags_t value) -{ - return (flags & value) ? 1 : 0; +bool idEntity::HasFlag( flags_t value ) { + return ( flags & value ) ? 1 : 0; } -float idEntity::GetColormap(void) -{ +float idEntity::GetColormap( void ) { return colormap; } -string idEntity::GetDisplayname(void) -{ +string idEntity::GetDisplayname( void ) { return netname; } -float idEntity::GetMaxHealth(void) -{ +float idEntity::GetMaxHealth( void ) { return max_health; } -float idEntity::GetArmorType(void) -{ +float idEntity::GetArmorType( void ) { return armortype; } -float idEntity::GetArmor(void) -{ +float idEntity::GetArmor( void ) { return armorvalue; } -entity idEntity::GetAimEntity(void) -{ +entity idEntity::GetAimEntity( void ) { return aiment; } -entity idEntity::GetGoalEntity(void) -{ +entity idEntity::GetGoalEntity( void ) { return goalentity; } -string idEntity::GetTarget(void) -{ +string idEntity::GetTarget( void ) { return target; } -string idEntity::GetTargetname(void) -{ +string idEntity::GetTargetname( void ) { return targetname; } -entity idEntity::GetOwner(void) -{ +entity idEntity::GetOwner( void ) { return owner; } -vector idEntity::GetMovementDirection(void) -{ +vector idEntity::GetMovementDirection( void ) { return movedir; } -string idEntity::GetTriggerMessage(void) -{ +string idEntity::GetTriggerMessage( void ) { return message; } -float idEntity::GetSoundStyle(void) -{ +float idEntity::GetSoundStyle( void ) { return sounds; } -string idEntity::GetNoiseValue1(void) -{ +string idEntity::GetNoiseValue1( void ) { return noise; } -string idEntity::GetNoiseValue2(void) -{ +string idEntity::GetNoiseValue2( void ) { return noise1; } -string idEntity::GetNoiseValue3(void) -{ +string idEntity::GetNoiseValue3( void ) { return noise2; } -string idEntity::GetNoiseValue4(void) -{ +string idEntity::GetNoiseValue4( void ) { return noise3; -} \ No newline at end of file +} diff --git a/src/system/idEntity.qh b/src/system/idEntity.qh index 9e45ac9..bd811be 100644 --- a/src/system/idEntity.qh +++ b/src/system/idEntity.qh @@ -1,152 +1,187 @@ -#define bool float - -class idEntity -{ - void idEntity(void); +class idEntity { + void idEntity( void ); /* core engine tracked fields */ /** Sets the model of the entity via a model id. */ - nonvirtual void SetModelindex(float); + nonvirtual void SetModelindex( float ); /** Sets the movetype of the entity. See movetype_t for avalable options. */ - nonvirtual void SetMovetype(movetype_t); + nonvirtual void SetMovetype( movetype_t ); /** Sets the solid property of the entity. See solid_t for available options. */ - nonvirtual void SetSolid(solid_t); + nonvirtual void SetSolid( solid_t ); /** Sets the absolute position of the entity within the world. */ - nonvirtual void SetOrigin(vector); + nonvirtual void SetOrigin( vector ); /** Sets the velocity of the entity within the world at units-per-second. */ - nonvirtual void SetVelocity(vector); + nonvirtual void SetVelocity( vector ); /** Sets the angles the direction is facing via euler angles. */ - nonvirtual void SetAngles(vector); + nonvirtual void SetAngles( vector ); /** Sets the angular velocity of the entity at units-per-second per axis. */ - nonvirtual void SetAngularVelocity(vector); + nonvirtual void SetAngularVelocity( vector ); /** Sets the punchangle of the entity (players only) */ - nonvirtual void SetPunchangle(vector); + nonvirtual void SetPunchangle( vector ); /** Sets the model of the entity via a full path pointing to a model. */ - nonvirtual void SetModel(string); + nonvirtual void SetModel( string ); /** Sets the framegroup of the entity. */ - nonvirtual void SetFrame(float); + nonvirtual void SetFrame( float ); /** Sets the model skin of the entity. */ - nonvirtual void SetSkin(float); + nonvirtual void SetSkin( float ); /** Applies an effect to the entity. See effects_t for available options. */ - nonvirtual void AddEffect(effects_t); + nonvirtual void AddEffect( effects_t ); /** Removes an effect from the entity. See effects_t for available options. */ - nonvirtual void RemoveEffect(effects_t); + nonvirtual void RemoveEffect( effects_t ); /** Clears all the effects that are tied to the entity. */ - nonvirtual void ClearEffects(void); + nonvirtual void ClearEffects( void ); /** Sets the size of the entity, relative to its pivot point/origin. */ - nonvirtual void SetSize(vector, vector); + nonvirtual void SetSize( vector, vector ); /** Schedules a think, first parameter is function to call, second parm is the seconds to wait. */ - nonvirtual void ScheduleThink(void(), float); + nonvirtual void ScheduleThink( void (), float ); /** Sets the health of the entity. Will clamp to its maximum health. */ - nonvirtual void SetHealth(float); + nonvirtual void SetHealth( float ); /** Adds a frag to the entity its info. */ - nonvirtual void AddFrags(float); + nonvirtual void AddFrags( float ); /** Removes a frag from the entity its info. */ - nonvirtual void RemoveFrags(float); + nonvirtual void RemoveFrags( float ); /** Removes all frags. Should be called when they enter the game anew. */ - nonvirtual void ClearFrags(void); + nonvirtual void ClearFrags( void ); /** Sets the active weapon of the entity. */ - nonvirtual void SetWeapon(float); + nonvirtual void SetWeapon( float ); /** Sets the active weapon model of the entity. */ - nonvirtual void SetWeaponmodel(string); + nonvirtual void SetWeaponmodel( string ); /** Sets the active weapon model frame group of the entity. */ - nonvirtual void SetWeaponframe(float); + nonvirtual void SetWeaponframe( float ); /** Sets what the currently selected ammo on the heads up display. */ - nonvirtual void SetCurrentAmmo(float); + nonvirtual void SetCurrentAmmo( float ); /** Sets the value for ammo type 1. */ - nonvirtual void SetAmmoType1(float); + nonvirtual void SetAmmoType1( float ); /** Sets the value for ammo type 2. */ - nonvirtual void SetAmmoType2(float); + nonvirtual void SetAmmoType2( float ); /** Sets the value for ammo type 3. */ - nonvirtual void SetAmmoType3(float); + nonvirtual void SetAmmoType3( float ); /** Sets the value for ammo type 4. */ - nonvirtual void SetAmmoType4(float); + nonvirtual void SetAmmoType4( float ); /** TODO: This needs to be changed. */ - nonvirtual void SetTakedamage(damage_t); + nonvirtual void SetTakedamage( damage_t ); /** Sets the eye position of the entity. As an offset relative to its origin. */ - nonvirtual void SetViewOffset(vector); + nonvirtual void SetViewOffset( vector ); /** When called, will force the client to update its camera angles on the client-side. */ - nonvirtual void ForceUpdateClientAngle(void); + nonvirtual void ForceUpdateClientAngle( void ); /** Adds a flag to the entity. See flags_t for available options. */ - nonvirtual void AddFlags(flags_t); + nonvirtual void AddFlags( flags_t ); /** Removes a flag from the entity. See flags_t for available options. */ - nonvirtual void RemoveFlags(flags_t); + nonvirtual void RemoveFlags( flags_t ); /** Removes all flags from the entity. */ - nonvirtual void ClearFlags(void); + nonvirtual void ClearFlags( void ); /** Sets the colormap value to an entity, needed for palette swaps. */ - nonvirtual void SetColormap(float); + nonvirtual void SetColormap( float ); /** Sets the display name of an entity. This is used for obituaries for example. */ - nonvirtual void SetDisplayname(string); + nonvirtual void SetDisplayname( string ); /** Sets the maximum amount of health this entity can have. Default is 100. */ - nonvirtual void SetMaxHealth(float); + nonvirtual void SetMaxHealth( float ); /** Sets the armor type of an entity. This affects the HUD as well. */ - nonvirtual void SetArmorType(float); + nonvirtual void SetArmorType( float ); /** This sets the armor value of an entity. */ - nonvirtual void SetArmor(float); + nonvirtual void SetArmor( float ); /** Sets the aim entity of this entity. AI uses this. */ - nonvirtual void SetAimEntity(entity); + nonvirtual void SetAimEntity( entity ); /** Sets the goal entity of this entity. AI uses this. */ - nonvirtual void SetGoalEntity(entity); + nonvirtual void SetGoalEntity( entity ); /** Sets the target of this entity. It's referenced whenever we're being triggered. */ - nonvirtual void SetTarget(string); + nonvirtual void SetTarget( string ); /** Sets the targetname of this entity. It's referenced when somebody targets us. */ - nonvirtual void SetTargetname(string); + nonvirtual void SetTargetname( string ); /** Sets the owner of this entity. Entities don't collide with their owner. */ - nonvirtual void SetOwner(entity); + nonvirtual void SetOwner( entity ); /** Sets the movement direction of this entity. This only affects movables. */ - nonvirtual void SetMovementDirection(vector); + nonvirtual void SetMovementDirection( vector ); /** Sets the message to be display when this entity gets triggered. */ - nonvirtual void SetTriggerMessage(string); + nonvirtual void SetTriggerMessage( string ); /** Sets the sound style of this entity. These can be variable and mean anything. */ - nonvirtual void SetSoundStyle(float); - nonvirtual void SetNoiseValue1(string); - nonvirtual void SetNoiseValue2(string); - nonvirtual void SetNoiseValue3(string); - nonvirtual void SetNoiseValue4(string); + nonvirtual void SetSoundStyle( float ); + nonvirtual void SetNoiseValue1( string ); + nonvirtual void SetNoiseValue2( string ); + nonvirtual void SetNoiseValue3( string ); + nonvirtual void SetNoiseValue4( string ); - nonvirtual float GetModelindex(void); - nonvirtual movetype_t GetMovetype(void); - nonvirtual solid_t GetSolid(void); - nonvirtual vector GetOrigin(void); - nonvirtual vector GetVelocity(void); - nonvirtual vector GetAngles(void); - nonvirtual vector GetAngularVelocity(void); - nonvirtual vector GetPunchangle(void); - nonvirtual string GetModel(void); - nonvirtual float GetFrame(void); - nonvirtual float GetSkin(void); - nonvirtual bool HasEffect(effects_t); - nonvirtual vector GetSize(void); - nonvirtual float GetHealth(void); - nonvirtual float GetFrags(void); - nonvirtual float GetWeapon(void); - nonvirtual string GetWeaponmodel(void); - nonvirtual float GetWeaponframe(void); - nonvirtual float GetCurrentAmmo(void); - nonvirtual float GetAmmoType1(void); - nonvirtual float GetAmmoType2(void); - nonvirtual float GetAmmoType3(void); - nonvirtual float GetAmmoType4(void); - nonvirtual float CanTakeDamage(void); - nonvirtual vector GetViewOffset(void); - nonvirtual bool HasFlag(flags_t); - nonvirtual float GetColormap(void); - nonvirtual string GetDisplayname(void); - nonvirtual float GetMaxHealth(void); - nonvirtual float GetArmorType(void); - nonvirtual float GetArmor(void); - nonvirtual entity GetAimEntity(void); - nonvirtual entity GetGoalEntity(void); - nonvirtual string GetTarget(void); - nonvirtual string GetTargetname(void); - nonvirtual entity GetOwner(void); - nonvirtual vector GetMovementDirection(void); - nonvirtual string GetTriggerMessage(void); - nonvirtual float GetSoundStyle(void); - nonvirtual string GetNoiseValue1(void); - nonvirtual string GetNoiseValue2(void); - nonvirtual string GetNoiseValue3(void); - nonvirtual string GetNoiseValue4(void); + /** Returns the model id of the entity. */ + nonvirtual float GetModelindex( void ); + /** Returns the movetype of the entity. */ + nonvirtual movetype_t GetMovetype( void ); + /** Returns the solidity of the entity. */ + nonvirtual solid_t GetSolid( void ); + /** Returns the world position of the entity. */ + nonvirtual vector GetOrigin( void ); + /** Returns the velocity of the entity. */ + nonvirtual vector GetVelocity( void ); + /** Returns the direction of the entity in euler-angles. */ + nonvirtual vector GetAngles( void ); + /** Returns the angular velocity in units-per-second per axis. */ + nonvirtual vector GetAngularVelocity( void ); + /** Returns the current punchangle of the entity. */ + nonvirtual vector GetPunchangle( void ); + /** Returns the entity its model path. */ + nonvirtual string GetModel( void ); + /** Returns the framegroup of the current entity its model. */ + nonvirtual float GetFrame( void ); + /** Returns the model skin of the entity. */ + nonvirtual float GetSkin( void ); + /** Returns either TRUE or FALSE if the entity has a given effect. */ + nonvirtual bool HasEffect( effects_t ); + /** Returns the size of the entity relative to its origin. */ + nonvirtual vector GetSize( void ); + /** Returns the current health of the entity. */ + nonvirtual float GetHealth( void ); + /** Returns the number of frags this entity has had. */ + nonvirtual float GetFrags( void ); + /** Returns the active weapon of the entity. */ + nonvirtual float GetWeapon( void ); + /** Returns the weapon model of the entity. */ + nonvirtual string GetWeaponmodel( void ); + /** Returns the weapon model frame group of the entity. */ + nonvirtual float GetWeaponframe( void ); + /** Returns the currently held ammo of the entity. */ + nonvirtual float GetCurrentAmmo( void ); + /** Returns the amount of ammo type 1. */ + nonvirtual float GetAmmoType1( void ); + /** Returns the amount of ammo type 2. */ + nonvirtual float GetAmmoType2( void ); + /** Returns the amount of ammo type 3. */ + nonvirtual float GetAmmoType3( void ); + /** Returns the amount of ammo type 4. */ + nonvirtual float GetAmmoType4( void ); + /** Returns whether or not this entity can take damage. */ + nonvirtual float CanTakeDamage( void ); + /** Returns the eye position of the entity relative to its origin. */ + nonvirtual vector GetViewOffset( void ); + /** Returns either TRUE or FALSE if the entity has a given flag. */ + nonvirtual bool HasFlag( flags_t ); + /** Returns the colormap id of the entity. */ + nonvirtual float GetColormap( void ); + /** Returns the display name of the entity. Used in obituaries etc. */ + nonvirtual string GetDisplayname( void ); + /** Returns the maximum amount of health this entity can have. */ + nonvirtual float GetMaxHealth( void ); + /** Returns the armor type of the entity. */ + nonvirtual float GetArmorType( void ); + /** Returns the armor value of the entity. */ + nonvirtual float GetArmor( void ); + /** Returns the aim entity of the entity. */ + nonvirtual entity GetAimEntity( void ); + /** Returns the goal entity of the entity. */ + nonvirtual entity GetGoalEntity( void ); + /** Returns the target of the entity. */ + nonvirtual string GetTarget( void ); + /** Returns the target name of the entity. */ + nonvirtual string GetTargetname( void ); + /** Returns the owner of the entity. */ + nonvirtual entity GetOwner( void ); + /** Returns the movement direction of the entity. */ + nonvirtual vector GetMovementDirection( void ); + /** Returns the message the entity will display when triggered. */ + nonvirtual string GetTriggerMessage( void ); + /** Returns the sound style of the entity. */ + nonvirtual float GetSoundStyle( void ); + nonvirtual string GetNoiseValue1( void ); + nonvirtual string GetNoiseValue2( void ); + nonvirtual string GetNoiseValue3( void ); + nonvirtual string GetNoiseValue4( void ); }; - diff --git a/src/system/idPlayer.qc b/src/system/idPlayer.qc index 043891b..1e0ef04 100644 --- a/src/system/idPlayer.qc +++ b/src/system/idPlayer.qc @@ -1,11 +1,23 @@ -void idPlayer::idPlayer(void) -{ +void idPlayer::idPlayer( void ) { } -void idPlayer::PreThink(void) -{ +void idPlayer::PreThink( void ) { } -void idPlayer::PostThink(void) -{ -} \ No newline at end of file +void idPlayer::PostThink( void ) { +} + +void idPlayer::ResetPlayer( void ) { + ClearFlags(); + ClearEffects(); + ClearFrags(); + SetModel( "progs/player.mdl" ); + SetMovetype( MOVETYPE_WALK ); + SetSolid( SOLID_SLIDEBOX ); + SetViewOffset( [0, 0, 24] ); + AddFlags( FL_CLIENT ); + SetSize( VEC_HULL_MIN, VEC_HULL_MAX ); + SetHealth( 100 ); + SetArmorType( 0 ); + SetArmor( 0 ); +} diff --git a/src/system/idPlayer.qh b/src/system/idPlayer.qh index 3db941c..acdf3c1 100644 --- a/src/system/idPlayer.qh +++ b/src/system/idPlayer.qh @@ -1,7 +1,8 @@ -class idPlayer:idEntity -{ - void idPlayer(void); +class idPlayer:idEntity { + void idPlayer( void ); - nonvirtual void PreThink(void); - nonvirtual void PostThink(void); -}; \ No newline at end of file + nonvirtual void PreThink( void ); + nonvirtual void PostThink( void ); + + nonvirtual void ResetPlayer( void ); +}; diff --git a/src/system/idRules.qc b/src/system/idRules.qc index 68d6c50..6601ecd 100644 --- a/src/system/idRules.qc +++ b/src/system/idRules.qc @@ -1,18 +1,25 @@ -void idRules:: idRules(void) -{ +void idRules::idRules( void ) { } -void idRules::PlayerConnects(idPlayer pl) -{ - bprint("Player connected.\n"); +void idRules::PlayerConnects( idPlayer pl ) { + g_idEngine.BPrint( "Player connected.\n" ); } -void idRules::PlayerDisconnects(idPlayer pl) -{ - bprint("Player disconnected.\n"); +void idRules::PlayerDisconnects( idPlayer pl ) { + g_idEngine.BPrint( "Player disconnected.\n" ); } -void idRules::PlayerFinishesJoining(idPlayer pl) -{ - bprint("Player joined the game fully.\n"); -} \ No newline at end of file +void idRules::PlayerFinishesJoining( idPlayer player ) { + g_idEngine.BPrint( "Player joined the game fully.\n" ); + + /* reset them fully */ + player.ResetPlayer(); + + /* place them to the nearest spawn point */ + { + idPlayerStart spawn = world; + + spawn.MovePlayerToStart( player ); + } + +} diff --git a/src/system/idRules.qh b/src/system/idRules.qh index 861b04b..f95474c 100644 --- a/src/system/idRules.qh +++ b/src/system/idRules.qh @@ -1,10 +1,9 @@ -class idRules -{ - void idRules(void); +class idRules { + void idRules( void ); - nonvirtual void PlayerConnects(idPlayer); - nonvirtual void PlayerDisconnects(idPlayer); - nonvirtual void PlayerFinishesJoining(idPlayer); + nonvirtual void PlayerConnects( idPlayer ); + nonvirtual void PlayerDisconnects( idPlayer ); + nonvirtual void PlayerFinishesJoining( idPlayer ); }; -idRules g_gameRules; \ No newline at end of file +idRules g_gameRules; diff --git a/src/system/sources.src b/src/system/sources.src index 5ea2188..1d021b7 100644 --- a/src/system/sources.src +++ b/src/system/sources.src @@ -1,4 +1,5 @@ #includelist +idEngine.qc idEntity.qc idPlayer.qc idRules.qc