X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fcompat%2Fquake3.qc;h=11b9f7188c8164661655a79b4e658295fe9bd621;hp=dc1d2eaa7aaab3731790707e5b09b6b4666ded4d;hb=0b9df86c9a55dd9ed9031b21e430fc3094fac709;hpb=6c1941c9ca16b4db6a166c17d339ef140dbf8205 diff --git a/qcsrc/server/compat/quake3.qc b/qcsrc/server/compat/quake3.qc index dc1d2eaa7..11b9f7188 100644 --- a/qcsrc/server/compat/quake3.qc +++ b/qcsrc/server/compat/quake3.qc @@ -2,35 +2,66 @@ #include #include -#include +#include +#include #include -#include +#include +#include #include #include #include #include #include -//*********************** -//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_ITEM(ammo_shells, ITEM_Shells) - -// MG -> MG -SPAWNFUNC_ITEM(ammo_bullets, ITEM_Bullets) +/*********************** + * QUAKE 3 ENTITIES - So people can play quake3 maps with the xonotic weapons + *********************** + + * Map entities NOT handled in this file: + holdable_invulnerability Q3TA currently unsupported + holdable_kamikaze Q3TA currently unsupported + item_ammoregen Q3TA handled by buffs mutator + item_doubler Q3TA handled by buffs mutator + item_guard Q3TA handled by buffs mutator + item_scout Q3TA handled by buffs mutator + item_armor_jacket CPMA handled in quake2.qc + item_flight Q3A handled by buffs mutator + item_haste Q3A handled by buffs mutator + item_health Q3A handled in quake.qc + item_health_large Q3A handled in items.qc + item_health_small Q3A handled in health.qh + item_health_mega Q3A handled in health.qh + item_invis Q3A handled by buffs mutator + item_quad Q3A handled in items.qc + item_regen Q3A handled by buffs mutator + CTF spawnfuncs handled in sv_ctf.qc + + NOTE: for best experience, you need to swap MGs with SGs in the map or it won't have a MG +*/ + +// SG -> MG || SG +SPAWNFUNC_ITEM_COND(ammo_shells, (q3compat & BIT(0)), ITEM_Bullets, ITEM_Shells) +SPAWNFUNC_WEAPON_COND(weapon_shotgun, (q3compat & BIT(0)), WEP_MACHINEGUN, WEP_SHOTGUN) + +// MG -> SG || MG +SPAWNFUNC_ITEM_COND(ammo_bullets, (q3compat & BIT(0)), ITEM_Shells, ITEM_Bullets) // GL -> Mortar SPAWNFUNC_ITEM(ammo_grenades, ITEM_Rockets) -// Mines -> Rockets +// Team Arena Proximity Launcher -> Mine Layer SPAWNFUNC_WEAPON(weapon_prox_launcher, WEP_MINE_LAYER) SPAWNFUNC_ITEM(ammo_mines, ITEM_Rockets) -// LG -> Lightning +// Team Arena Chaingun -> HLAC +SPAWNFUNC_WEAPON(weapon_chaingun, WEP_HLAC) +SPAWNFUNC_ITEM(ammo_belt, ITEM_Cells) + +// Team Arena Nailgun -> Crylink || Quake Nailgun -> Electro +SPAWNFUNC_WEAPON_COND(weapon_nailgun, cvar("sv_mapformat_is_quake3"), WEP_CRYLINK, WEP_ELECTRO) +SPAWNFUNC_ITEM(ammo_nails, ITEM_Cells) + +// LG -> Electro SPAWNFUNC_WEAPON(weapon_lightning, WEP_ELECTRO) SPAWNFUNC_ITEM(ammo_lightning, ITEM_Cells) @@ -42,9 +73,9 @@ SPAWNFUNC_ITEM(ammo_cells, ITEM_Rockets) SPAWNFUNC_WEAPON(weapon_railgun, WEP_VORTEX) SPAWNFUNC_ITEM(ammo_slugs, ITEM_Cells) -// BFG -> Crylink -SPAWNFUNC_WEAPON(weapon_bfg, WEP_CRYLINK) -SPAWNFUNC_ITEM(ammo_bfg, ITEM_Cells) +// BFG -> Crylink || Fireball +SPAWNFUNC_WEAPON_COND(weapon_bfg, cvar_string("g_mod_balance") == "XDF", WEP_CRYLINK, WEP_FIREBALL) +SPAWNFUNC_ITEM_COND(ammo_bfg, cvar_string("g_mod_balance") == "XDF", ITEM_Cells, ITEM_Rockets) // grappling hook -> hook SPAWNFUNC_WEAPON(weapon_grapplinghook, WEP_HOOK) @@ -56,6 +87,9 @@ SPAWNFUNC_ITEM(ammo_rockets, ITEM_Rockets) SPAWNFUNC_ITEM(item_armor_body, ITEM_ArmorMega) SPAWNFUNC_ITEM(item_armor_combat, ITEM_ArmorBig) SPAWNFUNC_ITEM(item_armor_shard, ITEM_ArmorSmall) +SPAWNFUNC_ITEM(item_armor_green, ITEM_ArmorMedium) // CCTF + +// Battle Suit SPAWNFUNC_ITEM(item_enviro, ITEM_Shield) // medkit -> armor (we have no holdables) @@ -243,27 +277,27 @@ spawnfunc(target_fragsFilter) this.use = fragsfilter_use; } -//spawnfunc(item_flight) /* handled by buffs mutator */ -//spawnfunc(item_doubler) /* handled by buffs mutator */ -//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 - -.float notteam; -.float notsingle; -.float notfree; -.float notta; +.bool notteam; +.bool notsingle; +.bool notfree; +.bool notta; +.bool notvq3; +.bool notcpm; .string gametype; bool DoesQ3ARemoveThisEntity(entity this) { // Q3 style filters (DO NOT USE, THIS IS COMPAT ONLY) + // DeFRaG mappers use "notcpm" or "notvq3" to disable an entity in CPM or VQ3 physics + // Xonotic is usually played with a CPM-based physics so we default to CPM mode + if(cvar_string("g_mod_physics") == "Q3") + { + if(this.notvq3) + return true; + } + else if(this.notcpm) + return true; + // Q3 mappers use "notq3a" or "notta" to disable an entity in Q3A or Q3TA // Xonotic has ~equivalent features to Team Arena if(this.notta) @@ -284,17 +318,19 @@ bool DoesQ3ARemoveThisEntity(entity this) if(this.gametype) { string gametypename; - // static char *gametypeNames[] = {"ffa", "tournament", "single", "team", "ctf", "oneflag", "obelisk", "harvester", "teamtournament"} + // From ioq3 g_spawn.c: static char *gametypeNames[] = {"ffa", "tournament", "single", "team", "ctf", "oneflag", "obelisk", "harvester"}; gametypename = "ffa"; if(teamplay) gametypename = "team"; if(g_ctf) gametypename = "ctf"; + if(g_ctf && ctf_oneflag) + gametypename = "oneflag"; if(g_duel) gametypename = "tournament"; if(maxclients == 1) gametypename = "single"; - // we do not have the other types (oneflag, obelisk, harvester, teamtournament) + // we do not have the other types (obelisk, harvester) if(strstrofs(this.gametype, gametypename, 0) < 0) return true; }