SERVER: Start of NZ:P Beta Map Compatibility, Ankunft pseudo-playable

This commit is contained in:
cypress 2023-12-29 19:49:13 -05:00
parent 371f4b9824
commit b6f4676a5c
15 changed files with 218 additions and 85 deletions

View file

@ -50,3 +50,5 @@
../source/server/ai/zombie_core.qc
../source/server/ai/crawler_core.qc
../source/server/ai/dog_core.qc
../source/server/utilities/map_compatibility.qc

View file

@ -54,3 +54,5 @@
../source/server/ai/zombie_core.qc
../source/server/ai/crawler_core.qc
../source/server/ai/dog_core.qc
../source/server/utilities/map_compatibility.qc

View file

@ -569,11 +569,15 @@ noref void(float isnew) CSQC_Ent_Update =
self.solid = SOLID_SLIDEBOX;
setmodelindex(self, self.modelindex);
if (self.stance == 2)
setsize(self, PLAYER_MINS_STANDING, PLAYER_MAXS_STANDING);
else
setsize(self, PLAYER_MINS_CROUCHING, PLAYER_MAXS_CROUCHING);
if (map_compatibility_mode != MAP_COMPAT_BETA) {
if (self.stance == 2)
setsize(self, PLAYER_MINS_STANDING, PLAYER_MAXS_STANDING);
else
setsize(self, PLAYER_MINS_CROUCHING, PLAYER_MAXS_CROUCHING);
} else {
setsize(self, PLAYER_MINS_QUAKE, PLAYER_MAXS_QUAKE);
}
} else {
if(isnew)
addentity(self);
@ -1461,20 +1465,9 @@ noref void() CSQC_Parse_Event =
revive_icons[reviveoff_id].draw = false;
active_revive_icons--;
break;
// case EVENT_POINTUPDATE:
// float playernum = readbyte();
// float temppoints = readlong();
// RegisterPointChange(readlong(), playernum);
// float tempkills = readlong();
// string tempname = readstring();
// switch(playernum) {
// case 1: playerpoints[0] = temppoints; playerkills[0] = tempkills; playernames[0] = tempname; break;
// case 2: playerpoints[1] = temppoints; playerkills[1] = tempkills; playernames[1] = tempname; break;
// case 3: playerpoints[2] = temppoints; playerkills[2] = tempkills; playernames[2] = tempname; break;
// case 4: playerpoints[3] = temppoints; playerkills[3] = tempkills; playernames[3] = tempname; break;
// }
// break;
case EVENT_MAPTYPE:
map_compatibility_mode = readbyte();
break;
case EVENT_BLACKOUT:
fade_time = readbyte();
fade_type = readbyte();

View file

@ -1767,8 +1767,13 @@ void(entity where) spawn_a_zombieB =
szombie.gravity = 1.0;
szombie.mins = '-8 -8 -32';//-16 16 -32
szombie.maxs = '8 8 30';//16 16 40
if (map_compatibility_mode == MAP_COMPAT_BETA) {
szombie.mins = '-8 -8 -24';//-16 16 -32
szombie.maxs = '8 8 30';//16 16 40
} else {
szombie.mins = '-8 -8 -32';//-16 16 -32
szombie.maxs = '8 8 30';//16 16 40
}
setsize (szombie, szombie.mins, szombie.maxs);//-16,-16,-32,16,16,40
@ -1865,6 +1870,9 @@ void(entity where) spawn_a_zombieB =
szombie.head.skin = szombie.larm.skin = szombie.rarm.skin = szombie.skin;
if (map_compatibility_mode == MAP_COMPAT_BETA)
szombie.head.scale = szombie.larm.scale = szombie.rarm.scale = szombie.scale = 0.68;
// set up timer for next spawn
zombie_spawn_timer = zombie_spawn_delay + time;
};

View file

@ -67,6 +67,14 @@ void SetUpdate(entity client, float type, float val1, float val2, float val3)
}
#ifdef FTE
void(float mode, entity to) ReportMapMode = {
WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET);
WriteByte(MSG_MULTICAST, EVENT_MAPTYPE);
WriteByte(MSG_MULTICAST, mode);
msg_entity = to;
multicast('0 0 0', MULTICAST_ONE);
}
void(entity to, float type, float cost, float weapon) useprint = {
WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET);
WriteByte(MSG_MULTICAST, EVENT_USEPRINT);

View file

@ -197,7 +197,9 @@ void() GetDown =
if (self.stance == 2) self.new_ofs_z = self.view_ofs_z - (PLAYER_CROUCH_HEIGHT + PLAYER_PRONE_HEIGHT);
if (self.stance == 1) self.new_ofs_z = self.view_ofs_z - PLAYER_CROUCH_HEIGHT;
self.stance = 0;
setsize(self, PLAYER_MINS_CROUCHING, PLAYER_MAXS_CROUCHING);
if (map_compatibility_mode != MAP_COMPAT_BETA)
setsize(self, PLAYER_MINS_CROUCHING, PLAYER_MAXS_CROUCHING);
// Get rid of Mule Kick Weapon
for(float i = 0; i < MAX_PLAYER_WEAPONS; i++) {
@ -332,7 +334,7 @@ void() GetDown =
// Spawn Revive Sprite in Co-Op
if (player_count) {
EnableReviveIcon(revive_index, self.origin + VEC_VIEW_OFS);
EnableReviveIcon(revive_index, self.origin + VIEW_OFS_HL);
self.electro_targeted = revive_index;
revive_index++;
}
@ -346,17 +348,19 @@ void () GetUp =
// Play Getting Up Animation
PAnim_GetUp();
// Player is able to get up from here
if (Player_CanStandHere(self)) {
self.new_ofs_z = self.view_ofs_z + PLAYER_CROUCH_HEIGHT + PLAYER_PRONE_HEIGHT;
self.stance = 2;
setsize(self, PLAYER_MINS_STANDING, PLAYER_MAXS_STANDING);
}
// They can't, so make them crouch instead
else {
self.new_ofs_z = self.view_ofs_z + PLAYER_PRONE_HEIGHT;
self.stance = 1;
PAnim_CrouchWalk7(); // bad hack so they dont just end up fucking standing in a wall.
if (map_compatibility_mode != MAP_COMPAT_BETA) {
// Player is able to get up from here
if (Player_CanStandHere(self)) {
self.new_ofs_z = self.view_ofs_z + PLAYER_CROUCH_HEIGHT + PLAYER_PRONE_HEIGHT;
self.stance = 2;
setsize(self, PLAYER_MINS_STANDING, PLAYER_MAXS_STANDING);
}
// They can't, so make them crouch instead
else {
self.new_ofs_z = self.view_ofs_z + PLAYER_PRONE_HEIGHT;
self.stance = 1;
PAnim_CrouchWalk7(); // bad hack so they dont just end up fucking standing in a wall.
}
}
self.health = 100;

View file

@ -253,7 +253,8 @@ void() SUB_Null2 = {};
#define VEC_HULL2_MIN '-32 -32 -24'
#define VEC_HULL2_MAX '32 32 64'
#define VEC_VIEW_OFS '0 0 32'
#define VIEW_OFS_HL '0 0 32'
#define VIEW_OFS_QK '0 0 22'
.string name;
vector trace_plane_normal;

View file

@ -58,12 +58,6 @@ void() info_end = {remove(self);};
//// beta removal
void() monster_dog = {remove(self);};
void() item_pap = {remove(self);};
//void() item_juggernog = {remove(self);};
//void() item_flopper = {remove(self);};
//void() item_douple = {remove(self);};
//void() item_speed = {remove(self);};
//void() item_revive = {remove(self);};
void() palm_tree_closed = {remove(self);};
void() func_model = {remove(self);};
void() wooden_crate = {remove(self);};

View file

@ -1435,34 +1435,4 @@ void() perk_random =
}
}
}
}
void() item_revive =
{
perk_revive();
self.origin_z += 8;
}
void() item_juggernog =
{
perk_juggernog();
self.origin_z += 8;
}
void() item_speed =
{
perk_speed();
self.origin_z += 8;
}
void() item_douple =
{
perk_double();
self.origin_z += 8;
}
void() item_flopper =
{
perk_flopper();
self.origin_z += 8;
}
}

View file

@ -427,6 +427,4 @@ void() item_barricade =
setsize(self, '-20 -20 -64', '20 20 16');
setorigin(self, self.origin);
spawn_boxes();
};
void() item_cover = {item_barricade();};
};

View file

@ -633,6 +633,7 @@ string(string asset) convert_old_asset_path =
ret = "models/props/metal_chair.mdl";
break;
case "progs/props/sandbags.mdl":
case "progs/sandbags.mdl":
ret = "models/props/sandbags.mdl";
break;
case "progs/props/dentist_chair.mdl":
@ -711,12 +712,15 @@ string(string asset) convert_old_asset_path =
ret = "models/props/bed.mdl";
break;
case "progs/gmodels/g_mp40.mdl":
case "progs/g_mp40.mdl":
ret = "models/weapons/mp40/g_mp40.mdl";
break;
case "progs/gmodels/g_thomp.mdl":
case "progs/g_thomp.mdl":
ret = "models/weapons/thomp/g_thomp.mdl";
break;
case "progs/gmodels/g_betty.mdl":
case "progs/g_betty.mdl":
ret = "models/weapons/grenade/g_betty.mdl";
break;
case "progs/gmodels/g_fg.mdl":
@ -734,12 +738,20 @@ string(string asset) convert_old_asset_path =
case "progs/gmodels/g_bar.mdl":
ret = "models/weapons/bar/g_bar.mdl";
break;
case "progs/grenade.mdl":
case "progs/gmodels/g_grenade.mdl":
ret = "models/weapons/grenade/g_grenade.mdl";
break;
case "progs/g_gewehr.mdl":
case "progs/gmodels/g_gewehr.mdl":
ret = "models/weapons/gewehr/g_gewehr.mdl";
break;
case "progs/g_db.mdl":
ret = "models/weapons/db/g_db.mdl";
break;
case "progs/g_kar.mdl":
ret = "models/weapons/kar/g_kar.mdl";
break;
case "progs/gmodels/g_bowie.mdl":
ret = "models/weapons/knife/g_bowie.mdl";
break;
@ -747,9 +759,11 @@ string(string asset) convert_old_asset_path =
ret = "models/weapons/type/g_type.mdl";
break;
case "progs/gmodels/g_ppsh.mdl":
case "progs/g_ppsh.mdl":
ret = "models/weapons/ppsh/g_ppsh.mdl";
break;
case "progs/gmodels/g_stg.mdl":
case "progs/g_stg.mdl":
ret = "models/weapons/stg/g_stg.mdl";
break;
case "models/misc/lightning.spr":

View file

@ -322,7 +322,9 @@ void(float override) JumpCheck =
break;
default: break;
}
setsize(self, PLAYER_MINS_STANDING, PLAYER_MAXS_STANDING);
if (map_compatibility_mode != MAP_COMPAT_BETA)
setsize(self, PLAYER_MINS_STANDING, PLAYER_MAXS_STANDING);
}
} else
self.flags = self.flags | FL_JUMPRELEASED;
@ -334,7 +336,12 @@ void() PlayerPreThink =
if (self.downed) {
self.maxspeed = 30;
} else {
self.maxspeed = 190;
if (map_compatibility_mode == MAP_COMPAT_BETA)
self.maxspeed = 150;
else
self.maxspeed = 190;
if (self.sprinting) {
#ifdef FTE
@ -783,8 +790,15 @@ void() PlayerSpawn =
Player_PickSpawnPoint();
self.fixangle = true;
setsize(self, PLAYER_MINS_STANDING, PLAYER_MAXS_STANDING);
self.view_ofs = VEC_VIEW_OFS; // naievil -- set view_ofs to 32 to maintain half life (64) sizes
if (map_compatibility_mode == MAP_COMPAT_BETA) {
self.view_ofs = VIEW_OFS_QK;
setsize(self, PLAYER_MINS_QUAKE, PLAYER_MAXS_QUAKE);
} else {
self.view_ofs = VIEW_OFS_HL;
setsize(self, PLAYER_MINS_STANDING, PLAYER_MAXS_STANDING);
}
self.stance = 2;
self.new_ofs_z = self.view_ofs_z;
self.oldz = self.origin_z;
@ -831,6 +845,8 @@ void() PlayerSpawn =
if (G_WORLDTEXT)
WorldText(world.chaptertitle, world.location, world.date, world.person, self);
ReportMapMode(map_compatibility_mode, self);
#else
self.Weapon_Name = GetWeaponName(self.weapon);

View file

@ -0,0 +1,99 @@
/*
server/utilities/map_compatibility.qc
Converts entities and other gameplay functions from earlier versions
of NZ:P to work here.
Copyright (C) 2021-2023 NZ:P Team
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to:
Free Software Foundation, Inc.
59 Temple Place - Suite 330
Boston, MA 02111-1307, USA
*/
//
// NZ:P Beta Barricades
//
//
// Compat_ConvertBetaBarricade
// Barricades need relocated, scaled,
// and their goal boxes re-positioned.
//
void() Compat_ConvertBetaBarricade =
{
makevectors(self.angles);
self.origin += v_up*48;
self.origin -= v_forward*2;
setsize(self, '-30 -30 -10','30 30 10');
self.box1 = self.origin + (v_forward * -50) + (v_up * -50);
self.box2 = self.box1 + (v_right * 50);
self.box3 = self.box1 + (v_right * -50);
self.idlebox = self.box1 + (v_forward * -50);
self.hop_spot = self.origin + v_forward * 50;
self.hop_spot_x -= 5;
self.hop_spot_z -= 25;
self.scale = 0.75;
}
void() item_cover = {map_compatibility_mode = MAP_COMPAT_BETA; item_barricade(); Compat_ConvertBetaBarricade();};
//
// NZ:P Beta Perk-A-Cola Machines
//
//
// Compat_RelocateBetaPerkMachine()
// Perk-A-Cola models in NZ:P Beta used to have
// non-center origin offsets, so they need re-placed
// to be (nearly) matching what they were intended to be.
// This also sets the scaling correctly, sue me.
//
#define COMPAT_RELOCAT_NORM 0
#define COMPAT_RELOCAT_PAP 1
#define COMPAT_RELOCAT_SPEED 2
void(float mode) Compat_RelocateBetaPerkMachine =
{
makevectors(self.angles);
switch(mode) {
case COMPAT_RELOCAT_PAP:
self.origin += v_forward*8;
self.origin += v_up*24;
break;
case COMPAT_RELOCAT_SPEED:
self.origin += v_forward*17;
self.origin += v_up*2;
break;
default:
self.origin += v_forward*10;
self.origin += v_up*4;
break;
}
self.scale = 0.85;
}
void() item_revive = {map_compatibility_mode = MAP_COMPAT_BETA; Compat_RelocateBetaPerkMachine(COMPAT_RELOCAT_NORM); perk_revive();};
void() item_speed = {map_compatibility_mode = MAP_COMPAT_BETA; Compat_RelocateBetaPerkMachine(COMPAT_RELOCAT_SPEED); perk_speed();};
void() item_flopper = {map_compatibility_mode = MAP_COMPAT_BETA; Compat_RelocateBetaPerkMachine(COMPAT_RELOCAT_NORM); perk_flopper();};
void() item_juggernog = {map_compatibility_mode = MAP_COMPAT_BETA; Compat_RelocateBetaPerkMachine(COMPAT_RELOCAT_NORM); perk_juggernog();};
void() item_douple = {map_compatibility_mode = MAP_COMPAT_BETA; Compat_RelocateBetaPerkMachine(COMPAT_RELOCAT_NORM); perk_double();};
void() item_staminup = {map_compatibility_mode = MAP_COMPAT_BETA; Compat_RelocateBetaPerkMachine(COMPAT_RELOCAT_NORM); perk_staminup();};
void() item_pap = {map_compatibility_mode = MAP_COMPAT_BETA; Compat_RelocateBetaPerkMachine(COMPAT_RELOCAT_PAP); perk_pap();};

View file

@ -1535,7 +1535,9 @@ void() Change_Stance = {
self.new_ofs_z = self.view_ofs_z - PLAYER_CROUCH_HEIGHT;
self.stance = 1;
PAnim_Crouch();
setsize(self, PLAYER_MINS_CROUCHING, PLAYER_MAXS_CROUCHING);
if (map_compatibility_mode != MAP_COMPAT_BETA)
setsize(self, PLAYER_MINS_CROUCHING, PLAYER_MAXS_CROUCHING);
break;
case 1:
// Prohibit Proning if Drinking a Perk-A-Cola
@ -1543,7 +1545,9 @@ void() Change_Stance = {
self.stance = 2;
self.new_ofs_z = self.view_ofs_z + PLAYER_CROUCH_HEIGHT;
PAnim_Stand();
setsize(self, PLAYER_MINS_STANDING, PLAYER_MAXS_STANDING);
if (map_compatibility_mode != MAP_COMPAT_BETA)
setsize(self, PLAYER_MINS_STANDING, PLAYER_MAXS_STANDING);
}
// Stance flag isn't set, so go Prone.
else if (!self.stancereset) {
@ -1557,7 +1561,9 @@ void() Change_Stance = {
self.stance = 2;
self.stancereset = 0;
PAnim_Stand();
setsize(self, PLAYER_MINS_STANDING, PLAYER_MAXS_STANDING);
if (map_compatibility_mode != MAP_COMPAT_BETA)
setsize(self, PLAYER_MINS_STANDING, PLAYER_MAXS_STANDING);
}
// There's no room to stand, just prone again.
else {
@ -1569,7 +1575,10 @@ void() Change_Stance = {
case 0:
self.new_ofs_z = self.view_ofs_z + PLAYER_PRONE_HEIGHT;
self.stance = self.stancereset = 1;
setsize(self, PLAYER_MINS_CROUCHING, PLAYER_MAXS_CROUCHING);
if (map_compatibility_mode != MAP_COMPAT_BETA)
setsize(self, PLAYER_MINS_CROUCHING, PLAYER_MAXS_CROUCHING);
PAnim_UpCrouch();
break;
default: break;
@ -1619,7 +1628,9 @@ void() dolphin_dive = //naievil
self.oldz = self.origin_z;
self.new_ofs_z = self.view_ofs_z - (PLAYER_CROUCH_HEIGHT + PLAYER_PRONE_HEIGHT);
self.stance = 0;
setsize(self, PLAYER_MINS_CROUCHING, PLAYER_MAXS_CROUCHING);
if (map_compatibility_mode != MAP_COMPAT_BETA)
setsize(self, PLAYER_MINS_CROUCHING, PLAYER_MAXS_CROUCHING);
}
@ -1658,12 +1669,16 @@ void () Impulse_Functions =
case 0:
self.new_ofs_z = self.view_ofs_z + PLAYER_CROUCH_HEIGHT + PLAYER_PRONE_HEIGHT;
self.stance = 2;
setsize(self, PLAYER_MINS_STANDING, PLAYER_MAXS_STANDING);
if (map_compatibility_mode != MAP_COMPAT_BETA)
setsize(self, PLAYER_MINS_STANDING, PLAYER_MAXS_STANDING);
break;
case 1:
self.new_ofs_z = self.view_ofs_z + PLAYER_CROUCH_HEIGHT;
self.stance = 2;
setsize(self, PLAYER_MINS_STANDING, PLAYER_MAXS_STANDING);
if (map_compatibility_mode != MAP_COMPAT_BETA)
setsize(self, PLAYER_MINS_STANDING, PLAYER_MAXS_STANDING);
break;
default: break;
}

View file

@ -62,6 +62,7 @@ const float EVENT_CHATMESSAGE = 45;
const float EVENT_DOUBLETAPUPDATE = 46;
const float EVENT_FLAME = 47;
const float EVENT_ENDGAME = 48;
const float EVENT_MAPTYPE = 49;
// Define our FTE platform
#ifndef STANDARD
@ -73,10 +74,18 @@ const float EVENT_ENDGAME = 48;
#define PLAYER_MINS_STANDING '-16 -16 -32'
#define PLAYER_MAXS_STANDING '16 16 40'
// 32x32x56
#define PLAYER_MINS_QUAKE '-16 -16 -24'
#define PLAYER_MAXS_QUAKE '16 16 32'
// 32x32x36
#define PLAYER_MINS_CROUCHING '-16 -16 -32'
#define PLAYER_MAXS_CROUCHING '16 16 4'
// map compatibility
#define MAP_COMPAT_BETA 1
float map_compatibility_mode;
// Weapon Firetype definitions
#define FIRETYPE_FULLAUTO 0
#define FIRETYPE_SEMIAUTO 1