2014-03-15 16:59:03 +00:00
|
|
|
|
// SONIC ROBO BLAST 2
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
|
|
|
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
2018-11-25 12:35:38 +00:00
|
|
|
|
// Copyright (C) 1999-2018 by Sonic Team Junior.
|
2014-03-15 16:59:03 +00:00
|
|
|
|
//
|
|
|
|
|
// This program is free software distributed under the
|
|
|
|
|
// terms of the GNU General Public License, version 2.
|
|
|
|
|
// See the 'LICENSE' file for more details.
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
/// \file p_local.h
|
|
|
|
|
/// \brief Play functions, animation, global header
|
|
|
|
|
|
|
|
|
|
#ifndef __P_LOCAL__
|
|
|
|
|
#define __P_LOCAL__
|
|
|
|
|
|
|
|
|
|
#include "command.h"
|
|
|
|
|
#include "d_player.h"
|
|
|
|
|
#include "d_think.h"
|
|
|
|
|
#include "m_fixed.h"
|
|
|
|
|
#include "m_bbox.h"
|
|
|
|
|
#include "p_tick.h"
|
|
|
|
|
#include "r_defs.h"
|
|
|
|
|
#include "p_maputl.h"
|
2019-04-18 16:20:13 +00:00
|
|
|
|
#include "doomstat.h" // MAXSPLITSCREENPLAYERS
|
2014-03-15 16:59:03 +00:00
|
|
|
|
|
|
|
|
|
#define FLOATSPEED (FRACUNIT*4)
|
|
|
|
|
|
2018-06-26 15:33:54 +00:00
|
|
|
|
//#define VIEWHEIGHTS "41"
|
2014-03-15 16:59:03 +00:00
|
|
|
|
|
|
|
|
|
// Maximum player score.
|
|
|
|
|
#define MAXSCORE 999999990
|
|
|
|
|
|
|
|
|
|
// mapblocks are used to check movement
|
|
|
|
|
// against lines and things
|
|
|
|
|
#define MAPBLOCKUNITS 128
|
|
|
|
|
#define MAPBLOCKSIZE (MAPBLOCKUNITS*FRACUNIT)
|
|
|
|
|
#define MAPBLOCKSHIFT (FRACBITS+7)
|
|
|
|
|
#define MAPBMASK (MAPBLOCKSIZE-1)
|
|
|
|
|
#define MAPBTOFRAC (MAPBLOCKSHIFT-FRACBITS)
|
|
|
|
|
|
2016-07-06 04:09:17 +00:00
|
|
|
|
// Convenience macro to fix issue with collision along bottom/left edges of blockmap -Red
|
|
|
|
|
#define BMBOUNDFIX(xl, xh, yl, yh) {if (xl > xh) xl = 0; if (yl > yh) yl = 0;}
|
|
|
|
|
|
2014-03-15 16:59:03 +00:00
|
|
|
|
// MAXRADIUS is for precalculated sector block boxes
|
|
|
|
|
// the spider demon is larger,
|
|
|
|
|
// but we do not have any moving sectors nearby
|
|
|
|
|
#define MAXRADIUS (32*FRACUNIT)
|
|
|
|
|
|
|
|
|
|
// max Z move up or down without jumping
|
|
|
|
|
// above this, a height difference is considered as a 'dropoff'
|
|
|
|
|
#define MAXSTEPMOVE (24*FRACUNIT)
|
|
|
|
|
|
|
|
|
|
#define USERANGE (64*FRACUNIT)
|
|
|
|
|
#define MELEERANGE (64*FRACUNIT)
|
|
|
|
|
#define MISSILERANGE (32*64*FRACUNIT)
|
|
|
|
|
|
|
|
|
|
#define AIMINGTOSLOPE(aiming) FINESINE((aiming>>ANGLETOFINESHIFT) & FINEMASK)
|
|
|
|
|
|
|
|
|
|
#define mariomode (maptol & TOL_MARIO)
|
|
|
|
|
#define twodlevel (maptol & TOL_2D)
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// P_TICK
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
// both the head and tail of the thinker list
|
|
|
|
|
extern thinker_t thinkercap;
|
|
|
|
|
|
|
|
|
|
void P_InitThinkers(void);
|
|
|
|
|
void P_AddThinker(thinker_t *thinker);
|
|
|
|
|
void P_RemoveThinker(thinker_t *thinker);
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// P_USER
|
|
|
|
|
//
|
|
|
|
|
typedef struct camera_s
|
|
|
|
|
{
|
|
|
|
|
boolean chase;
|
|
|
|
|
angle_t aiming;
|
|
|
|
|
|
|
|
|
|
// Things used by FS cameras.
|
|
|
|
|
fixed_t viewheight;
|
|
|
|
|
angle_t startangle;
|
|
|
|
|
|
|
|
|
|
// Camera demobjerization
|
|
|
|
|
// Info for drawing: position.
|
|
|
|
|
fixed_t x, y, z;
|
2022-08-20 18:42:34 +00:00
|
|
|
|
boolean reset;
|
2014-03-15 16:59:03 +00:00
|
|
|
|
|
|
|
|
|
//More drawing info: to determine current sprite.
|
|
|
|
|
angle_t angle; // orientation
|
|
|
|
|
|
|
|
|
|
struct subsector_s *subsector;
|
|
|
|
|
|
|
|
|
|
// The closest interval over all contacted Sectors (or Things).
|
|
|
|
|
fixed_t floorz;
|
|
|
|
|
fixed_t ceilingz;
|
|
|
|
|
|
|
|
|
|
// For movement checking.
|
|
|
|
|
fixed_t radius;
|
|
|
|
|
fixed_t height;
|
|
|
|
|
|
|
|
|
|
fixed_t relativex;
|
|
|
|
|
|
|
|
|
|
// Momentums, used to update position.
|
|
|
|
|
fixed_t momx, momy, momz;
|
2018-09-04 20:08:37 +00:00
|
|
|
|
|
|
|
|
|
// SRB2Kart: camera pans while drifting
|
|
|
|
|
fixed_t pan;
|
2014-03-15 16:59:03 +00:00
|
|
|
|
} camera_t;
|
|
|
|
|
|
2019-09-05 21:24:23 +00:00
|
|
|
|
// demo freecam or something before i commit die
|
|
|
|
|
struct demofreecam_s {
|
|
|
|
|
|
|
|
|
|
camera_t *cam; // this is useful when the game is paused, notably
|
2019-09-09 20:15:50 +00:00
|
|
|
|
mobj_t *soundmobj; // mobj to play sound from, used in s_sound
|
|
|
|
|
|
2019-09-05 21:24:23 +00:00
|
|
|
|
angle_t localangle; // keeps track of the cam angle for cmds
|
|
|
|
|
angle_t localaiming; // ditto with aiming
|
|
|
|
|
boolean turnheld; // holding turn button for gradual turn speed
|
|
|
|
|
boolean keyboardlook; // keyboard look
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
extern struct demofreecam_s democam;
|
|
|
|
|
|
2019-04-18 07:08:11 +00:00
|
|
|
|
extern camera_t camera[MAXSPLITSCREENPLAYERS];
|
2014-03-15 16:59:03 +00:00
|
|
|
|
extern consvar_t cv_cam_dist, cv_cam_still, cv_cam_height;
|
|
|
|
|
extern consvar_t cv_cam_speed, cv_cam_rotate, cv_cam_rotspeed;
|
|
|
|
|
|
|
|
|
|
extern consvar_t cv_cam2_dist, cv_cam2_still, cv_cam2_height;
|
|
|
|
|
extern consvar_t cv_cam2_speed, cv_cam2_rotate, cv_cam2_rotspeed;
|
|
|
|
|
|
2017-12-11 06:12:38 +00:00
|
|
|
|
extern consvar_t cv_cam3_dist, cv_cam3_still, cv_cam3_height;
|
|
|
|
|
extern consvar_t cv_cam3_speed, cv_cam3_rotate, cv_cam3_rotspeed;
|
|
|
|
|
|
|
|
|
|
extern consvar_t cv_cam4_dist, cv_cam4_still, cv_cam4_height;
|
|
|
|
|
extern consvar_t cv_cam4_speed, cv_cam4_rotate, cv_cam4_rotspeed;
|
|
|
|
|
|
2014-03-15 16:59:03 +00:00
|
|
|
|
extern fixed_t t_cam_dist, t_cam_height, t_cam_rotate;
|
|
|
|
|
extern fixed_t t_cam2_dist, t_cam2_height, t_cam2_rotate;
|
2017-12-11 06:12:38 +00:00
|
|
|
|
extern fixed_t t_cam3_dist, t_cam3_height, t_cam3_rotate;
|
|
|
|
|
extern fixed_t t_cam4_dist, t_cam4_height, t_cam4_rotate;
|
2014-03-15 16:59:03 +00:00
|
|
|
|
|
|
|
|
|
fixed_t P_GetPlayerHeight(player_t *player);
|
|
|
|
|
fixed_t P_GetPlayerSpinHeight(player_t *player);
|
|
|
|
|
void P_AddPlayerScore(player_t *player, UINT32 amount);
|
|
|
|
|
void P_ResetCamera(player_t *player, camera_t *thiscam);
|
|
|
|
|
boolean P_TryCameraMove(fixed_t x, fixed_t y, camera_t *thiscam);
|
|
|
|
|
void P_SlideCameraMove(camera_t *thiscam);
|
2019-09-05 21:24:23 +00:00
|
|
|
|
void P_DemoCameraMovement(camera_t *cam);
|
2014-03-15 16:59:03 +00:00
|
|
|
|
boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcalled);
|
2019-09-05 21:24:23 +00:00
|
|
|
|
void P_InitCameraCmd(void);
|
2014-03-15 16:59:03 +00:00
|
|
|
|
boolean P_PlayerInPain(player_t *player);
|
|
|
|
|
void P_DoPlayerPain(player_t *player, mobj_t *source, mobj_t *inflictor);
|
|
|
|
|
void P_ResetPlayer(player_t *player);
|
|
|
|
|
boolean P_IsLocalPlayer(player_t *player);
|
2019-04-18 16:20:13 +00:00
|
|
|
|
boolean P_IsDisplayPlayer(player_t *player);
|
2018-01-24 21:24:36 +00:00
|
|
|
|
boolean P_SpectatorJoinGame(player_t *player);
|
2014-08-04 03:49:33 +00:00
|
|
|
|
|
|
|
|
|
boolean P_IsObjectInGoop(mobj_t *mo);
|
2014-03-15 16:59:03 +00:00
|
|
|
|
boolean P_IsObjectOnGround(mobj_t *mo);
|
|
|
|
|
boolean P_IsObjectOnGroundIn(mobj_t *mo, sector_t *sec);
|
2017-11-28 06:13:23 +00:00
|
|
|
|
boolean P_IsObjectOnRealGround(mobj_t *mo, sector_t *sec); // SRB2Kart
|
2014-08-04 03:49:33 +00:00
|
|
|
|
boolean P_InSpaceSector(mobj_t *mo);
|
|
|
|
|
boolean P_InQuicksand(mobj_t *mo);
|
|
|
|
|
|
2014-03-15 16:59:03 +00:00
|
|
|
|
void P_SetObjectMomZ(mobj_t *mo, fixed_t value, boolean relative);
|
|
|
|
|
void P_RestoreMusic(player_t *player);
|
2018-07-18 00:21:36 +00:00
|
|
|
|
boolean P_EndingMusic(player_t *player);
|
2014-03-15 16:59:03 +00:00
|
|
|
|
void P_SpawnShieldOrb(player_t *player);
|
|
|
|
|
mobj_t *P_SpawnGhostMobj(mobj_t *mobj);
|
|
|
|
|
void P_GivePlayerRings(player_t *player, INT32 num_rings);
|
|
|
|
|
void P_GivePlayerLives(player_t *player, INT32 numlives);
|
|
|
|
|
UINT8 P_GetNextEmerald(void);
|
|
|
|
|
void P_GiveEmerald(boolean spawnObj);
|
|
|
|
|
void P_ResetScore(player_t *player);
|
2015-01-01 19:50:31 +00:00
|
|
|
|
boolean P_AutoPause(void);
|
2014-03-15 16:59:03 +00:00
|
|
|
|
|
2014-08-04 03:49:33 +00:00
|
|
|
|
void P_DoJumpShield(player_t *player);
|
2014-03-15 16:59:03 +00:00
|
|
|
|
void P_BlackOw(player_t *player);
|
|
|
|
|
void P_ElementalFireTrail(player_t *player);
|
2014-08-04 03:49:33 +00:00
|
|
|
|
|
2017-10-22 07:06:35 +00:00
|
|
|
|
//void P_DoPityCheck(player_t *player);
|
2014-03-15 16:59:03 +00:00
|
|
|
|
void P_PlayerThink(player_t *player);
|
|
|
|
|
void P_PlayerAfterThink(player_t *player);
|
|
|
|
|
void P_DoPlayerExit(player_t *player);
|
2018-07-18 00:21:36 +00:00
|
|
|
|
void P_DoTimeOver(player_t *player);
|
Nuke a bunch of iteration things that have no purpose in SRB2Kart. A full explanation of my reasoning and what it affects is as follows.
p_inter.c -
Everything to do with setting states for starposts
In SRB2Kart, starposts are invisble. We don't need to loop through all thinkers just to set their states when there's no visible effect of the state-setting. In addition, it has no consequences for gameplay - starposts have long been silent here, and all checking is done regarding their health, not their state.
Remove extremely low-traffic conditionals (MT_FLINGEMERALD collision height extension, for example)
These objects serve no functional purpose during regular SRB2Kart gameplay. Why should every other object have to pay an admittedly minor performance hit just for them?
Disable all mechanisms of damaging bosses or enemies with the player's physical contact
With the exception of Sapphire Coast, no MF_ENEMY objects exist in the entirety of the standard roster. In addition, the conditions for damaging the enemies were impossible to achieve, because they required vanilla SRB2 mechanics such as "jumping", "spindashing", or "super". Therefore, they can be safely commented out.
Disable NiGHTS-related material (excepting bumper, hoop, and wing-emblem objects)
NiGHTS is fundamentally incompatible with regular kart gameplay and I believe was already broken. Therefore, any mechanism which enters, aids, or abets it can be safely disabled.
Comment out Tag mechanisms
Tag is the only vanilla multiplayer gametype which has sufficient gameplay depth and complexity (HEYOOOOOOOOO) to require dedicated thinking in and of itself in order to manage. This thinking is irrelevant to Kart's functioning, and can be neutered easily.
d_clisrv.c
Comment out Tag mechanisms
See p_inter.c
d_netcmd.c
Disable several devmode commands which are irrelevant to SRB2Kart gameplay
When investigating for references to NiGHTS material, I discovered that these remained untouched. In order to present a more coherent game, I have hidden the ones that serve no purpose for us.
Comment out Tag mechanisms
See p_inter.c
g_game.c
Disable NiGHTS-related material
See p_inter.c
Disable some team-related material
Teams are not present in SRB2Kart at present. Obviously we'd want to reconsider for future, but it doesn't need to be run right now.
Everything to do with setting states for starposts
See p_inter.c
m_cheat.c
Disable several devmode commands which are irrelevant to SRB2Kart gameplay
See d_netcmd.c
p_map.c
Remove extremely low-traffic conditionals (MT_EGGSHIELD collision, for example)
See p_inter.c
Disable NiGHTS-related material
See p_inter.c
p_mobj.c
Disable P_EmeraldManager
Power stones, despite their relevance in vanilla Match, are not in SRB2Kart's Battle. No management of nonexistent emeralds is required.
p_setup.c
Everything to do with setting states for starposts
See p_inter.c
p_spec.c
Disable NiGHTS-related material
See p_inter.c
Everything to do with setting states for starposts
See p_inter.c
p_telept.c
Everything to do with setting states for starposts
See p_inter.c
p_tick.c
Disable some team-related material
See g_game.c
Disable P_EmeraldManager
See p_mobj.c
Do not run shields
Shield objects are not run under the vanilla system; the Thunder Shield is a domain-specific recreation using a standard mobjthinker.
Do not run special stages
SRB2Kart does not have special stages.
Comment out Tag mechanisms
See p_inter.c
y_inter.c
Disable some team-related material
See g_game.c
p_user.c
Disable NiGHTS-related material
See p_inter.c
Disable 2d movement for players
2D mode? In a kart racer? :nick:
2018-10-03 16:04:41 +00:00
|
|
|
|
//void P_NightserizePlayer(player_t *player, INT32 ptime);
|
2014-03-15 16:59:03 +00:00
|
|
|
|
|
|
|
|
|
void P_InstaThrust(mobj_t *mo, angle_t angle, fixed_t move);
|
|
|
|
|
fixed_t P_ReturnThrustX(mobj_t *mo, angle_t angle, fixed_t move);
|
|
|
|
|
fixed_t P_ReturnThrustY(mobj_t *mo, angle_t angle, fixed_t move);
|
|
|
|
|
void P_InstaThrustEvenIn2D(mobj_t *mo, angle_t angle, fixed_t move);
|
|
|
|
|
|
|
|
|
|
boolean P_LookForEnemies(player_t *player);
|
|
|
|
|
void P_NukeEnemies(mobj_t *inflictor, mobj_t *source, fixed_t radius);
|
|
|
|
|
void P_HomingAttack(mobj_t *source, mobj_t *enemy); /// \todo doesn't belong in p_user
|
2018-07-20 23:11:36 +00:00
|
|
|
|
//boolean P_SuperReady(player_t *player);
|
2016-07-06 04:09:17 +00:00
|
|
|
|
boolean P_AnalogMove(player_t *player);
|
Nuke a bunch of iteration things that have no purpose in SRB2Kart. A full explanation of my reasoning and what it affects is as follows.
p_inter.c -
Everything to do with setting states for starposts
In SRB2Kart, starposts are invisble. We don't need to loop through all thinkers just to set their states when there's no visible effect of the state-setting. In addition, it has no consequences for gameplay - starposts have long been silent here, and all checking is done regarding their health, not their state.
Remove extremely low-traffic conditionals (MT_FLINGEMERALD collision height extension, for example)
These objects serve no functional purpose during regular SRB2Kart gameplay. Why should every other object have to pay an admittedly minor performance hit just for them?
Disable all mechanisms of damaging bosses or enemies with the player's physical contact
With the exception of Sapphire Coast, no MF_ENEMY objects exist in the entirety of the standard roster. In addition, the conditions for damaging the enemies were impossible to achieve, because they required vanilla SRB2 mechanics such as "jumping", "spindashing", or "super". Therefore, they can be safely commented out.
Disable NiGHTS-related material (excepting bumper, hoop, and wing-emblem objects)
NiGHTS is fundamentally incompatible with regular kart gameplay and I believe was already broken. Therefore, any mechanism which enters, aids, or abets it can be safely disabled.
Comment out Tag mechanisms
Tag is the only vanilla multiplayer gametype which has sufficient gameplay depth and complexity (HEYOOOOOOOOO) to require dedicated thinking in and of itself in order to manage. This thinking is irrelevant to Kart's functioning, and can be neutered easily.
d_clisrv.c
Comment out Tag mechanisms
See p_inter.c
d_netcmd.c
Disable several devmode commands which are irrelevant to SRB2Kart gameplay
When investigating for references to NiGHTS material, I discovered that these remained untouched. In order to present a more coherent game, I have hidden the ones that serve no purpose for us.
Comment out Tag mechanisms
See p_inter.c
g_game.c
Disable NiGHTS-related material
See p_inter.c
Disable some team-related material
Teams are not present in SRB2Kart at present. Obviously we'd want to reconsider for future, but it doesn't need to be run right now.
Everything to do with setting states for starposts
See p_inter.c
m_cheat.c
Disable several devmode commands which are irrelevant to SRB2Kart gameplay
See d_netcmd.c
p_map.c
Remove extremely low-traffic conditionals (MT_EGGSHIELD collision, for example)
See p_inter.c
Disable NiGHTS-related material
See p_inter.c
p_mobj.c
Disable P_EmeraldManager
Power stones, despite their relevance in vanilla Match, are not in SRB2Kart's Battle. No management of nonexistent emeralds is required.
p_setup.c
Everything to do with setting states for starposts
See p_inter.c
p_spec.c
Disable NiGHTS-related material
See p_inter.c
Everything to do with setting states for starposts
See p_inter.c
p_telept.c
Everything to do with setting states for starposts
See p_inter.c
p_tick.c
Disable some team-related material
See g_game.c
Disable P_EmeraldManager
See p_mobj.c
Do not run shields
Shield objects are not run under the vanilla system; the Thunder Shield is a domain-specific recreation using a standard mobjthinker.
Do not run special stages
SRB2Kart does not have special stages.
Comment out Tag mechanisms
See p_inter.c
y_inter.c
Disable some team-related material
See g_game.c
p_user.c
Disable NiGHTS-related material
See p_inter.c
Disable 2d movement for players
2D mode? In a kart racer? :nick:
2018-10-03 16:04:41 +00:00
|
|
|
|
/*boolean P_TransferToNextMare(player_t *player);
|
|
|
|
|
UINT8 P_FindLowestMare(void);*/
|
2018-03-31 18:48:49 +00:00
|
|
|
|
UINT8 P_FindLowestLap(void);
|
2018-07-04 01:12:25 +00:00
|
|
|
|
UINT8 P_FindHighestLap(void);
|
2014-03-15 16:59:03 +00:00
|
|
|
|
void P_FindEmerald(void);
|
Nuke a bunch of iteration things that have no purpose in SRB2Kart. A full explanation of my reasoning and what it affects is as follows.
p_inter.c -
Everything to do with setting states for starposts
In SRB2Kart, starposts are invisble. We don't need to loop through all thinkers just to set their states when there's no visible effect of the state-setting. In addition, it has no consequences for gameplay - starposts have long been silent here, and all checking is done regarding their health, not their state.
Remove extremely low-traffic conditionals (MT_FLINGEMERALD collision height extension, for example)
These objects serve no functional purpose during regular SRB2Kart gameplay. Why should every other object have to pay an admittedly minor performance hit just for them?
Disable all mechanisms of damaging bosses or enemies with the player's physical contact
With the exception of Sapphire Coast, no MF_ENEMY objects exist in the entirety of the standard roster. In addition, the conditions for damaging the enemies were impossible to achieve, because they required vanilla SRB2 mechanics such as "jumping", "spindashing", or "super". Therefore, they can be safely commented out.
Disable NiGHTS-related material (excepting bumper, hoop, and wing-emblem objects)
NiGHTS is fundamentally incompatible with regular kart gameplay and I believe was already broken. Therefore, any mechanism which enters, aids, or abets it can be safely disabled.
Comment out Tag mechanisms
Tag is the only vanilla multiplayer gametype which has sufficient gameplay depth and complexity (HEYOOOOOOOOO) to require dedicated thinking in and of itself in order to manage. This thinking is irrelevant to Kart's functioning, and can be neutered easily.
d_clisrv.c
Comment out Tag mechanisms
See p_inter.c
d_netcmd.c
Disable several devmode commands which are irrelevant to SRB2Kart gameplay
When investigating for references to NiGHTS material, I discovered that these remained untouched. In order to present a more coherent game, I have hidden the ones that serve no purpose for us.
Comment out Tag mechanisms
See p_inter.c
g_game.c
Disable NiGHTS-related material
See p_inter.c
Disable some team-related material
Teams are not present in SRB2Kart at present. Obviously we'd want to reconsider for future, but it doesn't need to be run right now.
Everything to do with setting states for starposts
See p_inter.c
m_cheat.c
Disable several devmode commands which are irrelevant to SRB2Kart gameplay
See d_netcmd.c
p_map.c
Remove extremely low-traffic conditionals (MT_EGGSHIELD collision, for example)
See p_inter.c
Disable NiGHTS-related material
See p_inter.c
p_mobj.c
Disable P_EmeraldManager
Power stones, despite their relevance in vanilla Match, are not in SRB2Kart's Battle. No management of nonexistent emeralds is required.
p_setup.c
Everything to do with setting states for starposts
See p_inter.c
p_spec.c
Disable NiGHTS-related material
See p_inter.c
Everything to do with setting states for starposts
See p_inter.c
p_telept.c
Everything to do with setting states for starposts
See p_inter.c
p_tick.c
Disable some team-related material
See g_game.c
Disable P_EmeraldManager
See p_mobj.c
Do not run shields
Shield objects are not run under the vanilla system; the Thunder Shield is a domain-specific recreation using a standard mobjthinker.
Do not run special stages
SRB2Kart does not have special stages.
Comment out Tag mechanisms
See p_inter.c
y_inter.c
Disable some team-related material
See g_game.c
p_user.c
Disable NiGHTS-related material
See p_inter.c
Disable 2d movement for players
2D mode? In a kart racer? :nick:
2018-10-03 16:04:41 +00:00
|
|
|
|
//void P_TransferToAxis(player_t *player, INT32 axisnum);
|
2014-03-15 16:59:03 +00:00
|
|
|
|
boolean P_PlayerMoving(INT32 pnum);
|
2014-05-26 02:41:05 +00:00
|
|
|
|
void P_Telekinesis(player_t *player, fixed_t thrust, fixed_t range);
|
2014-03-15 16:59:03 +00:00
|
|
|
|
|
|
|
|
|
void P_PlayLivesJingle(player_t *player);
|
2018-07-29 22:51:08 +00:00
|
|
|
|
void P_PlayRinglossSound(mobj_t *source);
|
|
|
|
|
void P_PlayDeathSound(mobj_t *source);
|
|
|
|
|
void P_PlayVictorySound(mobj_t *source);
|
2014-03-15 16:59:03 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// P_MOBJ
|
|
|
|
|
//
|
|
|
|
|
#define ONFLOORZ INT32_MIN
|
|
|
|
|
#define ONCEILINGZ INT32_MAX
|
|
|
|
|
|
|
|
|
|
// Time interval for item respawning.
|
|
|
|
|
// WARNING MUST be a power of 2
|
|
|
|
|
#define ITEMQUESIZE 1024
|
|
|
|
|
|
|
|
|
|
extern mapthing_t *itemrespawnque[ITEMQUESIZE];
|
|
|
|
|
extern tic_t itemrespawntime[ITEMQUESIZE];
|
|
|
|
|
extern size_t iquehead, iquetail;
|
2018-06-26 15:33:54 +00:00
|
|
|
|
extern consvar_t cv_gravity/*, cv_viewheight*/;
|
2014-03-15 16:59:03 +00:00
|
|
|
|
|
|
|
|
|
void P_RespawnSpecials(void);
|
|
|
|
|
|
|
|
|
|
mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type);
|
|
|
|
|
|
2017-10-12 01:54:35 +00:00
|
|
|
|
mobj_t *P_SpawnShadowMobj(mobj_t * caster);
|
|
|
|
|
|
2014-03-15 16:59:03 +00:00
|
|
|
|
void P_RecalcPrecipInSector(sector_t *sector);
|
|
|
|
|
void P_PrecipitationEffects(void);
|
|
|
|
|
|
|
|
|
|
void P_RemoveMobj(mobj_t *th);
|
|
|
|
|
boolean P_MobjWasRemoved(mobj_t *th);
|
|
|
|
|
void P_RemoveSavegameMobj(mobj_t *th);
|
|
|
|
|
boolean P_SetPlayerMobjState(mobj_t *mobj, statenum_t state);
|
|
|
|
|
boolean P_SetMobjState(mobj_t *mobj, statenum_t state);
|
2018-10-03 16:14:25 +00:00
|
|
|
|
//void P_RunShields(void);
|
2016-07-06 04:09:17 +00:00
|
|
|
|
void P_RunOverlays(void);
|
2017-10-12 02:14:14 +00:00
|
|
|
|
void P_RunShadows(void);
|
2014-03-15 16:59:03 +00:00
|
|
|
|
void P_MobjThinker(mobj_t *mobj);
|
|
|
|
|
boolean P_RailThinker(mobj_t *mobj);
|
|
|
|
|
void P_PushableThinker(mobj_t *mobj);
|
|
|
|
|
void P_SceneryThinker(mobj_t *mobj);
|
|
|
|
|
|
2016-07-06 04:09:17 +00:00
|
|
|
|
|
|
|
|
|
fixed_t P_MobjFloorZ(mobj_t *mobj, sector_t *sector, sector_t *boundsec, fixed_t x, fixed_t y, line_t *line, boolean lowest, boolean perfect);
|
|
|
|
|
fixed_t P_MobjCeilingZ(mobj_t *mobj, sector_t *sector, sector_t *boundsec, fixed_t x, fixed_t y, line_t *line, boolean lowest, boolean perfect);
|
|
|
|
|
#define P_GetFloorZ(mobj, sector, x, y, line) P_MobjFloorZ(mobj, sector, NULL, x, y, line, false, false)
|
|
|
|
|
#define P_GetCeilingZ(mobj, sector, x, y, line) P_MobjCeilingZ(mobj, sector, NULL, x, y, line, true, false)
|
|
|
|
|
#define P_GetFOFTopZ(mobj, sector, fof, x, y, line) P_MobjCeilingZ(mobj, sectors + fof->secnum, sector, x, y, line, false, false)
|
|
|
|
|
#define P_GetFOFBottomZ(mobj, sector, fof, x, y, line) P_MobjFloorZ(mobj, sectors + fof->secnum, sector, x, y, line, true, false)
|
|
|
|
|
#define P_GetSpecialBottomZ(mobj, src, bound) P_MobjFloorZ(mobj, src, bound, mobj->x, mobj->y, NULL, src != bound, true)
|
|
|
|
|
#define P_GetSpecialTopZ(mobj, src, bound) P_MobjCeilingZ(mobj, src, bound, mobj->x, mobj->y, NULL, src == bound, true)
|
|
|
|
|
|
|
|
|
|
fixed_t P_CameraFloorZ(camera_t *mobj, sector_t *sector, sector_t *boundsec, fixed_t x, fixed_t y, line_t *line, boolean lowest, boolean perfect);
|
|
|
|
|
fixed_t P_CameraCeilingZ(camera_t *mobj, sector_t *sector, sector_t *boundsec, fixed_t x, fixed_t y, line_t *line, boolean lowest, boolean perfect);
|
|
|
|
|
#define P_CameraGetFloorZ(mobj, sector, x, y, line) P_CameraFloorZ(mobj, sector, NULL, x, y, line, false, false)
|
|
|
|
|
#define P_CameraGetCeilingZ(mobj, sector, x, y, line) P_CameraCeilingZ(mobj, sector, NULL, x, y, line, true, false)
|
|
|
|
|
#define P_CameraGetFOFTopZ(mobj, sector, fof, x, y, line) P_CameraCeilingZ(mobj, sectors + fof->secnum, sector, x, y, line, false, false)
|
|
|
|
|
#define P_CameraGetFOFBottomZ(mobj, sector, fof, x, y, line) P_CameraFloorZ(mobj, sectors + fof->secnum, sector, x, y, line, true, false)
|
|
|
|
|
|
2014-03-15 16:59:03 +00:00
|
|
|
|
boolean P_InsideANonSolidFFloor(mobj_t *mobj, ffloor_t *rover);
|
|
|
|
|
boolean P_CheckDeathPitCollide(mobj_t *mo);
|
|
|
|
|
boolean P_CheckSolidLava(mobj_t *mo, ffloor_t *rover);
|
|
|
|
|
|
|
|
|
|
mobj_t *P_SpawnMissile(mobj_t *source, mobj_t *dest, mobjtype_t type);
|
|
|
|
|
mobj_t *P_SpawnXYZMissile(mobj_t *source, mobj_t *dest, mobjtype_t type, fixed_t x, fixed_t y, fixed_t z);
|
|
|
|
|
mobj_t *P_SpawnPointMissile(mobj_t *source, fixed_t xa, fixed_t ya, fixed_t za, mobjtype_t type, fixed_t x, fixed_t y, fixed_t z);
|
|
|
|
|
mobj_t *P_SpawnAlteredDirectionMissile(mobj_t *source, mobjtype_t type, fixed_t x, fixed_t y, fixed_t z, INT32 shiftingAngle);
|
|
|
|
|
mobj_t *P_SPMAngle(mobj_t *source, mobjtype_t type, angle_t angle, UINT8 aimtype, UINT32 flags2);
|
|
|
|
|
#define P_SpawnPlayerMissile(s,t,f) P_SPMAngle(s,t,s->angle,true,f)
|
|
|
|
|
#ifdef SEENAMES
|
|
|
|
|
#define P_SpawnNameFinder(s,t) P_SPMAngle(s,t,s->angle,true,0)
|
|
|
|
|
#endif
|
|
|
|
|
void P_ColorTeamMissile(mobj_t *missile, player_t *source);
|
|
|
|
|
SINT8 P_MobjFlip(mobj_t *mobj);
|
2016-06-09 17:16:13 +00:00
|
|
|
|
fixed_t P_GetMobjGravity(mobj_t *mo);
|
2016-06-12 19:58:03 +00:00
|
|
|
|
FUNCMATH boolean P_WeaponOrPanel(mobjtype_t type);
|
2014-03-15 16:59:03 +00:00
|
|
|
|
|
|
|
|
|
boolean P_CameraThinker(player_t *player, camera_t *thiscam, boolean resetcalled);
|
|
|
|
|
|
|
|
|
|
void P_Attract(mobj_t *source, mobj_t *enemy, boolean nightsgrab);
|
|
|
|
|
mobj_t *P_GetClosestAxis(mobj_t *source);
|
|
|
|
|
|
|
|
|
|
void P_FlashPal(player_t *pl, UINT16 type, UINT16 duration);
|
|
|
|
|
#define PAL_WHITE 1
|
|
|
|
|
#define PAL_MIXUP 2
|
|
|
|
|
#define PAL_RECYCLE 3
|
|
|
|
|
#define PAL_NUKE 4
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// P_ENEMY
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
// main player in game
|
|
|
|
|
extern player_t *stplyr; // for splitscreen correct palette changes and overlay
|
|
|
|
|
|
|
|
|
|
// Is there a better place for these?
|
|
|
|
|
extern INT32 var1;
|
|
|
|
|
extern INT32 var2;
|
|
|
|
|
|
|
|
|
|
boolean P_CheckMeleeRange(mobj_t *actor);
|
|
|
|
|
boolean P_JetbCheckMeleeRange(mobj_t *actor);
|
|
|
|
|
boolean P_FaceStabCheckMeleeRange(mobj_t *actor);
|
|
|
|
|
boolean P_SkimCheckMeleeRange(mobj_t *actor);
|
|
|
|
|
boolean P_CheckMissileRange(mobj_t *actor);
|
|
|
|
|
|
|
|
|
|
void P_NewChaseDir(mobj_t *actor);
|
|
|
|
|
boolean P_LookForPlayers(mobj_t *actor, boolean allaround, boolean tracer, fixed_t dist);
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// P_MAP
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
// If "floatok" true, move would be ok
|
|
|
|
|
// if within "tmfloorz - tmceilingz".
|
|
|
|
|
extern boolean floatok;
|
|
|
|
|
extern fixed_t tmfloorz;
|
|
|
|
|
extern fixed_t tmceilingz;
|
2016-07-06 04:09:17 +00:00
|
|
|
|
extern mobj_t *tmfloorthing, *tmhitthing, *tmthing;
|
2014-03-15 16:59:03 +00:00
|
|
|
|
extern camera_t *mapcampointer;
|
2016-07-06 04:09:17 +00:00
|
|
|
|
extern fixed_t tmx;
|
|
|
|
|
extern fixed_t tmy;
|
|
|
|
|
extern pslope_t *tmfloorslope, *tmceilingslope;
|
2014-03-15 16:59:03 +00:00
|
|
|
|
|
|
|
|
|
/* cphipps 2004/08/30 */
|
|
|
|
|
extern void P_MapStart(void);
|
|
|
|
|
extern void P_MapEnd(void);
|
|
|
|
|
|
|
|
|
|
extern line_t *ceilingline;
|
|
|
|
|
extern line_t *blockingline;
|
|
|
|
|
extern msecnode_t *sector_list;
|
|
|
|
|
|
|
|
|
|
extern mprecipsecnode_t *precipsector_list;
|
|
|
|
|
|
|
|
|
|
void P_UnsetThingPosition(mobj_t *thing);
|
|
|
|
|
void P_SetThingPosition(mobj_t *thing);
|
|
|
|
|
void P_SetUnderlayPosition(mobj_t *thing);
|
|
|
|
|
|
|
|
|
|
boolean P_CheckPosition(mobj_t *thing, fixed_t x, fixed_t y);
|
|
|
|
|
boolean P_CheckCameraPosition(fixed_t x, fixed_t y, camera_t *thiscam);
|
|
|
|
|
boolean P_TryMove(mobj_t *thing, fixed_t x, fixed_t y, boolean allowdropoff);
|
|
|
|
|
boolean P_Move(mobj_t *actor, fixed_t speed);
|
Implement Uncapped (squashed)
Co-Authored-By: Sally Coolatta <tehrealsalt@gmail.com>
Co-Authored-By: James R <justsomejames2@gmail.com>
Co-Authored-By: Monster Iestyn <iestynjealous@ntlworld.com>
Co-Authored-By: katsy <katmint@live.com>
Place Frame Interpolation in "Experimental" video options header
This seems like an appropriate way to describe the feature for now.
Add smooth level platter under interpolation, `renderdeltatics`
`renderdeltatics` can be used as a standard delta time in any place,
allowing for smooth menus. It will always be equal to `realtics`
when frame interpolation is turned off, producing consistent
framerate behavior everywhere it is used.
Add smooth rendering to save select screen
Add smooth rendering to Record/NiGHTS Attack, F_SkyScroll
Ensure viewsector is accurate to viewx/viewy
This fixes a potential crash in OpenGL when changing between levels.
Ensure + commands get executed before map start
Always have precise_t defined
Fix misc dropshadow issues
Reset view interpolation on level load
Remove unnecessary precipmobj thinker hack
Add reset interpolation state functions
Reset precip interpolation on snap to ceil
Reset mobj interp state on TeleportMove
Only swap view interp state if a tick is run
Run anti-lag chasecam at tic frequency
Fixes jittery and unstable chasecam in high latency netgames
Homogenize mobj interpolations
Add sector plane level interpolations
Add SectorScroll interpolator
Add SideScroll interpolator
Add Polyobj interpolator
Intialize interpolator list at a better time
Delete interpolators associated with thinkers
Interpolate mobj angles and player drawangle
Interpolate HWR_DrawModel
Add functions to handle interpolation
Much less code duplication
P_InitAngle, to fix angle interpolation on spawning objects
Fully fix drop shadows
It used the thing's floorz / ceilingz directly -- that wouldn't account for interpolated coordinates.
Do not speed up underwater/heatwave effect in OpenGL
Closer OpenGL underwater/heatwave effect to Software
Interpolate from time of previous tic
Previously interpolated from last 35th of a second, which
may be offset from game time due to connection lag.
Consider this the proper fix to 54148a0dd0 too.
Calculate FPS stuff even if frame is skipped
I decided ultimately to actually keep the frame skip optimization disabled, because I think it is actually a little bit helpful that you can still get accurate rendering perfstats while paused, however if we decide otherwise then we can have this optimization back without making the game act like it's lagging.
Keep rect in memory
Feel better about this than creating one all da time
Lots of FPS stuff
- Disabled VSync, due to the numerous problems it has.
- Instead, added an FPS cap.
- Frame interpolation is now tied to fpscap != 35.
- By default, the FPS cap is set to the monitor's refresh rate.
- Rewrote the FPS counter.
(This also consolidates several more commits ahead of this
fixing various issues. -eid)
Misc changes after Kart cherry-picks
Fix renderdeltatics with new timing data
Update mobj oldstates before all thinkers
Allow FPS cap values
Adjust how FPS cap is checked to improve FPS stability
Fix precip crash from missing vars
Improve the framerate limiter's timing for extreme stable FPS
Handle the sleep at the end of D_SRB2Loop instead of the start
Simplifies logic in the other parts of the loop, and fixes problems with it frequently waiting too long.
Reset mobj interp state on add
Add mobj interpolator on load netgame
Move mobj interpolators to r_fps
Dynamic slope interpolators
I_GetFrameTime to try and improve frame pace
(It doesn't feel that much better though.)
Move I_FinishUpdate to D_SRB2Loop to sync screen updates with FPS cap, use timestamps in I_FrameCapSleep to simplify the code
Fix plane interpolation light level flickering
Fix flickering plane interpolation for OpenGL in the exact same way
Funny OpenGL renderer being at least 50% copy-pasted Software code :)
P_SetOrigin & P_MoveOrigin to replace P_TeleportMove
Convert P_TeleportMove use to origin funcs
Revert "P_InitAngle, to fix angle interpolation on spawning objects"
This reverts commit a80c98bd164a2748cbbfad9027b34601185d93f5.
Waypoint polyobjects interpolate z & children
Add interpolation to more moving plane types
Adds interpolation to the following:
- Crumbling platforms
- Mario blocks
- Floatbob platforms (this one works really strangely due to two thinkers, maybe double-check this one?)
Reset overlays interp states each TryRunTics
Interpolate model interpolation (lol)
Use interp tracer pos for GL linkdraw
Papersprite angle interpolation
Makes the ending signpost smooth
Move intermission emerald bounce to ticker
Bring back shadows on polyobjects
Also optimizes the method used so rings can show their shadows too. Using just the subsector is a tad bit imprecise admittedly but any more precise methods get really laggy.
Fix a bunch of ticking in hu_ drawing functions
Revert "Reset overlays interp states each TryRunTics"
This reverts commit a71a216faa20e8751b3bd0157354e8d748940c92.
Move intro ticking out of the drawer
Adjust 1up monitor icon z offsets
Fixes interpolation issues with 1up monitors.
Delta time choose player menu animations
Add drawerlib deltaTime function
Interpolate afterimages further back
Use old sleep in dedicated mode
Clamp cechotimer to 0
Fixes issues with cechos staying on-screen and glitching out
(NiGHTS items for example).
Revert "Remove unnecessary precipmobj thinker hack"
This reverts commit 0e38208620d19ec2ab690740438ac2fc7862a49e.
Fix frame pacing when game lags behind
The frame timestamp should've been made at the start of the frame, not the end.
Fix I_FrameCapSleep not respecting cpusleep
Jonathan Joestar bruh
Allow dedicated to use precise sleep timing again
Instead of only using one old sleep, just enforce framerate cap to match TICRATE.
Make Lua TeleportMove call MoveOrigin
Reset Metal fume interp state on appear
Add interpdebug
Put interpdebug stuff in perfstats instead
Add timescale cvar
Slow the game down to debug animations / interpolation problems! Speed it up if you need to get somewhere quickly while mapping!
Enable timescale outside of DEVELOP builds
It has NETVAR, so it should be fine -- put an end to useful debugging features excluded in multiplayer!
Force interpolation when timescale != 1.0
Reset old_z in MT_LOCKON think
Fixes interpolation artifacting due to spawn pos.
Fix cutscenes in interp
Fix boss1 laser in interp
Interpolate mobj scale
Precalculate refresh rate
Slower PCs can have issue querying mode over and over. This might kinda suck for windowed mode if you have different refresh rate displays but oh well
Fix interp scaling crashing software
Reset interp scale when Lua sets .scale
Disable angle interp on fresh mobjs
Fix interp scale crash for hires sprites
Interp shadow scales
Copy interp state in P_SpawnMobjFromMobj
Fix multiplayer character select
Don't interpolate mobj state if frac = 1.0
Fix Mario block item placement
Interpolate spritescale/offset x/y
Fix offset copies for SpawnMobjFromMobj
THANKS SAL
Add Lua HUD drawlists
Buffers draw calls between tics to ensure hooks
run at the originally intended rate.
Rename drawerlib deltaTime to getDeltaTime
Make renderisnewtic is false between tics
I know what I'm doing! I swear
Completely refactor timing system
Time is now tracked internally in the game using I_GetPreciseTime
and I_UpdateTime. I_Time now pulls from this internal timer. The
system code no longer needs to keep track of time itself.
This significantly improves frame and tic timing in interp mode,
resulting in a much smoother image with essentially no judder at
any framerate.
Ensure mobj interpolators reset on level load
Ensure view is not interpolated on first frame
Disable sprite offset interpolation (for now)
Refactor timing code even more
System layer is greatly simplified and framecap
logic has been moved internally. I_Sleep now
takes a sleep duration and I_SleepDuration
generically implements a precise sleep with spin
loop.
2019-10-06 22:40:52 +00:00
|
|
|
|
boolean P_SetOrigin(mobj_t *thing, fixed_t x, fixed_t y, fixed_t z);
|
|
|
|
|
boolean P_MoveOrigin(mobj_t *thing, fixed_t x, fixed_t y, fixed_t z);
|
2017-11-05 07:17:13 +00:00
|
|
|
|
void P_SlideMove(mobj_t *mo, boolean forceslide);
|
2018-06-25 13:18:30 +00:00
|
|
|
|
void P_BouncePlayerMove(mobj_t *mo);
|
2014-03-15 16:59:03 +00:00
|
|
|
|
void P_BounceMove(mobj_t *mo);
|
|
|
|
|
boolean P_CheckSight(mobj_t *t1, mobj_t *t2);
|
|
|
|
|
void P_CheckHoopPosition(mobj_t *hoopthing, fixed_t x, fixed_t y, fixed_t z, fixed_t radius);
|
|
|
|
|
|
|
|
|
|
boolean P_CheckSector(sector_t *sector, boolean crunch);
|
|
|
|
|
|
|
|
|
|
void P_DelSeclist(msecnode_t *node);
|
|
|
|
|
void P_DelPrecipSeclist(mprecipsecnode_t *node);
|
|
|
|
|
|
|
|
|
|
void P_CreateSecNodeList(mobj_t *thing, fixed_t x, fixed_t y);
|
|
|
|
|
void P_Initsecnode(void);
|
|
|
|
|
|
|
|
|
|
void P_RadiusAttack(mobj_t *spot, mobj_t *source, fixed_t damagedist);
|
|
|
|
|
|
|
|
|
|
fixed_t P_FloorzAtPos(fixed_t x, fixed_t y, fixed_t z, fixed_t height);
|
|
|
|
|
boolean PIT_PushableMoved(mobj_t *thing);
|
|
|
|
|
|
2016-07-06 04:09:17 +00:00
|
|
|
|
boolean P_DoSpring(mobj_t *spring, mobj_t *object);
|
2014-05-23 22:58:14 +00:00
|
|
|
|
|
2014-03-15 16:59:03 +00:00
|
|
|
|
//
|
|
|
|
|
// P_SETUP
|
|
|
|
|
//
|
|
|
|
|
extern UINT8 *rejectmatrix; // for fast sight rejection
|
|
|
|
|
extern INT32 *blockmaplump; // offsets in blockmap are from here
|
|
|
|
|
extern INT32 *blockmap; // Big blockmap
|
|
|
|
|
extern INT32 bmapwidth;
|
|
|
|
|
extern INT32 bmapheight; // in mapblocks
|
|
|
|
|
extern fixed_t bmaporgx;
|
|
|
|
|
extern fixed_t bmaporgy; // origin of block map
|
|
|
|
|
extern mobj_t **blocklinks; // for thing chains
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// P_INTER
|
|
|
|
|
//
|
|
|
|
|
typedef struct BasicFF_s
|
|
|
|
|
{
|
|
|
|
|
INT32 ForceX; ///< The X of the Force's Vel
|
|
|
|
|
INT32 ForceY; ///< The Y of the Force's Vel
|
|
|
|
|
const player_t *player; ///< Player of Rumble
|
|
|
|
|
//All
|
|
|
|
|
UINT32 Duration; ///< The total duration of the effect, in microseconds
|
|
|
|
|
INT32 Gain; ///< /The gain to be applied to the effect, in the range from 0 through 10,000.
|
|
|
|
|
//All, CONSTANTFORCE <20>10,000 to 10,000
|
|
|
|
|
INT32 Magnitude; ///< Magnitude of the effect, in the range from 0 through 10,000.
|
|
|
|
|
} BasicFF_t;
|
|
|
|
|
|
|
|
|
|
void P_ForceFeed(const player_t *player, INT32 attack, INT32 fade, tic_t duration, INT32 period);
|
|
|
|
|
void P_ForceConstant(const BasicFF_t *FFInfo);
|
|
|
|
|
void P_RampConstant(const BasicFF_t *FFInfo, INT32 Start, INT32 End);
|
|
|
|
|
void P_RemoveShield(player_t *player);
|
|
|
|
|
boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 damage);
|
|
|
|
|
void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source);
|
|
|
|
|
void P_PlayerRingBurst(player_t *player, INT32 num_rings); /// \todo better fit in p_user.c
|
|
|
|
|
void P_PlayerWeaponPanelBurst(player_t *player);
|
|
|
|
|
void P_PlayerWeaponAmmoBurst(player_t *player);
|
|
|
|
|
void P_PlayerEmeraldBurst(player_t *player, boolean toss);
|
|
|
|
|
|
|
|
|
|
void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck);
|
|
|
|
|
void P_PlayerFlagBurst(player_t *player, boolean toss);
|
2016-07-06 04:09:17 +00:00
|
|
|
|
void P_CheckTimeLimit(void);
|
2014-03-15 16:59:03 +00:00
|
|
|
|
void P_CheckPointLimit(void);
|
Nuke a bunch of iteration things that have no purpose in SRB2Kart. A full explanation of my reasoning and what it affects is as follows.
p_inter.c -
Everything to do with setting states for starposts
In SRB2Kart, starposts are invisble. We don't need to loop through all thinkers just to set their states when there's no visible effect of the state-setting. In addition, it has no consequences for gameplay - starposts have long been silent here, and all checking is done regarding their health, not their state.
Remove extremely low-traffic conditionals (MT_FLINGEMERALD collision height extension, for example)
These objects serve no functional purpose during regular SRB2Kart gameplay. Why should every other object have to pay an admittedly minor performance hit just for them?
Disable all mechanisms of damaging bosses or enemies with the player's physical contact
With the exception of Sapphire Coast, no MF_ENEMY objects exist in the entirety of the standard roster. In addition, the conditions for damaging the enemies were impossible to achieve, because they required vanilla SRB2 mechanics such as "jumping", "spindashing", or "super". Therefore, they can be safely commented out.
Disable NiGHTS-related material (excepting bumper, hoop, and wing-emblem objects)
NiGHTS is fundamentally incompatible with regular kart gameplay and I believe was already broken. Therefore, any mechanism which enters, aids, or abets it can be safely disabled.
Comment out Tag mechanisms
Tag is the only vanilla multiplayer gametype which has sufficient gameplay depth and complexity (HEYOOOOOOOOO) to require dedicated thinking in and of itself in order to manage. This thinking is irrelevant to Kart's functioning, and can be neutered easily.
d_clisrv.c
Comment out Tag mechanisms
See p_inter.c
d_netcmd.c
Disable several devmode commands which are irrelevant to SRB2Kart gameplay
When investigating for references to NiGHTS material, I discovered that these remained untouched. In order to present a more coherent game, I have hidden the ones that serve no purpose for us.
Comment out Tag mechanisms
See p_inter.c
g_game.c
Disable NiGHTS-related material
See p_inter.c
Disable some team-related material
Teams are not present in SRB2Kart at present. Obviously we'd want to reconsider for future, but it doesn't need to be run right now.
Everything to do with setting states for starposts
See p_inter.c
m_cheat.c
Disable several devmode commands which are irrelevant to SRB2Kart gameplay
See d_netcmd.c
p_map.c
Remove extremely low-traffic conditionals (MT_EGGSHIELD collision, for example)
See p_inter.c
Disable NiGHTS-related material
See p_inter.c
p_mobj.c
Disable P_EmeraldManager
Power stones, despite their relevance in vanilla Match, are not in SRB2Kart's Battle. No management of nonexistent emeralds is required.
p_setup.c
Everything to do with setting states for starposts
See p_inter.c
p_spec.c
Disable NiGHTS-related material
See p_inter.c
Everything to do with setting states for starposts
See p_inter.c
p_telept.c
Everything to do with setting states for starposts
See p_inter.c
p_tick.c
Disable some team-related material
See g_game.c
Disable P_EmeraldManager
See p_mobj.c
Do not run shields
Shield objects are not run under the vanilla system; the Thunder Shield is a domain-specific recreation using a standard mobjthinker.
Do not run special stages
SRB2Kart does not have special stages.
Comment out Tag mechanisms
See p_inter.c
y_inter.c
Disable some team-related material
See g_game.c
p_user.c
Disable NiGHTS-related material
See p_inter.c
Disable 2d movement for players
2D mode? In a kart racer? :nick:
2018-10-03 16:04:41 +00:00
|
|
|
|
//void P_CheckSurvivors(void);
|
2014-03-15 16:59:03 +00:00
|
|
|
|
boolean P_CheckRacers(void);
|
|
|
|
|
|
2018-08-12 00:19:09 +00:00
|
|
|
|
boolean P_CanPickupItem(player_t *player, UINT8 weapon);
|
2014-03-15 16:59:03 +00:00
|
|
|
|
void P_DoNightsScore(player_t *player);
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// P_SPEC
|
|
|
|
|
//
|
|
|
|
|
#include "p_spec.h"
|
|
|
|
|
|
|
|
|
|
extern INT32 ceilmovesound;
|
|
|
|
|
|
2014-11-12 00:55:07 +00:00
|
|
|
|
// Factor to scale scrolling effect into mobj-carrying properties = 3/32.
|
|
|
|
|
// (This is so scrolling floors and objects on them can move at same speed.)
|
2017-03-10 21:51:37 +00:00
|
|
|
|
#define CARRYFACTOR (FRACUNIT-ORIG_FRICTION)
|
2014-11-12 00:55:07 +00:00
|
|
|
|
|
2014-03-15 16:59:03 +00:00
|
|
|
|
void P_MixUp(mobj_t *thing, fixed_t x, fixed_t y, fixed_t z, angle_t angle,
|
|
|
|
|
INT16 starpostx, INT16 starposty, INT16 starpostz,
|
|
|
|
|
INT32 starpostnum, tic_t starposttime, angle_t starpostangle,
|
|
|
|
|
INT32 flags2);
|
|
|
|
|
boolean P_Teleport(mobj_t *thing, fixed_t x, fixed_t y, fixed_t z, angle_t angle, boolean flash, boolean dontstopmove);
|
|
|
|
|
boolean P_SetMobjStateNF(mobj_t *mobj, statenum_t state);
|
|
|
|
|
boolean P_CheckMissileSpawn(mobj_t *th);
|
|
|
|
|
void P_Thrust(mobj_t *mo, angle_t angle, fixed_t move);
|
|
|
|
|
void P_DoSuperTransformation(player_t *player, boolean giverings);
|
|
|
|
|
void P_ExplodeMissile(mobj_t *mo);
|
|
|
|
|
void P_CheckGravity(mobj_t *mo, boolean affect);
|
|
|
|
|
|
|
|
|
|
#endif // __P_LOCAL__
|