From b9deaba83414f6dc5546fa0b25000800a42fc681 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Fri, 15 May 2020 00:37:49 +0200 Subject: [PATCH] - all commands now get run by the original code. --- source/games/duke/src/actors_r.cpp | 3 + source/games/duke/src/gameexec.cpp | 1 - source/games/duke/src/zz_gameexec.cpp | 563 +------------------------- 3 files changed, 8 insertions(+), 559 deletions(-) diff --git a/source/games/duke/src/actors_r.cpp b/source/games/duke/src/actors_r.cpp index 1a1d54062..ab09199c0 100644 --- a/source/games/duke/src/actors_r.cpp +++ b/source/games/duke/src/actors_r.cpp @@ -270,7 +270,10 @@ SKIPWALLCHECK: if (dist(s, sj) < r) { if (badguy(sj) && !cansee(sj->x, sj->y, sj->z + q, sj->sectnum, s->x, s->y, s->z + q, s->sectnum)) + { + j = nextj; continue; + } fi.checkhitsprite(j, i); } } diff --git a/source/games/duke/src/gameexec.cpp b/source/games/duke/src/gameexec.cpp index ce7640c3e..0a72f74f6 100644 --- a/source/games/duke/src/gameexec.cpp +++ b/source/games/duke/src/gameexec.cpp @@ -491,7 +491,6 @@ int parse(void) parseifelse(ambienthitag[g_sp->ang] > g_x); else if (*insptr == 1) parseifelse(ambienthitag[g_sp->ang] < g_x); - insptr++; break; case concmd_soundtag: insptr++; diff --git a/source/games/duke/src/zz_gameexec.cpp b/source/games/duke/src/zz_gameexec.cpp index f23c346af..c6eefee3f 100644 --- a/source/games/duke/src/zz_gameexec.cpp +++ b/source/games/duke/src/zz_gameexec.cpp @@ -194,145 +194,12 @@ void forceplayerangle(DukePlayer_t *pPlayer) pPlayer->look_ang = pPlayer->rotscrnang; } -// wow, this function sucks -int furthestcanseepoint(int i, spritetype* ts, int* dax, int* day); - - -////////// TROR get*zofslope ////////// -// These rather belong into the engine. - - - -//////////////////// - -static int32_t A_GetWaterZOffset(int spritenum); GAMEEXEC_STATIC void VM_Move(void) { fi.move(vm.spriteNum, vm.playerNum, vm.playerDist); } -static void VM_AddWeapon(DukePlayer_t * const pPlayer, int const weaponNum, int const nAmount) -{ - if (EDUKE32_PREDICT_FALSE((unsigned)weaponNum >= MAX_WEAPONS)) - { - CON_ERRPRINTF("invalid weapon %d\n", weaponNum); - return; - } - - if (!pPlayer->gotweapon[weaponNum]) - { - P_AddWeapon(pPlayer, weaponNum); - } - else if (pPlayer->ammo_amount[weaponNum] >= max_ammo_amount[weaponNum]) - { - vm.flags |= VM_NOEXECUTE; - return; - } - - P_AddAmmo(pPlayer, weaponNum, nAmount); - - if (pPlayer->curr_weapon == KNEE_WEAPON && (pPlayer->gotweapon[weaponNum])) - P_AddWeapon(pPlayer, weaponNum); -} - -static void VM_AddAmmo(DukePlayer_t * const pPlayer, int const weaponNum, int const nAmount) -{ - if (EDUKE32_PREDICT_FALSE((unsigned)weaponNum >= MAX_WEAPONS)) - { - CON_ERRPRINTF("invalid weapon %d\n", weaponNum); - return; - } - - if (pPlayer->ammo_amount[weaponNum] >= max_ammo_amount[weaponNum]) - { - vm.flags |= VM_NOEXECUTE; - return; - } - - P_AddAmmo(pPlayer, weaponNum, nAmount); - - if (pPlayer->curr_weapon == KNEE_WEAPON && (pPlayer->gotweapon[weaponNum])) - P_AddWeapon(pPlayer, weaponNum); -} - -static void VM_AddInventory(DukePlayer_t * const pPlayer, int const itemNum, int const nAmount) -{ - switch (itemNum) - { - case GET_STEROIDS: - case GET_SCUBA: - case GET_HOLODUKE: - case GET_JETPACK: - case GET_HEATS: - case GET_FIRSTAID: - case GET_BOOTS: - pPlayer->inven_icon = inv_to_icon[itemNum]; - pPlayer->inv_amount[itemNum] = nAmount; - break; - - case GET_SHIELD: - { - int16_t & shieldamount = pPlayer->inv_amount[GET_SHIELD]; - shieldamount = min(shieldamount + nAmount, max_player_health); - break; - } - - case GET_ACCESS: - if (RR) - { - switch (vm.pSprite->lotag) - { - case 100: pPlayer->keys[1] = 1; break; - case 101: pPlayer->keys[2] = 1; break; - case 102: pPlayer->keys[3] = 1; break; - case 103: pPlayer->keys[4] = 1; break; - } - } - else - { - switch (vm.pSprite->pal) - { - case 0: pPlayer->got_access |= 1; break; - case 21: pPlayer->got_access |= 2; break; - case 23: pPlayer->got_access |= 4; break; - } - } - break; - - default: CON_ERRPRINTF("invalid inventory item %d\n", itemNum); break; - } -} - -static int32_t A_GetWaterZOffset(int const spriteNum) -{ - uspritetype const *const pSprite = (uspritetype *)&sprite[spriteNum]; - - if (sector[pSprite->sectnum].lotag == ST_1_ABOVE_WATER) - { - if (RRRA) - { - switch (DYNAMICTILEMAP(pSprite->picnum)) - { - case HULKBOAT__STATICRR: - return (12<<8); - case MINIONBOAT__STATICRR: - return (3<<8); - case CHEERBOAT__STATICRR: - case EMPTYBOAT__STATICRR: - return (6<<8); - } - } - if (A_CheckSpriteFlags(spriteNum, SFLAG_NOWATERDIP)) - return 0; - - return ACTOR_ONWATER_ADDZ; - } - - return 0; -} - - extern uint8_t killit_flag; void VM_Execute(native_t loop) @@ -351,432 +218,12 @@ void VM_Execute(native_t loop) tw = *insptr; skip_check: - // Bsprintf(g_szBuf,"Parsing: %d",*insptr); - // AddLog(g_szBuf); - g_errorLineNum = tw >> 12; - g_tw = tw &= VM_INSTMASK; - - - switch (tw) - { - - - case concmd_smacksprite: - insptr++; - if (krand2()&1) - vm.pSprite->ang = (vm.pSprite->ang-(512+(krand2()&511)))&2047; - else - vm.pSprite->ang = (vm.pSprite->ang+(512+(krand2()&511)))&2047; - continue; - - case concmd_fakebubba: - insptr++; - switch (++fakebubba_spawn) - { - case 1: - A_Spawn(vm.spriteNum, TILE_PIG); - break; - case 2: - A_Spawn(vm.spriteNum, TILE_MINION); - break; - case 3: - A_Spawn(vm.spriteNum, TILE_CHEER); - break; - case 4: - A_Spawn(vm.spriteNum, TILE_VIXEN); - operateactivators(666, vm.playerNum); - break; - } - continue; - - case concmd_mamatrigger: - insptr++; - operateactivators(667, vm.playerNum); - continue; - - case concmd_mamaspawn: - insptr++; - if (mamaspawn_count) - { - mamaspawn_count--; - A_Spawn(vm.spriteNum, TILE_RABBIT); - } - continue; - - case concmd_mamaquake: - insptr++; - if (vm.pSprite->pal == 31) - g_earthquakeTime = 4; - else if(vm.pSprite->pal == 32) - g_earthquakeTime = 6; - continue; - - case concmd_garybanjo: - insptr++; - if (banjosound == 0) - { - switch (krand2()&3) - { - case 3: - banjosound = 262; - break; - case 0: - banjosound = 272; - break; - default: - banjosound = 273; - break; - } - A_PlaySound(banjosound, vm.spriteNum, CHAN_WEAPON); - } - else if (!S_CheckSoundPlaying(vm.spriteNum, banjosound)) - A_PlaySound(banjosound, vm.spriteNum, CHAN_WEAPON); - continue; - case concmd_motoloopsnd: - insptr++; - if (!S_CheckSoundPlaying(vm.spriteNum, 411)) - A_PlaySound(411, vm.spriteNum); - continue; - - - case concmd_shoot: - insptr++; - if (EDUKE32_PREDICT_FALSE((unsigned)vm.pSprite->sectnum >= (unsigned)numsectors)) - { - CON_ERRPRINTF("invalid sector %d\n", vm.pUSprite->sectnum); - continue; - } - A_Shoot(vm.spriteNum, *insptr++); - continue; - - case concmd_ifsoundid: - insptr++; - VM_CONDITIONAL((int16_t)*insptr == ambientlotag[vm.pSprite->ang]); - continue; - - case concmd_ifsounddist: - insptr++; - if (*insptr == 0) - { - VM_CONDITIONAL(ambienthitag[vm.pSprite->ang] > vm.playerDist); - } - else if (*insptr == 1) - { - VM_CONDITIONAL(ambienthitag[vm.pSprite->ang] < vm.playerDist); - } - else - { - VM_CONDITIONAL(0); - } - - continue; - - case concmd_soundtag: - insptr++; - A_PlaySound(ambientlotag[vm.pSprite->ang], vm.spriteNum); - continue; - - case concmd_soundtagonce: - insptr++; - if (!S_CheckSoundPlaying(vm.spriteNum, ambientlotag[vm.pSprite->ang])) - A_PlaySound(ambientlotag[vm.pSprite->ang], vm.spriteNum); - continue; - - case concmd_stopsound: - if (EDUKE32_PREDICT_FALSE((unsigned)*(++insptr) >= MAXSOUNDS)) - { - CON_ERRPRINTF("invalid sound %d\n", (int32_t)*insptr); - insptr++; - continue; - } - if (S_CheckSoundPlaying(vm.spriteNum, *insptr)) - S_StopSound((int16_t)*insptr); - insptr++; - continue; - - case concmd_globalsound: - if (EDUKE32_PREDICT_FALSE((unsigned)*(++insptr) >= MAXSOUNDS)) - { - CON_ERRPRINTF("invalid sound %d\n", (int32_t)*insptr); - insptr++; - continue; - } - if (vm.playerNum == screenpeek || (g_gametypeFlags[ud.coop] & GAMETYPE_COOPSOUND) -#ifdef SPLITSCREEN_MOD_HACKS - || (g_fakeMultiMode == 2) -#endif - ) - A_PlaySound(*insptr, g_player[screenpeek].ps->i); - insptr++; - continue; - - case concmd_smackbubba: - insptr++; - if (!RRRA || vm.pSprite->pal != 105) - { - for (bssize_t TRAVERSE_CONNECT(playerNum)) - g_player[playerNum].ps->gm = MODE_EOL; - if (++ud.level_number > 6) - ud.level_number = 0; - m_level_number = ud.level_number; - } - continue; - -#if 0 // RRDH only - case concmd_deploybias: - insptr++; - ghdeploy_bias(vm.spriteNum); - continue; -#endif - - case concmd_mamaend: - insptr++; - g_player[myconnectindex].ps->MamaEnd = 150; - continue; - - case concmd_ifactorhealthg: - insptr++; - VM_CONDITIONAL(vm.pSprite->extra > (int16_t)*insptr); - continue; - - case concmd_ifactorhealthl: - insptr++; - VM_CONDITIONAL(vm.pSprite->extra < (int16_t)*insptr); - continue; - - case concmd_sound: - if (EDUKE32_PREDICT_FALSE((unsigned)*(++insptr) >= MAXSOUNDS)) - { - CON_ERRPRINTF("invalid sound %d\n", (int32_t)*insptr); - insptr++; - continue; - } - A_PlaySound(*insptr++, vm.spriteNum); - continue; - - case concmd_iftipcow: - if (g_spriteExtra[vm.spriteNum] == 1) - { - g_spriteExtra[vm.spriteNum]++; - VM_CONDITIONAL(1); - } - else - VM_CONDITIONAL(0); - continue; - - case concmd_ifhittruck: - if (g_spriteExtra[vm.spriteNum] == 1) - { - g_spriteExtra[vm.spriteNum]++; - VM_CONDITIONAL(1); - } - else - VM_CONDITIONAL(0); - continue; - - - case concmd_tearitup: - insptr++; - for (bssize_t SPRITES_OF_SECT(vm.pSprite->sectnum, spriteNum)) - { - if (sprite[spriteNum].picnum == TILE_DESTRUCTO) - { - actor[spriteNum].picnum = TILE_SHOTSPARK1; - actor[spriteNum].extra = 1; - } - } - continue; - - - case concmd_addammo: - insptr++; - { - int const weaponNum = *insptr++; - int const addAmount = *insptr++; - - VM_AddAmmo(pPlayer, weaponNum, addAmount); - - continue; - } - - case concmd_addkills: - if (DEER) - { - // no op - insptr++; - insptr++; - continue; - } - insptr++; - if (RR) - { - // This check does not exist in Duke Nukem. - if ((g_spriteExtra[vm.spriteNum] < 1 || g_spriteExtra[vm.spriteNum] == 128) - && (!RR || A_CheckSpriteFlags(vm.spriteNum, SFLAG_KILLCOUNT))) - P_AddKills(pPlayer, *insptr); - } - else P_AddKills(pPlayer, *insptr); - insptr++; - vm.pActor->actorstayput = -1; - continue; - - - case concmd_addweapon: - insptr++; - { - int const weaponNum = *insptr++; - VM_AddWeapon(pPlayer, weaponNum, *insptr++); - continue; - } - - case concmd_debug: - insptr++; - buildprint(*insptr++, "\n"); - continue; - - case concmd_endofgame: - insptr++; - pPlayer->timebeforeexit = *insptr++; - pPlayer->customexitsound = -1; - ud.eog = 1; - continue; - - case concmd_soundonce: - case concmd_isdrunk: - case concmd_strafeleft: - case concmd_straferight: - case concmd_larrybird: - case concmd_destroyit: - case concmd_iseat: - case concmd_newpic: - case concmd_ifonmud: - case concmd_ifonwater: - case concmd_ifmotofast: - case concmd_ifonmoto: - case concmd_ifonboat: - case concmd_ifsizedown: - case concmd_ifwind: - case concmd_ifinwater: - case concmd_ifcount: - case concmd_ifactor: - case concmd_resetcount: - case concmd_addinventory: - case concmd_hitradius: - case concmd_ifp: - case concmd_ifstrength: - case concmd_guts: - case concmd_slapplayer: - case concmd_wackplayer: - case concmd_ifgapzl: - case concmd_ifhitspace: - case concmd_ifoutside: - case concmd_ifmultiplayer: - case concmd_operate: - case concmd_fall: - case concmd_ifpinventory: - case concmd_ifinspace: - case concmd_spritepal: - case concmd_cactor: - case concmd_ifbulletnear: - case concmd_ifrespawn: - case concmd_iffloordistl: - case concmd_ifceilingdistl: - case concmd_palfrom: - case concmd_ifphealthl: - case concmd_pstomp: - case concmd_ifawayfromwall: - case concmd_quote: - case concmd_ifinouterspace: - case concmd_ifnotmoving: - case concmd_respawnhitag: - case concmd_ifspritepal: - case concmd_ifangdiffl: - case concmd_ifnosounds: - case concmd_ifvarg: - case concmd_ifvarl: - case concmd_setvarvar: - case concmd_setvar: - case concmd_addvarvar: - case concmd_addvar: - case concmd_ifvarvarl: - case concmd_ifvarvarg: - case concmd_addlogvar: - case concmd_ifvare: - case concmd_ifvarvare: - case concmd_enda: - case concmd_break: - case concmd_ends: - case concmd_endevent: - case concmd_ifrnd: - case concmd_ifactornotstayput: - case concmd_ifsquished: - case concmd_ifdead: - case concmd_ifhitweapon: - case concmd_addstrength: - case concmd_strength: - case concmd_rndmove: - case concmd_tip: - case concmd_nullop: - case concmd_money: - case concmd_mail: - case concmd_sleeptime: - case concmd_paper: - case concmd_lotsofglass: - case concmd_killit: - case concmd_leftbrace: - case concmd_rightbrace: - case concmd_else: - case concmd_state: - case concmd_ifcanshoottarget: - case concmd_ifcanseetarget: - case concmd_ifnocover: - case concmd_ifcansee: - case concmd_ai: - case concmd_action: - case concmd_ifpdistl: - case concmd_ifpdistg: - case concmd_ifgotweaponce: - case concmd_getlastpal: - case concmd_tossweapon: - case concmd_mikesnd: - case concmd_pkick: - case concmd_sizeto: - case concmd_sizeat: - case concmd_addphealth: - case concmd_move: - case concmd_spawn: - case concmd_ifwasweapon: - case concmd_ifspawnedby: - case concmd_ifai: - case concmd_ifaction: - case concmd_ifactioncount: - case concmd_resetactioncount: - case concmd_debris: - case concmd_count: - case concmd_cstator: - case concmd_clipdist: - case concmd_cstat: - case concmd_ifmove: - case concmd_resetplayer: - case concmd_ifcoop: - - if (parse()) goto out; - if (killit_flag & 1) vm.flags |= VM_KILL; - if (killit_flag & 2) vm.flags |= VM_NOEXECUTE; - killit_flag = 0; - continue; - - default: // you aren't supposed to be here! - if (RR && ud.recstat == 2) - { - vm.flags |= VM_KILL; - return; - } - debug_break(); - G_GameExit("An error has occurred in the " GAMENAME " virtual machine.\n\n"); - break; - } + if (parse()) goto out; + if (killit_flag & 1) vm.flags |= VM_KILL; + if (killit_flag & 2) vm.flags |= VM_NOEXECUTE; + killit_flag = 0; + continue; } out: if (killit_flag & 1) vm.flags |= VM_KILL;