From 2066656aedbb962c74c4a790691df0654e02c5da Mon Sep 17 00:00:00 2001 From: hendricks266 Date: Mon, 29 Oct 2012 04:29:17 +0000 Subject: [PATCH] Two new player structure members: "autostep" and "autostep_sbw". These control the maximum difference in height between two sectors that the player will automatically traverse without needing to jump. The latter controls the special case when the player's sector's lotag is ST_1_ABOVE_WATER or p->spritebridge == 1. BYTEVERSION bumped. git-svn-id: https://svn.eduke32.com/eduke32@3100 1a8010ca-5511-0410-912e-c29ae57300e0 --- polymer/eduke32/source/duke3d.h | 2 +- polymer/eduke32/source/gamedef.c | 2 ++ polymer/eduke32/source/gamedef.h | 2 ++ polymer/eduke32/source/gamestructures.c | 16 ++++++++++++++-- polymer/eduke32/source/player.c | 4 ++-- polymer/eduke32/source/player.h | 1 + polymer/eduke32/source/premap.c | 3 +++ 7 files changed, 25 insertions(+), 5 deletions(-) diff --git a/polymer/eduke32/source/duke3d.h b/polymer/eduke32/source/duke3d.h index 7232abac4..71969b5fa 100644 --- a/polymer/eduke32/source/duke3d.h +++ b/polymer/eduke32/source/duke3d.h @@ -57,7 +57,7 @@ extern "C" { #define VOLUMEONE (g_Shareware == 1) // increase by 3, because atomic GRP adds 1, and Shareware adds 2 -#define BYTEVERSION_JF 249 +#define BYTEVERSION_JF 252 #define BYTEVERSION_13 27 #define BYTEVERSION_14 116 diff --git a/polymer/eduke32/source/gamedef.c b/polymer/eduke32/source/gamedef.c index c8d9d4bd6..166d6340f 100644 --- a/polymer/eduke32/source/gamedef.c +++ b/polymer/eduke32/source/gamedef.c @@ -971,6 +971,8 @@ const memberlabel_t PlayerLabels[]= { "max_shield_amount", PLAYER_MAX_SHIELD_AMOUNT, 0, 0 }, { "max_ammo_amount", PLAYER_MAX_AMMO_AMOUNT, LABEL_HASPARM2, MAX_WEAPONS }, { "last_quick_kick", PLAYER_LAST_QUICK_KICK, 0, 0 }, + { "autostep", PLAYER_AUTOSTEP, 0, 0 }, + { "autostep_sbw", PLAYER_AUTOSTEP_SBW, 0, 0 }, { "", -1, 0, 0 } // END OF LIST }; diff --git a/polymer/eduke32/source/gamedef.h b/polymer/eduke32/source/gamedef.h index 1d9bfff9d..8a8a1e3b3 100644 --- a/polymer/eduke32/source/gamedef.h +++ b/polymer/eduke32/source/gamedef.h @@ -319,6 +319,8 @@ enum PlayerLabel_t PLAYER_MAX_SHIELD_AMOUNT, PLAYER_MAX_AMMO_AMOUNT, PLAYER_LAST_QUICK_KICK, + PLAYER_AUTOSTEP, + PLAYER_AUTOSTEP_SBW, PLAYER_END }; diff --git a/polymer/eduke32/source/gamestructures.c b/polymer/eduke32/source/gamestructures.c index 51a8f6ac1..7ac1fbdb3 100644 --- a/polymer/eduke32/source/gamestructures.c +++ b/polymer/eduke32/source/gamestructures.c @@ -1524,7 +1524,11 @@ static void __fastcall VM_GetPlayer(register int32_t lVar1, register int32_t lLa case PLAYER_MAX_AMMO_AMOUNT: Gv_SetVarX(lVar2, ps->max_ammo_amount[lParm2]); return; case PLAYER_LAST_QUICK_KICK: - Gv_SetVarX(lVar2, ps->last_quick_kick); + Gv_SetVarX(lVar2, ps->last_quick_kick); return; + case PLAYER_AUTOSTEP: + Gv_SetVarX(lVar2, ps->autostep); return; + case PLAYER_AUTOSTEP_SBW: + Gv_SetVarX(lVar2, ps->autostep_sbw); return; default: @@ -1871,7 +1875,11 @@ static void __fastcall VM_SetPlayer(int32_t lVar1, int32_t lLabelID, int32_t lVa case PLAYER_MAX_AMMO_AMOUNT: ps->max_ammo_amount[lParm2]=lVar1; return; case PLAYER_LAST_QUICK_KICK: - ps->last_quick_kick=lVar1; + ps->last_quick_kick=lVar1; return; + case PLAYER_AUTOSTEP: + ps->autostep=lVar1; return; + case PLAYER_AUTOSTEP_SBW: + ps->autostep_sbw=lVar1; return; default: @@ -3806,6 +3814,10 @@ static int32_t __fastcall VM_AccessPlayerX(int32_t iPlayer, int32_t lLabelID, in return ps->max_ammo_amount[lParm2]; case PLAYER_LAST_QUICK_KICK: return ps->last_quick_kick; + case PLAYER_AUTOSTEP: + return ps->autostep; + case PLAYER_AUTOSTEP_SBW: + return ps->autostep_sbw; default: return -1; } diff --git a/polymer/eduke32/source/player.c b/polymer/eduke32/source/player.c index e1f356200..09ce4fb14 100644 --- a/polymer/eduke32/source/player.c +++ b/polymer/eduke32/source/player.c @@ -5172,8 +5172,8 @@ void P_ProcessInput(int32_t snum) } HORIZONLY: - if (psectlotag == ST_1_ABOVE_WATER || p->spritebridge == 1) i = (4L<<8); - else i = (20L<<8); + if (psectlotag == ST_1_ABOVE_WATER || p->spritebridge == 1) i = p->autostep_sbw; + else i = p->autostep; if (p->cursectnum >= 0 && sector[p->cursectnum].lotag == ST_2_UNDERWATER) k = 0; else k = 1; diff --git a/polymer/eduke32/source/player.h b/polymer/eduke32/source/player.h index b0fbd2a49..de39cd455 100644 --- a/polymer/eduke32/source/player.h +++ b/polymer/eduke32/source/player.h @@ -147,6 +147,7 @@ typedef struct { int32_t truefz, truecz, player_par; int32_t randomflamex, exitx, exity; int32_t runspeed, max_player_health, max_shield_amount; + int32_t autostep, autostep_sbw; uint32_t interface_toggle_flag; diff --git a/polymer/eduke32/source/premap.c b/polymer/eduke32/source/premap.c index 0ce2b6a6c..51f22927c 100644 --- a/polymer/eduke32/source/premap.c +++ b/polymer/eduke32/source/premap.c @@ -1670,6 +1670,9 @@ static void resetpspritevars(char g) g_player[j].ps->frag_ps = j; actor[i].owner = i; + g_player[j].ps->autostep = (20L<<8); + g_player[j].ps->autostep_sbw = (4L<<8); + actor[i].bposx = g_player[j].ps->bobposx = g_player[j].ps->opos.x = g_player[j].ps->pos.x = s->x; actor[i].bposy = g_player[j].ps->bobposy = g_player[j].ps->opos.y = g_player[j].ps->pos.y = s->y; actor[i].bposz = g_player[j].ps->opos.z = g_player[j].ps->pos.z = s->z;