GLOBAL: Retire CTR QuakeC, Merge with PSP.

This rebrands the two under the "HANDHELD" name. The two platforms now
function identically in regards to server functions, making them
unified in behavior and general server-reliant functions.
This commit is contained in:
Steam Deck User 2022-12-28 15:21:19 -05:00
parent fb7c97be1d
commit 89742dc652
25 changed files with 97 additions and 772 deletions

View File

@ -16,10 +16,9 @@ jobs:
working-directory: ./build
run: |
zip -r -j pc-nzp-qc.zip pc/*
zip -r -j psp-nzp-qc.zip psp/*
zip -r -j handheld-nzp-qc.zip handheld/*
zip -r -j nx-nzp-qc.zip nx/*
zip -r -j vita-nzp-qc.zip vita/*
zip -r -j ctr-nzp-qc.zip ctr/*
- name: Generate Build Date
id: date
run: echo "::set-output name=date::$(date +'%Y-%m-%d-%H-%M-%S')"
@ -42,19 +41,10 @@ jobs:
This is a **bleeding edge** NZ:P QuakeC release, stability is not guarenteed and you may need to grab an updated asset release if this update depends on new models/textures/etc.
To install:
- Grab the .ZIP archive for your desired platform below (*-nzp-qc.zip)
- Grab the .ZIP archive for your desired platform below (*-nzp-qc.zip, use `handheld-nzp-qc.zip` for 3DS and PSP).
- Extract the contents of the .ZIP archive to your nzp folder (Example: copy `progs.dat` and `progs.lno` to `PSP/GAME/nzportable/nzp`).
draft: true
prerelease: false
- name: Upload CTR QC
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./build/ctr-nzp-qc.zip
asset_name: ctr-nzp-qc.zip
asset_content_type: application/zip
- name: Upload NX QC
uses: actions/upload-release-asset@v1
env:
@ -73,14 +63,14 @@ jobs:
asset_path: ./build/pc-nzp-qc.zip
asset_name: pc-nzp-qc.zip
asset_content_type: application/zip
- name: Upload PSP QC
- name: Upload HANDHELD QC
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./build/psp-nzp-qc.zip
asset_name: psp-nzp-qc.zip
asset_path: ./build/handheld-nzp-qc.zip
asset_name: handheld-nzp-qc.zip
asset_content_type: application/zip
- name: Upload VITA QC
uses: actions/upload-release-asset@v1

View File

@ -1,44 +0,0 @@
../../build/ctr/progs.dat
#pragma warning disable Q208
../source/server/defs/ctr.qc
../source/server/dummies/ctr.qc
../source/shared/defs/custom.qc
../source/shared/weapon_defines.qc
../source/server/defs/custom.qc
../source/server/clientfuncs.qc
../source/server/psp_specifics.qc
../source/server/dummies/generic.qc
../source/server/rounds.qc
../source/server/nzdparser.qc
../source/server/main.qc
../source/server/utilities/command_parser.qc
../source/server/player.qc
../source/server/damage.qc
../source/server/entities/sub_functions.qc
../source/server/entities/sounds.qc
../source/server/entities/triggers.qc
../source/server/entities/explosive_barrel.qc
../source/server/entities/map_entities.qc
../source/server/entities/traps.qc
../source/server/entities/lights.qc
../source/server/entities/doors.qc
../source/server/entities/window.qc
../source/server/entities/machines.qc
../source/server/weapons/frames_core.qc
../source/server/weapons/weapon_core.qc
../source/server/entities/powerups.qc
../source/server/ai/ai_core.qc
../source/server/ai/standard/waypoints_func.qc
../source/server/ai/standard/waypoints_core.qc
../source/server/ai/zombie_core.qc
../source/server/ai/crawler_core.qc
../source/server/ai/dog_core.qc
../source/server/items.qc

View File

@ -1,8 +1,8 @@
../../build/psp/progs.dat
../../build/handheld/progs.dat
#pragma warning disable Q208
../source/server/defs/psp.qc
../source/server/defs/handheld.qc
../source/shared/defs/custom.qc
../source/shared/weapon_defines.qc
../source/server/defs/custom.qc

View File

@ -248,17 +248,23 @@ void(entity who) makeCrawler =
if(who.head.deadflag)
{
setmodel(who.head,"models/ai/zhc^.mdl");
#ifndef PC
updateLimb (who, 0, world);
#endif
}
if(who.larm.deadflag)
{
setmodel(who.larm,"models/ai/zalc(.mdl");
#ifndef PC
updateLimb (who, 1, world);
#endif
}
if(who.rarm.deadflag)
{
setmodel(who.rarm,"models/ai/zarc(.mdl");
#ifndef PC
updateLimb (who, 2, world);
#endif
}
who.crawling = 1;

View File

@ -27,9 +27,8 @@
void SetUpdate(entity client, float type, float val1, float val2, float val3)
{
#ifndef PSP
#ifndef HANDHELD
#ifndef NX
#ifndef CTR
if (type != 2)
{
@ -54,12 +53,10 @@ void SetUpdate(entity client, float type, float val1, float val2, float val3)
}
#endif
#endif
#endif
}
#ifndef PSP
#ifndef HANDHELD
#ifndef NX
#ifndef CTR
void(entity to, float type, float cost, float weapon) useprint = {
WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET);
WriteByte(MSG_MULTICAST, EVENT_USEPRINT);
@ -71,7 +68,6 @@ void(entity to, float type, float cost, float weapon) useprint = {
}
#endif
#endif
#endif
void(vector org) CallExplosion = {
#ifndef PC
@ -91,9 +87,8 @@ void(vector org) CallExplosion = {
}
void NotifyNewRound(float to) {
#ifndef PSP
#ifndef HANDHELD
#ifndef NX
#ifndef CTR
WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET);
WriteByte(MSG_MULTICAST, EVENT_NEWROUND);
@ -102,13 +97,11 @@ void NotifyNewRound(float to) {
#endif
#endif
#endif
}
void SetRound(entity client, float to) {
#ifndef PSP
#ifndef HANDHELD
#ifndef NX
#ifndef CTR
WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET);
WriteByte(MSG_MULTICAST, EVENT_SETROUND);
@ -118,14 +111,12 @@ void SetRound(entity client, float to) {
#endif
#endif
#endif
}
void SetPerk(entity client, float to)
{
#ifndef PSP
#ifndef HANDHELD
#ifndef NX
#ifndef CTR
WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET);
WriteByte(MSG_MULTICAST, EVENT_PERK);
@ -135,14 +126,12 @@ void SetPerk(entity client, float to)
#endif
#endif
#endif
}
void(float to) SwitchWeapon =
{
#ifndef PSP
#ifndef HANDHELD
#ifndef NX
#ifndef CTR
WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET);
WriteByte(MSG_MULTICAST, EVENT_WEAPONCHANGE);
@ -155,14 +144,12 @@ void(float to) SwitchWeapon =
#endif
#endif
#endif
}
void(string to, float skin) UpdateVmodel =
{
#ifndef PSP
#ifndef HANDHELD
#ifndef NX
#ifndef CTR
WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET);
WriteByte(MSG_MULTICAST, EVENT_UPDATEVMODEL);
@ -173,14 +160,12 @@ void(string to, float skin) UpdateVmodel =
#endif
#endif
#endif
}
void(string to, float skin) UpdateV2model =
{
#ifndef PSP
#ifndef HANDHELD
#ifndef NX
#ifndef CTR
WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET);
WriteByte(MSG_MULTICAST, EVENT_UPDATEV2MODEL);
@ -190,14 +175,12 @@ void(string to, float skin) UpdateV2model =
multicast('0 0 0', MULTICAST_ONE);
#endif
#endif
#endif
}
void(float broadcast_time, float type) BroadcastMessage =
{
#ifndef PSP
#ifndef HANDHELD
#ifndef NX
#ifndef CTR
WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET);
WriteByte(MSG_MULTICAST, EVENT_BROADCAST);
WriteByte(MSG_MULTICAST, broadcast_time);
@ -206,14 +189,12 @@ void(float broadcast_time, float type) BroadcastMessage =
#endif
#endif
#endif
}
void(float playernum, float points, float am, float kills, string name, entity person) UpdatePlayerPoints =
{
#ifndef PSP
#ifndef HANDHELD
#ifndef NX
#ifndef CTR
if (player_count == 0) {
WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET);
WriteByte(MSG_MULTICAST, EVENT_POINTUPDATE);
@ -238,13 +219,11 @@ void(float playernum, float points, float am, float kills, string name, entity p
#endif
#endif
#endif
}
void(float count) UpdatePlayerCount = {
#ifndef PSP
#ifndef HANDHELD
#ifndef NX
#ifndef CTR
if (count == 0)
return;
else {
@ -256,14 +235,12 @@ void(float count) UpdatePlayerCount = {
#endif
#endif
#endif
}
void(float newtime, float newtype, entity change) PromptLevelChange =
{
#ifndef PSP
#ifndef HANDHELD
#ifndef NX
#ifndef CTR
WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET);
WriteByte(MSG_MULTICAST, EVENT_BLACKOUT);
@ -274,16 +251,14 @@ void(float newtime, float newtype, entity change) PromptLevelChange =
#endif
#endif
#endif
}
void(entity who) UpdatePunchangle =
{
// naievil -- shit logic lol...but result looks clean as fuck...
#ifndef PSP
#ifndef HANDHELD
#ifndef NX
#ifndef CTR
WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET);
WriteByte(MSG_MULTICAST, EVENT_PUNCHANGLE);
WriteCoord(MSG_MULTICAST, who.punchangle_x);
@ -326,12 +301,10 @@ void(entity who) UpdatePunchangle =
#endif
#endif
#endif
}
#ifndef PSP
#ifndef HANDHELD
#ifndef NX
#ifndef CTR
void(string h, float h2, entity who) pushHUD = {
if (player_count == 0) {
WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET);
@ -422,7 +395,6 @@ void(string chaptertitle, string location, string date, string person, entity wh
}
#endif
#endif
#endif
#ifndef NX
void (float achievement_id, optional entity who) GiveAchievement =
@ -519,7 +491,7 @@ float(entity who, entity target) isFacing =
float difference_angle = target_angle - who_angle;
#ifdef PSP
#ifdef HANDHELD
if (difference_angle < -45) {
difference_angle += 360;
}

View File

@ -258,6 +258,7 @@ void() GetDown =
Util_PlayerHasWeapon(self, W_357, true)) {
float weapon_slot;
float total_ammo;
total_ammo = 0;
weapon_slot = Util_PlayerHasWeapon(self, W_RAY, true);
if (weapon_slot == 0) weapon_slot = Util_PlayerHasWeapon(self, W_BIATCH, false);

View File

@ -1,541 +0,0 @@
/*
+----+
|Defs|
+----+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
| Scratch Http://www.admdev.com/scratch |
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
| This contains necessary definitions from the original V1.06 defs.qc file. |
| This includes some basic constants, the built in function definitions, and |
| some variable's used by the Quake Engine internally. |
| Certain lines in this file are hardcoded into Quake engine, and -must- be |
| present and unchanged, in the order they are shown. Otherwise Quake will |
| refuse to run. |
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
*/
#define CTR
// These lines CANNOT be altered/moved
entity self;
entity other;
entity world;
float time;
float frametime;
float force_retouch; // force all entities to touch triggers
string mapname;
float deathmatch;
float coop;
float teamplay;
float serverflags;
float rounds;
float rounds_change;
float parm1, parm2, parm3, parm4, parm5, parm6, parm7, parm8, parm9, parm10, parm11, parm12, parm13, parm14, parm15, parm16;
vector v_forward, v_up, v_right; // set by makevectors()
float trace_allsolid;
float trace_startsolid;
float trace_fraction;
vector trace_endpos;
vector trace_plane_normal;
float trace_plane_dist;
entity trace_ent;
float trace_inopen;
float trace_inwater;
entity msg_entity; // destination of single entity writes
void() main; // only for testing
void() StartFrame;
void() EndFrame;
void() PlayerPreThink;
void() PlayerPostThink;
void() ClientKill;
void() ClientConnect;
void() PutClientInServer; // call after setting the parm1... parms
void() ClientDisconnect;
void() SetNewParms; // called when a client first connects to
void() SetChangeParms; // call to set parms for self so they can
void() ParseClientCommand; // special command calls
string CMD_STRING;
void() Soft_Restart;
void end_sys_globals; // flag for structure dumping
.float modelindex; // *** model index in the precached list
.vector absmin, absmax; // *** origin + mins / maxs
.float ltime; // local time for entity
.float movetype;
.float solid;
.vector origin; // ***
.vector oldorigin; // ***
.vector velocity;
.vector angles;
.vector avelocity;
.vector punchangle; // temp angle adjust from damage or recoil
.string classname; // spawn function
.string model;
.float frame;
.float skin;
.float effects;
.vector mins, maxs; // bounding box extents reletive to origin
.vector size; // maxs - mins
.void() touch;
.void() use;
.void() think;
.void() blocked; // for doors or plats, called when can't push other
.float nextthink;
.entity groundentity;
.float health;
.float points;
.float kills;
.float weapon; // one of the W_COLT, etc flags
.string weaponmodel;
.string weapon2model;
.float weaponframe;
.float weapon2frame;
.float currentammo;
.float currentmag;
.float zoom;
.float weaponskin;
.float weapon2skin;
.float primary_grenades;
.float secondary_grenades;
.float grenades;
.float perks; // bit flags
.float takedamage;
.entity chain;
.float deadflag;
.vector view_ofs; // add to origin to get eye point
.float button0; //
.float button1; //
.float button2; //
.float button3; //
.float button4; //
.float button5; //
.float button6; //
.float button7; //
.float button8; //
.float impulse; // weapon changes
.float fixangle;
.vector v_angle; // view / targeting angle for players
.float idealpitch; // calculated pitch angle for lookup up slopes
.string netname;
.entity enemy;
.float flags;
.float colormap;
.float team;
.float max_health; // players maximum health is stored here
.float teleport_time; // don't back up
.float waterlevel; // 0 = not in, 1 = feet, 2 = wast, 3 = eyes
.float watertype; // a contents value
.float ideal_yaw;
.float yaw_speed;
.entity aiment;
.entity head;
.entity larm;
.entity rarm;
.entity goalentity; // a movetarget or an enemy
//.entity goalorigin; // a movetarget location
.float spawnflags;
.string target;
.string targetname;
.float bleed_out;
.float progress_bar;
.entity dmg_inflictor;
.entity owner; // who launched a missile
.vector movedir; // mostly for doors, but also used for waterjump
.string message; // trigger messages
.float sounds; // either a cd track number or sound number
.string noise, noise1, noise2, noise3; // contains names of wavs to play
.float x2_icon; // double points icon
.float insta_icon;
.vector ADS_Offset;
.vector Flash_Offset;
.float Flash_Size;
.string Weapon_Name;
.string Weapon_Name_Touch;
.float currentmag2;
.float maxspeed;
.float facingenemy;
//.float scale;
void end_sys_fields; // flag for structure dumping
// End. Lines below this MAY be altered, to some extent
// Built In functions
void(vector ang) makevectors = #1; // sets v_forward, etc globals
void(entity e, vector o) setorigin = #2;
void(entity e, string m) setmodel = #3; // set movetype and solid first
void(entity e, vector min, vector max) setsize = #4;
void() break = #6;
float() random = #7; // returns 0 - 1
void(entity e, float chan, string samp, float vol, float atten) sound = #8;
vector(vector v) normalize = #9;
void(string e) error = #10;
void(string e) objerror = #11;
float(vector v) vlen = #12;
float(vector v) vectoyaw = #13;
entity() spawn = #14;
void(entity e) remove = #15;
void(vector v1, vector v2, float nomonsters, entity forent) traceline = #16;
entity() checkclient = #17; // returns a client to look for
entity(entity start, .string fld, string match) find = #18;
string(string s) precache_sound = #19;
string(string s) precache_model = #20;
void(entity client, string s)stuffcmd = #21;
entity(vector org, float rad) findradius = #22;
void(string s) dprint = #25;
string(float f) ftos = #26;
string(vector v) vtos = #27;
void() coredump = #28; // prints all edicts
void() traceon = #29; // turns statment trace on
void() traceoff = #30;
void(entity e) eprint = #31; // prints an entire edict
float(float yaw, float dist) walkmove = #32; // returns TRUE or FALSE
float(entity zombie, float which, entity limb) updateLimb = #33;
float(float yaw, float dist) droptofloor = #34; // TRUE if landed on floor
void(float style, string value) lightstyle = #35;
float(float v) rint = #36; // round to nearest int
float(float v) floor = #37; // largest integer <= v
float(float v) ceil = #38; // smallest integer >= v
float(entity e) checkbottom = #40; // true if self is on ground
float(vector v) pointcontents = #41; // returns a CONTENT_*
float(float f) fabs = #43;
vector(entity e, float speed) aim = #44; // returns the shooting vector
float(string s) cvar = #45; // return cvar.value
void(string s) localcmd = #46; // put string into local que
entity(entity e) nextent = #47; // for looping through all ents
void() ChangeYaw = #49; // turn towards self.ideal_yaw
float(string name) getSoundLen = #50;
vector(vector v) vectoangles = #51;
void(float to, float f) WriteByte = #52;
void(float to, float f) WriteChar = #53;
void(float to, float f) WriteShort = #54;
void(float to, float f) WriteLong = #55;
void(float to, float f) WriteCoord = #56;
void(float to, float f) WriteAngle = #57;
void(float to, string s) WriteString = #58;
void(float to, entity s) WriteEntity = #59;
string(entity s) etos = #65;
void(float step) movetogoal = #67;
string(string s) precache_file = #68; // no effect except for -copy
void(entity e) makestatic = #69;
void(string s) changelevel = #70;
void(float step, vector origin) movetoorigin = #71;
void(string var, string val) cvar_set = #72; // sets cvar.value
void(entity client, string s) centerprint = #73; // sprint, but in middle
void(entity client, string s, string s) centerprint2 = #73;
void(entity client, string s, string s, string s) centerprint3 = #73;
void(entity client, string s, string s, string s, string s) centerprint4 = #73;
void(entity client, string s, string s, string s, string s, string s) centerprint5 = #73;
void(entity client, string s, string s, string s, string s, string s, string s) centerprint6 = #73;
void(entity client, string s, string s, string s, string s, string s, string s, string s) centerprint7 = #73;
void(vector pos, string samp, float vol, float atten) ambientsound = #74;
string(string s) precache_model2 = #75; // registered version only
string(string s) precache_sound2 = #76; // registered version only
string(string s) precache_file2 = #77; // registered version only
void(entity e) setspawnparms = #78; // set parm1... to the
void(vector start, vector min, vector max, vector end, float nomonsters, entity forent) tracebox = #90;
float(vector start, vector min, vector max, vector end, float nomonsters, entity forent) tracemove = #99;
entity (entity start, .float field, float match) findfloat = #98;
float(string s) stof = #81; // 2001-09-20 QuakeC string manipulation by FrikaC
vector(entity what) Get_Waypoint_Near = #83;
float(entity zombie, entity target) Do_Pathfind_psp = #84;
void(string s) Open_Waypoint = #85;
vector(entity zombie,vector start,vector min, vector max) Get_Next_Waypoint = #86;
void(entity client, float type, float cost, float weapon) useprint = #87;
vector(entity zombie,vector start,vector min, vector max) Get_First_Waypoint = #88;
void(string s) Close_Waypoint = #89;
void(entity plr, float achievement) achievement = #79;
void(string trackname) songegg = #500;
void() nzp_maxammo = #501;
/*
type 0 = clear
type 1 = buy door
type 2 = buy debris
type 3 = Buy ammo
type 4 = buy weapon
type 5 = repair window
type 6 = use box
type 7 = use trap
type 8 = require power
*/
// 2001-09-20 QuakeC file access by FrikaC start
float(string filename, float mode) fopen = #110;
void(float fhandle) fclose = #111;
string(float fhandle) fgets = #112;
void(float fhandle, string s) fputs = #113;
// 2001-09-20 QuakeC file access by FrikaC end
// 2001-09-20 QuakeC string manipulation by FrikaC start
float(string s) strlen = #114;
string(string s1, string s2) strcat = #115;
string(string s, float start, float length) substring = #116;
vector(string s) stov = #117;
string(string s) strzone = #118;
string(string s) strunzone = #119;
string(string s) strtrim = #120;
// 2001-09-20 QuakeC string manipulation by FrikaC end
// 2001-11-15 DarkPlaces general builtin functions by Lord Havoc start
float(string s) tokenize = #441;
string(float num) argv = #442;
// 2001-11-15 DarkPlaces general builtin functions by Lord Havoc end
//
// constants
//
#define FALSE 0
#define TRUE 1
// edict.flags
#define FL_FLY 1
#define FL_SWIM 2
#define FL_CLIENT 8 // set for all client edicts
#define FL_INWATER 16 // for enter / leave water splash
#define FL_MONSTER 32
#define FL_GODMODE 64 // player cheat
#define FL_NOTARGET 128 // player cheat
#define FL_ITEM 256 // extra wide size for bonus items
#define FL_ONGROUND 512 // standing on something
#define FL_PARTIALGROUND 1024 // not all corners are valid
#define FL_WATERJUMP 2048 // player jumping out of water
//#define FL_JUMPRELEASED 4096 // for jump debouncing
// edict.movetype values
#define MOVETYPE_NONE 0 // never moves
#define MOVETYPE_ANGLENOCLIP 1
#define MOVETYPE_ANGLECLIP 2
#define MOVETYPE_WALK 3 // players only
#define MOVETYPE_STEP 4 // discrete, not real time unless fall
#define MOVETYPE_FLY 5
#define MOVETYPE_TOSS 6 // gravity
#define MOVETYPE_PUSH 7 // no clip to world, push and crush
#define MOVETYPE_NOCLIP 8
#define MOVETYPE_FLYMISSILE 9 // fly with extra size against monsters
#define MOVETYPE_BOUNCE 10
#define MOVETYPE_BOUNCEMISSILE 11 // bounce with extra size
#define MOVETYPE_FOLLOW 12
// edict.solid values
#define SOLID_NOT 0 // no interaction with other objects
#define SOLID_TRIGGER 1 // touch on edge, but not blocking
#define SOLID_BBOX 2 // touch on edge, block
#define SOLID_SLIDEBOX 3 // touch on edge, but not an onground
#define SOLID_BSP 4 // bsp clip, touch on edge, block
#define SOLID_CORPSE 5 // bsp clip, touch on edge, block
// range values
#define RANGE_MELEE 0
#define RANGE_NEAR 1
#define RANGE_MID 2
#define RANGE_FAR 3
// deadflag values
#define DEAD_NO 0
#define DEAD_DYING 1
#define DEAD_DEAD 2
#define DEAD_RESPAWNABLE 3
// takedamage values
#define DAMAGE_NO 0
#define DAMAGE_YES 1
#define DAMAGE_AIM 2
#define DAMAGE_NOMARKER 3
/*.void() th_stand;
.void() th_walk;
.void() th_run;
.void(entity attacker, float damage) th_pain;*/
.void() th_die;
//.void() th_missile;
.void() th_melee;
// point content values
#define CONTENT_EMPTY -1
#define CONTENT_SOLID -2
#define CONTENT_WATER -3
#define CONTENT_SLIME -4
#define CONTENT_LAVA -5
#define CONTENT_SKY -6
#define VEC_ORIGIN '0 0 0'
//Standard Quake View Offset
//vector VEC_VIEW_OFS = '0 0 22';
//Half Life View Offset is 64
//64 units above ground, for our purposes it's, 64 - (how low bounding box goes)
vector VEC_VIEW_OFS = '0 0 32';
//Standard Quake Hull
//vector VEC_HULL_MIN = '-16 -16 -24';
//vector VEC_HULL_MAX = '16 16 32';
//Half Life 1 Hull Sizes ADDED BY BLUBS, COMMENTED ORIGINAL QUAKE BBOX SIZS OUT
#define VEC_HULL_MIN '-16 -16 -32'
#define VEC_HULL_MAX '16 16 40'
#define VEC_HULL2_MIN '-32 -32 -24'
#define VEC_HULL2_MAX '32 32 64'
// protocol bytes
#define SVC_BAD 0
#define SVC_NOP 1
#define SVC_DISCONNECT 2
#define SVC_UPDATESTAT 3
#define SVC_VERSION 4
#define SVC_SETVIEW 5
#define SVC_SOUND 6
#define SVC_TIME 7
#define SVC_PRINT 8
#define SVC_STUFFTEXT 9
#define SVC_SETANGLE 10
#define SVC_SERVERINFO 11
#define SVC_LIGHTSTYLE 12
#define SVC_UPDATENAME 13
#define SVC_UPDATEPOINTS 14
#define SVC_CLIENTDATA 15
#define SVC_STOPSOUND 16
#define SVC_PARTICLE 18
#define SVC_DAMAGE 19
#define SVC_SPAWNSTATIC 20
#define SVC_SPAWNBINARY 21
#define SVC_SPAWNBASELINE 22
#define SVC_TEMPENTITY 23
#define SVC_SETPAUSE 24
#define SVC_SIGNONNUM 25
#define SVC_CENTERPRINT 26
#define SVC_SPAWNSTATICSOUND 29 // 1998-08-08 Complete SVC list by Zhenga
#define SVC_INTERMISSION 30
#define SVC_FINALE 31
#define SVC_CDTRACK 32
#define SVC_SELLSCREEN 33
#define SVC_CUTSCENE 34 // 1998-08-08 Complete SVC list by Zhenga
#define SVC_WEAPONFIRE 35
#define SVC_HITMARK 36
#define SVC_USEPRINT 38
#define TE_SPIKE 0
#define TE_SUPERSPIKE 1
#define TE_GUNSHOT 2
#define TE_EXPLOSION 3
#define TE_TAREXPLOSION 4
#define TE_LIGHTNING1 5
#define TE_LIGHTNING2 6
#define TE_WIZSPIKE 7
#define TE_KNIGHTSPIKE 8
#define TE_LIGHTNING3 9
#define TE_LAVASPLASH 10
#define TE_TELEPORT 11
#define TE_RAYSPLASHGREEN 14
#define TE_RAYSPLASHRED 15
// sound channels
// channel 0 never willingly overrides
// other channels (1-7) allways override a playing sound on that channel
#define CHAN_AUTO 0
#define CHAN_WEAPON 1
#define CHAN_VOICE 2
#define CHAN_ITEM 3
#define CHAN_BODY 4
//Player uses channel 5 for all weapon reload sfx
#define ATTN_NONE 0
#define ATTN_NORM 1
#define ATTN_IDLE 2
#define ATTN_STATIC 3
// update types
#define UPDATE_GENERAL 0
#define UPDATE_STATIC 1
#define UPDATE_BINARY 2
#define UPDATE_TEMP 3
// entity effects
#define EF_BLUE 1
#define EF_MUZZLEFLASH 2
#define EF_BRIGHTLIGHT 4
#define EF_RED 8
#define EF_ORANGELIGHT 16
#define EF_GREEN 32
#define EF_LIGHT 64
#define EF_NODRAW 128
#define EF_BRIGHTFIELD 256
#define EF_FULLBRIGHT 512
#define EF_DARKLIGHT 1024
#define EF_DARKFIELD 2048
#define EF_PURPLELIGHT 4096
#define EF_RAYRED 8196
#define EF_RAYGREEN 16384
// messages
#define MSG_BROADCAST 0 // unreliable to all
#define MSG_ONE 1 // reliable to one (msg_entity)
#define MSG_ALL 2 // reliable to all
#define MSG_INIT 3 // write to the init string
#define AS_STRAIGHT 1
#define AS_SLIDING 2
#define AS_MELEE 3
#define AS_MISSILE 4
// Quake assumes these are defined.
//.string wad, map;
.float /*worldtype,*/ delay, wait, lip, /*light_lev,*/ speed, style/*, skill*/;
.string killtarget;
.void() think1;
.vector finaldest;
.vector pos1, pos2/*, mangle*/;
void(vector o, vector d, float color, float count) particle = #48;// start a particle effect
void(string s) bprint_psp = #23;
void(entity client, string s) sprint_psp = #24;
// End
void(string s) println = {bprint_psp(s);} //just when brain decided to think this is c
void(float ignore, string s) bprint = {bprint_psp(s);};
void(entity client, float type, string s) sprint = {sprint_psp(client, s);};
void(string s) print = {bprint_psp(s);};
//doors
.float state;
#define STATE_TOP 0
#define STATE_BOTTOM 1
#define STATE_UP 2
#define STATE_DOWN 3
string mappath;
#define PRINT_HIGH 0
.float isspec;
#define FILE_READ 0
#define FILE_APPEND 1
#define FILE_WRITE 2
#define MOVE_HITMODEL 0 // must be different for this engine!
.float recoil_delay;
.float gravity;
.float renderamt;
.float rendermode;
.vector rendercolor;
.string mapversion;
.float ammo;
void(string com) SV_ParseClientCommand;
.float currentHitBoxSetup;
.vector bbmins, bbmaxs; // Used for zombie hitboxes
.float achievements;

View File

@ -25,13 +25,11 @@
*/
#ifndef PSP
#ifndef NX
#ifndef CTR
#ifndef HANDHELD
#pragma target FTE
#endif
#endif
#endif
#endif // HANDHELD
#endif // NX
#define true 1
#define false 0
@ -219,8 +217,8 @@ void() SUB_Null2 = {};
#define MAX_ZOMB 24
#ifdef PSP
#ifdef CTR
#ifndef PC
#ifndef NX
#define MAX_ZOMB 12
#endif
#endif
@ -372,11 +370,11 @@ entity boxLocations[32];
float boxCount;
vector boxOrigin;
#ifndef PSP
#ifndef HANDHELD
//powerups
.float x2_icon;
.float insta_icon;
#endif
#endif // HANDHELD
.string powerup_vo;
float instakill_finished;
float insta_blink;

View File

@ -13,7 +13,7 @@
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
*/
#define PSP
#define HANDHELD
// These lines CANNOT be altered/moved
entity self;

View File

@ -1,35 +0,0 @@
/*
server/dummies/generic.qc
generic (all platform) dummys
Copyright (C) 2021 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
*/
void LoadWaypointData() = {};
// Old Demo defs
.float fogdogs;
.float MaxRange;
float gotdog;
void(string chaptertitle, string location, string date, string person, entity who) WorldText = {};

View File

@ -77,7 +77,7 @@ void() change_frame =
self.nextthink = time + 1;
}
#ifdef PSP
#ifdef HANDHELD
void LoadWaypointData() = {};
#endif

View File

@ -605,7 +605,7 @@ void() func_door =
void() func_door_nzp =
{
#ifdef PSP
#ifdef HANDHELD
if (!self.renderamt)
self.renderamt = 255;

View File

@ -225,7 +225,7 @@ void() place_fire =
void() place_model =
{
#ifdef PSP
#ifdef HANDHELD
if (self.spawnflags & 2)
remove(self);
#endif

View File

@ -419,7 +419,7 @@ void() PU_MaxAmmo =
#ifdef PC
ScrollText("MAX AMMO!", tempe);
#endif
#ifdef PSP
#ifdef HANDHELD
nzp_maxammo();
#endif
tempe = find(tempe, classname, "player");

View File

@ -69,7 +69,7 @@ void () ambient_generic =
{
local string link;
// moto - FIXME: typically this is set to upper-case but NX and PSP lack strtoupper(); assume lower-case!
// moto - FIXME: typically this is set to upper-case but NX and HANDHELD lack strtoupper(); assume lower-case!
link = self.message;
if (link == "nolink") {

View File

@ -122,7 +122,7 @@ void zapper_play () {
#ifdef PC
te_lightning2(self, self.origin, zents.origin);
#endif
#ifdef PSP
#ifdef HANDHELD
WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
WriteByte (MSG_BROADCAST, TE_LIGHTNING2);
WriteEntity (MSG_BROADCAST, self);

View File

@ -133,8 +133,7 @@ void() InitTrigger =
self.model = "";
};
#ifndef PSP
#ifndef CTR
#ifndef HANDHELD
entity last_act_trigger;
void() trigger_activator_touch =
{
@ -242,7 +241,6 @@ void() trigger_activator =
self.touch = trigger_activator_touch;
}
#endif
#endif
void() use_wall_weapon =
{

View File

@ -50,7 +50,7 @@ void() screen_shake =
else
zoom_factor = 1;
#ifdef PSP
#ifdef HANDHELD
self.enemy.punchangle_y = r * 8 * zoom_factor;
self.enemy.punchangle_x = (4 + (s * 4)) * zoom_factor;
#else

View File

@ -128,7 +128,7 @@ void() precaches =
{
precache_model ("models/player.mdl");
#ifndef PSP
#ifndef HANDHELD
#ifndef NX
if (world.song != "")
precache_sound (world.song);

View File

@ -523,10 +523,6 @@ void() PlayerSpawn =
self.movetype = MOVETYPE_WALK;
self.max_health = self.health = 100;
//custom weapon stuff (we want to put this here so we can send the info to the client with an entity)
// DISGUSTING.
//nzd_defineweapon(self);
entity who = find(world,classname,"player");
while(who != self && !self.playernum)
{
@ -625,9 +621,6 @@ void() PlayerSpawn =
rounds = G_STARTROUND - 1;
}
#ifndef PSP
//pushHUD(G_HUD, G_HUDHOR, self); //FIXME - breaks mp!
#endif
};
void() SpectatorSpawn =

View File

@ -233,7 +233,7 @@ void() NewRound =
roundtype = 1;
if (world.fog) {
#ifdef PSP
#ifdef HANDHELD
localcmd(strcat("fog ", world.fog));
#else
#ifdef PC

View File

@ -726,7 +726,9 @@ void Parse_Damage () = // DO NOT TOUCH
body_ent.usedent = self;
body_ent.bleedingtime = time + 2;
#ifndef PC
updateLimb (body_ent.head.owner, 0, world);
#endif
}
}
@ -748,7 +750,9 @@ void Parse_Damage () = // DO NOT TOUCH
body_ent.larm.solid = SOLID_NOT;
setmodel(body_ent.larm,"");
body_ent.larm.frame = 0;
#ifndef PC
updateLimb (body_ent.larm.owner, 1, world);
#endif
}
body_ent.larm.washit = 0;
@ -768,7 +772,9 @@ void Parse_Damage () = // DO NOT TOUCH
body_ent.rarm.solid = SOLID_NOT;
setmodel(body_ent.rarm,"");
body_ent.rarm.frame = 0;
#ifndef PC
updateLimb (body_ent.rarm.owner, 2, world);
#endif
}
body_ent.rarm.washit = 0;
@ -1080,7 +1086,7 @@ void() RayBulletExplode =
te_smallflash(self.origin);
#else
WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
#ifdef PSP
#ifdef HANDHELD
if (self.effects & EF_RAYGREEN)
WriteByte (MSG_BROADCAST, TE_RAYSPLASHGREEN);
else
@ -1140,13 +1146,13 @@ void() W_FireRay =
if (self.weapon == W_PORTER) {
#ifdef PSP
#ifdef HANDHELD
porter.effects = EF_RAYRED;
#else
porter.effects = EF_RED;
#endif
} else {
#ifdef PSP
#ifdef HANDHELD
porter.effects = EF_RAYGREEN;
#else
porter.effects = EF_GREEN;
@ -1264,7 +1270,7 @@ void() W_FireTesla =
#ifdef PC
te_lightning2(self, source, trace_endpos);
#endif
#ifdef PSP
#ifdef HANDHELD
WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
WriteByte (MSG_BROADCAST, TE_LIGHTNING2);
WriteEntity (MSG_BROADCAST, self);
@ -1896,11 +1902,7 @@ void() W_ThrowGrenade =
makevectors (self.v_angle);
#ifndef PSP
nade.velocity = v_forward*500;
#else
nade.velocity = v_forward*800; // on PSP, we need more OOMFPH
#endif
nade.velocity = v_forward*800;
nade.avelocity = '400 -400 400';
@ -2139,7 +2141,7 @@ void () Impulse_Functions =
W_SprintStop();
break;
case 25:
#if defined (PSP) || defined (CTR)
#ifdef HANDHELD
switch_nade();
#else
W_Betty();
@ -2388,7 +2390,7 @@ void () Weapon_Logic =
Impulse_Functions();
#ifndef PC
// For PSP only to tell our engine to display the scope
// For HANDHELD only to tell our engine to display the scope
if ((self.scopetime < time) && self.scopetime) {
self.scopetime = 0;
self.zoom = 2;
@ -2546,7 +2548,7 @@ void () Weapon_Logic =
if (self.button6 && !self.semiknife)
{
#if defined (PSP) || defined (CTR)
#ifdef HANDHELD
if (self.sprinting) {
dolphin_dive();
return;

View File

@ -53,12 +53,10 @@ const float EVENT_ACHIEVEMENTPROGRESS = 36;
// Define our PC version if we don't have NX or PSP
#ifndef NX
#ifndef PSP
#ifndef CTR
#ifndef HANDHELD
#define PC
#endif
#endif
#endif
// Weapon Firetype definitions
#define FIRETYPE_FULLAUTO 0

View File

@ -2,41 +2,35 @@
cd ../
# create build directories
mkdir -p build/{pc,psp,nx,vita,ctr}
mkdir -p build/{pc,handheld,nx,vita}
cd bin/
echo ""
echo "===================="
echo " compiling FTE CCQC "
echo "===================="
echo "========================"
echo " compiling FTE CCQC "
echo "========================"
echo ""
./fteqcc-cli-lin -srcfile ../progs/fte-client.src
echo ""
echo "===================="
echo " compiling FTE SSQC "
echo "===================="
echo "========================"
echo " compiling FTE SSQC "
echo "========================"
echo ""
./fteqcc-cli-lin -srcfile ../progs/fte-server.src
echo ""
echo "===================="
echo " compiling PSP QC "
echo "===================="
echo "========================"
echo " compiling PSP & 3DS QC "
echo "========================"
echo ""
./fteqcc-cli-lin -srcfile ../progs/psp.src
./fteqcc-cli-lin -srcfile ../progs/handheld.src
echo ""
echo "===================="
echo " compiling NX-QS QC "
echo "===================="
echo "========================"
echo " compiling NX-QS QC "
echo "========================"
echo ""
./fteqcc-cli-lin -srcfile ../progs/nx.src
echo ""
echo "===================="
echo " compiling VITA QC "
echo "===================="
echo "========================"
echo " compiling VITA QC "
echo "========================"
echo ""
./fteqcc-cli-lin -srcfile ../progs/vita.src
echo ""
echo "===================="
echo " compiling 3DS QC "
echo "===================="
echo ""
./fteqcc-cli-lin -srcfile ../progs/ctr.src
./fteqcc-cli-lin -srcfile ../progs/vita.src

View File

@ -2,45 +2,38 @@
CD ../
REM ****** create build directories ******
MKDIR build\pc\ 2>nul
MKDIR build\psp\ 2>nul
MKDIR build\handheld\ 2>nul
MKDIR build\nx\ 2>nul
MKDIR build\vita\ 2>nul
MKDIR build\ctr\ 2>nul
CD bin/
echo.
echo ====================
echo compiling FTE CCQC
echo ====================
echo ========================
echo compiling FTE CCQC
echo ========================
echo.
fteqcc-cli-win.exe -srcfile ../progs/fte-client.src
echo.
echo ====================
echo compiling FTE SSQC
echo ====================
echo ========================
echo compiling FTE SSQC
echo ========================
echo.
fteqcc-cli-win.exe -srcfile ../progs/fte-server.src
echo.
echo ====================
echo compiling PSP QC
echo ====================
echo ========================
echo compiling PSP & 3DS QC
echo ========================
echo.
fteqcc-cli-win.exe -srcfile ../progs/psp.src
fteqcc-cli-win.exe -srcfile ../progs/handheld.src
echo.
echo ====================
echo compiling NX-QS QC
echo ====================
echo ========================
echo compiling NX-QS QC
echo ========================
echo.
fteqcc-cli-win.exe -srcfile ../progs/nx.src
echo.
echo ====================
echo compiling VITA QC
echo ====================
echo ========================
echo compiling VITA QC
echo ========================
echo.
fteqcc-cli-win.exe -srcfile ../progs/vita.src
echo.
echo ====================
echo compiling 3DS QC
echo ====================
echo.
fteqcc-cli-win.exe -srcfile ../progs/ctr.src
pause