Rednukem: dh wip

# Conflicts:
#	GNUmakefile
#	platform/Windows/rednukem.vcxproj
#	platform/Windows/rednukem.vcxproj.filters
#	source/rr/src/common_game.h
#	source/rr/src/screens.cpp
This commit is contained in:
nukeykt 2020-02-24 00:39:03 +09:00 committed by Christoph Oelckers
parent 0551c16203
commit ac2a17f5ea
11 changed files with 526 additions and 14 deletions

View file

@ -9550,6 +9550,8 @@ static void A_DoLight(int spriteNum)
void A_PlayAlertSound(int spriteNum) void A_PlayAlertSound(int spriteNum)
{ {
if (DEER)
return;
if (RR) if (RR)
{ {
if (sprite[spriteNum].extra > 0) if (sprite[spriteNum].extra > 0)

View file

@ -20,6 +20,7 @@ BEGIN_RR_NS
#define WW2GI (g_gameType & GAMEFLAG_WW2GI) #define WW2GI (g_gameType & GAMEFLAG_WW2GI)
#define NAM_WW2GI (g_gameType & (GAMEFLAG_NAM|GAMEFLAG_WW2GI)) #define NAM_WW2GI (g_gameType & (GAMEFLAG_NAM|GAMEFLAG_WW2GI))
#define SHAREWARE (g_gameType & GAMEFLAG_SHAREWARE) #define SHAREWARE (g_gameType & GAMEFLAG_SHAREWARE)
#define DEER (g_gameType & GAMEFLAG_DEER)
//#define DUKEBETA ((g_gameType & GAMEFLAG_DUKEBETA) == GAMEFLAG_DUKEBETA) //#define DUKEBETA ((g_gameType & GAMEFLAG_DUKEBETA) == GAMEFLAG_DUKEBETA)
//#define IONMAIDEN (g_gameType & GAMEFLAG_IONMAIDEN) //#define IONMAIDEN (g_gameType & GAMEFLAG_IONMAIDEN)

View file

@ -129,6 +129,7 @@ END_RR_NS
#include "sector.h" #include "sector.h"
#include "sounds.h" #include "sounds.h"
#include "soundsdyn.h" #include "soundsdyn.h"
#include "rrdh.h"
BEGIN_RR_NS BEGIN_RR_NS

View file

@ -6769,7 +6769,15 @@ static void G_PostLoadPalette(void)
// Has to be after setting the dynamic names (e.g. SHARK). // Has to be after setting the dynamic names (e.g. SHARK).
static void A_InitEnemyFlags(void) static void A_InitEnemyFlags(void)
{ {
if (RRRA) if (DEER)
{
int DukeEnemies[] = {
DOGRUN, PIG, VIXEN, CHEER };
for (bssize_t i = ARRAY_SIZE(DukeEnemies) - 1; i >= 0; i--)
SETFLAG(DukeEnemies[i], SFLAG_HARDCODED_BADGUY|SFLAG_BADGUY_TILE|SFLAG_KILLCOUNT);
}
else if (RRRA)
{ {
int DukeEnemies[] = { int DukeEnemies[] = {
BOULDER, BOULDER1, EGG, RAT, TORNADO, BILLYCOCK, BILLYRAY, BILLYRAYSTAYPUT, BOULDER, BOULDER1, EGG, RAT, TORNADO, BILLYCOCK, BILLYRAY, BILLYRAYSTAYPUT,

View file

@ -126,6 +126,7 @@ static tokenmap_t const vm_keywords[] =
{ "defineskillname", CON_DEFINESKILLNAME }, { "defineskillname", CON_DEFINESKILLNAME },
{ "definesound", CON_DEFINESOUND }, { "definesound", CON_DEFINESOUND },
{ "definevolumename", CON_DEFINEVOLUMENAME }, { "definevolumename", CON_DEFINEVOLUMENAME },
{ "deploybias", CON_DEPLOYBIAS },
{ "destroyit", CON_DESTROYIT }, { "destroyit", CON_DESTROYIT },
{ "else", CON_ELSE }, { "else", CON_ELSE },
{ "enda", CON_ENDA }, { "enda", CON_ENDA },
@ -158,6 +159,7 @@ static tokenmap_t const vm_keywords[] =
{ "ifceilingdistl", CON_IFCEILINGDISTL }, { "ifceilingdistl", CON_IFCEILINGDISTL },
{ "ifcount", CON_IFCOUNT }, { "ifcount", CON_IFCOUNT },
{ "ifdead", CON_IFDEAD }, { "ifdead", CON_IFDEAD },
{ "iffindnewspot", CON_IFFINDNEWSPOT },
{ "iffloordistl", CON_IFFLOORDISTL }, { "iffloordistl", CON_IFFLOORDISTL },
{ "ifgapzl", CON_IFGAPZL }, { "ifgapzl", CON_IFGAPZL },
{ "ifgotweaponce", CON_IFGOTWEAPONCE }, { "ifgotweaponce", CON_IFGOTWEAPONCE },
@ -195,6 +197,7 @@ static tokenmap_t const vm_keywords[] =
{ "ifsquished", CON_IFSQUISHED }, { "ifsquished", CON_IFSQUISHED },
{ "ifstrength", CON_IFSTRENGTH }, { "ifstrength", CON_IFSTRENGTH },
{ "iftipcow", CON_IFTIPCOW }, { "iftipcow", CON_IFTIPCOW },
{ "ifpupwind", CON_IFPUPWIND },
{ "ifvare", CON_IFVARE }, { "ifvare", CON_IFVARE },
{ "ifvarg", CON_IFVARG }, { "ifvarg", CON_IFVARG },
{ "ifvarl", CON_IFVARL }, { "ifvarl", CON_IFVARL },
@ -208,6 +211,8 @@ static tokenmap_t const vm_keywords[] =
{ "iseat", CON_ISEAT }, { "iseat", CON_ISEAT },
{ "killit", CON_KILLIT }, { "killit", CON_KILLIT },
{ "larrybird", CON_LARRYBIRD }, { "larrybird", CON_LARRYBIRD },
{ "leavedroppings", CON_LEAVEDROPPINGS },
{ "leavetrax", CON_LEAVETRAX },
{ "lotsofglass", CON_LOTSOFGLASS }, { "lotsofglass", CON_LOTSOFGLASS },
{ "mail", CON_MAIL }, { "mail", CON_MAIL },
{ "mamaend", CON_MAMAEND }, { "mamaend", CON_MAMAEND },
@ -2108,6 +2113,8 @@ ifvar:
case CON_IFONMOTO: case CON_IFONMOTO:
case CON_IFONBOAT: case CON_IFONBOAT:
case CON_IFSIZEDOWN: case CON_IFSIZEDOWN:
case CON_IFFINDNEWSPOT:
case CON_IFPUPWIND:
{ {
intptr_t offset; intptr_t offset;
intptr_t lastScriptPtr = (g_scriptPtr-&apScript[0]-1); intptr_t lastScriptPtr = (g_scriptPtr-&apScript[0]-1);
@ -2503,6 +2510,9 @@ ifvar:
case CON_GARYBANJO: case CON_GARYBANJO:
case CON_MOTOLOOPSND: case CON_MOTOLOOPSND:
case CON_RNDMOVE: case CON_RNDMOVE:
case CON_LEAVETRAX:
case CON_LEAVEDROPPINGS:
case CON_DEPLOYBIAS:
continue; continue;
case CON_NULLOP: case CON_NULLOP:

View file

@ -341,6 +341,11 @@ enum ScriptKeywords_t
CON_ENDEVENT, // 159 CON_ENDEVENT, // 159
CON_IFVARE, // 160 CON_IFVARE, // 160
CON_IFVARVARE, // 161 CON_IFVARVARE, // 161
CON_IFFINDNEWSPOT, // 162
CON_LEAVETRAX, // 163
CON_LEAVEDROPPINGS, // 164
CON_DEPLOYBIAS, // 165
CON_IFPUPWIND, // 166
CON_END CON_END
}; };
// KEEPINSYNC with the keyword list in lunatic/con_lang.lua // KEEPINSYNC with the keyword list in lunatic/con_lang.lua

View file

@ -269,6 +269,12 @@ GAMEEXEC_STATIC GAMEEXEC_INLINE void P_ForceAngle(DukePlayer_t *pPlayer)
int32_t A_Dodge(spritetype * const); int32_t A_Dodge(spritetype * const);
int32_t A_Dodge(spritetype * const pSprite) int32_t A_Dodge(spritetype * const pSprite)
{ {
if (DEER)
{
pSprite->ang += ((rrdh_random() & 255) - 127) * 2;
pSprite->ang &= 2047;
return 0;
}
vec2_t const msin = { sintable[(pSprite->ang + 512) & 2047], sintable[pSprite->ang & 2047] }; vec2_t const msin = { sintable[(pSprite->ang + 512) & 2047], sintable[pSprite->ang & 2047] };
for (native_t nexti, SPRITES_OF_STAT_SAFE(STAT_PROJECTILE, i, nexti)) //weapons list for (native_t nexti, SPRITES_OF_STAT_SAFE(STAT_PROJECTILE, i, nexti)) //weapons list
@ -653,7 +659,7 @@ GAMEEXEC_STATIC void VM_Move(void)
if ((movflags&jumptoplayer_bits) == jumptoplayer_bits) if ((movflags&jumptoplayer_bits) == jumptoplayer_bits)
{ {
if (AC_COUNT(vm.pData) < 16) if (AC_COUNT(vm.pData) < 16)
vm.pSprite->zvel -= (RRRA && vm.pSprite->picnum == CHEER) ? (sintable[(512+(AC_COUNT(vm.pData)<<4))&2047]/40) vm.pSprite->zvel -= (!DEER && RRRA && vm.pSprite->picnum == CHEER) ? (sintable[(512+(AC_COUNT(vm.pData)<<4))&2047]/40)
: (sintable[(512+(AC_COUNT(vm.pData)<<4))&2047]>>5); : (sintable[(512+(AC_COUNT(vm.pData)<<4))&2047]>>5);
} }
@ -866,6 +872,28 @@ GAMEEXEC_STATIC void VM_Move(void)
= { (spriteXvel * (sintable[(angDiff + 512) & 2047])) >> 14, (spriteXvel * (sintable[angDiff & 2047])) >> 14, vm.pSprite->zvel }; = { (spriteXvel * (sintable[(angDiff + 512) & 2047])) >> 14, (spriteXvel * (sintable[angDiff & 2047])) >> 14, vm.pSprite->zvel };
vm.pActor->movflag = A_MoveSprite(vm.spriteNum, &vect, CLIPMASK0); vm.pActor->movflag = A_MoveSprite(vm.spriteNum, &vect, CLIPMASK0);
if (DEER && vm.pSprite->picnum != DOGRUN)
{
if ((vm.pActor->movflag & 49152) == 32768)
{
int const wallnum = vm.pActor->movflag & (MAXWALLS-1);
if (ghcons_isanimalescapewall(wallnum))
{
vm.pSprite->z = sector[vm.pSprite->sectnum].ceilingz;
A_MoveSprite(vm.spriteNum, &vect, CLIPMASK0);
vm.pSprite->z = sector[vm.pSprite->sectnum].floorz;
}
}
else if ((vm.pActor->movflag & 49152) == 16384)
{
int sectnum = vm.pActor->movflag & (MAXSECTORS-1);
if (ghcons_isanimalescapesect(sectnum))
{
A_MoveSprite(vm.spriteNum, &vect, CLIPMASK0);
vm.pSprite->z = sector[vm.pSprite->sectnum].floorz;
}
}
}
} }
if (!badguyp) if (!badguyp)
@ -1133,6 +1161,7 @@ static void VM_Fall(int const spriteNum, spritetype * const pSprite)
if ((unsigned)newsect < MAXSECTORS) if ((unsigned)newsect < MAXSECTORS)
changespritesect(spriteNum, newsect); changespritesect(spriteNum, newsect);
if (!DEER)
A_PlaySound(THUD, spriteNum); A_PlaySound(THUD, spriteNum);
} }
} }
@ -1366,6 +1395,18 @@ GAMEEXEC_STATIC void VM_Execute(native_t loop)
{ {
uspritetype *pSprite = (uspritetype *)&sprite[pPlayer->i]; uspritetype *pSprite = (uspritetype *)&sprite[pPlayer->i];
if (DEER)
{
if (sintable[vm.pSprite->ang&2047] * (pSprite->y - vm.pSprite->y) + sintable[(vm.pSprite->ang+512)&2047] * (pSprite->x - vm.pSprite->x) >= 0)
tw = cansee(vm.pSprite->x, vm.pSprite->y, vm.pSprite->z - (krand2() % 13312), vm.pSprite->sectnum,
pSprite->x, pSprite->y, pPlayer->opos.z-(krand2() % 8192), pPlayer->cursectnum);
else
tw = 0;
VM_CONDITIONAL(tw);
continue;
}
// select sprite for monster to target // select sprite for monster to target
// if holoduke is on, let them target holoduke first. // if holoduke is on, let them target holoduke first.
// //
@ -1411,7 +1452,16 @@ GAMEEXEC_STATIC void VM_Execute(native_t loop)
continue; continue;
} }
case CON_IFHITWEAPON: VM_CONDITIONAL(A_IncurDamage(vm.spriteNum) >= 0); continue; case CON_IFHITWEAPON:
if (DEER)
{
VM_CONDITIONAL(ghtrophy_isakill(vm.spriteNum));
}
else
{
VM_CONDITIONAL(A_IncurDamage(vm.spriteNum) >= 0);
}
continue;
case CON_IFSQUISHED: VM_CONDITIONAL(VM_CheckSquished()); continue; case CON_IFSQUISHED: VM_CONDITIONAL(VM_CheckSquished()); continue;
@ -1442,7 +1492,7 @@ GAMEEXEC_STATIC void VM_Execute(native_t loop)
continue; continue;
case CON_IFPDISTL: case CON_IFPDISTL:
VM_CONDITIONAL(vm.playerDist < *(++insptr)); VM_CONDITIONAL(!(DEER && sub_535EC()) && vm.playerDist < *(++insptr));
if (vm.playerDist > MAXSLEEPDIST && vm.pActor->timetosleep == 0) if (vm.playerDist > MAXSLEEPDIST && vm.pActor->timetosleep == 0)
vm.pActor->timetosleep = SLEEPTIME; vm.pActor->timetosleep = SLEEPTIME;
continue; continue;
@ -1728,6 +1778,11 @@ GAMEEXEC_STATIC void VM_Execute(native_t loop)
} }
continue; continue;
case CON_DEPLOYBIAS:
insptr++;
ghdeploy_bias(vm.spriteNum);
continue;
case CON_MAMAEND: case CON_MAMAEND:
insptr++; insptr++;
g_player[myconnectindex].ps->level_end_timer = 150; g_player[myconnectindex].ps->level_end_timer = 150;
@ -1778,6 +1833,15 @@ GAMEEXEC_STATIC void VM_Execute(native_t loop)
VM_CONDITIONAL(0); VM_CONDITIONAL(0);
continue; continue;
case CON_IFFINDNEWSPOT:
VM_CONDITIONAL(ghcons_findnewspot(vm.spriteNum));
continue;
case CON_LEAVEDROPPINGS:
insptr++;
ghtrax_leavedroppings(vm.spriteNum);
continue;
case CON_TEARITUP: case CON_TEARITUP:
insptr++; insptr++;
for (bssize_t SPRITES_OF_SECT(vm.pSprite->sectnum, spriteNum)) for (bssize_t SPRITES_OF_SECT(vm.pSprite->sectnum, spriteNum))
@ -1829,6 +1893,13 @@ GAMEEXEC_STATIC void VM_Execute(native_t loop)
continue; continue;
case CON_ADDKILLS: case CON_ADDKILLS:
if (DEER)
{
// no op
insptr++;
insptr++;
continue;
}
insptr++; insptr++;
if (g_gameType & GAMEFLAG_RR) if (g_gameType & GAMEFLAG_RR)
{ {
@ -1931,6 +2002,11 @@ GAMEEXEC_STATIC void VM_Execute(native_t loop)
sprite[pPlayer->i].z = pPlayer->pos.z; sprite[pPlayer->i].z = pPlayer->pos.z;
continue; continue;
case CON_LEAVETRAX:
insptr++;
ghtrax_leavetrax(vm.spriteNum);
continue;
case CON_DESTROYIT: case CON_DESTROYIT:
insptr++; insptr++;
{ {
@ -2244,6 +2320,11 @@ GAMEEXEC_STATIC void VM_Execute(native_t loop)
continue; continue;
case CON_IFONWATER: case CON_IFONWATER:
if (DEER)
{
VM_CONDITIONAL(sector[vm.pSprite->sectnum].hitag == 2003);
continue;
}
VM_CONDITIONAL(sector[vm.pSprite->sectnum].lotag == ST_1_ABOVE_WATER VM_CONDITIONAL(sector[vm.pSprite->sectnum].lotag == ST_1_ABOVE_WATER
&& klabs(vm.pSprite->z - sector[vm.pSprite->sectnum].floorz) < ZOFFSET5); && klabs(vm.pSprite->z - sector[vm.pSprite->sectnum].floorz) < ZOFFSET5);
continue; continue;
@ -2270,7 +2351,18 @@ GAMEEXEC_STATIC void VM_Execute(native_t loop)
VM_CONDITIONAL(g_windTime > 0); VM_CONDITIONAL(g_windTime > 0);
continue; continue;
case CON_IFINWATER: VM_CONDITIONAL(sector[vm.pSprite->sectnum].lotag == ST_2_UNDERWATER); continue; case CON_IFPUPWIND:
VM_CONDITIONAL(ghtrax_isplrupwind(vm.spriteNum, vm.playerNum));
continue;
case CON_IFINWATER:
if (DEER)
{
VM_CONDITIONAL(sector[vm.pSprite->sectnum].hitag == 2003 && klabs(vm.pSprite->z - sector[vm.pSprite->sectnum].floorz) < ZOFFSET5);
continue;
}
VM_CONDITIONAL(sector[vm.pSprite->sectnum].lotag == ST_2_UNDERWATER);
continue;
case CON_IFCOUNT: case CON_IFCOUNT:
insptr++; insptr++;
@ -2317,12 +2409,13 @@ GAMEEXEC_STATIC void VM_Execute(native_t loop)
|| ((moveFlags & pwalkingback) && playerXVel <= -8 && !TEST_SYNC_KEY(syncBits, SK_RUN)) || ((moveFlags & pwalkingback) && playerXVel <= -8 && !TEST_SYNC_KEY(syncBits, SK_RUN))
|| ((moveFlags & prunningback) && playerXVel <= -8 && TEST_SYNC_KEY(syncBits, SK_RUN)) || ((moveFlags & prunningback) && playerXVel <= -8 && TEST_SYNC_KEY(syncBits, SK_RUN))
|| ((moveFlags & pkicking) || ((moveFlags & pkicking)
&& (pPlayer->quick_kick > 0 && (DEER ? ghsound_pfiredgunnear(vm.pSprite, vm.playerNum) :(pPlayer->quick_kick > 0
|| (pPlayer->curr_weapon == KNEE_WEAPON && pPlayer->kickback_pic > 0))) || (pPlayer->curr_weapon == KNEE_WEAPON && pPlayer->kickback_pic > 0))))
|| ((moveFlags & pshrunk) && sprite[pPlayer->i].xrepeat < (RR ? 8 : 32)) || ((moveFlags & pshrunk) && (DEER ? pPlayer->dhat60f && !sub_535EC() : sprite[pPlayer->i].xrepeat < (RR ? 8 : 32)))
|| ((moveFlags & pjetpack) && pPlayer->jetpack_on) || ((moveFlags & pjetpack) && pPlayer->jetpack_on)
|| ((moveFlags & ponsteroids) && pPlayer->inv_amount[GET_STEROIDS] > 0 && pPlayer->inv_amount[GET_STEROIDS] < 400) || ((moveFlags & ponsteroids) && (DEER ? ghsound_pmadesound(vm.pSprite, vm.playerNum) :
|| ((moveFlags & ponground) && pPlayer->on_ground) pPlayer->inv_amount[GET_STEROIDS] > 0 && pPlayer->inv_amount[GET_STEROIDS] < 400))
|| ((moveFlags & ponground) && (DEER ? ghsound_pmadecall(vm.pSprite, vm.playerNum) : pPlayer->on_ground))
|| ((moveFlags & palive) && sprite[pPlayer->i].xrepeat > (RR ? 8 : 32) && sprite[pPlayer->i].extra > 0 && pPlayer->timebeforeexit == 0) || ((moveFlags & palive) && sprite[pPlayer->i].xrepeat > (RR ? 8 : 32) && sprite[pPlayer->i].extra > 0 && pPlayer->timebeforeexit == 0)
|| ((moveFlags & pdead) && sprite[pPlayer->i].extra <= 0)) || ((moveFlags & pdead) && sprite[pPlayer->i].extra <= 0))
nResult = 1; nResult = 1;
@ -2377,7 +2470,14 @@ GAMEEXEC_STATIC void VM_Execute(native_t loop)
case CON_IFHITSPACE: VM_CONDITIONAL(TEST_SYNC_KEY(g_player[vm.playerNum].inputBits->bits, SK_OPEN)); continue; case CON_IFHITSPACE: VM_CONDITIONAL(TEST_SYNC_KEY(g_player[vm.playerNum].inputBits->bits, SK_OPEN)); continue;
case CON_IFOUTSIDE: VM_CONDITIONAL(sector[vm.pSprite->sectnum].ceilingstat & 1); continue; case CON_IFOUTSIDE:
if (DEER)
{
VM_CONDITIONAL(sector[vm.pSprite->sectnum].hitag = 2000);
continue;
}
VM_CONDITIONAL(sector[vm.pSprite->sectnum].ceilingstat & 1);
continue;
case CON_IFMULTIPLAYER: VM_CONDITIONAL((g_netServer || g_netClient || ud.multimode > 1)); continue; case CON_IFMULTIPLAYER: VM_CONDITIONAL((g_netServer || g_netClient || ud.multimode > 1)); continue;
@ -2830,7 +2930,7 @@ void A_Execute(int spriteNum, int playerNum, int playerDist)
VM_Move(); VM_Move();
if (vm.pSprite->statnum != STAT_ACTOR) if (DEER || vm.pSprite->statnum != STAT_ACTOR)
{ {
if (vm.pSprite->statnum == STAT_STANDABLE) if (vm.pSprite->statnum == STAT_STANDABLE)
{ {

View file

@ -221,6 +221,8 @@ typedef struct {
int32_t sea_sick; int32_t sea_sick;
uint8_t hurt_delay2, nocheat; uint8_t hurt_delay2, nocheat;
int32_t dhat60f;
int8_t crouch_toggle; int8_t crouch_toggle;
int8_t padding_[3]; int8_t padding_[3];
} DukePlayer_t; } DukePlayer_t;

250
source/rr/src/rrdh.cpp Normal file
View file

@ -0,0 +1,250 @@
//-------------------------------------------------------------------------
/*
Copyright (C) 2016 EDuke32 developers and contributors
Copyright (C) 2020 Nuke.YKT
This file is part of EDuke32.
EDuke32 is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License version 2
as published by the Free Software Foundation.
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 the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
//-------------------------------------------------------------------------
#include "compat.h"
#include "baselayer.h"
#include "duke3d.h"
int rrdh_randseed = 1;
int rrdh_random(void)
{
static int seedinit = 0;
if (!seedinit)
{
rrdh_randseed = (int)timerGetPerformanceCounter();
seedinit = 1;
}
rrdh_randseed = (rrdh_randseed*1103515245)+12345;
return (rrdh_randseed>>16)&0x7fff;
}
int ghcons_isanimalescapewall(short w)
{
walltype *wl = &wall[w];
switch (wall[w].picnum)
{
case 1182:
case 1183:
case 1184:
case 1185:
case 2347:
case 3802:
case 3803:
case 7870:
case 7871:
case 7872:
return 1;
}
return 0;
}
int ghcons_isanimalescapesect(short s)
{
sectortype *sc = &sector[s];
return sector[s].hitag == 2001;
}
int ghcons_findnewspot(short a1)
{
// TODO
return 0;
}
int ghsound_pmadecall(spritetype *a1, short a2)
{
switch (DYNAMICTILEMAP(a1->picnum))
{
case DOGRUN__STATICRR:
if (A_CheckSoundPlaying(-1, 41))
return 1;
case VIXEN__STATICRR:
if (A_CheckSoundPlaying(-1, 40))
return 1;
case PIG__STATICRR:
if (A_CheckSoundPlaying(-1, 42))
return 1;
case CHEER__STATICRR:
if (A_CheckSoundPlaying(-1, 43))
return 1;
}
return 0;
}
int ghsound_pmadesound(spritetype *a1, short a2)
{
int d = klabs(g_player[a2].ps->pos.x - a1->x) + klabs(g_player[a2].ps->pos.y - a1->y);
if (A_CheckSoundPlaying(-1, 1) && d < 23040)
return 1;
if (A_CheckSoundPlaying(-1, 2))
return 1;
if (A_CheckSoundPlaying(-1, 3) && d < 23040)
return 1;
if (A_CheckSoundPlaying(-1, 4))
return 1;
if (A_CheckSoundPlaying(-1, 5) && d < 23040)
return 1;
if (A_CheckSoundPlaying(-1, 6))
return 1;
if (A_CheckSoundPlaying(-1, 7) && d < 23040)
return 1;
if (A_CheckSoundPlaying(-1, 8) && d < 23040)
return 1;
if (A_CheckSoundPlaying(-1, 56) && d < 23040)
return 1;
if (A_CheckSoundPlaying(-1, 57) && d < 23040)
return 1;
if (A_CheckSoundPlaying(-1, 58) && d < 23040)
return 1;
if (A_CheckSoundPlaying(-1, 59) && d < 23040)
return 1;
if (A_CheckSoundPlaying(-1, 25) && d < 21504)
return 1;
if (A_CheckSoundPlaying(-1, 11) && d < 10752)
return 1;
if (A_CheckSoundPlaying(-1, 9) && d < 15360)
return 1;
if (A_CheckSoundPlaying(-1, 10) && d < 30720)
return 1;
if (A_CheckSoundPlaying(-1, 12) && d < 19968)
return 1;
if (A_CheckSoundPlaying(-1, 15) && d < 10752)
return 1;
if (A_CheckSoundPlaying(-1, 13) && d < 15360)
return 1;
if (A_CheckSoundPlaying(-1, 14) && d < 30720)
return 1;
if (A_CheckSoundPlaying(-1, 16) && d < 19968)
return 1;
if (A_CheckSoundPlaying(-1, 19) && d < 10752)
return 1;
if (A_CheckSoundPlaying(-1, 17) && d < 15360)
return 1;
if (A_CheckSoundPlaying(-1, 18) && d < 30720)
return 1;
if (A_CheckSoundPlaying(-1, 20) && d < 19968)
return 1;
if (A_CheckSoundPlaying(-1, 23) && d < 10752)
return 1;
if (A_CheckSoundPlaying(-1, 21) && d < 15360)
return 1;
if (A_CheckSoundPlaying(-1, 22) && d < 30720)
return 1;
if (A_CheckSoundPlaying(-1, 24) && d < 19968)
return 1;
if (A_CheckSoundPlaying(-1, 81) && d < 15360)
return 1;
if (A_CheckSoundPlaying(-1, 80) && d < 30720)
return 1;
if (A_CheckSoundPlaying(-1, 41) && d < 23040)
return 1;
if (A_CheckSoundPlaying(-1, 40) && d < 23040)
return 1;
if (A_CheckSoundPlaying(-1, 42) && d < 23040)
return 1;
if (A_CheckSoundPlaying(-1, 43) && d < 23040)
return 1;
if (A_CheckSoundPlaying(-1, 88) && d < 10752)
return 1;
if (A_CheckSoundPlaying(-1, 89) && d < 15360)
return 1;
if (A_CheckSoundPlaying(-1, 90) && d < 23040)
return 1;
if (A_CheckSoundPlaying(-1, 27) && d < 30720)
return 1;
if (A_CheckSoundPlaying(-1, 36) && d < 30720)
return 1;
if (A_CheckSoundPlaying(-1, 30) && d < 30720)
return 1;
if (A_CheckSoundPlaying(-1, 33) && d < 30720)
return 1;
return 0;
}
int ghsound_pfiredgunnear(spritetype *a1, short a2)
{
if (A_CheckSoundPlaying(-1, 2))
return 1;
if (A_CheckSoundPlaying(-1, 4))
return 1;
if (A_CheckSoundPlaying(-1, 6))
return 1;
if (A_CheckSoundPlaying(-1, 8) && klabs(g_player[a2].ps->pos.x - a1->x) + klabs(g_player[a2].ps->pos.y - a1->y) < 23040)
return 1;
return 0;
}
int dword_AA2F4;
void sub_535DC(void)
{
dword_AA2F4 ^= 1;
}
int sub_535EC(void)
{
return dword_AA2F4;
}
int dword_AA300;
struct struct2B80E0 {
short f_0;
short f_2;
int f_4;
int f_8;
int f_c;
int f_10;
};
struct2B80E0 f2B80E0[20];
int ghtrophy_isakill(short a1)
{
spritetype *spr = &sprite[a1];
for (int i = 0; i < dword_AA300; i++)
{
if (f2B80E0[i].f_0 == a1)
return 1;
}
return 0;
}
int ghtrax_isplrupwind(short a1, short a2)
{
// TODO
return 0;
}
void ghtrax_leavetrax(short a1)
{
// TODO
}
void ghtrax_leavedroppings(short a1)
{
// TODO
}
void ghdeploy_bias(short a1)
{
// TODO
}

38
source/rr/src/rrdh.h Normal file
View file

@ -0,0 +1,38 @@
//-------------------------------------------------------------------------
/*
Copyright (C) 2016 EDuke32 developers and contributors
Copyright (C) 2020 Nuke.YKT
This file is part of EDuke32.
EDuke32 is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License version 2
as published by the Free Software Foundation.
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 the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
//-------------------------------------------------------------------------
#pragma once
int rrdh_random(void);
int ghcons_isanimalescapewall(short w);
int ghcons_isanimalescapesect(short s);
int ghtrophy_isakill(short a1);
int sub_535EC(void);
void ghdeploy_bias(short a1);
int ghcons_findnewspot(short a1);
void ghtrax_leavedroppings(short a1);
void ghtrax_leavetrax(short a1);
int ghtrax_isplrupwind(short a1, short a2);
int ghsound_pfiredgunnear(spritetype* a1, short a2);
int ghsound_pmadesound(spritetype* a1, short a2);
int ghsound_pmadecall(spritetype* a1, short a2);

View file

@ -894,7 +894,7 @@ void G_DisplayRest(int32_t smoothratio)
menutext_(160<<16, (90+16+8)<<16, -g_levelTextTime+22/*quotepulseshade*/, currentLevel->DisplayName(), o, TEXT_XCENTER); menutext_(160<<16, (90+16+8)<<16, -g_levelTextTime+22/*quotepulseshade*/, currentLevel->DisplayName(), o, TEXT_XCENTER);
} }
if (g_player[myconnectindex].ps->newowner == -1 && ud.overhead_on == 0 && cl_crosshair && ud.camerasprite == -1) if (!DEER && g_player[myconnectindex].ps->newowner == -1 && ud.overhead_on == 0 && ud.crosshair && ud.camerasprite == -1)
{ {
int32_t a = CROSSHAIR; int32_t a = CROSSHAIR;
if ((unsigned) a < MAXTILES) if ((unsigned) a < MAXTILES)
@ -1164,6 +1164,101 @@ void G_DisplayLogo(void)
Mus_Stop(); Mus_Stop();
FX_StopAllSounds(); // JBF 20031228 FX_StopAllSounds(); // JBF 20031228
S_ClearSoundLocks(); // JBF 20031228 S_ClearSoundLocks(); // JBF 20031228
if (DEER)
{
if (!g_noLogo /* && (!g_netServer && ud.multimode < 2) */)
{
if (!I_CheckAllInput() && g_noLogoAnim == 0)
{
videoClearScreen(0);
P_SetGamePalette(g_player[myconnectindex].ps, BASEPAL, 0); // JBF 20040308
fadepal(0, 0, 0, 0, 252, 28);
renderFlushPerms();
rotatesprite_fs(160 << 16, 100 << 16, 65536L, 0, 7106, 0, 0, 2 + 8 + 64 + BGSTRETCH);
videoNextPage();
fadepaltile(0, 0, 0, 252, 0, -4, 7106);
totalclock = 0;
while (totalclock < (120 * 3) && !I_CheckAllInput())
{
if (G_FPSLimit())
{
videoClearScreen(0);
rotatesprite_fs(160 << 16, 100 << 16, 65536L, 0, 7106, 0, 0, 2 + 8 + 64 + BGSTRETCH);
G_HandleAsync();
if (g_restorePalette)
{
P_SetGamePalette(g_player[myconnectindex].ps, g_player[myconnectindex].ps->palette, 0);
g_restorePalette = 0;
}
videoNextPage();
}
}
fadepaltile(0, 0, 0, 0, 252, 4, 7106);
}
videoClearScreen(0L);
videoNextPage();
inputState.ClearAllInput();
videoClearScreen(0L);
videoNextPage();
videoClearScreen(0);
//g_player[myconnectindex].ps->palette = drealms;
//G_FadePalette(0,0,0,252);
if (!inputState.CheckAllInput() && g_noLogoAnim == 0)
{
videoClearScreen(0);
P_SetGamePalette(g_player[myconnectindex].ps, BASEPAL, 8 + 2 + 1); // JBF 20040308
fadepal(0, 0, 0, 0, 252, 28);
renderFlushPerms();
rotatesprite_fs(160 << 16, 100 << 16, 65536L, 0, 7107, 0, 0, 2 + 8 + 64 + BGSTRETCH);
videoNextPage();
fadepaltile(0, 0, 0, 252, 0, -4, 7107);
totalclock = 0;
while (totalclock < (120 * 3) && !I_CheckAllInput())
{
if (G_FPSLimit())
{
videoClearScreen(0);
rotatesprite_fs(160 << 16, 100 << 16, 65536L, 0, 7107, 0, 0, 2 + 8 + 64 + BGSTRETCH);
G_HandleAsync();
if (g_restorePalette)
{
P_SetGamePalette(g_player[myconnectindex].ps, g_player[myconnectindex].ps->palette, 0);
g_restorePalette = 0;
}
videoNextPage();
}
}
fadepaltile(0, 0, 0, 0, 252, 4, 7107);
}
inputState.ClearAllInput();
}
renderFlushPerms();
videoClearScreen(0L);
videoNextPage();
//g_player[myconnectindex].ps->palette = palette;
P_SetGamePalette(g_player[myconnectindex].ps, BASEPAL, 0); // JBF 20040308
//G_FadePalette(0,0,0,0);
videoClearScreen(0L);
return;
}
if (RRRA) if (RRRA)
return; return;
if (RR) if (RR)