From: Mario Date: Sun, 25 Dec 2016 11:42:20 +0000 (+1000) Subject: Move quake, halflife and q3 files into a compat subdirectory (wop support coming... X-Git-Tag: xonotic-v0.8.2~357 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=9f3c9851a330279ee0ea7943970c3af484447bf2;p=xonotic%2Fxonotic-data.pk3dir.git Move quake, halflife and q3 files into a compat subdirectory (wop support coming soon) --- diff --git a/qcsrc/server/_all.inc b/qcsrc/server/_all.inc index 3359f13b1..95bf71531 100644 --- a/qcsrc/server/_all.inc +++ b/qcsrc/server/_all.inc @@ -3,6 +3,7 @@ #include "bot/_mod.inc" #include "command/_mod.inc" +#include "compat/_mod.inc" #include "mutators/_mod.inc" #include "pathlib/_mod.inc" #include "weapons/_mod.inc" diff --git a/qcsrc/server/_mod.inc b/qcsrc/server/_mod.inc index 4ecc610c7..eb74529a6 100644 --- a/qcsrc/server/_mod.inc +++ b/qcsrc/server/_mod.inc @@ -30,6 +30,3 @@ #endif #include #include -#include -#include -#include diff --git a/qcsrc/server/_mod.qh b/qcsrc/server/_mod.qh index 8162606c7..a0d160d57 100644 --- a/qcsrc/server/_mod.qh +++ b/qcsrc/server/_mod.qh @@ -30,6 +30,3 @@ #endif #include #include -#include -#include -#include diff --git a/qcsrc/server/compat/_mod.inc b/qcsrc/server/compat/_mod.inc new file mode 100644 index 000000000..c8c941a0c --- /dev/null +++ b/qcsrc/server/compat/_mod.inc @@ -0,0 +1,4 @@ +// generated file; do not modify +#include +#include +#include diff --git a/qcsrc/server/compat/_mod.qh b/qcsrc/server/compat/_mod.qh new file mode 100644 index 000000000..5c9b5914f --- /dev/null +++ b/qcsrc/server/compat/_mod.qh @@ -0,0 +1,4 @@ +// generated file; do not modify +#include +#include +#include diff --git a/qcsrc/server/compat/halflife.qc b/qcsrc/server/compat/halflife.qc new file mode 100644 index 000000000..74e50137f --- /dev/null +++ b/qcsrc/server/compat/halflife.qc @@ -0,0 +1,35 @@ +#include "halflife.qh" +.float roomtype; +.float radius; +.float pitch; +.float renderamt; +.float rendermode; +.vector rendercolor; + +spawnfunc(weapon_crossbow) {} +spawnfunc(weapon_handgrenade) {} +spawnfunc(ammo_crossbow) {} +spawnfunc(ammo_9mmclip) {} +spawnfunc(ammo_gaussclip) {} +spawnfunc(weapon_rpg) {} +spawnfunc(weapon_357) {} +void ammo_ARgrenades() {} +spawnfunc(item_battery) {} +spawnfunc(ammo_rpgclip) {} +void weapon_9mmAR() {} +spawnfunc(weapon_tripmine) {} +spawnfunc(weapon_snark) {} +spawnfunc(ammo_buckshot) {} +void ammo_9mmAR() {} +spawnfunc(ammo_357) {} +spawnfunc(weapon_gauss) {} +spawnfunc(weapon_hornetgun) {} +//spawnfunc(weapon_shotgun) {} +spawnfunc(item_healthkit) {} +spawnfunc(item_longjump) {} +spawnfunc(item_antidote) {} +spawnfunc(func_recharge) {} +spawnfunc(info_node) {} +spawnfunc(env_sound) {} +spawnfunc(light_spot) {} +spawnfunc(func_healthcharger) {} diff --git a/qcsrc/server/compat/halflife.qh b/qcsrc/server/compat/halflife.qh new file mode 100644 index 000000000..6f70f09be --- /dev/null +++ b/qcsrc/server/compat/halflife.qh @@ -0,0 +1 @@ +#pragma once diff --git a/qcsrc/server/compat/quake.qc b/qcsrc/server/compat/quake.qc new file mode 100644 index 000000000..539042d63 --- /dev/null +++ b/qcsrc/server/compat/quake.qc @@ -0,0 +1,30 @@ +#include "quake.qh" + +#include + +spawnfunc(weapon_electro); +spawnfunc(weapon_hagar); +spawnfunc(weapon_machinegun); +spawnfunc(item_bullets); +spawnfunc(item_armor_mega); +spawnfunc(item_health_mega); +spawnfunc(item_health_medium); + +//*********************** +//QUAKE 1 ENTITIES - So people can play quake1 maps with the xonotic weapons +//*********************** +spawnfunc(weapon_nailgun) {spawnfunc_weapon_electro(this);} +spawnfunc(weapon_supernailgun) {spawnfunc_weapon_hagar(this);} +spawnfunc(weapon_supershotgun) {spawnfunc_weapon_machinegun(this);} + +spawnfunc(item_spikes) {spawnfunc_item_bullets(this);} +//spawnfunc(item_armor1) {spawnfunc_item_armor_medium(this);} // FIXME: in Quake this is green armor, in Xonotic maps it is an armor shard +spawnfunc(item_armor2) {spawnfunc_item_armor_mega(this);} +spawnfunc(item_armorInv) {spawnfunc_item_armor_mega(this);} // TODO: make sure we actually want this +spawnfunc(item_health) {if (this.spawnflags & 2) spawnfunc_item_health_mega(this);else spawnfunc_item_health_medium(this);} + +//spawnfunc_item_spikes +//spawnfunc_item_health + + + diff --git a/qcsrc/server/compat/quake.qh b/qcsrc/server/compat/quake.qh new file mode 100644 index 000000000..6f70f09be --- /dev/null +++ b/qcsrc/server/compat/quake.qh @@ -0,0 +1 @@ +#pragma once diff --git a/qcsrc/server/compat/quake3.qc b/qcsrc/server/compat/quake3.qc new file mode 100644 index 000000000..1c53de31e --- /dev/null +++ b/qcsrc/server/compat/quake3.qc @@ -0,0 +1,208 @@ +#include "quake3.qh" + +#include + +spawnfunc(weapon_crylink); +spawnfunc(weapon_electro); +spawnfunc(weapon_hagar); +spawnfunc(weapon_machinegun); +spawnfunc(weapon_vortex); + +spawnfunc(target_items); + +spawnfunc(item_bullets); +spawnfunc(item_cells); +spawnfunc(item_rockets); +spawnfunc(item_shells); + +spawnfunc(item_jetpack); + +spawnfunc(item_armor_big); +spawnfunc(item_armor_mega); +spawnfunc(item_armor_small); + +spawnfunc(item_health_medium); +spawnfunc(item_health_mega); + +//*********************** +//QUAKE 3 ENTITIES - So people can play quake3 maps with the xonotic weapons +//*********************** + +// NOTE: for best experience, you need to swap MGs with SGs in the map or it won't have a MG + +// SG -> SG +spawnfunc(ammo_shells) { spawnfunc_item_shells(this); } + +// MG -> MG +spawnfunc(ammo_bullets) { spawnfunc_item_bullets(this); } + +// GL -> Mortar +spawnfunc(ammo_grenades) { spawnfunc_item_rockets(this); } + +// LG -> Lightning +spawnfunc(weapon_lightning) { spawnfunc_weapon_electro(this); } +spawnfunc(ammo_lightning) { spawnfunc_item_cells(this); } + +// Plasma -> Hagar +spawnfunc(weapon_plasmagun) { spawnfunc_weapon_hagar(this); } +spawnfunc(ammo_cells) { spawnfunc_item_rockets(this); } + +// Rail -> Vortex +spawnfunc(weapon_railgun) { spawnfunc_weapon_vortex(this); } +spawnfunc(ammo_slugs) { spawnfunc_item_cells(this); } + +// BFG -> Crylink +spawnfunc(weapon_bfg) { spawnfunc_weapon_crylink(this); } +spawnfunc(ammo_bfg) { spawnfunc_item_cells(this); } + +// RL -> RL +spawnfunc(ammo_rockets) { spawnfunc_item_rockets(this); } + +// Armor +spawnfunc(item_armor_body) { spawnfunc_item_armor_mega(this); } +spawnfunc(item_armor_combat) { spawnfunc_item_armor_big(this); } +spawnfunc(item_armor_shard) { spawnfunc_item_armor_small(this); } +spawnfunc(item_enviro) { spawnfunc_item_invincible(this); } + +.float wait; +.float delay; + +// weapon remove ent from df +void target_init_verify(entity this) +{ + entity trigger, targ; + for(trigger = NULL; (trigger = find(trigger, classname, "trigger_multiple")); ) + for(targ = NULL; (targ = find(targ, targetname, trigger.target)); ) + if (targ.classname == "target_init" || targ.classname == "target_give" || targ.classname == "target_items") + { + trigger.wait = 0; + trigger.delay = 0; + targ.wait = 0; + targ.delay = 0; + + //setsize(targ, trigger.mins, trigger.maxs); + //setorigin(targ, trigger.origin); + //remove(trigger); + } +} + +spawnfunc(target_init) +{ + this.spawnflags = 0; // remove all weapons except the ones listed below + this.netname = "shotgun"; // keep these weapons through the remove trigger + spawnfunc_target_items(this); + InitializeEntity(this, target_init_verify, INITPRIO_FINDTARGET); +} + +// weapon give ent from defrag +void target_give_init(entity this) +{ + IL_EACH(g_items, it.targetname == this.target, + { + if (it.classname == "weapon_rocketlauncher" || it.classname == "weapon_devastator") { + this.ammo_rockets += it.count * WEP_CVAR(devastator, ammo); + this.netname = "devastator"; + } + else if (it.classname == "weapon_plasmagun") { + this.ammo_rockets += it.count * WEP_CVAR_PRI(hagar, ammo); // WEAPONTODO + if(this.netname == "") + this.netname = "hagar"; + else + this.netname = strcat(this.netname, " hagar"); + } + else if (it.classname == "weapon_bfg") { + this.ammo_cells += it.count * WEP_CVAR_PRI(crylink, ammo); + if(this.netname == "") + this.netname = "crylink"; + else + this.netname = strcat(this.netname, " crylink"); + } + else if (it.classname == "weapon_grenadelauncher" || it.classname == "weapon_mortar") { + this.ammo_rockets += it.count * WEP_CVAR_PRI(mortar, ammo); // WEAPONTODO + if(this.netname == "") + this.netname = "mortar"; + else + this.netname = strcat(this.netname, " mortar"); + } + else if (it.classname == "item_armor_body") + this.armorvalue = 100; + else if (it.classname == "item_health_mega") + this.health = 200; + //remove(it); // removing ents in init functions causes havoc, workaround: + setthink(it, SUB_Remove); + it.nextthink = time; + }); + this.spawnflags = 2; + spawnfunc_target_items(this); + InitializeEntity(this, target_init_verify, INITPRIO_FINDTARGET); +} + +spawnfunc(target_give) +{ + InitializeEntity(this, target_give_init, INITPRIO_FINDTARGET); +} + +//spawnfunc(item_flight) /* handled by jetpack */ +//spawnfunc(item_haste) /* handled by buffs mutator */ +//spawnfunc(item_health) /* handled in t_quake.qc */ +//spawnfunc(item_health_large) /* handled in t_items.qc */ +//spawnfunc(item_health_small) /* handled in t_items.qc */ +//spawnfunc(item_health_mega) /* handled in t_items.qc */ +//spawnfunc(item_invis) /* handled by buffs mutator */ +//spawnfunc(item_regen) /* handled by buffs mutator */ + +// CTF spawnfuncs handled in mutators/gamemode_ctf.qc now + +spawnfunc(item_flight) +{ + spawnfunc_item_jetpack(this); +} + +.float notteam; +.float notsingle; +.float notfree; +.float notq3a; +.float notta; +.string gametype; +bool DoesQ3ARemoveThisEntity(entity this) +{ + // Q3 style filters (DO NOT USE, THIS IS COMPAT ONLY) + + if(this.notq3a) + if(!teamplay || g_tdm || g_ctf) + return true; + + if(this.notta) + if (!(!teamplay || g_tdm || g_ctf)) + return true; + + if(this.notsingle) + if(maxclients == 1) + return true; + + if(this.notteam) + if(teamplay) + return true; + + if(this.notfree) + if(!teamplay) + return true; + + if(this.gametype) + { + string gametypename; + // static char *gametypeNames[] = {"ffa", "tournament", "single", "team", "ctf", "oneflag", "obelisk", "harvester", "teamtournament"} + gametypename = "ffa"; + if(teamplay) + gametypename = "team"; + if(g_ctf) + gametypename = "ctf"; + if(maxclients == 1) + gametypename = "single"; + // we do not have the other types (oneflag, obelisk, harvester, teamtournament) + if(strstrofs(this.gametype, gametypename, 0) < 0) + return true; + } + + return false; +} diff --git a/qcsrc/server/compat/quake3.qh b/qcsrc/server/compat/quake3.qh new file mode 100644 index 000000000..6f70f09be --- /dev/null +++ b/qcsrc/server/compat/quake3.qh @@ -0,0 +1 @@ +#pragma once diff --git a/qcsrc/server/t_halflife.qc b/qcsrc/server/t_halflife.qc deleted file mode 100644 index 771954245..000000000 --- a/qcsrc/server/t_halflife.qc +++ /dev/null @@ -1,35 +0,0 @@ -#include "t_halflife.qh" -.float roomtype; -.float radius; -.float pitch; -.float renderamt; -.float rendermode; -.vector rendercolor; - -spawnfunc(weapon_crossbow) {} -spawnfunc(weapon_handgrenade) {} -spawnfunc(ammo_crossbow) {} -spawnfunc(ammo_9mmclip) {} -spawnfunc(ammo_gaussclip) {} -spawnfunc(weapon_rpg) {} -spawnfunc(weapon_357) {} -void ammo_ARgrenades() {} -spawnfunc(item_battery) {} -spawnfunc(ammo_rpgclip) {} -void weapon_9mmAR() {} -spawnfunc(weapon_tripmine) {} -spawnfunc(weapon_snark) {} -spawnfunc(ammo_buckshot) {} -void ammo_9mmAR() {} -spawnfunc(ammo_357) {} -spawnfunc(weapon_gauss) {} -spawnfunc(weapon_hornetgun) {} -//spawnfunc(weapon_shotgun) {} -spawnfunc(item_healthkit) {} -spawnfunc(item_longjump) {} -spawnfunc(item_antidote) {} -spawnfunc(func_recharge) {} -spawnfunc(info_node) {} -spawnfunc(env_sound) {} -spawnfunc(light_spot) {} -spawnfunc(func_healthcharger) {} diff --git a/qcsrc/server/t_halflife.qh b/qcsrc/server/t_halflife.qh deleted file mode 100644 index 6f70f09be..000000000 --- a/qcsrc/server/t_halflife.qh +++ /dev/null @@ -1 +0,0 @@ -#pragma once diff --git a/qcsrc/server/t_quake.qc b/qcsrc/server/t_quake.qc deleted file mode 100644 index 7a277df98..000000000 --- a/qcsrc/server/t_quake.qc +++ /dev/null @@ -1,30 +0,0 @@ -#include "t_quake.qh" - -#include - -spawnfunc(weapon_electro); -spawnfunc(weapon_hagar); -spawnfunc(weapon_machinegun); -spawnfunc(item_bullets); -spawnfunc(item_armor_mega); -spawnfunc(item_health_mega); -spawnfunc(item_health_medium); - -//*********************** -//QUAKE 1 ENTITIES - So people can play quake1 maps with the xonotic weapons -//*********************** -spawnfunc(weapon_nailgun) {spawnfunc_weapon_electro(this);} -spawnfunc(weapon_supernailgun) {spawnfunc_weapon_hagar(this);} -spawnfunc(weapon_supershotgun) {spawnfunc_weapon_machinegun(this);} - -spawnfunc(item_spikes) {spawnfunc_item_bullets(this);} -//spawnfunc(item_armor1) {spawnfunc_item_armor_medium(this);} // FIXME: in Quake this is green armor, in Xonotic maps it is an armor shard -spawnfunc(item_armor2) {spawnfunc_item_armor_mega(this);} -spawnfunc(item_armorInv) {spawnfunc_item_armor_mega(this);} // TODO: make sure we actually want this -spawnfunc(item_health) {if (this.spawnflags & 2) spawnfunc_item_health_mega(this);else spawnfunc_item_health_medium(this);} - -//spawnfunc_item_spikes -//spawnfunc_item_health - - - diff --git a/qcsrc/server/t_quake.qh b/qcsrc/server/t_quake.qh deleted file mode 100644 index 6f70f09be..000000000 --- a/qcsrc/server/t_quake.qh +++ /dev/null @@ -1 +0,0 @@ -#pragma once diff --git a/qcsrc/server/t_quake3.qc b/qcsrc/server/t_quake3.qc deleted file mode 100644 index 85ec325bd..000000000 --- a/qcsrc/server/t_quake3.qc +++ /dev/null @@ -1,208 +0,0 @@ -#include "t_quake3.qh" - -#include - -spawnfunc(weapon_crylink); -spawnfunc(weapon_electro); -spawnfunc(weapon_hagar); -spawnfunc(weapon_machinegun); -spawnfunc(weapon_vortex); - -spawnfunc(target_items); - -spawnfunc(item_bullets); -spawnfunc(item_cells); -spawnfunc(item_rockets); -spawnfunc(item_shells); - -spawnfunc(item_jetpack); - -spawnfunc(item_armor_big); -spawnfunc(item_armor_mega); -spawnfunc(item_armor_small); - -spawnfunc(item_health_medium); -spawnfunc(item_health_mega); - -//*********************** -//QUAKE 3 ENTITIES - So people can play quake3 maps with the xonotic weapons -//*********************** - -// NOTE: for best experience, you need to swap MGs with SGs in the map or it won't have a MG - -// SG -> SG -spawnfunc(ammo_shells) { spawnfunc_item_shells(this); } - -// MG -> MG -spawnfunc(ammo_bullets) { spawnfunc_item_bullets(this); } - -// GL -> Mortar -spawnfunc(ammo_grenades) { spawnfunc_item_rockets(this); } - -// LG -> Lightning -spawnfunc(weapon_lightning) { spawnfunc_weapon_electro(this); } -spawnfunc(ammo_lightning) { spawnfunc_item_cells(this); } - -// Plasma -> Hagar -spawnfunc(weapon_plasmagun) { spawnfunc_weapon_hagar(this); } -spawnfunc(ammo_cells) { spawnfunc_item_rockets(this); } - -// Rail -> Vortex -spawnfunc(weapon_railgun) { spawnfunc_weapon_vortex(this); } -spawnfunc(ammo_slugs) { spawnfunc_item_cells(this); } - -// BFG -> Crylink -spawnfunc(weapon_bfg) { spawnfunc_weapon_crylink(this); } -spawnfunc(ammo_bfg) { spawnfunc_item_cells(this); } - -// RL -> RL -spawnfunc(ammo_rockets) { spawnfunc_item_rockets(this); } - -// Armor -spawnfunc(item_armor_body) { spawnfunc_item_armor_mega(this); } -spawnfunc(item_armor_combat) { spawnfunc_item_armor_big(this); } -spawnfunc(item_armor_shard) { spawnfunc_item_armor_small(this); } -spawnfunc(item_enviro) { spawnfunc_item_invincible(this); } - -.float wait; -.float delay; - -// weapon remove ent from df -void target_init_verify(entity this) -{ - entity trigger, targ; - for(trigger = NULL; (trigger = find(trigger, classname, "trigger_multiple")); ) - for(targ = NULL; (targ = find(targ, targetname, trigger.target)); ) - if (targ.classname == "target_init" || targ.classname == "target_give" || targ.classname == "target_items") - { - trigger.wait = 0; - trigger.delay = 0; - targ.wait = 0; - targ.delay = 0; - - //setsize(targ, trigger.mins, trigger.maxs); - //setorigin(targ, trigger.origin); - //remove(trigger); - } -} - -spawnfunc(target_init) -{ - this.spawnflags = 0; // remove all weapons except the ones listed below - this.netname = "shotgun"; // keep these weapons through the remove trigger - spawnfunc_target_items(this); - InitializeEntity(this, target_init_verify, INITPRIO_FINDTARGET); -} - -// weapon give ent from defrag -void target_give_init(entity this) -{ - IL_EACH(g_items, it.targetname == this.target, - { - if (it.classname == "weapon_rocketlauncher" || it.classname == "weapon_devastator") { - this.ammo_rockets += it.count * WEP_CVAR(devastator, ammo); - this.netname = "devastator"; - } - else if (it.classname == "weapon_plasmagun") { - this.ammo_rockets += it.count * WEP_CVAR_PRI(hagar, ammo); // WEAPONTODO - if(this.netname == "") - this.netname = "hagar"; - else - this.netname = strcat(this.netname, " hagar"); - } - else if (it.classname == "weapon_bfg") { - this.ammo_cells += it.count * WEP_CVAR_PRI(crylink, ammo); - if(this.netname == "") - this.netname = "crylink"; - else - this.netname = strcat(this.netname, " crylink"); - } - else if (it.classname == "weapon_grenadelauncher" || it.classname == "weapon_mortar") { - this.ammo_rockets += it.count * WEP_CVAR_PRI(mortar, ammo); // WEAPONTODO - if(this.netname == "") - this.netname = "mortar"; - else - this.netname = strcat(this.netname, " mortar"); - } - else if (it.classname == "item_armor_body") - this.armorvalue = 100; - else if (it.classname == "item_health_mega") - this.health = 200; - //remove(it); // removing ents in init functions causes havoc, workaround: - setthink(it, SUB_Remove); - it.nextthink = time; - }); - this.spawnflags = 2; - spawnfunc_target_items(this); - InitializeEntity(this, target_init_verify, INITPRIO_FINDTARGET); -} - -spawnfunc(target_give) -{ - InitializeEntity(this, target_give_init, INITPRIO_FINDTARGET); -} - -//spawnfunc(item_flight) /* handled by jetpack */ -//spawnfunc(item_haste) /* handled by buffs mutator */ -//spawnfunc(item_health) /* handled in t_quake.qc */ -//spawnfunc(item_health_large) /* handled in t_items.qc */ -//spawnfunc(item_health_small) /* handled in t_items.qc */ -//spawnfunc(item_health_mega) /* handled in t_items.qc */ -//spawnfunc(item_invis) /* handled by buffs mutator */ -//spawnfunc(item_regen) /* handled by buffs mutator */ - -// CTF spawnfuncs handled in mutators/gamemode_ctf.qc now - -spawnfunc(item_flight) -{ - spawnfunc_item_jetpack(this); -} - -.float notteam; -.float notsingle; -.float notfree; -.float notq3a; -.float notta; -.string gametype; -bool DoesQ3ARemoveThisEntity(entity this) -{ - // Q3 style filters (DO NOT USE, THIS IS COMPAT ONLY) - - if(this.notq3a) - if(!teamplay || g_tdm || g_ctf) - return true; - - if(this.notta) - if (!(!teamplay || g_tdm || g_ctf)) - return true; - - if(this.notsingle) - if(maxclients == 1) - return true; - - if(this.notteam) - if(teamplay) - return true; - - if(this.notfree) - if(!teamplay) - return true; - - if(this.gametype) - { - string gametypename; - // static char *gametypeNames[] = {"ffa", "tournament", "single", "team", "ctf", "oneflag", "obelisk", "harvester", "teamtournament"} - gametypename = "ffa"; - if(teamplay) - gametypename = "team"; - if(g_ctf) - gametypename = "ctf"; - if(maxclients == 1) - gametypename = "single"; - // we do not have the other types (oneflag, obelisk, harvester, teamtournament) - if(strstrofs(this.gametype, gametypename, 0) < 0) - return true; - } - - return false; -} diff --git a/qcsrc/server/t_quake3.qh b/qcsrc/server/t_quake3.qh deleted file mode 100644 index 6f70f09be..000000000 --- a/qcsrc/server/t_quake3.qh +++ /dev/null @@ -1 +0,0 @@ -#pragma once