diff --git a/.dir.tiff b/.dir.tiff new file mode 100644 index 0000000..021f717 Binary files /dev/null and b/.dir.tiff differ diff --git a/LICENSE b/COPYING similarity index 100% rename from LICENSE rename to COPYING diff --git a/zpak001.pk3dir/PAK_NAME b/PAK_NAME similarity index 100% rename from zpak001.pk3dir/PAK_NAME rename to PAK_NAME diff --git a/PROJECT b/PROJECT index ae47d31..013f924 100644 --- a/PROJECT +++ b/PROJECT @@ -1 +1 @@ -TeamContest \ No newline at end of file +TeamEffort diff --git a/README.md b/README.md index 99bca50..85bdb6d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Team Contest (FreeTFC) +# Team Effort (FreeTFC) Clean-room reimplementation of Team Fortress Classic in QuakeC. ![Preview 1](img/preview1.jpg) @@ -29,7 +29,7 @@ We've had people ask in the oddest of places for help, please don't do that. ## License ISC License -Copyright (c) 2016-2021 Marco Hladik +Copyright (c) 2016-2024 Marco Hladik Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above diff --git a/zpak001.pk3dir/cfg/skill.cfg b/cfg/skill.cfg similarity index 100% rename from zpak001.pk3dir/cfg/skill.cfg rename to cfg/skill.cfg diff --git a/zpak001.pk3dir/cfg/skill_manifest.cfg b/cfg/skill_manifest.cfg similarity index 100% rename from zpak001.pk3dir/cfg/skill_manifest.cfg rename to cfg/skill_manifest.cfg diff --git a/zpak001.pk3dir/data/avanti.way b/data/avanti.way similarity index 100% rename from zpak001.pk3dir/data/avanti.way rename to data/avanti.way diff --git a/zpak001.pk3dir/data/badlands.way b/data/badlands.way similarity index 100% rename from zpak001.pk3dir/data/badlands.way rename to data/badlands.way diff --git a/zpak001.pk3dir/data/casbah.way b/data/casbah.way similarity index 100% rename from zpak001.pk3dir/data/casbah.way rename to data/casbah.way diff --git a/zpak001.pk3dir/data/crossover2.way b/data/crossover2.way similarity index 100% rename from zpak001.pk3dir/data/crossover2.way rename to data/crossover2.way diff --git a/zpak001.pk3dir/data/cz2.way b/data/cz2.way similarity index 100% rename from zpak001.pk3dir/data/cz2.way rename to data/cz2.way diff --git a/zpak001.pk3dir/data/dustbowl.way b/data/dustbowl.way similarity index 100% rename from zpak001.pk3dir/data/dustbowl.way rename to data/dustbowl.way diff --git a/zpak001.pk3dir/data/epicenter.way b/data/epicenter.way similarity index 100% rename from zpak001.pk3dir/data/epicenter.way rename to data/epicenter.way diff --git a/zpak001.pk3dir/data/flagrun.way b/data/flagrun.way similarity index 100% rename from zpak001.pk3dir/data/flagrun.way rename to data/flagrun.way diff --git a/zpak001.pk3dir/data/hunted.way b/data/hunted.way similarity index 100% rename from zpak001.pk3dir/data/hunted.way rename to data/hunted.way diff --git a/zpak001.pk3dir/data/push.way b/data/push.way similarity index 100% rename from zpak001.pk3dir/data/push.way rename to data/push.way diff --git a/zpak001.pk3dir/data/rock2.way b/data/rock2.way similarity index 100% rename from zpak001.pk3dir/data/rock2.way rename to data/rock2.way diff --git a/zpak001.pk3dir/data/warpath.way b/data/warpath.way similarity index 100% rename from zpak001.pk3dir/data/warpath.way rename to data/warpath.way diff --git a/zpak001.pk3dir/data/well.way b/data/well.way similarity index 100% rename from zpak001.pk3dir/data/well.way rename to data/well.way diff --git a/zpak001.pk3dir/decls/def/ammo.def b/decls/def/ammo.def similarity index 100% rename from zpak001.pk3dir/decls/def/ammo.def rename to decls/def/ammo.def diff --git a/zpak001.pk3dir/decls/def/armor.def b/decls/def/armor.def similarity index 100% rename from zpak001.pk3dir/decls/def/armor.def rename to decls/def/armor.def diff --git a/zpak001.pk3dir/decls/def/items.def b/decls/def/items.def similarity index 83% rename from zpak001.pk3dir/decls/def/items.def rename to decls/def/items.def index 46df44d..221d8fc 100644 --- a/zpak001.pk3dir/decls/def/items.def +++ b/decls/def/items.def @@ -1,6 +1,6 @@ entityDef item_suit { - "spawnclass" "NSItem" + "spawnclass" "ncItem" "model" "models/w_suit.mdl" "mins" "-16 -16 0" "maxs" "16 16 16" diff --git a/zpak001.pk3dir/decls/def/monsters.def b/decls/def/monsters.def similarity index 100% rename from zpak001.pk3dir/decls/def/monsters.def rename to decls/def/monsters.def diff --git a/zpak001.pk3dir/decls/def/player.def b/decls/def/player.def similarity index 91% rename from zpak001.pk3dir/decls/def/player.def rename to decls/def/player.def index 9fb43ed..0b92487 100644 --- a/zpak001.pk3dir/decls/def/player.def +++ b/decls/def/player.def @@ -3,9 +3,15 @@ entityDef player "spawnclass" "TFPlayer" } +entityDef player_shared +{ + "inherit" "player" + "item" "item_suit" +} + entityDef player_scout { - "inherit" "player" + "inherit" "player_shared" "model" "models/player/scout/scout.mdl" "health" "75" "armor" "25" @@ -23,7 +29,7 @@ entityDef player_scout entityDef player_sniper { - "inherit" "player" + "inherit" "player_shared" "model" "models/player/sniper/sniper.mdl" "health" "90" "armor" "0" @@ -41,7 +47,7 @@ entityDef player_sniper entityDef player_soldier { - "inherit" "player" + "inherit" "player_shared" "model" "models/player/soldier/soldier.mdl" "health" "100" "armor" "100" @@ -59,7 +65,7 @@ entityDef player_soldier entityDef player_demo { - "inherit" "player" + "inherit" "player_shared" "model" "models/player/demo/demo.mdl" "health" "90" "armor" "50" @@ -77,7 +83,7 @@ entityDef player_demo entityDef player_medic { - "inherit" "player" + "inherit" "player_shared" "model" "models/player/medic/medic.mdl" "health" "90" "armor" "50" @@ -95,7 +101,7 @@ entityDef player_medic entityDef player_heavy { - "inherit" "player" + "inherit" "player_shared" "model" "models/player/hvyweapon/hvyweapon.mdl" "health" "100" "armor" "150" @@ -112,7 +118,7 @@ entityDef player_heavy entityDef player_pyro { - "inherit" "player" + "inherit" "player_shared" "model" "models/player/pyro/pyro.mdl" "health" "100" "armor" "50" @@ -131,7 +137,7 @@ entityDef player_pyro entityDef player_spy { - "inherit" "player" + "inherit" "player_shared" "model" "models/player/spy/spy.mdl" "health" "90" "armor" "25" @@ -149,7 +155,7 @@ entityDef player_spy entityDef player_engineer { - "inherit" "player" + "inherit" "player_shared" "model" "models/player/engineer/engineer.mdl" "health" "80" "armor" "25" @@ -168,7 +174,7 @@ entityDef player_engineer entityDef player_civilian { - "inherit" "player" + "inherit" "player_shared" "model" "models/player/civilian/civilian.mdl" "health" "50" "armor" "0" diff --git a/zpak001.pk3dir/decls/def/weapons.def b/decls/def/weapons.def similarity index 100% rename from zpak001.pk3dir/decls/def/weapons.def rename to decls/def/weapons.def diff --git a/zpak001.pk3dir/decls/def/weapons/ac.def b/decls/def/weapons/ac.def similarity index 100% rename from zpak001.pk3dir/decls/def/weapons/ac.def rename to decls/def/weapons/ac.def diff --git a/zpak001.pk3dir/decls/def/weapons/autorifle.def b/decls/def/weapons/autorifle.def similarity index 100% rename from zpak001.pk3dir/decls/def/weapons/autorifle.def rename to decls/def/weapons/autorifle.def diff --git a/zpak001.pk3dir/decls/def/weapons/axe.def b/decls/def/weapons/axe.def similarity index 100% rename from zpak001.pk3dir/decls/def/weapons/axe.def rename to decls/def/weapons/axe.def diff --git a/zpak001.pk3dir/decls/def/weapons/flamethrower.def b/decls/def/weapons/flamethrower.def similarity index 98% rename from zpak001.pk3dir/decls/def/weapons/flamethrower.def rename to decls/def/weapons/flamethrower.def index 9bf1bbb..e0d6307 100644 --- a/zpak001.pk3dir/decls/def/weapons/flamethrower.def +++ b/decls/def/weapons/flamethrower.def @@ -44,7 +44,7 @@ entityDef fireInfo_tfFlameThrower entityDef projectile_tfFire { - "spawnclass" "NSProjectile" + "spawnclass" "ncProjectile" "model" "sprites/fthrow.spr" "def_damage" "tfFireDirect" diff --git a/zpak001.pk3dir/decls/def/weapons/gl.def b/decls/def/weapons/gl.def similarity index 98% rename from zpak001.pk3dir/decls/def/weapons/gl.def rename to decls/def/weapons/gl.def index f17a1b8..39c51d0 100644 --- a/zpak001.pk3dir/decls/def/weapons/gl.def +++ b/decls/def/weapons/gl.def @@ -47,7 +47,7 @@ entityDef fireInfo_tfGrenadeLauncher entityDef projectile_tfPipebomb { - "spawnclass" "NSProjectile" + "spawnclass" "ncProjectile" "model" "models/pipebomb.mdl" "skin" "1" "frame" "1" diff --git a/zpak001.pk3dir/decls/def/weapons/ic.def b/decls/def/weapons/ic.def similarity index 98% rename from zpak001.pk3dir/decls/def/weapons/ic.def rename to decls/def/weapons/ic.def index bd679e4..de7cff3 100644 --- a/zpak001.pk3dir/decls/def/weapons/ic.def +++ b/decls/def/weapons/ic.def @@ -42,7 +42,7 @@ entityDef tf_weapon_ic entityDef projectile_tfIncendiaryRocket { - "spawnclass" "NSProjectile" + "spawnclass" "ncProjectile" "model" "models/rpgrocket.mdl" "def_damage" "damage_tfIncendiaryRocketDirect" diff --git a/zpak001.pk3dir/decls/def/weapons/knife.def b/decls/def/weapons/knife.def similarity index 100% rename from zpak001.pk3dir/decls/def/weapons/knife.def rename to decls/def/weapons/knife.def diff --git a/zpak001.pk3dir/decls/def/weapons/medikit.def b/decls/def/weapons/medikit.def similarity index 100% rename from zpak001.pk3dir/decls/def/weapons/medikit.def rename to decls/def/weapons/medikit.def diff --git a/zpak001.pk3dir/decls/def/weapons/ng.def b/decls/def/weapons/ng.def similarity index 92% rename from zpak001.pk3dir/decls/def/weapons/ng.def rename to decls/def/weapons/ng.def index 4346bb0..d04973d 100644 --- a/zpak001.pk3dir/decls/def/weapons/ng.def +++ b/decls/def/weapons/ng.def @@ -33,13 +33,13 @@ entityDef tf_weapon_ng entityDef debris_tfNail { - "spawnclass" "NSProjectile" + "spawnclass" "ncProjectile" "model" "models/nail.mdl" } entityDef projectile_tfNail { - "spawnclass" "NSProjectile" + "spawnclass" "ncProjectile" "model" "models/nail.mdl" "velocity" "1000 0 0" "angular_velocity" "0 0 20" @@ -54,10 +54,11 @@ entityDef projectile_tfNail "detonate_on_actor" "1" "projectile_debris" "debris_tfNail" "model_detonate" "impact_default.main" - "decal_detonate" "ExplosionScorch" + "decal_detonate" "Impact.Shot" "debris_count" "1" "debris_stick" "1" "debris_offset" "-2 0 0" + "offset" "0 3 -6" } entityDef fireInfo_tfNailGun @@ -66,4 +67,4 @@ entityDef fireInfo_tfNailGun "fireRate" "0.1" "punchAngle" "-4 0 0" "model_flash" "sprites/muzzleflash2.spr" -} \ No newline at end of file +} diff --git a/zpak001.pk3dir/decls/def/weapons/pl.def b/decls/def/weapons/pl.def similarity index 98% rename from zpak001.pk3dir/decls/def/weapons/pl.def rename to decls/def/weapons/pl.def index 52ba078..692bf36 100644 --- a/zpak001.pk3dir/decls/def/weapons/pl.def +++ b/decls/def/weapons/pl.def @@ -48,7 +48,7 @@ entityDef fireInfo_tfStickyLauncher entityDef projectile_tfStickybomb { - "spawnclass" "NSProjectile" + "spawnclass" "ncProjectile" "model" "models/pipebomb.mdl" "frame" "1" "bounce" "1" diff --git a/zpak001.pk3dir/decls/def/weapons/railgun.def b/decls/def/weapons/railgun.def similarity index 97% rename from zpak001.pk3dir/decls/def/weapons/railgun.def rename to decls/def/weapons/railgun.def index 3988367..bd166f3 100644 --- a/zpak001.pk3dir/decls/def/weapons/railgun.def +++ b/decls/def/weapons/railgun.def @@ -39,7 +39,7 @@ entityDef tf_weapon_railgun entityDef projectile_tfRailShot { - "spawnclass" "NSProjectile" + "spawnclass" "ncProjectile" "model" "" "def_damage" "damage_tfRailDirect" @@ -70,7 +70,7 @@ entityDef projectile_tfRailShot entityDef projectile_tfRailChargedShot { - "spawnclass" "NSProjectile" + "spawnclass" "ncProjectile" "model" "" "def_damage" "damage_tfRailChargeDirect" diff --git a/zpak001.pk3dir/decls/def/weapons/rpg.def b/decls/def/weapons/rpg.def similarity index 98% rename from zpak001.pk3dir/decls/def/weapons/rpg.def rename to decls/def/weapons/rpg.def index 55656a3..a4e1217 100644 --- a/zpak001.pk3dir/decls/def/weapons/rpg.def +++ b/decls/def/weapons/rpg.def @@ -41,7 +41,7 @@ entityDef tf_weapon_rpg entityDef projectile_tfRocket { - "spawnclass" "NSProjectile" + "spawnclass" "ncProjectile" "model" "models/rpgrocket.mdl" "def_damage" "damage_tfRocketDirect" diff --git a/zpak001.pk3dir/decls/def/weapons/shotgun.def b/decls/def/weapons/shotgun.def similarity index 100% rename from zpak001.pk3dir/decls/def/weapons/shotgun.def rename to decls/def/weapons/shotgun.def diff --git a/zpak001.pk3dir/decls/def/weapons/sniperrifle.def b/decls/def/weapons/sniperrifle.def similarity index 100% rename from zpak001.pk3dir/decls/def/weapons/sniperrifle.def rename to decls/def/weapons/sniperrifle.def diff --git a/zpak001.pk3dir/decls/def/weapons/spanner.def b/decls/def/weapons/spanner.def similarity index 100% rename from zpak001.pk3dir/decls/def/weapons/spanner.def rename to decls/def/weapons/spanner.def diff --git a/zpak001.pk3dir/decls/def/weapons/superng.def b/decls/def/weapons/superng.def similarity index 97% rename from zpak001.pk3dir/decls/def/weapons/superng.def rename to decls/def/weapons/superng.def index c68eed2..cb3239b 100644 --- a/zpak001.pk3dir/decls/def/weapons/superng.def +++ b/decls/def/weapons/superng.def @@ -33,7 +33,7 @@ entityDef tf_weapon_superng entityDef projectile_tfSuperNail { - "spawnclass" "NSProjectile" + "spawnclass" "ncProjectile" "model" "models/nail.mdl" "velocity" "1000 0 0" "angular_velocity" "0 0 20" diff --git a/zpak001.pk3dir/decls/def/weapons/supershotgun.def b/decls/def/weapons/supershotgun.def similarity index 100% rename from zpak001.pk3dir/decls/def/weapons/supershotgun.def rename to decls/def/weapons/supershotgun.def diff --git a/zpak001.pk3dir/decls/def/weapons/tranq.def b/decls/def/weapons/tranq.def similarity index 98% rename from zpak001.pk3dir/decls/def/weapons/tranq.def rename to decls/def/weapons/tranq.def index f27b051..159c190 100644 --- a/zpak001.pk3dir/decls/def/weapons/tranq.def +++ b/decls/def/weapons/tranq.def @@ -49,7 +49,7 @@ entityDef fireInfo_tfTranq entityDef projectile_tfTranq { - "spawnclass" "NSProjectile" + "spawnclass" "ncProjectile" "model" "models/nail.mdl" "velocity" "1000 0 0" "angular_velocity" "0 0 20" diff --git a/zpak001.pk3dir/decls/def/weapons/umbrella.def b/decls/def/weapons/umbrella.def similarity index 100% rename from zpak001.pk3dir/decls/def/weapons/umbrella.def rename to decls/def/weapons/umbrella.def diff --git a/zpak001.pk3dir/decls/sound/items_tfc.sndshd b/decls/sound/items_tfc.sndshd similarity index 100% rename from zpak001.pk3dir/decls/sound/items_tfc.sndshd rename to decls/sound/items_tfc.sndshd diff --git a/zpak001.pk3dir/decls/sound/player_tfc.sndshd b/decls/sound/player_tfc.sndshd similarity index 100% rename from zpak001.pk3dir/decls/sound/player_tfc.sndshd rename to decls/sound/player_tfc.sndshd diff --git a/zpak001.pk3dir/decls/sound/turret_tfc.sndshd b/decls/sound/turret_tfc.sndshd similarity index 100% rename from zpak001.pk3dir/decls/sound/turret_tfc.sndshd rename to decls/sound/turret_tfc.sndshd diff --git a/zpak001.pk3dir/decls/sound/weapons_tfc.sndshd b/decls/sound/weapons_tfc.sndshd similarity index 100% rename from zpak001.pk3dir/decls/sound/weapons_tfc.sndshd rename to decls/sound/weapons_tfc.sndshd diff --git a/default_tfc.cfg b/default_tfc.cfg new file mode 100644 index 0000000..a1f7eab --- /dev/null +++ b/default_tfc.cfg @@ -0,0 +1,2 @@ +set "hostname" "FreeTFC Server" +set "maxplayers" "8" diff --git a/icon.tga b/icon.tga new file mode 100644 index 0000000..6de816c Binary files /dev/null and b/icon.tga differ diff --git a/instructions.txt b/instructions.txt deleted file mode 100644 index b797313..0000000 --- a/instructions.txt +++ /dev/null @@ -1,2 +0,0 @@ -In order to play this FreeHL addon, please move the folder this file is -in into the same place where 'valve' and 'default.fmf' reside. Thanks! \ No newline at end of file diff --git a/manifest.fmf b/manifest.fmf deleted file mode 100644 index 2ba1414..0000000 --- a/manifest.fmf +++ /dev/null @@ -1,14 +0,0 @@ -FTEMANIFEST 1 -GAME tfc -NAME "Team Fortress" -BASEGAME platform -BASEGAME valve -BASEGAME tfc - -// you don't really want to change these -RTCBROKER master.frag-net.com:27950 -PROTOCOLNAME "Nuclide" -MAINCONFIG game.cfg -DOWNLOADSURL "http://www.frag-net.com/dl/packages" - --exec platform_default.cfg diff --git a/maps/2fort.jpg b/maps/2fort.jpg new file mode 100644 index 0000000..425649c Binary files /dev/null and b/maps/2fort.jpg differ diff --git a/zpak001.pk3dir/maps/2fort_src.jpg b/maps/2fort_src.jpg similarity index 100% rename from zpak001.pk3dir/maps/2fort_src.jpg rename to maps/2fort_src.jpg diff --git a/maps/avanti.jpg b/maps/avanti.jpg new file mode 100644 index 0000000..0bc000b Binary files /dev/null and b/maps/avanti.jpg differ diff --git a/zpak001.pk3dir/maps/avanti_src.jpg b/maps/avanti_src.jpg similarity index 100% rename from zpak001.pk3dir/maps/avanti_src.jpg rename to maps/avanti_src.jpg diff --git a/maps/badlands.jpg b/maps/badlands.jpg new file mode 100644 index 0000000..2e0202a Binary files /dev/null and b/maps/badlands.jpg differ diff --git a/zpak001.pk3dir/maps/badlands_src.jpg b/maps/badlands_src.jpg similarity index 100% rename from zpak001.pk3dir/maps/badlands_src.jpg rename to maps/badlands_src.jpg diff --git a/maps/casbah.jpg b/maps/casbah.jpg new file mode 100644 index 0000000..a00135f Binary files /dev/null and b/maps/casbah.jpg differ diff --git a/zpak001.pk3dir/maps/casbah_src.jpg b/maps/casbah_src.jpg similarity index 100% rename from zpak001.pk3dir/maps/casbah_src.jpg rename to maps/casbah_src.jpg diff --git a/maps/crossover2.jpg b/maps/crossover2.jpg new file mode 100644 index 0000000..ea1c985 Binary files /dev/null and b/maps/crossover2.jpg differ diff --git a/zpak001.pk3dir/maps/crossover2_src.jpg b/maps/crossover2_src.jpg similarity index 100% rename from zpak001.pk3dir/maps/crossover2_src.jpg rename to maps/crossover2_src.jpg diff --git a/maps/cz2.jpg b/maps/cz2.jpg new file mode 100644 index 0000000..385fdb7 Binary files /dev/null and b/maps/cz2.jpg differ diff --git a/zpak001.pk3dir/maps/cz2_src.jpg b/maps/cz2_src.jpg similarity index 100% rename from zpak001.pk3dir/maps/cz2_src.jpg rename to maps/cz2_src.jpg diff --git a/maps/dustbowl.jpg b/maps/dustbowl.jpg new file mode 100644 index 0000000..cdba3d5 Binary files /dev/null and b/maps/dustbowl.jpg differ diff --git a/zpak001.pk3dir/maps/dustbowl_src.jpg b/maps/dustbowl_src.jpg similarity index 100% rename from zpak001.pk3dir/maps/dustbowl_src.jpg rename to maps/dustbowl_src.jpg diff --git a/maps/epicenter.jpg b/maps/epicenter.jpg new file mode 100644 index 0000000..03f8057 Binary files /dev/null and b/maps/epicenter.jpg differ diff --git a/zpak001.pk3dir/maps/epicenter_src.jpg b/maps/epicenter_src.jpg similarity index 100% rename from zpak001.pk3dir/maps/epicenter_src.jpg rename to maps/epicenter_src.jpg diff --git a/maps/flagrun.jpg b/maps/flagrun.jpg new file mode 100644 index 0000000..9e423ef Binary files /dev/null and b/maps/flagrun.jpg differ diff --git a/zpak001.pk3dir/maps/flagrun_src.jpg b/maps/flagrun_src.jpg similarity index 100% rename from zpak001.pk3dir/maps/flagrun_src.jpg rename to maps/flagrun_src.jpg diff --git a/maps/hunted.jpg b/maps/hunted.jpg new file mode 100644 index 0000000..bdc35df Binary files /dev/null and b/maps/hunted.jpg differ diff --git a/zpak001.pk3dir/maps/hunted_src.jpg b/maps/hunted_src.jpg similarity index 100% rename from zpak001.pk3dir/maps/hunted_src.jpg rename to maps/hunted_src.jpg diff --git a/maps/push.jpg b/maps/push.jpg new file mode 100644 index 0000000..1c54398 Binary files /dev/null and b/maps/push.jpg differ diff --git a/zpak001.pk3dir/maps/push_src.jpg b/maps/push_src.jpg similarity index 100% rename from zpak001.pk3dir/maps/push_src.jpg rename to maps/push_src.jpg diff --git a/maps/rock2.jpg b/maps/rock2.jpg new file mode 100644 index 0000000..96d2023 Binary files /dev/null and b/maps/rock2.jpg differ diff --git a/zpak001.pk3dir/maps/rock2_src.jpg b/maps/rock2_src.jpg similarity index 100% rename from zpak001.pk3dir/maps/rock2_src.jpg rename to maps/rock2_src.jpg diff --git a/maps/warpath.jpg b/maps/warpath.jpg new file mode 100644 index 0000000..dfcfe8a Binary files /dev/null and b/maps/warpath.jpg differ diff --git a/zpak001.pk3dir/maps/warpath_src.jpg b/maps/warpath_src.jpg similarity index 100% rename from zpak001.pk3dir/maps/warpath_src.jpg rename to maps/warpath_src.jpg diff --git a/maps/well.jpg b/maps/well.jpg new file mode 100644 index 0000000..91eea41 Binary files /dev/null and b/maps/well.jpg differ diff --git a/zpak001.pk3dir/maps/well_src.jpg b/maps/well_src.jpg similarity index 100% rename from zpak001.pk3dir/maps/well_src.jpg rename to maps/well_src.jpg diff --git a/zpak001.pk3dir/particles/weapon_railgun.cfg b/particles/weapon_railgun.cfg similarity index 100% rename from zpak001.pk3dir/particles/weapon_railgun.cfg rename to particles/weapon_railgun.cfg diff --git a/quake.rc b/quake.rc new file mode 100644 index 0000000..ea26d80 --- /dev/null +++ b/quake.rc @@ -0,0 +1,5 @@ +exec default_controls.cfg +exec default_cvar.cfg +exec default_video.cfg +exec default_valve.cfg +exec default_tfc.cfg diff --git a/radiant.game b/radiant.game deleted file mode 100644 index a3bb8b1..0000000 --- a/radiant.game +++ /dev/null @@ -1,26 +0,0 @@ - - diff --git a/radiant.xml b/radiant.xml deleted file mode 100644 index 84fafec..0000000 --- a/radiant.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - - "hlcsg" - "hlbsp" - "hlvis" - "hlrad" - - qbsp -hlbsp -basedir "[EnginePath]" -gamedir "[GameName]" -path "[UserEnginePath]" - qvis -basedir "[EnginePath]" -gamedir "[GameName]" -path "[UserEnginePath]" - qlight -basedir "[EnginePath]" -gamedir "[GameName]" -path "[UserEnginePath]" - - - [csg] "[MapFile]" - [bsp] "[MapFile]" - [vis] -full "[MapFile]" - [light] -extra "[MapFile]" - - - [csg] "[MapFile]" - [bsp] "[MapFile]" - [vis] "[MapFile]" - [light] "[MapFile]" - - - [csg] "[MapFile]" - [bsp] "[MapFile]" - [vis] -fast "[MapFile]" - [light] -fast "[MapFile]" - - - [csg] "[MapFile]" - [bsp] "[MapFile]" - [vis] -fast "[MapFile]" - - - [csg] "[MapFile]" - [bsp] "[MapFile]" - - - [csg] -onlyents "[MapFile]" - [bsp]"[MapFile]" - - - - - [qbsp] "[MapFile]" - [qvis] "[MapFile]" - [qlight] -extra "[MapFile]" - - - [qbsp] "[MapFile]" - [qvis] "[MapFile]" - [qlight] "[MapFile]" - - - [qbsp] "[MapFile]" - [qvis] -fast "[MapFile]" - [qlight] -fast "[MapFile]" - - - [qbsp] "[MapFile]" - [qvis] -fast "[MapFile]" - - - [qbsp] "[MapFile]" - - - [qbsp] -onlyents "[MapFile]" - - - diff --git a/zpak001.pk3dir/scripts/constants.txt b/scripts/constants.txt similarity index 100% rename from zpak001.pk3dir/scripts/constants.txt rename to scripts/constants.txt diff --git a/src/Makefile b/src/Makefile index cc3f82d..4bd1c05 100644 --- a/src/Makefile +++ b/src/Makefile @@ -2,4 +2,5 @@ CC=fteqcc all: cd client && $(MAKE) + cd rules && $(MAKE) cd server && $(MAKE) diff --git a/src/client/Makefile b/src/client/Makefile index 2fe44a4..bcb3bed 100644 --- a/src/client/Makefile +++ b/src/client/Makefile @@ -1,4 +1,4 @@ QCC=fteqcc all: - $(QCC) progs.src + $(QCC) $(CFLAGS) -I../../../src/platform/ -I../../../valve/src/shared/ progs.src diff --git a/src/client/cmds.qc b/src/client/cmds.qc index 5160ace..7edfdca 100644 --- a/src/client/cmds.qc +++ b/src/client/cmds.qc @@ -14,7 +14,7 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -void VGUI_ChooseClass(void); +void VGUI_ChooseClass(int); bool ClientGame_ConsoleCommand(void) @@ -31,7 +31,7 @@ ClientGame_ConsoleCommand(void) break; case "chooseclass": case "changeclass": - VGUI_ChooseClass(); + VGUI_ChooseClass(userinfo.GetInteger(pSeat->m_ePlayer, "*team")); break; case "chooseteam": case "changeteam": diff --git a/src/client/game_event.qc b/src/client/game_event.qc index d4e6d77..a5b72b3 100644 --- a/src/client/game_event.qc +++ b/src/client/game_event.qc @@ -24,20 +24,6 @@ ClientGame_EventParse(float fHeader) case EV_OBITUARY: Obituary_Parse(); break; - case EV_BLOOD: - vector vBloodPos; - vector vBloodColor; - - vBloodPos[0] = readcoord(); - vBloodPos[1] = readcoord(); - vBloodPos[2] = readcoord(); - - vBloodColor[0] = readbyte() / 255; - vBloodColor[1] = readbyte() / 255; - vBloodColor[2] = readbyte() / 255; - - FX_Blood(vBloodPos, vBloodColor); - break; case EV_CHAT: float fSender = readbyte(); float fTeam = readbyte(); @@ -55,15 +41,6 @@ ClientGame_EventParse(float fHeader) case EV_VIEWMODEL: View_PlayAnimation(readbyte()); break; - case EV_WEAPON_PICKUP: - int w = readbyte(); - - if (autocvar_cl_autoweaponswitch == 1) { - sendevent("PlayerSwitchWeapon", "i", w); - } - - HUD_WeaponPickupNotify(w); - break; default: return (0); } diff --git a/src/client/hallucination.qc b/src/client/hallucination.qc index 99ad049..e792f13 100644 --- a/src/client/hallucination.qc +++ b/src/client/hallucination.qc @@ -1,5 +1,5 @@ class -TFCHallucination:NSEntity +TFCHallucination:ncEntity { }; @@ -28,7 +28,8 @@ TFCHallucination_Insert(vector viewPosition, vector viewDirection) halluPos += v_forward * random(8, 64); halluPos += v_up * random(-64, 64); halluPos += v_right * random(-64, 64); - FX_Blood(halluPos, [1,0,0]); + #warning FIX THE BLOOD CALL! + //FX_Blood(halluPos, [1,0,0]); } pointsound(viewPosition, "weapons/cbar_hitbod1.wav", 1, ATTN_NORM); break; @@ -67,7 +68,7 @@ TFCHallucination_Insert(vector viewPosition, vector viewDirection) break; case 7: /* nade thrown about */ int nadeSelection = (int)floor(random(0, 8)); - NSRenderableEntity eNade = spawn(NSRenderableEntity); + ncRenderableEntity eNade = spawn(ncRenderableEntity); switch (nadeSelection) { case 1: @@ -107,7 +108,7 @@ TFCHallucination_Insert(vector viewPosition, vector viewDirection) break; case 8: /* nail shot around */ halluPos = viewPosition + (v_forward * -32) + (v_right * random(-64, 64)); - NSRenderableEntity eNail = spawn(NSRenderableEntity); + ncRenderableEntity eNail = spawn(ncRenderableEntity); eNail.SetModel("models/nail.mdl"); eNail.SetOrigin(halluPos); eNail.SetMovetype(MOVETYPE_NOCLIP); diff --git a/src/client/hud_ammonotify.qc b/src/client/hud_ammonotify.qc index 11ca3a5..58dc8f8 100644 --- a/src/client/hud_ammonotify.qc +++ b/src/client/hud_ammonotify.qc @@ -76,7 +76,7 @@ HUD_AmmoNotify_Insert(int type, int count) /* called whenever we should check for pickup updates */ void -HUD_AmmoNotify_Check(NSClientPlayer pl) +HUD_AmmoNotify_Check(ncPlayer pl) { HUD_AmmoNotify_Insert(0, pl.m_iAmmoTypes[1] - pl.m_iAmmoTypes_net[1]); HUD_AmmoNotify_Insert(1, pl.m_iAmmoTypes[2] - pl.m_iAmmoTypes_net[2]); diff --git a/src/client/hud_itemnotify.qc b/src/client/hud_itemnotify.qc index aa38106..56247cb 100644 --- a/src/client/hud_itemnotify.qc +++ b/src/client/hud_itemnotify.qc @@ -76,7 +76,7 @@ HUD_ItemNotify_Insert(int type, int count) /* called whenever we should check for pickup updates */ void -HUD_ItemNotify_Check(NSClientPlayer pl) +HUD_ItemNotify_Check(ncPlayer pl) { int healthdiff = bound(0, pl.health - pl.health_net, 100); int armordiff = bound(0, pl.armor - pl.armor_net, 100); diff --git a/src/client/init.qc b/src/client/init.qc index c92fd2e..bbb8d29 100644 --- a/src/client/init.qc +++ b/src/client/init.qc @@ -30,10 +30,9 @@ ClientGame_Init(float apilevel, string enginename, float engineversion) registercommand("-gren1"); registercommand("+gren2"); registercommand("-gren2"); - registercommand("chooseclass"); registercommand("changeclass"); - registercommand("chooseteam"); registercommand("changeteam"); + registercommand("chooseteam"); registercommand("lastinv"); registercommand("invnext"); @@ -59,8 +58,6 @@ ClientGame_RendererRestart(string rstr) Obituary_Precache(); Damage_Precache(); - FX_Blood_Init(); - /* HUD selection icons */ g_dmsg_spr = spriteframe("sprites/tfc_dmsg.spr", 0, 0.0f); g_tfchud1_spr = spriteframe("sprites/tfchud01.spr", 0, 0.0f); diff --git a/src/client/progs.src b/src/client/progs.src index ee00e31..338e480 100644 --- a/src/client/progs.src +++ b/src/client/progs.src @@ -1,6 +1,7 @@ #pragma target fte_5768 //#pragma flag enable assumeint #pragma progs_dat "../../csprogs.dat" +#pragma forcecrc 54730 #define CSQC #define CLIENT @@ -43,8 +44,8 @@ hud_ammonotify.qc ../../../valve/src/client/scoreboard.qc ../../../src/client/include.src -vgui_chooseteam.qc -vgui_changeclass.qc +../../../valve/src/client/vgui_chooseteam.qc +../../../valve/src/client/vgui_changeclass.qc ../../../src/shared/include.src #endlist diff --git a/src/client/vgui_changeclass.qc b/src/client/vgui_changeclass.qc deleted file mode 100644 index 0f6fdf0..0000000 --- a/src/client/vgui_changeclass.qc +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Copyright (c) 2016-2020 Marco Cawthorne - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER - * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -static string g_classDescrScout; -static string g_classDescrSniper; -static string g_classDescrSoldier; -static string g_classDescrDemoman; -static string g_classDescrMedic; -static string g_classDescrHWGuy; -static string g_classDescrPyro; -static string g_classDescrSpy; -static string g_classDescrEngineer; -static string g_classDescrRandomPC; - -static void -TFCClass_Init(void) -{ - g_classDescrScout = textfile_to_string("classes/short_scout.txt"); - g_classDescrSniper = textfile_to_string("classes/short_sniper.txt"); - g_classDescrSoldier = textfile_to_string("classes/short_soldier.txt"); - g_classDescrDemoman = textfile_to_string("classes/short_demoman.txt"); - g_classDescrMedic = textfile_to_string("classes/short_medic.txt"); - g_classDescrHWGuy = textfile_to_string("classes/short_hwguy.txt"); - g_classDescrPyro = textfile_to_string("classes/short_pyro.txt"); - g_classDescrSpy = textfile_to_string("classes/short_spy.txt"); - g_classDescrEngineer = textfile_to_string("classes/short_engineer.txt"); - g_classDescrRandomPC = textfile_to_string("classes/short_randompc.txt"); -} - -static VGUIWindow winClassSelection; -static VGUIPic imgClassPreview; -static VGUILabel lblClassTitle; -static VGUILabel lblClassDescription; -static VGUILabel lblClassCounter; - -class TFClassButton:VGUIButton -{ - void TFClassButton(void); - - virtual void OnMouseUp(void); - virtual void OnMouseEntered(void); -}; - -void -TFClassButton::TFClassButton(void) -{ -} - -void -TFClassButton::OnMouseUp(void) -{ - int classSelection = GetTag(); - sendevent("ClassJoin", "f", (float)classSelection); - winClassSelection.Hide(); -} - -void -TFClassButton::OnMouseEntered(void) -{ - int classSelection = GetTag(); - string teamName = "blue"; - - switch (getplayerkeyfloat(player_localnum, "*team")) { - case 1: - teamName = "blue"; - break; - case 2: - teamName = "red"; - break; - case 3: - teamName = "blue"; /* TFC doesn't ship with a real green. */ - break; - case 4: - teamName = "red"; /* TFC doesn't ship with a real yellow either. */ - break; - } - - switch (classSelection) { - case 1: - lblClassTitle.SetTitle(Titles_GetTextBody("Title_scout")); - imgClassPreview.SetImage(strcat("gfx/vgui/640_scout", teamName)); - lblClassDescription.SetTitle(g_classDescrScout); - break; - case 2: - lblClassTitle.SetTitle(Titles_GetTextBody("Title_sniper")); - imgClassPreview.SetImage(strcat("gfx/vgui/640_sniper", teamName)); - lblClassDescription.SetTitle(g_classDescrSniper); - break; - case 3: - lblClassTitle.SetTitle(Titles_GetTextBody("Title_soldier")); - imgClassPreview.SetImage(strcat("gfx/vgui/640_soldier", teamName)); - lblClassDescription.SetTitle(g_classDescrSoldier); - break; - case 4: - lblClassTitle.SetTitle(Titles_GetTextBody("Title_demoman")); - imgClassPreview.SetImage(strcat("gfx/vgui/640_demoman", teamName)); - lblClassDescription.SetTitle(g_classDescrDemoman); - break; - case 5: - lblClassTitle.SetTitle(Titles_GetTextBody("Title_medic")); - imgClassPreview.SetImage(strcat("gfx/vgui/640_medic", teamName)); - lblClassDescription.SetTitle(g_classDescrMedic); - break; - case 6: - lblClassTitle.SetTitle(Titles_GetTextBody("Title_hwguy")); - imgClassPreview.SetImage(strcat("gfx/vgui/640_hwguy", teamName)); - lblClassDescription.SetTitle(g_classDescrHWGuy); - break; - case 7: - lblClassTitle.SetTitle(Titles_GetTextBody("Title_pyro")); - imgClassPreview.SetImage(strcat("gfx/vgui/640_pyro", teamName)); - lblClassDescription.SetTitle(g_classDescrPyro); - break; - case 8: - lblClassTitle.SetTitle(Titles_GetTextBody("Title_spy")); - imgClassPreview.SetImage(strcat("gfx/vgui/640_spy", teamName)); - lblClassDescription.SetTitle(g_classDescrSpy); - break; - case 9: - lblClassTitle.SetTitle(Titles_GetTextBody("Title_engineer")); - imgClassPreview.SetImage(strcat("gfx/vgui/640_engineer", teamName)); - lblClassDescription.SetTitle(g_classDescrEngineer); - break; - case 0: - lblClassTitle.SetTitle(Titles_GetTextBody("RandomPC")); - imgClassPreview.SetImage(strcat("gfx/vgui/640_randompc", teamName)); - lblClassDescription.SetTitle(g_classDescrRandomPC); - break; - } -} - -string g_classnames [] = { - "Scout", - "Sniper", - "Soldier", - "Demoman", - "Medic", - "HWGuy", - "Pyro", - "Spy", - "Engineer", - "Random" -}; - -void -VGUI_ChooseClass(void) -{ - static int initialized; - static TFClassButton *btns; - static VGUILabel lblSelectClass; - static VGUIFrame frmClassInfo; - - if (!initialized) { - vector btnpos = [40,80]; - initialized = TRUE; - - TFCClass_Init(); - - winClassSelection = spawn(VGUIWindow); - winClassSelection.SetSize([640, 480]); - winClassSelection.SetStyleMask(VGUIWindowBorderless | VGUIWindowFullscreen); - - lblSelectClass = spawn(VGUILabel); - lblSelectClass.SetTitle(Titles_GetTextBody("Title_SelectYourClass")); - lblSelectClass.SetTextSize(19); - lblSelectClass.SetPos([40, 38]); - lblSelectClass.SetSize([400, 24]); - - frmClassInfo = spawn(VGUIFrame); - frmClassInfo.SetPos([176, 80]); - frmClassInfo.SetSize([424, 312]); - - imgClassPreview = spawn(VGUIPic); - imgClassPreview.SetPos([190, 90]); - - lblClassTitle = spawn(VGUILabel); - lblClassTitle.SetPos([338, 90]); - lblClassTitle.SetTextSize(19); - lblClassTitle.SetSize([320, 24]); - - lblClassCounter = spawn(VGUILabel); - lblClassCounter.SetPos([338, 90 + 32]); - lblClassCounter.SetSize([320, 18]); - - lblClassDescription = spawn(VGUILabel); - lblClassDescription.SetPos([338, 90 + 32 + 32]); - lblClassDescription.SetSize([250, 240]); - - g_uiDesktop.Add(winClassSelection); - winClassSelection.Add(lblSelectClass); - winClassSelection.Add(frmClassInfo); - winClassSelection.Add(imgClassPreview); - winClassSelection.Add(lblClassTitle); - winClassSelection.Add(lblClassCounter); - winClassSelection.Add(lblClassDescription); - - btns = memalloc(sizeof(TFClassButton) * g_classnames.length); - for (int i = 0; i < g_classnames.length; i++) { - btns[i] = spawn(TFClassButton); - btns[i].SetTitle(Titles_GetTextBody(g_classnames[i])); - btns[i].SetSize([124, 24]); - btns[i].SetPos(btnpos); - - if (i == 9) { - btns[i].SetKeyEquivalent("0"); - btns[i].SetTag(0); - } else { - btns[i].SetKeyEquivalent(ftos((float)i+1)); - btns[i].SetTag(i+1i); - } - - winClassSelection.Add(btns[i]); - btnpos[1] += 32; - } - } - - winClassSelection.Show(); - winClassSelection.SetPos((g_vidsize / 2) - (winClassSelection.GetSize() / 2)); -} \ No newline at end of file diff --git a/src/client/vgui_chooseteam.qc b/src/client/vgui_chooseteam.qc deleted file mode 100644 index 0ba9ecf..0000000 --- a/src/client/vgui_chooseteam.qc +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (c) 2016-2020 Marco Cawthorne - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER - * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -static VGUIWindow winChooseTeam; - -class TFTeamButton:VGUIButton -{ - void TFTeamButton(void); - - virtual void OnMouseUp(void); -}; - -void -TFTeamButton::TFTeamButton(void) -{ -} - -void -TFTeamButton::OnMouseUp(void) -{ - int tag = GetTag(); - - localcmd("changeclass\n"); - sendevent("TeamJoin", "f", (float)tag); - winChooseTeam.Hide(); -} - - -string -VGUI_ChooseTeam_MapInfo(void) -{ - static string mapinfo = __NULL__; - - if (mapinfo != __NULL__) - return mapinfo; - - filestream fileMap = fopen(strcat("maps/", mapname, ".txt"), FILE_READ); - string temp; - - if (fileMap != -1) { - while ((temp = fgets(fileMap))) { - mapinfo = strcat(mapinfo, temp, "\n"); - } - } else { - mapinfo = Titles_GetTextBody("Map_Description_not_available"); - } - - return mapinfo; -} - -void -VGUI_ChooseTeam(void) -{ - static int initialized; - static VGUIButton btnAutoAssign; - static VGUIButton btnGoSpectator; - static VGUIFrame frmMapInfo; - static VGUILabel lblSelectTeam; - static VGUILabel lblMapName; - static VGUILabel lblMapInfo; - - if (!initialized) { - vector btnpos = [40,80]; - - initialized = TRUE; - winChooseTeam = spawn(VGUIWindow); - winChooseTeam.SetSize('640 480'); - winChooseTeam.SetStyleMask(VGUIWindowBorderless | VGUIWindowFullscreen); - - lblSelectTeam = spawn(VGUILabel); - lblSelectTeam.SetTitle(Titles_GetTextBody("Title_SelectYourTeam")); - lblSelectTeam.SetTextSize(19); - lblSelectTeam.SetPos([40, 38]); - lblSelectTeam.SetSize('400 24'); - - frmMapInfo = spawn(VGUIFrame); - frmMapInfo.SetPos('176 80'); - frmMapInfo.SetSize('424 312'); - - lblMapName = spawn(VGUILabel); - lblMapName.SetTitle(mapname); - lblMapName.SetTextSize(19); - lblMapName.SetPos('194 105'); - lblMapName.SetSize('250 312'); - - lblMapInfo = spawn(VGUILabel); - lblMapInfo.SetTitle(VGUI_ChooseTeam_MapInfo()); - lblMapInfo.SetPos('194 129'); - lblMapInfo.SetSize('375 250'); - - for (int t = 1; t <= serverkeyfloat("teams"); t++) { - TFTeamButton btnForTeam; - string team_name = serverkey(sprintf("team_%i", t)); - - btnForTeam = spawn(TFTeamButton); - btnForTeam.SetTitle(strtoupper(team_name)); - btnForTeam.SetPos(btnpos); - btnForTeam.SetKeyEquivalent(ftos((float)t)); - btnForTeam.SetSize('124 24'); - - switch (team_name) { - case "Blue": - btnForTeam.SetTag(1); - break; - case "Red": - btnForTeam.SetTag(2); - break; - case "Green": - btnForTeam.SetTag(3); - break; - case "Yellow": - btnForTeam.SetTag(4); - break; - } - - winChooseTeam.Add(btnForTeam); - btnpos[1] += 32; - } - - btnAutoAssign = spawn(VGUIButton); - btnAutoAssign.SetTitle(Titles_GetTextBody("Team_AutoAssign")); - btnAutoAssign.SetPos(btnpos); - btnAutoAssign.SetSize('124 24'); - btnAutoAssign.SetKeyEquivalent("5"); - //btnAutoAssign.SetFunc(VGUI_AutoAssign); - btnpos[1] += 32; - - btnGoSpectator = spawn(VGUIButton); - btnGoSpectator.SetTitle(Titles_GetTextBody("Menu_Spectate")); - btnGoSpectator.SetPos(btnpos); - btnGoSpectator.SetSize('124 24'); - btnGoSpectator.SetKeyEquivalent("6"); - //btnGoSpectator.SetFunc(VGUI_GoSpectator); - - g_uiDesktop.Add(winChooseTeam); - winChooseTeam.Add(frmMapInfo); - winChooseTeam.Add(lblSelectTeam); - winChooseTeam.Add(lblMapName); - winChooseTeam.Add(lblMapInfo); - winChooseTeam.Add(btnAutoAssign); - winChooseTeam.Add(btnGoSpectator); - } - - winChooseTeam.Show(); - winChooseTeam.SetPos((g_vidsize / 2) - (winChooseTeam.GetSize() / 2)); -} diff --git a/src/client/vox.qc b/src/client/vox.qc index 24f4c18..7ad81e6 100644 --- a/src/client/vox.qc +++ b/src/client/vox.qc @@ -15,7 +15,7 @@ */ class -TFCVox:NSTalkMonster +TFCVox:ncTalkMonster { void(void) TFCVox; virtual void(string) SentenceSample; diff --git a/src/files.dat b/src/files.dat new file mode 100644 index 0000000..db7f644 --- /dev/null +++ b/src/files.dat @@ -0,0 +1,64 @@ +63 +1 cfg/skill.cfg +1 cfg/skill_manifest.cfg +1 data/avanti.way +1 data/badlands.way +1 data/casbah.way +1 data/crossover2.way +1 data/cz2.way +1 data/dustbowl.way +1 data/epicenter.way +1 data/flagrun.way +1 data/hunted.way +1 data/push.way +1 data/rock2.way +1 data/warpath.way +1 data/well.way +1 decls/def/ammo.def +1 decls/def/armor.def +1 decls/def/items.def +1 decls/def/monsters.def +1 decls/def/player.def +1 decls/def/weapons.def +1 decls/def/weapons/ac.def +1 decls/def/weapons/autorifle.def +1 decls/def/weapons/axe.def +1 decls/def/weapons/flamethrower.def +1 decls/def/weapons/gl.def +1 decls/def/weapons/ic.def +1 decls/def/weapons/knife.def +1 decls/def/weapons/medikit.def +1 decls/def/weapons/ng.def +1 decls/def/weapons/pl.def +1 decls/def/weapons/railgun.def +1 decls/def/weapons/rpg.def +1 decls/def/weapons/shotgun.def +1 decls/def/weapons/sniperrifle.def +1 decls/def/weapons/spanner.def +1 decls/def/weapons/superng.def +1 decls/def/weapons/supershotgun.def +1 decls/def/weapons/tranq.def +1 decls/def/weapons/umbrella.def +1 decls/sound/items_tfc.sndshd +1 decls/sound/player_tfc.sndshd +1 decls/sound/turret_tfc.sndshd +1 decls/sound/weapons_tfc.sndshd +1 default_tfc.cfg +1 maps/2fort.jpg +1 maps/avanti.jpg +1 maps/badlands.jpg +1 maps/casbah.jpg +1 maps/crossover2.jpg +1 maps/cz2.jpg +1 maps/dustbowl.jpg +1 maps/epicenter.jpg +1 maps/flagrun.jpg +1 maps/hunted.jpg +1 maps/push.jpg +1 maps/rock2.jpg +1 maps/warpath.jpg +1 maps/well.jpg +1 particles/weapon_railgun.cfg +1 progs/default.dat +1 quake.rc +1 scripts/constants.txt diff --git a/src/progs.src b/src/progs.src index 2c2a868..31ef574 100755 --- a/src/progs.src +++ b/src/progs.src @@ -1,2 +1,3 @@ #pragma sourcefile client/progs.src #pragma sourcefile server/progs.src +#pragma sourcefile rules/default.qc diff --git a/src/rules/Makefile b/src/rules/Makefile new file mode 100644 index 0000000..325d772 --- /dev/null +++ b/src/rules/Makefile @@ -0,0 +1,5 @@ +QCC=fteqcc + +all: + mkdir -pv ../../zpak001.pk3dir/progs/ + $(QCC) $(CFLAGS) -I../../../src/server default.qc diff --git a/src/rules/default.qc b/src/rules/default.qc new file mode 100644 index 0000000..f82d92b --- /dev/null +++ b/src/rules/default.qc @@ -0,0 +1,196 @@ +/* + * Copyright (c) 2024 Marco Cawthorne + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#pragma PROGS_DAT "../../zpak001.pk3dir/progs/default.dat" + +#include "../../../src/server/api.h" + +static string g_tfClasses[] = { + "player_scout", + "player_sniper", + "player_soldier", + "player_demo", + "player_medic", + "player_heavy", + "player_pyro", + "player_spy", + "player_engineer", +}; + +static string g_tfHelp[] = { + "HELP_SCOUT", + "HELP_SNIPER", + "HELP_SOLDIER", + "HELP_DEMO", + "HELP_MEDIC", + "HELP_HEAVY", + "HELP_PYRO", + "HELP_SPY", + "HELP_ENGINEER", +}; + +static string g_tfPlayerColor[5] = { + "0xffffff", + "0x9aff", + "0xff1800" + "0xffca00", + "0x3bff00" +}; + +bool +AllowFlashlight(void) +{ + return cvars.GetBool("mp_flashlight"); +} + +void +TF_SwitchClass(entity targetPlayer, int classID) +{ + ents.ChangeToClass(targetPlayer, g_tfClasses[classID]); + game.TeleportToSpawn(targetPlayer); + ents.Input(targetPlayer, "Message", g_tfHelp[classID], targetPlayer); + userinfo.SetString(targetPlayer, "topcolor", g_tfPlayerColor[targetPlayer.team]); + userinfo.SetString(targetPlayer, "bottomcolor", g_tfPlayerColor[targetPlayer.team]); +} + +void +TF_GoSpectator(entity targetPlayer) +{ + if (!targetPlayer) { + return; + } + + ents.ChangeToClass(targetPlayer, "spectator"); + game.TeleportToSpawn(targetPlayer); +} + +void +CodeCallback_StartGameType(void) +{ + motd.LoadDefault(); +} + +void +CodeCallback_PlayerSpawn(entity playerEntity) +{ + /* first course of action is to kick players into spectator cam */ + TF_GoSpectator(playerEntity); +} + +void +CodeCallback_PlayerDisconnect(void) +{ + +} + +bool +CodeCallback_PlayerRequestRespawn(entity playerEntity) +{ + CodeCallback_PlayerSpawn(playerEntity); + return (true); +} + +void +CodeCallback_PlayerDamage(entity inflictor, entity attacker) +{ + +} + +void +CodeCallback_PlayerKilled(entity inflictor, entity attacker, string weapon) +{ + combat.Obituary(self.netname, attacker.netname, weapon, ""); + + /* death-counter */ + self.deaths++; + + /* update score-counter */ + if (ents.isPlayer(attacker)) { + if (self == attacker) { + attacker.frags--; + } else { + attacker.frags++; + } + } +} + + +bool +CodeCallback_CallRequestTeam(entity playerEntity, int teamNum) +{ + ents.Input(playerEntity, "SetTeam", itos(teamNum), playerEntity); + return (true); +} + +bool +CodeCallback_ClientCommand(entity targetPlayer, string command) +{ + float commandArgs = tokenize(command); + + switch (argv(0)) { + case "random": + int classID = (int)floor(0, g_tfClasses.length); + TF_SwitchClass(targetPlayer, classID); + break; + case "scout": + TF_SwitchClass(targetPlayer, 0); + break; + case "sniper": + TF_SwitchClass(targetPlayer, 1); + break; + case "soldier": + TF_SwitchClass(targetPlayer, 2); + break; + case "demo": + TF_SwitchClass(targetPlayer, 3); + break; + case "medic": + TF_SwitchClass(targetPlayer, 4); + break; + case "heavy": + TF_SwitchClass(targetPlayer, 5); + break; + case "pyro": + TF_SwitchClass(targetPlayer, 6); + break; + case "spy": + TF_SwitchClass(targetPlayer, 7); + break; + case "engineer": + TF_SwitchClass(targetPlayer, 8); + break; + default: + return (false); + } + + return (true); +} + +bool +CodeCallback_ImpulseCommand(entity clientEntity, float impulseNum) +{ + switch (impulseNum) { + case 100: + if (AllowFlashlight() == true) { + ents.Input(clientEntity, "UseItem", "item_suit", clientEntity); + } + break; + default: + return (false); + } + + return (true); +} diff --git a/src/server/Makefile b/src/server/Makefile index 2fe44a4..e96b4a9 100644 --- a/src/server/Makefile +++ b/src/server/Makefile @@ -1,4 +1,4 @@ QCC=fteqcc all: - $(QCC) progs.src + $(QCC) $(CFLAGS) -I../../../valve/src/shared/ progs.src diff --git a/src/server/bot.qc b/src/server/bot.qc index f0758b3..2184d7b 100644 --- a/src/server/bot.qc +++ b/src/server/bot.qc @@ -1,5 +1,5 @@ class -TFCBot:NSBot +TFCBot:ncBot { void TFCBot(void); diff --git a/src/server/defs.h b/src/server/defs.h index 0ee34d8..0a65b50 100644 --- a/src/server/defs.h +++ b/src/server/defs.h @@ -14,7 +14,6 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "gamerules.h" #include "../../../valve/src/shared/defs.h" #include "sentry.h" @@ -48,7 +47,7 @@ TFC_DetonateTypeForPlayer(entity pl, string cname) if (e.real_owner != pl) continue; - NSSurfacePropEntity targ = (NSSurfacePropEntity)e; + ncSurfacePropEntity targ = (ncSurfacePropEntity)e; targ.Destroy(); } } diff --git a/src/server/dispenser.qc b/src/server/dispenser.qc index 0a733ae..49a40ce 100644 --- a/src/server/dispenser.qc +++ b/src/server/dispenser.qc @@ -19,7 +19,7 @@ /* The unit has 150 health and can hold up to 400 shells, 600 nails, 300 rockets, 400 cells, and 500 armor points. */ class -TFCDispenser:NSSurfacePropEntity +TFCDispenser:ncSurfacePropEntity { float m_flNextDispense; @@ -45,11 +45,11 @@ TFCDispenser:NSSurfacePropEntity virtual int GrabCells(void); virtual int GrabArmor(void); - virtual void Death(entity, entity, int, vector, int); + virtual void Death(entity, entity, int, vector, vector, int); }; void -TFCDispenser::Death(entity inflictor, entity attacker, int damage, vector dir, int location) +TFCDispenser::Death(entity inflictor, entity attacker, int damage, vector dir, vector absImpactPos, int hitBody) { env_message_single(real_owner, "#Dispenser_destroyed"); pointparticles(particleeffectnum("fx_explosion.main"), origin, [0,0,0], 1); @@ -181,15 +181,15 @@ TFCDispenser::Touch(entity eToucher) r = n = c = s = a = sum = 0; /* only subtract what if we need anything */ - if (pl.GetReserveAmmo(rocketType) < pl.m_iMaxRockets) + if (pl.GetReserveAmmo(rocketType) < pl.MaxAmmo(rocketType)) r = GrabRockets(); - if (pl.GetReserveAmmo(nailType) < pl.m_iMaxNails) + if (pl.GetReserveAmmo(nailType) < pl.MaxAmmo(nailType)) n = GrabNails(); - if (pl.GetReserveAmmo(cellType) < pl.m_iMaxCells) + if (pl.GetReserveAmmo(cellType) < pl.MaxAmmo(cellType)) c = GrabCells(); - if (pl.GetReserveAmmo(shellType) < pl.m_iMaxShells) + if (pl.GetReserveAmmo(shellType) < pl.MaxAmmo(shellType)) s = GrabShells(); - if (pl.armor < pl.m_iMaxArmor) + if (pl.armor < pl.GetMaxArmor()) a = GrabArmor(); /* see the sum of what we picked up to determine if we'll register as a pickup */ @@ -208,8 +208,8 @@ TFCDispenser::Touch(entity eToucher) pl.GiveAmmo(shellType, s); pl.armor += a; - if (pl.armor > pl.m_iMaxArmor) - pl.armor = pl. m_iMaxArmor; + if (pl.armor > pl.GetMaxArmor()) + pl.armor = pl.GetMaxArmor(); m_flNextDispense = time + 2.0f; } diff --git a/src/server/func_nobuild.qc b/src/server/func_nobuild.qc index 32bea00..dd17b87 100644 --- a/src/server/func_nobuild.qc +++ b/src/server/func_nobuild.qc @@ -25,7 +25,7 @@ Brush volume that when entered, will not allow you to deploy anything as an engi */ class -func_nobuild:NSBrushTrigger +func_nobuild:ncBrushTrigger { void(void) func_nobuild; diff --git a/src/server/func_nogrenades.qc b/src/server/func_nogrenades.qc index 5a7bb7f..0aa0e81 100644 --- a/src/server/func_nogrenades.qc +++ b/src/server/func_nogrenades.qc @@ -25,7 +25,7 @@ Brush volume that when entered, will not allow you to deploy any grenades. */ class -func_nogrenades:NSBrushTrigger +func_nogrenades:ncBrushTrigger { void(void) func_nogrenades; diff --git a/src/server/gamerules.h b/src/server/gamerules.h deleted file mode 100644 index 50517d4..0000000 --- a/src/server/gamerules.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2016-2020 Marco Cawthorne - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER - * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -class TFCGameRules:CGameRules -{ - void(void) TFCGameRules; - - virtual bool ConsoleCommand(NSClientPlayer, string); - virtual bool IsTeamplay(void); - - virtual void PlayerConnect(NSClientPlayer); - virtual void PlayerDisconnect(NSClientPlayer); - virtual void PlayerPostFrame(NSClientPlayer); - virtual void PlayerSpawn(NSClientPlayer); - virtual void PlayerKill(NSClientPlayer); - virtual void PlayerRespawn(NSClientPlayer); - virtual void DropGoalItem(NSClientPlayer); - virtual float ImpulseCommand(NSClient, float); - virtual void LevelNewParms(void); - virtual void InitPostEnts(void); -}; diff --git a/src/server/gamerules.qc b/src/server/gamerules.qc deleted file mode 100644 index c44b364..0000000 --- a/src/server/gamerules.qc +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright (c) 2016-2023 Marco Cawthorne - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER - * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -void -TFCGameRules::TFCGameRules(void) -{ - /* wipe the serverinfo clean */ - forceinfokey(world, "teams", "0"); - forceinfokey(world, "team_1", ""); - forceinfokey(world, "team_2", ""); - forceinfokey(world, "team_3", ""); - forceinfokey(world, "team_4", ""); - forceinfokey(world, "teamscore_1", ""); - forceinfokey(world, "teamscore_2", ""); - forceinfokey(world, "teamscore_3", ""); - forceinfokey(world, "teamscore_4", ""); -} - -bool -TFCGameRules::ConsoleCommand(NSClientPlayer pp, string cmd) -{ - tokenize(cmd); - - switch (argv(0)) { - default: - return (false); - } - - return (true); -} - -bool -TFCGameRules::IsTeamplay(void) -{ - return TRUE; -} - -void -TFCGameRules::DropGoalItem(NSClientPlayer pp) -{ - /* skip normal players */ - if (!(pp.g_items & ITEM_GOALITEM)) - return; - - item_tfgoal target; - - for (entity e = world; (e = find(e, ::classname, "item_tfgoal"));) { - target = (item_tfgoal)e; - - /* item is still pick-upable */ - if (target.solid != SOLID_NOT) { - print("the item is not picked up. \n"); - continue; - } - - /* that's us, yup */ - if (target.m_eActivator == pp) { - target.DropReturnable(pp); - return; - } - } - - print("^1WARNING: ^7Player marked as having impossible goal-item\n"); -} - -/* we check what fields have changed over the course of the frame and network - * only the ones that have actually changed */ -void -TFCGameRules::PlayerPostFrame(NSClientPlayer pp) -{ -} - -void -TFCGameRules::LevelNewParms(void) -{ - parm1 = parm2 = parm3 = parm4 = parm5 = parm6 = parm7 = - parm8 = parm9 = parm10 = parm11 = parm12 = parm13 = parm14 = - parm15 = parm16 = parm17 = parm18 = parm19 = parm20 = parm21 = - parm22 = parm23 = parm24 = parm25 = parm26 = parm27 = parm28 = - parm29 = parm30 = 0; - parm64 = FL_CLIENT; -} - -void -TFCGameRules::PlayerConnect(NSClientPlayer pl) -{ - if (Plugin_PlayerConnect(pl) == FALSE) - bprint(PRINT_HIGH, sprintf("%s connected\n", pl.netname)); -} - -void -TFCGameRules::PlayerDisconnect(NSClientPlayer pl) -{ - bprint(PRINT_HIGH, sprintf("%s disconnected\n", pl.netname)); - - /* Make this unusable */ - pl.solid = SOLID_NOT; - pl.movetype = MOVETYPE_NONE; - pl.modelindex = 0; - pl.health = 0; - pl.takedamage = 0; - pl.SendFlags = PLAYER_MODELINDEX; -} - -void -TFCGameRules_PlayerRespawn(void) -{ - TFCGameRules rule = (TFCGameRules)g_grMode; - rule.PlayerRespawn((NSClientPlayer)self); -} - - -void -TFCGameRules::PlayerKill(NSClientPlayer pp) -{ -} - -void -TFCGameRules::PlayerRespawn(NSClientPlayer pp) -{ - TFPlayer pl = (TFPlayer)pp; - pl.MakeClass(pl.classtype); - pl.SpawnIntoGame(); -} - -void -TFCGameRules::PlayerSpawn(NSClientPlayer pp) -{ - TFPlayer pl = (TFPlayer)pp; - pl.MakeTempSpectator(); /* replace this with a non-spectator ghost */ - Spawn_ObserverCam(pl); -} - -bool -TFCGameRules::ImpulseCommand(NSClient bp, float num) -{ - switch (num) { - default: - return super::ImpulseCommand(bp, num); - } - - return true; -} - -void -TFCGameRules::InitPostEnts(void) -{ - super::InitPostEnts(); - - EntityDef_Precache("tf_weapon_ac"); - EntityDef_Precache("tf_weapon_autorifle"); - EntityDef_Precache("tf_weapon_axe"); - EntityDef_Precache("tf_weapon_flamethrower"); - EntityDef_Precache("tf_weapon_gl"); - EntityDef_Precache("tf_weapon_ic"); - EntityDef_Precache("tf_weapon_knife"); - EntityDef_Precache("tf_weapon_medikit"); - EntityDef_Precache("tf_weapon_ng"); - EntityDef_Precache("tf_weapon_pl"); - EntityDef_Precache("tf_weapon_railgun"); - EntityDef_Precache("tf_weapon_rpg"); - EntityDef_Precache("tf_weapon_shotgun"); - EntityDef_Precache("tf_weapon_sniperrifle"); - EntityDef_Precache("tf_weapon_spanner"); - EntityDef_Precache("tf_weapon_superng"); - EntityDef_Precache("tf_weapon_supershotgun"); - EntityDef_Precache("tf_weapon_tranq"); - - /* rename the team spawns. */ - info_player_teamspawn::RenameTeamSpawns(); - info_tfdetect::Setup(); -} diff --git a/src/server/info_areadef.qc b/src/server/info_areadef.qc index 9db7535..565890b 100644 --- a/src/server/info_areadef.qc +++ b/src/server/info_areadef.qc @@ -28,7 +28,7 @@ Describes an area's bounds and description/name. */ class -info_areadef:NSPointTrigger +info_areadef:ncPointTrigger { string m_strDescription; vector m_vecMins; diff --git a/src/server/info_player_teamspawn.qc b/src/server/info_player_teamspawn.qc index 98df156..85319ce 100644 --- a/src/server/info_player_teamspawn.qc +++ b/src/server/info_player_teamspawn.qc @@ -14,13 +14,13 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -class info_player_teamspawn:NSSpawnPoint +class +info_player_teamspawn:ncSpawnPoint { void(void) info_player_teamspawn; virtual void SpawnKey(string, string); - - nonvirtual void RenameTeamSpawns(void); + virtual void Spawned(void); }; void @@ -42,25 +42,21 @@ info_player_teamspawn::SpawnKey(string keyName, string setValue) } void -info_player_teamspawn::RenameTeamSpawns(void) +info_player_teamspawn::Spawned(void) { - for (entity e = world; (e = find(e, ::classname, "info_player_teamspawn"));) { - info_player_teamspawn findSpawn = (info_player_teamspawn)e; - - switch (findSpawn.team) { - case 1: - e.classname = "info_teamspawn_blue"; - break; - case 2: - e.classname = "info_teamspawn_red"; - break; - case 3: - e.classname = "info_teamspawn_yellow"; - break; - case 4: - e.classname = "info_teamspawn_green"; - break; - } + switch (team) { + case 1: + classname = "info_teamspawn_blue"; + break; + case 2: + classname = "info_teamspawn_red"; + break; + case 4: + classname = "info_teamspawn_yellow"; + break; + case 3: + classname = "info_teamspawn_green"; + break; } botinfo = BOTINFO_SPAWNPOINT; diff --git a/src/server/info_tfdetect.qc b/src/server/info_tfdetect.qc index 0b4714d..6d2af56 100644 --- a/src/server/info_tfdetect.qc +++ b/src/server/info_tfdetect.qc @@ -57,20 +57,35 @@ typedef enum # NOTES +The `maxammo_` keys sets the limits regarding available team classes. + +The following flags can be combined: + +- ONLY_CIVILLIAN (-1) : Not a bitflag, but when set this team only allows the civillian class. +- SCOUT (1) : No Scout class. +- SNIPER (2) : No Sniper class. +- SOLDIER (4) : No Soldier class. +- DEMO (8) : No Demoman class. +- MEDIC (16) : No Medic class. +- HEAVY (32) : No Heavy Weapons Guy class. +- PYRO (64) : No Pyro class. +- NO_RANDOM_CLASS (128) : No random class in menus. +- SPY (256) : No Spy class. +- ENGINEER (512) : No Engineer class. # TRIVIA This entity was introduced in Team Fortress (1996). */ class -info_tfdetect:NSPointTrigger +info_tfdetect:ncPointTrigger { public: void info_tfdetect(void); virtual void SpawnKey(string, string); - virtual void Respawn(void); - + virtual void Spawned(void); nonvirtual void Setup(void); + nonvirtual void SetupClass(int teamID, tfdetectTeamFlags_t classFlags); private: string m_strTeam1Name; @@ -136,74 +151,99 @@ info_tfdetect::SpawnKey(string keyName, string setValue) } void -info_tfdetect::Respawn(void) +info_tfdetect::Spawned(void) { + super::Spawned(); + ScheduleThink(Setup, 0.0f); +} + +void +info_tfdetect::SetupClass(int teamID, tfdetectTeamFlags_t classFlags) +{ + if (classFlags == TFDFL_CIVILIANONLY) { + teams.AddClass(teamID, "civilian"); + return; + } + + if (!(classFlags & TFDFL_NOSCOUNT)) { + teams.AddClass(teamID, "scout"); + } + + if (!(classFlags & TFDFL_NOSNIPER)) { + teams.AddClass(teamID, "sniper"); + } + + if (!(classFlags & TFDFL_NOSOLDIER)) { + teams.AddClass(teamID, "soldier"); + } + + if (!(classFlags & TFDFL_NODEMOMAN)) { + teams.AddClass(teamID, "demo"); + } + + if (!(classFlags & TFDFL_NOMEDIC)) { + teams.AddClass(teamID, "medic"); + } + + if (!(classFlags & TFDFL_NOHEAVY)) { + teams.AddClass(teamID, "heavy"); + } + + if (!(classFlags & TFDFL_NOPYRO)) { + teams.AddClass(teamID, "pyro"); + } + + if (!(classFlags & TFDFL_NOSPY)) { + teams.AddClass(teamID, "spy"); + } + + if (!(classFlags & TFDFL_NOENGINEER)) { + teams.AddClass(teamID, "engineer"); + } + + if (!(classFlags & TFDFL_NORANDOM)) { + teams.AddClass(teamID, "random"); + } } void info_tfdetect::Setup(void) { - int team_count = 0i; entity e = __NULL__; - info_tfdetect globalTFD = (info_tfdetect)find(world, ::classname, "info_tfdetect"); /* populate the serverinfo field with the teams we have on the map */ - e = find(world, ::classname, "info_teamspawn_blue"); - if (e) { - team_count += 1; - forceinfokey(world, sprintf("team_%i", team_count), "Blue"); - forceinfokey(world, sprintf("teamscore_%i", team_count), "0"); + if (exists.InMap("info_teamspawn_blue")) { + teams.SetUp(1, m_strTeam1Name, [153, 204, 255], true); + SetupClass(1, m_bfTeam1Flags); + teams.SetSpawnPoint(1, "info_teamspawn_blue"); g_tfcHasBlueTeam = true; } - e = find(world, ::classname, "info_teamspawn_red"); - if (e) { - team_count += 1; - forceinfokey(world, sprintf("team_%i", team_count), "Red"); - forceinfokey(world, sprintf("teamscore_%i", team_count), "0"); + if (exists.InMap("info_teamspawn_red")) { + teams.SetUp(2, m_strTeam2Name, [255, 63, 63], true); + SetupClass(2, m_bfTeam2Flags); + teams.SetSpawnPoint(2, "info_teamspawn_red"); g_tfcHasRedTeam = true; } - e = find(world, ::classname, "info_teamspawn_green"); - if (e) { - team_count += 1; - forceinfokey(world, sprintf("team_%i", team_count), "Green"); - forceinfokey(world, sprintf("teamscore_%i", team_count), "0"); + if (exists.InMap("info_teamspawn_green")) { + teams.SetUp(3, m_strTeam3Name, [153, 255, 204], true); + SetupClass(3, m_bfTeam3Flags); + teams.SetSpawnPoint(3, "info_teamspawn_green"); g_tfcHasGreenTeam = true; } - e = find(world, ::classname, "info_teamspawn_yellow"); - if (e) { - team_count += 1; - forceinfokey(world, sprintf("team_%i", team_count), "Yellow"); - forceinfokey(world, sprintf("teamscore_%i", team_count), "0"); + if (exists.InMap("info_teamspawn_yellow")) { + teams.SetUp(4, m_strTeam4Name, [255, 255, 153], true); + SetupClass(4, m_bfTeam4Flags); + teams.SetSpawnPoint(4, "info_teamspawn_yellow"); g_tfcHasYellowTeam = true; } - forceinfokey(world, "teams", itos(team_count)); - - if (!globalTFD) { - NSLog("No info_tfdetect in level."); - forceinfokey(world, "teamflags_1", "0"); - forceinfokey(world, "teamflags_2", "0"); - forceinfokey(world, "teamflags_3", "0"); - forceinfokey(world, "teamflags_4", "0"); - return; - } - - forceinfokey(world, "team_1", globalTFD.m_strTeam1Name); - forceinfokey(world, "team_2", globalTFD.m_strTeam2Name); - forceinfokey(world, "team_3", globalTFD.m_strTeam3Name); - forceinfokey(world, "team_4", globalTFD.m_strTeam4Name); - - forceinfokey(world, "teamflags_1", ftos(globalTFD.m_bfTeam1Flags)); - forceinfokey(world, "teamflags_2", ftos(globalTFD.m_bfTeam1Flags)); - forceinfokey(world, "teamflags_3", ftos(globalTFD.m_bfTeam1Flags)); - forceinfokey(world, "teamflags_4", ftos(globalTFD.m_bfTeam1Flags)); /* the evil localcmd feature of this entity. */ if (m_strLocalCommand) { localcmd(m_strLocalCommand); localcmd("\n"); } -} \ No newline at end of file +} diff --git a/src/server/info_tfgoal.qc b/src/server/info_tfgoal.qc index b6fc82a..eca4766 100644 --- a/src/server/info_tfgoal.qc +++ b/src/server/info_tfgoal.qc @@ -59,7 +59,7 @@ typedef enumflags } tfgoal_result; /* point entity version */ -class info_tfgoal:NSRenderableEntity +class info_tfgoal:ncRenderableEntity { public: void(void) info_tfgoal; @@ -207,8 +207,8 @@ info_tfgoal::Touch(entity eToucher) pl.GiveAmmo(detpackType, m_iDetpack); /* clamp */ - pl.health = bound(0, pl.health, pl.max_health); - pl.armor = bound(0, pl.armor, pl.m_iMaxArmor); + pl.SetHealth(bound(0, pl.GetHealth(), pl.GetMaxHealth())); + pl.SetArmor(bound(0, pl.GetArmor(), pl.GetMaxArmor())); pl.frags += frags; @@ -439,7 +439,7 @@ info_tfgoal::info_tfgoal(void) precache_sound(m_strActivatedSound); - super::NSRenderableEntity(); + super::ncRenderableEntity(); info_tfgoal::Respawn(); } @@ -476,7 +476,7 @@ i_t_g::i_t_g(void) SpawnKey(argv(i), argv(i+1)); } - super::NSRenderableEntity(); + super::ncRenderableEntity(); precache_sound(m_strActivatedSound); Respawn(); diff --git a/src/server/item_armor.qc b/src/server/item_armor.qc index 79c829c..54c03c0 100644 --- a/src/server/item_armor.qc +++ b/src/server/item_armor.qc @@ -15,7 +15,7 @@ */ class -TFCArmor:NSRenderableEntity +TFCArmor:ncRenderableEntity { float m_flRespawnDelay; int m_iTeamUses; @@ -89,14 +89,14 @@ TFCArmor::Touch(entity eToucher) return; /* if we can't add anything, don't bother */ - if (pl.armor >= pl.m_iMaxArmor && pl.GetReserveAmmo(cellType) >= pl.m_iMaxCells) + if (pl.armor >= pl.GetMaxArmor() && pl.GetReserveAmmo(cellType) >= pl.MaxAmmo(cellType)) return; int ap; int tp = 0; /* get remaining points */ - ap = pl.m_iMaxArmor - pl.armor; + ap = pl.GetMaxArmor() - pl.armor; tp = m_iArmorValue; /* if that's all we can give... */ diff --git a/src/server/item_healthkit.qc b/src/server/item_healthkit.qc index 65d5f95..08c32a4 100644 --- a/src/server/item_healthkit.qc +++ b/src/server/item_healthkit.qc @@ -29,7 +29,7 @@ Health pickup. Unlike Team Fortress, this is the only one and it provides */ class -item_healthkit:NSRenderableEntity +item_healthkit:ncRenderableEntity { int m_iTeamUses; float m_flRespawnDelay; @@ -55,10 +55,10 @@ item_healthkit::Touch(entity eToucher) return; /* leave when full */ - if (pl.health >= pl.m_iMaxHealth) + if (pl.health >= pl.GetMaxHealth()) return; - pl.health = bound(0, pl.health + 25, pl.m_iMaxHealth); + pl.SetHealth(bound(0, pl.GetHealth() + 25, pl.GetMaxHealth())); Sound_Play(this, CHAN_ITEM, "item_healthkit_tfc.pickup"); @@ -98,4 +98,4 @@ item_healthkit::item_healthkit(void) { Sound_Precache("item_healthkit_tfc.pickup"); m_flRespawnDelay = 30.0f; -} \ No newline at end of file +} diff --git a/src/server/item_tfgoal.qc b/src/server/item_tfgoal.qc index 0873cc9..02b7517 100644 --- a/src/server/item_tfgoal.qc +++ b/src/server/item_tfgoal.qc @@ -58,14 +58,14 @@ typedef enum GISTATUS_DROPPED /*<< The item is at neither on a player, nor at its base. */ } goalitem_status_e; -class item_tfgoal:NSRenderableEntity +class item_tfgoal:ncRenderableEntity { public: void(void) item_tfgoal; virtual void(entity) Touch; virtual void(void) Respawn; virtual void(string, string) SpawnKey; - virtual void(NSClientPlayer) DropReturnable; + virtual void(ncPlayer) DropReturnable; virtual void(void) TeamOwnerReturns; virtual void(void) Spawned; @@ -103,7 +103,7 @@ private: }; void -item_tfgoal::DropReturnable(NSClientPlayer pp) +item_tfgoal::DropReturnable(ncPlayer pp) { TFPlayer pl = (TFPlayer)pp; diff --git a/src/server/nades.qc b/src/server/nades.qc index e927b81..973cd10 100644 --- a/src/server/nades.qc +++ b/src/server/nades.qc @@ -15,14 +15,14 @@ TFCNade_ThrowCaltrop(TFPlayer pl) pointparticles(particleeffectnum("fx_explosion.main"), self.origin, [0,0,0], 1); Damage_Radius(self.origin, self.owner, dmg, dmg * 2.5f, TRUE, WEAPON_GLAUNCHER); sound(self, CHAN_WEAPON, sprintf("weapons/explode%d.wav", floor(random() * 2) + 3), 1, ATTN_NORM); - NSEntity::Destroy(); + ncEntity::Destroy(); } for (int i = 0; i < 6; i++) { makevectors([0, random() * 360, 0]); vecNadeVelocity = v_forward * 50 + v_up * 150 + crandom() * v_right * 10 + crandom() * v_up * 10; - NSRenderableEntity eNade = spawn(NSRenderableEntity); + ncRenderableEntity eNade = spawn(ncRenderableEntity); eNade.SetModel("models/caltrop.mdl"); eNade.SetOrigin(Weapons_GetCameraPos(pl) + (v_forward * 14) + (v_up * -4) + (v_right * 2)); eNade.SetOwner(pl); @@ -57,14 +57,14 @@ TFCNade_ThrowHandGrenade(TFPlayer pl) pointparticles(particleeffectnum("fx_explosion.main"), self.origin, [0,0,0], 1); Damage_Radius(self.origin, self.owner, dmg, dmg * 2.5f, TRUE, WEAPON_GLAUNCHER); sound(self, CHAN_WEAPON, sprintf("weapons/explode%d.wav", floor(random() * 2) + 3), 1, ATTN_NORM); - NSEntity::Destroy(); + ncEntity::Destroy(); } Weapons_MakeVectors(pl); vecNadeVelocity = v_forward * 600 + v_up * 200 + crandom() * v_right * 10 + crandom() * v_up * 10; flTimer = max(0.0, pl. gren1.GetNextThinkTime() - time); - NSRenderableEntity eNade = spawn(NSRenderableEntity); + ncRenderableEntity eNade = spawn(ncRenderableEntity); eNade.SetModel("models/w_grenade.mdl"); eNade.SetOrigin(Weapons_GetCameraPos(pl) + (v_forward * 14) + (v_up * -4) + (v_right * 2)); eNade.SetOwner(pl); @@ -130,14 +130,14 @@ TFCNade_ThrowConcussion(TFPlayer pl) msg_entity = self; multicast(self.origin, MULTICAST_PVS); - NSEntity::Destroy(); + ncEntity::Destroy(); } Weapons_MakeVectors(pl); vecNadeVelocity = v_forward * 600 + v_up * 200 + crandom() * v_right * 10 + crandom() * v_up * 10; flTimer = max(0.0, pl.gren2.GetNextThinkTime() - time); - NSRenderableEntity eNade = spawn(NSRenderableEntity); + ncRenderableEntity eNade = spawn(ncRenderableEntity); eNade.SetModel("models/conc_grenade.mdl"); eNade.SetOrigin(Weapons_GetCameraPos(pl) + (v_forward * 14) + (v_up * -4) + (v_right * 2)); eNade.SetOwner(pl); @@ -170,7 +170,7 @@ TFCNade_ThrowNail(TFPlayer pl) pointparticles(particleeffectnum("fx_explosion.main"), self.origin, [0,0,0], 1); Damage_Radius(self.origin, self.owner, dmg, dmg * 2.5f, TRUE, WEAPON_GLAUNCHER); sound(self, CHAN_WEAPON, sprintf("weapons/explode%d.wav", floor(random() * 2) + 3), 1, ATTN_NORM); - NSEntity::Destroy(); + ncEntity::Destroy(); } static void TFCNade_ThrowNail_Shoot(entity source, vector euler_dir) { @@ -229,7 +229,7 @@ TFCNade_ThrowNail(TFPlayer pl) vecNadeVelocity = v_forward * 600 + v_up * 200 + crandom() * v_right * 10 + crandom() * v_up * 10; flTimer = max(0.0, pl.gren2.GetNextThinkTime() - time); - NSRenderableEntity eNade = spawn(NSRenderableEntity); + ncRenderableEntity eNade = spawn(ncRenderableEntity); eNade.SetModel("models/ngrenade.mdl"); eNade.SetOrigin(Weapons_GetCameraPos(pl) + (v_forward * 14) + (v_up * -4) + (v_right * 2)); eNade.SetOwner(pl); @@ -246,7 +246,7 @@ TFCNade_ThrowNail(TFPlayer pl) } void -TFCNade_ThrowMIRVBomblet(NSEntity bomb) +TFCNade_ThrowMIRVBomblet(ncEntity bomb) { #if 0 vector vecNadeVelocity; @@ -262,7 +262,7 @@ TFCNade_ThrowMIRVBomblet(NSEntity bomb) pointparticles(particleeffectnum("fx_explosion.main"), self.origin, [0,0,0], 1); Damage_Radius(self.origin, self.owner, dmg, dmg * 2.5f, TRUE, WEAPON_GLAUNCHER); sound(self, CHAN_WEAPON, sprintf("weapons/explode%d.wav", floor(random() * 2) + 3), 1, ATTN_NORM); - NSEntity::Destroy(); + ncEntity::Destroy(); } TFPlayer pl = (TFPlayer)bomb.owner; @@ -270,7 +270,7 @@ TFCNade_ThrowMIRVBomblet(NSEntity bomb) makevectors([0, random() * 360, 0]); vecNadeVelocity = v_forward * 100 + v_up * 350 + crandom() * v_right * 10 + crandom() * v_up * 10; - NSRenderableEntity eNade = spawn(NSRenderableEntity); + ncRenderableEntity eNade = spawn(ncRenderableEntity); eNade.SetModel("models/bomblet.mdl"); eNade.SetOrigin(bomb.origin + (v_forward * 14) + (v_up * -4) + (v_right * 2)); eNade.SetOwner(pl); @@ -308,10 +308,10 @@ TFCNade_ThrowMIRV(TFPlayer pl) sound(self, CHAN_WEAPON, sprintf("weapons/explode%d.wav", floor(random() * 2) + 3), 1, ATTN_NORM); for (int i = 0; i < 4; i++) { - TFCNade_ThrowMIRVBomblet((NSEntity)self); + TFCNade_ThrowMIRVBomblet((ncEntity)self); } - NSEntity::Destroy(); + ncEntity::Destroy(); } Weapons_MakeVectors(pl); @@ -319,7 +319,7 @@ TFCNade_ThrowMIRV(TFPlayer pl) vecNadeVelocity = v_forward * 600 + v_up * 200 + crandom() * v_right * 10 + crandom() * v_up * 10; flTimer = max(0.0, pl. gren2.GetNextThinkTime() - time); - NSRenderableEntity eNade = spawn(NSRenderableEntity); + ncRenderableEntity eNade = spawn(ncRenderableEntity); eNade.SetModel("models/mirv_grenade.mdl"); eNade.SetOrigin(Weapons_GetCameraPos(pl) + (v_forward * 14) + (v_up * -4) + (v_right * 2)); eNade.SetOwner(pl); @@ -348,14 +348,14 @@ TFCNade_ThrowNapalm(TFPlayer pl) } static void TFCNade_ThrowConcussion_Explode(void) { - NSEntity::Destroy(); + ncEntity::Destroy(); } Weapons_MakeVectors(pl); vecNadeVelocity = v_forward * 600 + v_up * 200 + crandom() * v_right * 10 + crandom() * v_up * 10; flTimer = max(0.0, pl.gren2.GetNextThinkTime() - time); - NSRenderableEntity eNade = spawn(NSRenderableEntity); + ncRenderableEntity eNade = spawn(ncRenderableEntity); eNade.SetModel("models/napalm.mdl"); eNade.SetOrigin(Weapons_GetCameraPos(pl) + (v_forward * 14) + (v_up * -4) + (v_right * 2)); eNade.SetOwner(pl); @@ -392,14 +392,14 @@ TFCNade_ThrowHallucination(TFPlayer pl) f.m_flHallucination = 15.0f; } } - NSEntity::Destroy(); + ncEntity::Destroy(); } Weapons_MakeVectors(pl); vecNadeVelocity = v_forward * 600 + v_up * 200 + crandom() * v_right * 10 + crandom() * v_up * 10; flTimer = max(0.0, pl.gren2.GetNextThinkTime() - time); - NSRenderableEntity eNade = spawn(NSRenderableEntity); + ncRenderableEntity eNade = spawn(ncRenderableEntity); eNade.SetModel("models/spy_grenade.mdl"); eNade.SetOrigin(Weapons_GetCameraPos(pl) + (v_forward * 14) + (v_up * -4) + (v_right * 2)); eNade.SetOwner(pl); @@ -429,14 +429,14 @@ TFCNade_ThrowEMP(TFPlayer pl) } static void TFCNade_ThrowEMP_Explode(void) { - NSEntity::Destroy(); + ncEntity::Destroy(); } Weapons_MakeVectors(pl); vecNadeVelocity = v_forward * 600 + v_up * 200 + crandom() * v_right * 10 + crandom() * v_up * 10; flTimer = max(0.0, pl.gren2.GetNextThinkTime() - time); - NSRenderableEntity eNade = spawn(NSRenderableEntity); + ncRenderableEntity eNade = spawn(ncRenderableEntity); eNade.SetModel("models/emp_grenade.mdl"); eNade.SetOrigin(Weapons_GetCameraPos(pl) + (v_forward * 14) + (v_up * -4) + (v_right * 2)); eNade.SetOwner(pl); diff --git a/src/server/progs.src b/src/server/progs.src index 887664b..f8d0d13 100644 --- a/src/server/progs.src +++ b/src/server/progs.src @@ -1,6 +1,7 @@ #pragma target fte_5768 //#pragma flag enable assumeint #pragma progs_dat "../../progs.dat" +#pragma forcecrc 54730 #define QWSSQC #define SERVER @@ -32,7 +33,6 @@ info_tfdetect.qc item_armor.qc item_healthkit.qc nades.qc -gamerules.qc client.qc server.qc spawn.qc diff --git a/src/server/sentry.h b/src/server/sentry.h index 0cacde0..8588f16 100644 --- a/src/server/sentry.h +++ b/src/server/sentry.h @@ -25,9 +25,9 @@ typedef enum } sentrystate_e; class -TFCSentry:NSSurfacePropEntity +TFCSentry:ncSurfacePropEntity { - NSSurfacePropEntity m_eHead; + ncSurfacePropEntity m_eHead; sentrystate_e m_state; float m_flNextIdleSound; @@ -37,7 +37,7 @@ TFCSentry:NSSurfacePropEntity void(void) TFCSentry; - virtual void(NSClientPlayer) Place; + virtual void(ncPlayer) Place; virtual void(void) FinishPlacing; virtual void(void) Think; }; \ No newline at end of file diff --git a/src/server/sentry.qc b/src/server/sentry.qc index 9a09226..7b9d7f9 100644 --- a/src/server/sentry.qc +++ b/src/server/sentry.qc @@ -76,7 +76,7 @@ TFCSentry::Think(void) } void -TFCSentry::Place(NSClientPlayer pl) +TFCSentry::Place(ncPlayer pl) { vector newAngles = pl.GetAngles(); newAngles[0] = newAngles[2] = 0; @@ -118,7 +118,7 @@ TFCSentry::FinishPlacing(void) void TFCSentry::TFCSentry(void) { - m_eHead = spawn(NSSurfacePropEntity); + m_eHead = spawn(ncSurfacePropEntity); SetModel("models/base.mdl"); SetSolid(SOLID_BBOX); SetMovetype(MOVETYPE_NONE); diff --git a/src/server/server.qc b/src/server/server.qc index fec4708..a0d8f06 100644 --- a/src/server/server.qc +++ b/src/server/server.qc @@ -14,12 +14,6 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -void -Game_InitRules(void) -{ - g_grMode = spawn(TFCGameRules); -} - void Game_Worldspawn(void) { @@ -42,7 +36,6 @@ Game_Worldspawn(void) precache_model("models/sentry3.mdl"); precache_model("models/player.mdl"); precache_model("models/w_weaponbox.mdl"); - FX_Corpse_Init(); } void weaponbox_spawn(TFPlayer pl) diff --git a/src/server/teleporter.qc b/src/server/teleporter.qc index 0465dd7..e05f91d 100644 --- a/src/server/teleporter.qc +++ b/src/server/teleporter.qc @@ -18,7 +18,7 @@ /* main teleporter */ class -TFCTeleporter:NSSurfacePropEntity +TFCTeleporter:ncSurfacePropEntity { float m_flNextTeleport; diff --git a/src/shared/include.src b/src/shared/include.src index 4ba3338..68c366f 100644 --- a/src/shared/include.src +++ b/src/shared/include.src @@ -12,8 +12,5 @@ player.qc animations_tfc.h ../../../valve/src/shared/animations.qc pmove.qc - -../../../valve/src/shared/fx_blood.qc -../../../valve/src/shared/fx_corpse.qc ../../../valve/src/shared/HLWeapon.qc #endlist diff --git a/src/shared/player.qc b/src/shared/player.qc index 66c033e..ca57fa3 100644 --- a/src/shared/player.qc +++ b/src/shared/player.qc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2021 Marco Cawthorne + * Copyright (c) 2016-2024AAAAAA Marco Cawthorne * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -14,7 +14,8 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -class TFPlayer:HLPlayer +class +TFPlayer:HLPlayer { void TFPlayer(void); @@ -38,7 +39,6 @@ class TFPlayer:HLPlayer virtual bool CanLean(void); virtual void Physics_Jump(void); - virtual float Physics_MaxSpeed(void); virtual void ProcessInput(void); @@ -57,18 +57,8 @@ class TFPlayer:HLPlayer float m_flNextHallucination; #else - NSTimer gren1; - NSTimer gren2; - - int m_iMaxHealth; - int m_iMaxArmor; - - int m_iMaxShells; - int m_iMaxNails; - int m_iMaxRockets; - int m_iMaxCells; - int m_iMaxDetpack; - int m_iMaxMedikit; + ncTimer gren1; + ncTimer gren2; virtual void EvaluateEntity(void); virtual float SendEntity(entity, float); @@ -100,24 +90,24 @@ TFPlayer::UpdatePlayerAnimation(float timelength) bool TFPlayer::CanSprint(void) { - return false; + return (false); } bool TFPlayer::CanProne(void) { - return false; + return (false); } bool TFPlayer::CanCrouch(void) { - return true; + return (true); } bool TFPlayer::CanLean(void) { - return false; + return (false); } #ifdef SERVER @@ -237,7 +227,6 @@ TFPlayer::ProcessInput(void) } #ifdef CLIENT - void TFPlayer::UpdateAliveCam(void) { @@ -256,7 +245,7 @@ TFPlayer::UpdateAliveCam(void) g_view.SetCameraAngle(view_angles); if (vehicle) { - NSVehicle veh = (NSVehicle)vehicle; + ncVehicle veh = (ncVehicle)vehicle; if (veh.UpdateView) veh.UpdateView(); @@ -288,16 +277,11 @@ TFPlayer::ClientInputFrame(void) } } -/* -================= -player::ReceiveEntity -================= -*/ void TFPlayer::ReceiveEntity(float new, float flChanged) { /* the generic client attributes */ - NSClientPlayer::ReceiveEntity(new, flChanged); + ncPlayer::ReceiveEntity(new, flChanged); /* animation */ READENTITY_BYTE(anim_top, PLAYER_TOPFRAME) @@ -340,19 +324,11 @@ TFPlayer::ReceiveEntity(float new, float flChanged) } } -/* -================= -player::PredictPostFrame - -Save the last valid server values away in the _net variants of each field -so we can roll them back later. -================= -*/ void TFPlayer::PredictPreFrame(void) { /* the generic client attributes */ - NSClientPlayer::PredictPreFrame(); + ncPlayer::PredictPreFrame(); SAVE_STATE(anim_top) SAVE_STATE(anim_top_delay) @@ -364,18 +340,11 @@ TFPlayer::PredictPreFrame(void) SAVE_STATE(m_flHallucination) } -/* -================= -player::PredictPostFrame - -Where we roll back our values to the ones last sent/verified by the server. -================= -*/ void TFPlayer::PredictPostFrame(void) { /* the generic client attributes */ - NSClientPlayer::PredictPostFrame(); + ncPlayer::PredictPostFrame(); ROLL_BACK(anim_top) ROLL_BACK(anim_top_delay) @@ -406,7 +375,7 @@ void TFPlayer::EvaluateEntity(void) { /* the generic client attributes */ - NSClientPlayer::EvaluateEntity(); + ncPlayer::EvaluateEntity(); /* animation */ EVALUATE_FIELD(anim_top, PLAYER_TOPFRAME) @@ -449,10 +418,6 @@ TFPlayer::SpawnIntoGame(void) void TFPlayer::MakeClass(classtype_e classType) { - int atShells = ammoNumForName("ammo_shells"); - int atNails = ammoNumForName("ammo_nails"); - int atCells = ammoNumForName("ammo_cells"); - int atRockets = ammoNumForName("ammo_rockets"); int oldTeam = team; switch (classType) { @@ -501,11 +466,6 @@ TFPlayer::MakeClass(classtype_e classType) SpawnIntoGame(); } -/* -================= -player::SendEntity -================= -*/ float TFPlayer::SendEntity(entity ePEnt, float flChanged) { @@ -518,7 +478,7 @@ TFPlayer::SendEntity(entity ePEnt, float flChanged) flChanged = OptimiseChangedFlags(ePEnt, flChanged); /* the generic client attributes */ - NSClientPlayer::SendEntity(ePEnt, flChanged); + ncPlayer::SendEntity(ePEnt, flChanged); SENDENTITY_BYTE(anim_top, PLAYER_TOPFRAME) SENDENTITY_FLOAT(anim_top_time, PLAYER_TOPFRAME) diff --git a/src/shared/pmove.qc b/src/shared/pmove.qc index 00cfe96..e93b381 100644 --- a/src/shared/pmove.qc +++ b/src/shared/pmove.qc @@ -49,47 +49,3 @@ TFPlayer::Physics_Jump(void) } } } - -float -TFPlayer::Physics_MaxSpeed(void) -{ - float desiredspeed = 300.0f; - - /* values courtesy of https://wiki.teamfortress.com/ */ - switch (classtype) { - case CLASS_SCOUT: - desiredspeed = 400.0f; - break; - case CLASS_SNIPER: - desiredspeed = 300.0f; - break; - case CLASS_SOLDIER: - desiredspeed = 240.0f; - break; - case CLASS_DEMO: - desiredspeed = 280.0f; - break; - case CLASS_MEDIC: - desiredspeed = 320.0f; - break; - case CLASS_HVYWEAPON: - desiredspeed = 228.0f; - break; - case CLASS_PYRO: - desiredspeed = 300.0f; - break; - case CLASS_SPY: - desiredspeed = 300.0f; - break; - case CLASS_ENGINEER: - desiredspeed = 300.0f; - break; - default: - desiredspeed = 300.0f; - } - - if (IsCrouching()) - desiredspeed /= 3; - - return desiredspeed; -} \ No newline at end of file diff --git a/src/shared/w_flamer.qc b/src/shared/w_flamer.qc index 0b14882..9d43732 100644 --- a/src/shared/w_flamer.qc +++ b/src/shared/w_flamer.qc @@ -101,14 +101,14 @@ w_flamer_primary(player pl) #ifdef SERVER static void w_flamer_die(void) { - NSEntity::Destroy(); + ncEntity::Destroy(); } static void w_flamer_touch(entity target, entity source) { - NSEntity me = (NSEntity)source; + ncEntity me = (ncEntity)source; if (target.takedamage == DAMAGE_YES) { - NSSurfacePropEntity m = (NSSurfacePropEntity)target; + ncSurfacePropEntity m = (ncSurfacePropEntity)target; m.Ignite(source, 5.0f, WEAPON_FLAMER); } } @@ -116,7 +116,7 @@ w_flamer_primary(player pl) Sound_Play(pl, CHAN_WEAPON, "weapon_flame.fire"); - NSProjectile ball = spawn(NSProjectile); + ncProjectile ball = spawn(ncProjectile); ball.SetModel("sprites/fthrow.spr"); ball.SetRenderMode(RM_ADDITIVE); ball.SetOwner(pl); diff --git a/src/shared/w_glauncher.qc b/src/shared/w_glauncher.qc index ad1a1e3..21515f6 100644 --- a/src/shared/w_glauncher.qc +++ b/src/shared/w_glauncher.qc @@ -102,13 +102,13 @@ w_glauncher_shootnade(player pl) pointparticles(particleeffectnum("fx_explosion.main"), self.origin, [0,0,0], 1); Damage_Radius(self.origin, self.owner, dmg, dmg * 2.5f, TRUE, WEAPON_GLAUNCHER); Sound_Play(self, CHAN_VOICE, "fx.explosion"); - NSEntity::Destroy(); + ncEntity::Destroy(); } Weapons_MakeVectors(pl); vecNadeVelocity = v_forward * 600 + v_up * 200 + crandom() * v_right * 10 + crandom() * v_up * 10; - NSRenderableEntity eNade = spawn(NSRenderableEntity); + ncRenderableEntity eNade = spawn(ncRenderableEntity); eNade.SetModel("models/pipebomb.mdl"); eNade.SetOrigin(Weapons_GetCameraPos(pl) + (v_forward * 14) + (v_up * -4) + (v_right * 2)); eNade.SetOwner(pl); diff --git a/src/shared/w_pipebomb.qc b/src/shared/w_pipebomb.qc index 5ba6e13..bd61336 100644 --- a/src/shared/w_pipebomb.qc +++ b/src/shared/w_pipebomb.qc @@ -75,7 +75,7 @@ void w_pipebomb_explode(void) /* dmg/radius taken from http://web.archive.org/web/20030323072941fw_/http://www.planetfortress.com/tfce/grenades/pipebomb.htm */ Damage_Radius(self.origin, self.owner, 80, 128, TRUE, WEAPON_GLAUNCHER); Sound_Play(self, CHAN_VOICE, "fx.explosion"); - NSEntity::Destroy(); + ncEntity::Destroy(); } #endif @@ -83,7 +83,7 @@ void w_pipebomb_shootnade(player pl) { vector vecNadeVelocity; - NSEntity first_nade; + ncEntity first_nade; int known_nades = 0i; float oldest_time = 0.0f; @@ -97,7 +97,7 @@ w_pipebomb_shootnade(player pl) Weapons_MakeVectors(pl); vecNadeVelocity = v_forward * 600 + v_up * 200 + crandom() * v_right * 10 + crandom() * v_up * 10; - NSRenderableEntity eNade = spawn(NSRenderableEntity); + ncRenderableEntity eNade = spawn(ncRenderableEntity); eNade.classname = "pipebomb"; eNade.SetModel("models/pipebomb.mdl"); eNade.SetOrigin(Weapons_GetCameraPos(pl) + (v_forward * 14) + (v_up * -4) + (v_right * 2)); @@ -117,7 +117,7 @@ w_pipebomb_shootnade(player pl) #ifdef SERVER /* iterate through and mark the first nade we own */ for (entity e = world; (e = find(e, ::classname, "pipebomb"));) { - NSEntity pb = (NSEntity)e; + ncEntity pb = (ncEntity)e; if (pb.GetOwner() == pl) { if (pb.GetSpawnAge() > oldest_time) { @@ -208,7 +208,7 @@ w_pipebomb_secondary(player pl) #ifdef SERVER for (entity e = world; (e = find(e, ::classname, "pipebomb"));) { - NSEntity pb = (NSEntity)e; + ncEntity pb = (ncEntity)e; if (pb.GetOwner() == pl) { pb.ScheduleThink(w_pipebomb_explode, pb_timer); diff --git a/zpak001.pk3dir/decls/def/bot.def b/zpak001.pk3dir/decls/def/bot.def deleted file mode 100644 index 4bcbcda..0000000 --- a/zpak001.pk3dir/decls/def/bot.def +++ /dev/null @@ -1,4 +0,0 @@ -entityDef bot -{ - spawnclass TFCBot -} \ No newline at end of file diff --git a/zpak001.pk3dir/decls/def/spawns.def b/zpak001.pk3dir/decls/def/spawns.def deleted file mode 100644 index 07ed426..0000000 --- a/zpak001.pk3dir/decls/def/spawns.def +++ /dev/null @@ -1,44 +0,0 @@ -entityDef info_player_start -{ - editor_mins "-16 -16 -36" - editor_maxs "16 16 36" - editor_description "Singleplayer Spawn" - - spawnclass NSSpawnPoint -} - -entityDef info_teamspawn_blue -{ - editor_mins "-16 -16 -36" - editor_maxs "16 16 36" - editor_description "Blue Team Spawn" - - spawnclass NSSpawnPoint -} - -entityDef info_teamspawn_red -{ - editor_mins "-16 -16 -36" - editor_maxs "16 16 36" - editor_description "Red Team Spawn" - - spawnclass NSSpawnPoint -} - -entityDef info_teamspawn_green -{ - editor_mins "-16 -16 -36" - editor_maxs "16 16 36" - editor_description "Yellow Team Spawn" - - spawnclass NSSpawnPoint -} - -entityDef info_teamspawn_yellow -{ - editor_mins "-16 -16 -36" - editor_maxs "16 16 36" - editor_description "Yellow Team Spawn" - - spawnclass NSSpawnPoint -} \ No newline at end of file diff --git a/zpak001.pk3dir/default.cfg b/zpak001.pk3dir/default.cfg deleted file mode 100644 index 2e4168a..0000000 --- a/zpak001.pk3dir/default.cfg +++ /dev/null @@ -1,6 +0,0 @@ -exec default_controls.cfg -exec cvar_defaults.cfg - -seta "hostname" "FreeTFC Server" -seta "maxplayers" "8" - \ No newline at end of file