2019-11-20 16:21:32 +00:00
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
/*
|
|
|
|
Copyright (C) 2010-2019 EDuke32 developers and contributors
|
|
|
|
Copyright (C) 2019 sirlemonhead, Nuke.YKT
|
|
|
|
This file is part of PCExhumed.
|
|
|
|
PCExhumed 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.
|
|
|
|
*/
|
|
|
|
//-------------------------------------------------------------------------
|
2019-08-26 03:59:14 +00:00
|
|
|
|
2020-10-11 10:41:38 +00:00
|
|
|
#pragma once
|
2019-08-26 03:59:14 +00:00
|
|
|
|
2020-11-29 23:01:52 +00:00
|
|
|
#include "freelistarray.h"
|
2021-10-28 16:57:50 +00:00
|
|
|
#include "exhumedactor.h"
|
2019-08-26 03:59:14 +00:00
|
|
|
|
2021-10-18 21:53:37 +00:00
|
|
|
|
2019-11-22 23:11:37 +00:00
|
|
|
BEGIN_PS_NS
|
|
|
|
|
2021-10-18 21:53:37 +00:00
|
|
|
|
2020-08-18 07:52:08 +00:00
|
|
|
// anims
|
|
|
|
|
2022-05-19 20:28:41 +00:00
|
|
|
enum
|
|
|
|
{
|
|
|
|
kAnimFlag1 = (1 << 2),
|
|
|
|
kAnimLoop = (1 << 4)
|
|
|
|
};
|
|
|
|
|
2021-10-24 18:21:27 +00:00
|
|
|
void DestroyAnim(DExhumedActor* nAnim);
|
2023-04-15 22:11:01 +00:00
|
|
|
DExhumedActor* BuildAnim(DExhumedActor* actor, const FName seqFile, int seqIndex, const DVector3& pos, sectortype* pSector, double nScale, int nFlag);
|
2022-05-19 20:28:41 +00:00
|
|
|
void UnlinkIgnitedAnim(DExhumedActor* pActor);
|
2021-10-15 16:49:35 +00:00
|
|
|
void FuncAnim(int, int, int, int);
|
2021-10-24 17:18:11 +00:00
|
|
|
void BuildExplosion(DExhumedActor* actor);
|
2021-11-23 00:18:20 +00:00
|
|
|
void BuildSplash(DExhumedActor* actor, sectortype* pSector);
|
2021-10-24 17:18:11 +00:00
|
|
|
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// anubis
|
|
|
|
|
2022-09-07 07:48:05 +00:00
|
|
|
void BuildAnubis(DExhumedActor* nSprite, const DVector3& pos, sectortype* pSector, DAngle nAngle, uint8_t bIsDrummer);
|
2021-10-15 16:49:35 +00:00
|
|
|
void FuncAnubis(int, int a, int b, int c);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// bubbles
|
|
|
|
|
2021-10-18 21:53:37 +00:00
|
|
|
void BuildBubbleMachine(DExhumedActor* nSprite);
|
2020-08-18 07:52:08 +00:00
|
|
|
void DoBubbleMachines();
|
|
|
|
void DoBubbles(int nPlayer);
|
2021-10-15 16:49:35 +00:00
|
|
|
void FuncBubble(int, int, int, int);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// bullet
|
|
|
|
|
|
|
|
// 32 bytes
|
|
|
|
struct bulletInfo
|
|
|
|
{
|
2021-11-09 12:40:20 +00:00
|
|
|
int16_t nDamage; // 0
|
|
|
|
int16_t field_2; // 2
|
2020-08-18 07:52:08 +00:00
|
|
|
int field_4; // 4
|
2023-04-15 22:20:04 +00:00
|
|
|
FName initSeq; // 8
|
|
|
|
FName seqFile; // 10
|
2023-04-15 22:11:01 +00:00
|
|
|
FName animFile; // 12
|
2021-11-16 17:45:07 +00:00
|
|
|
int16_t nFlags;
|
|
|
|
int16_t nRadius; // damage radius
|
|
|
|
int16_t xyRepeat;
|
2020-08-18 07:52:08 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
extern bulletInfo BulletInfo[];
|
|
|
|
|
2021-11-21 19:13:19 +00:00
|
|
|
extern int nRadialBullet;
|
2021-11-22 22:40:53 +00:00
|
|
|
extern sectortype* lasthitsect;
|
2022-08-20 15:17:50 +00:00
|
|
|
extern DVector3 lasthit;
|
2021-10-21 13:02:18 +00:00
|
|
|
extern TArray<DExhumedActor*> EnergyBlocks;
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
void InitBullets();
|
2020-11-30 00:10:52 +00:00
|
|
|
int GrabBullet();
|
2021-11-21 18:24:46 +00:00
|
|
|
void DestroyBullet(int nRun);
|
|
|
|
int MoveBullet(int nBullet);
|
|
|
|
void SetBulletEnemy(int nBullet, DExhumedActor* nEnemy);
|
2022-09-09 19:33:12 +00:00
|
|
|
DExhumedActor* BuildBullet(DExhumedActor* pActor, int nType, double zofs, DAngle nAngle, DExhumedActor* pTarget, int val3, int horiz = 0);
|
2021-10-19 22:26:26 +00:00
|
|
|
|
2021-10-16 22:01:06 +00:00
|
|
|
void IgniteSprite(DExhumedActor* nSprite);
|
2021-10-15 16:49:35 +00:00
|
|
|
void FuncBullet(int, int, int, int);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// fish
|
|
|
|
|
2022-09-07 07:48:05 +00:00
|
|
|
void BuildFish(DExhumedActor* nSprite, const DVector3& pos, sectortype* pSector, DAngle nAngle);
|
2021-10-15 16:49:35 +00:00
|
|
|
void FuncFish(int, int, int, int);
|
2020-08-18 07:52:08 +00:00
|
|
|
void FuncFishLimb(int a, int b, int c);
|
|
|
|
|
|
|
|
// grenade
|
|
|
|
|
2020-10-11 11:14:32 +00:00
|
|
|
enum { kMaxGrenades = 50 };
|
2020-08-18 07:52:08 +00:00
|
|
|
|
2021-10-15 16:37:39 +00:00
|
|
|
void BuildGrenade(int nPlayer);
|
2022-09-27 04:12:16 +00:00
|
|
|
void ThrowGrenade(int nPlayer, double ecx, double push1);
|
2021-10-15 16:49:35 +00:00
|
|
|
void FuncGrenade(int, int, int, int);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// gun
|
|
|
|
|
2020-10-11 11:14:32 +00:00
|
|
|
enum { kMaxWeapons = 7 };
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
enum
|
|
|
|
{
|
|
|
|
kWeaponSword = 0,
|
|
|
|
kWeaponPistol,
|
|
|
|
kWeaponM60,
|
|
|
|
kWeaponFlamer,
|
|
|
|
kWeaponGrenade,
|
|
|
|
kWeaponStaff,
|
|
|
|
kWeaponRing,
|
|
|
|
kWeaponMummified
|
|
|
|
};
|
|
|
|
|
|
|
|
struct Weapon
|
|
|
|
{
|
2023-04-16 06:49:51 +00:00
|
|
|
FName nSeqFile;
|
2021-11-21 19:13:19 +00:00
|
|
|
int16_t b[12]; // seq offsets?
|
|
|
|
int16_t nAmmoType;
|
|
|
|
int16_t c;
|
|
|
|
int16_t d; // default or min ammo? or ammo used per 'shot' ?
|
|
|
|
int16_t bFireUnderwater;
|
2020-08-18 07:52:08 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
extern Weapon WeaponInfo[];
|
|
|
|
|
2021-11-16 17:50:02 +00:00
|
|
|
void RestoreMinAmmo(int nPlayer);
|
|
|
|
void FillWeapons(int nPlayer);
|
|
|
|
void ResetPlayerWeapons(int nPlayer);
|
2020-08-18 07:52:08 +00:00
|
|
|
void InitWeapons();
|
2021-11-21 18:24:46 +00:00
|
|
|
void SetNewWeapon(int nPlayer, int nWeapon);
|
|
|
|
void SetNewWeaponImmediate(int nPlayer, int nWeapon);
|
|
|
|
void SetNewWeaponIfBetter(int nPlayer, int nWeapon);
|
2021-11-16 17:50:02 +00:00
|
|
|
void SelectNewWeapon(int nPlayer);
|
|
|
|
void CheckClip(int nPlayer);
|
|
|
|
void MoveWeapons(int nPlayer);
|
2023-04-18 05:04:58 +00:00
|
|
|
void DrawWeapons(Player* const pPlayer, double interpfrac);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// items
|
|
|
|
|
|
|
|
enum
|
|
|
|
{
|
|
|
|
kItemHeart = 0,
|
|
|
|
kItemInvincibility,
|
|
|
|
kItemTorch,
|
|
|
|
kItemDoubleDamage,
|
|
|
|
kItemInvisibility,
|
|
|
|
kItemMask,
|
|
|
|
};
|
|
|
|
|
2021-11-21 19:13:19 +00:00
|
|
|
extern const int16_t nItemMagic[];
|
2020-08-18 07:52:08 +00:00
|
|
|
|
2021-10-21 07:50:00 +00:00
|
|
|
void BuildItemAnim(DExhumedActor* nSprite);
|
2020-08-18 07:52:08 +00:00
|
|
|
void ItemFlash();
|
2021-11-16 17:50:02 +00:00
|
|
|
void FillItems(int nPlayer);
|
|
|
|
void UseItem(int nPlayer, int nItem);
|
|
|
|
void UseCurItem(int nPlayer);
|
|
|
|
int GrabItem(int nPlayer, int nItem);
|
2021-10-21 08:20:08 +00:00
|
|
|
void DropMagic(DExhumedActor* actor);
|
2020-08-18 07:52:08 +00:00
|
|
|
void InitItems();
|
2021-10-21 08:20:08 +00:00
|
|
|
void StartRegenerate(DExhumedActor* nSprite);
|
2020-08-18 07:52:08 +00:00
|
|
|
void DoRegenerates();
|
|
|
|
|
|
|
|
// lavadude
|
|
|
|
|
2022-09-07 07:48:05 +00:00
|
|
|
void BuildLava(DExhumedActor* nSprite, const DVector3& pos, sectortype* pSector, DAngle nAngle, int nChannel);
|
2022-09-10 19:21:44 +00:00
|
|
|
DExhumedActor* BuildLavaLimb(DExhumedActor* nSprite, int edx, double ebx);
|
2021-10-15 16:49:35 +00:00
|
|
|
void FuncLavaLimb(int, int, int, int);
|
|
|
|
void FuncLava(int, int, int, int);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// lighting
|
|
|
|
|
|
|
|
|
|
|
|
void InitLights();
|
2022-08-20 14:19:07 +00:00
|
|
|
void AddFlash(sectortype* pSector, const DVector3& pos, int val);
|
2020-08-18 07:52:08 +00:00
|
|
|
void SetTorch(int nPlayer, int bTorchOnOff);
|
|
|
|
void UndoFlashes();
|
|
|
|
void DoLights();
|
2022-09-10 18:30:04 +00:00
|
|
|
void AddFlow(sectortype* pSect, int nSpeed, int b, DAngle ang = -minAngle);
|
|
|
|
void AddFlow(walltype* pWall, int nSpeed, int b);
|
2021-11-09 16:27:54 +00:00
|
|
|
void BuildFlash(int nPlayer, int nVal);
|
2021-11-23 00:18:20 +00:00
|
|
|
void AddGlow(sectortype* pSector, int nVal);
|
|
|
|
void AddFlicker(sectortype* pSector, int nVal);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
|
|
|
|
// lion
|
|
|
|
|
2022-09-07 07:48:05 +00:00
|
|
|
void BuildLion(DExhumedActor* nSprite, const DVector3& pos, sectortype* pSector, DAngle nAngle);
|
2021-10-15 16:49:35 +00:00
|
|
|
void FuncLion(int, int, int, int);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// move
|
|
|
|
|
|
|
|
// 16 bytes
|
|
|
|
struct BlockInfo
|
|
|
|
{
|
2021-12-07 17:53:02 +00:00
|
|
|
TObjPtr<DExhumedActor*> pActor;
|
2022-09-10 08:32:39 +00:00
|
|
|
DVector2 pos;
|
|
|
|
double mindist;
|
2020-08-18 07:52:08 +00:00
|
|
|
};
|
|
|
|
extern BlockInfo sBlockInfo[];
|
|
|
|
|
2021-10-21 21:41:54 +00:00
|
|
|
extern Collision hiHit;
|
2021-12-07 17:53:02 +00:00
|
|
|
extern TObjPtr<DExhumedActor*> nChunkSprite[];
|
|
|
|
extern TObjPtr<DExhumedActor*> nBodySprite[];
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
void MoveThings();
|
|
|
|
void InitChunks();
|
|
|
|
void InitPushBlocks();
|
2021-10-20 22:00:26 +00:00
|
|
|
void Gravity(DExhumedActor* actor);
|
2021-10-21 19:10:17 +00:00
|
|
|
DExhumedActor* UpdateEnemy(DExhumedActor** ppEnemy);
|
2021-10-21 18:25:15 +00:00
|
|
|
Collision MoveCreature(DExhumedActor* nSprite);
|
|
|
|
Collision MoveCreatureWithCaution(DExhumedActor* actor);
|
2022-08-20 13:42:53 +00:00
|
|
|
DVector3 WheresMyMouth(int nPlayer, sectortype** sectnum);
|
2022-09-10 19:24:40 +00:00
|
|
|
double GetActorHeight(DExhumedActor* nSprite);
|
2021-12-04 21:04:16 +00:00
|
|
|
DExhumedActor* insertActor(sectortype* s, int st);
|
2021-09-17 07:01:17 +00:00
|
|
|
DExhumedActor* GrabBody();
|
2021-09-17 13:33:07 +00:00
|
|
|
DExhumedActor* GrabBodyGunSprite();
|
2020-08-18 07:52:08 +00:00
|
|
|
void FuncCreatureChunk(int a, int, int nRun);
|
2021-10-21 18:06:49 +00:00
|
|
|
DExhumedActor* FindPlayer(DExhumedActor* nSprite, int nDistance, bool dontengage = false);
|
2021-10-17 13:15:33 +00:00
|
|
|
|
2023-04-17 00:38:34 +00:00
|
|
|
DExhumedActor* BuildCreatureChunk(DExhumedActor* pSrc, FTextureID nPic, bool bSpecial = false);
|
2022-09-10 22:02:17 +00:00
|
|
|
double PlotCourseToSprite(DExhumedActor* nSprite1, DExhumedActor* nSprite2);
|
2022-09-09 20:59:16 +00:00
|
|
|
void CheckSectorFloor(sectortype* pSector, double z, DVector2& xy);
|
2022-09-10 11:29:42 +00:00
|
|
|
void MoveSector(sectortype* pSector, DAngle nAngle, DVector2& vel);
|
2022-09-10 13:54:31 +00:00
|
|
|
Collision AngleChase(DExhumedActor* nSprite, DExhumedActor* nSprite2, int ebx, int ecx, DAngle push1);
|
2021-10-21 19:10:17 +00:00
|
|
|
void SetQuake(DExhumedActor* nSprite, int nVal);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// mummy
|
|
|
|
|
2020-10-11 11:14:32 +00:00
|
|
|
enum { kMaxMummies = 150 };
|
2020-08-18 07:52:08 +00:00
|
|
|
|
2022-09-07 07:48:05 +00:00
|
|
|
void BuildMummy(DExhumedActor* val, const DVector3& pos, sectortype* pSector, DAngle nAngle);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// object
|
|
|
|
|
|
|
|
enum kStatus
|
|
|
|
{
|
|
|
|
kStatDestructibleSprite = 97,
|
|
|
|
kStatAnubisDrum,
|
|
|
|
kStatExplodeTrigger = 141,
|
2021-10-18 21:53:37 +00:00
|
|
|
kStatExplodeTarget = 152,
|
|
|
|
kStatBubbleMachine = 1022,
|
|
|
|
|
2020-08-18 07:52:08 +00:00
|
|
|
};
|
|
|
|
|
2021-11-21 19:13:19 +00:00
|
|
|
extern int nFlashDepth;
|
|
|
|
extern int bTorch;
|
|
|
|
extern int nSmokeSparks;
|
|
|
|
extern int nDronePitch;
|
2020-08-18 07:52:08 +00:00
|
|
|
extern int lFinaleStart;
|
2021-12-07 17:53:02 +00:00
|
|
|
extern TObjPtr<DExhumedActor*> pFinaleSpr;
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
void InitObjects();
|
|
|
|
void InitElev();
|
|
|
|
void InitPoint();
|
|
|
|
void InitSlide();
|
|
|
|
void InitWallFace();
|
|
|
|
void DoDrips();
|
|
|
|
void DoMovingSects();
|
|
|
|
void DoFinale();
|
|
|
|
void PostProcess();
|
|
|
|
|
2021-10-15 16:49:35 +00:00
|
|
|
void FuncElev(int, int, int, int);
|
|
|
|
void FuncWallFace(int, int, int, int);
|
|
|
|
void FuncSlide(int, int, int, int);
|
|
|
|
void FuncObject(int, int, int, int);
|
|
|
|
void FuncTrap(int, int, int, int);
|
|
|
|
void FuncEnergyBlock(int, int, int, int);
|
|
|
|
void FuncSpark(int, int, int, int);
|
2021-11-23 00:18:20 +00:00
|
|
|
void SnapBobs(sectortype* pSectorA, sectortype* pSectorB);
|
|
|
|
DExhumedActor* FindWallSprites(sectortype* pSector);
|
|
|
|
void AddMovingSector(sectortype* pSector, int edx, int ebx, int ecx);
|
2021-10-21 16:28:06 +00:00
|
|
|
void ProcessTrailSprite(DExhumedActor* nSprite, int nLotag, int nHitag);
|
2021-11-23 00:18:20 +00:00
|
|
|
void AddSectorBob(sectortype* pSector, int nHitag, int bx);
|
2021-10-21 15:24:52 +00:00
|
|
|
DExhumedActor* BuildObject(DExhumedActor* nSprite, int nOjectType, int nHitag);
|
2021-10-21 11:09:29 +00:00
|
|
|
int BuildArrow(DExhumedActor* nSprite, int nVal);
|
|
|
|
int BuildFireBall(DExhumedActor*, int a, int b);
|
2021-10-21 16:28:06 +00:00
|
|
|
void BuildDrip(DExhumedActor* nSprite);
|
2021-11-23 00:18:20 +00:00
|
|
|
DExhumedActor* BuildEnergyBlock(sectortype* pSector);
|
|
|
|
int BuildElevC(int arg1, int nChannel, sectortype* pSector, DExhumedActor* nWallSprite, int arg5, int arg6, int nCount, ...);
|
|
|
|
int BuildElevF(int nChannel, sectortype* pSector, DExhumedActor* nWallSprite, int arg_4, int arg_5, int nCount, ...);
|
2022-12-09 23:29:25 +00:00
|
|
|
int BuildWallFace(int nChannel, walltype* pWall, FTextureID pic);
|
2021-11-22 18:32:47 +00:00
|
|
|
int BuildSlide(int nChannel, walltype* edx, walltype* ebx, walltype* ecx, walltype* arg1, walltype* arg2, walltype* arg3);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// queen
|
2020-02-04 21:45:10 +00:00
|
|
|
|
2020-08-18 07:52:08 +00:00
|
|
|
void InitQueens();
|
2022-09-07 07:48:05 +00:00
|
|
|
void BuildQueen(DExhumedActor* nSprite, const DVector3& pos, sectortype* pSector, DAngle nAngle, int nVal);
|
2021-10-15 16:49:35 +00:00
|
|
|
void FuncQueenEgg(int, int, int, int);
|
|
|
|
void FuncQueenHead(int, int, int, int);
|
|
|
|
void FuncQueen(int, int, int, int);
|
2019-08-26 03:59:14 +00:00
|
|
|
|
2020-08-18 07:52:08 +00:00
|
|
|
// ra
|
|
|
|
|
|
|
|
struct RA
|
|
|
|
{
|
2021-12-07 17:53:02 +00:00
|
|
|
TObjPtr<DExhumedActor*> pActor;
|
|
|
|
TObjPtr<DExhumedActor*> pTarget;
|
2021-12-30 09:30:21 +00:00
|
|
|
|
2021-11-21 19:13:19 +00:00
|
|
|
int16_t nAction;
|
2023-04-16 07:08:33 +00:00
|
|
|
uint16_t nFrame;
|
2021-11-21 19:13:19 +00:00
|
|
|
int16_t nRun;
|
|
|
|
int16_t nState;
|
2021-11-16 17:50:02 +00:00
|
|
|
int nPlayer;
|
2020-08-18 07:52:08 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
// ra
|
|
|
|
extern RA Ra[];
|
|
|
|
|
2021-11-16 17:50:02 +00:00
|
|
|
void FreeRa(int nPlayer);
|
|
|
|
void BuildRa(int nPlayer);
|
2020-08-18 07:52:08 +00:00
|
|
|
void InitRa();
|
2021-11-16 17:50:02 +00:00
|
|
|
void MoveRaToEnemy(int nPlayer);
|
2021-10-15 16:49:35 +00:00
|
|
|
void FuncRa(int, int, int, int);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// rat
|
|
|
|
|
|
|
|
void InitRats();
|
2022-09-07 07:48:05 +00:00
|
|
|
void BuildRat(DExhumedActor* nSprite, const DVector3& pos, sectortype* pSector, DAngle nAngle);
|
2021-10-15 16:49:35 +00:00
|
|
|
void FuncRat(int a, int, int b, int nRun);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// rex
|
|
|
|
|
2022-09-07 07:48:05 +00:00
|
|
|
void BuildRex(DExhumedActor* nSprite, const DVector3& pos, sectortype* pSector, DAngle nAngle, int nChannel);
|
2021-10-15 16:49:35 +00:00
|
|
|
void FuncRex(int, int, int, int);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// roach
|
|
|
|
|
2022-09-07 07:48:05 +00:00
|
|
|
void BuildRoach(int nType, DExhumedActor* nSprite, const DVector3& pos, sectortype* pSector, DAngle angle);
|
2021-10-15 16:49:35 +00:00
|
|
|
void FuncRoach(int a, int, int nDamage, int nRun);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// runlist
|
|
|
|
|
2020-10-11 11:14:32 +00:00
|
|
|
enum
|
|
|
|
{
|
|
|
|
kMaxRuns = 25600,
|
|
|
|
kMaxChannels = 4096
|
|
|
|
};
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
struct RunStruct
|
|
|
|
{
|
2021-10-17 14:22:25 +00:00
|
|
|
int nAIType; // todo later: replace this with an AI pointer
|
|
|
|
int nObjIndex; // If object is a non-actor / not refactored yet.
|
2021-12-07 17:53:02 +00:00
|
|
|
TObjPtr<DExhumedActor*> pObjActor; // If object is an actor
|
2021-11-21 19:13:19 +00:00
|
|
|
int next;
|
|
|
|
int prev;
|
2020-08-18 07:52:08 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct RunChannel
|
|
|
|
{
|
2021-11-21 19:13:19 +00:00
|
|
|
int16_t a;
|
|
|
|
int16_t b;
|
|
|
|
int16_t c;
|
|
|
|
int16_t d;
|
2020-08-18 07:52:08 +00:00
|
|
|
};
|
|
|
|
|
2021-09-08 20:08:55 +00:00
|
|
|
|
|
|
|
struct RunListEvent
|
|
|
|
{
|
2021-10-28 16:57:50 +00:00
|
|
|
int nMessage;
|
2021-10-17 14:22:25 +00:00
|
|
|
int nParam; // mostly the player, sometimes the channel list
|
|
|
|
int nObjIndex;
|
|
|
|
DExhumedActor* pObjActor;
|
2021-09-08 20:08:55 +00:00
|
|
|
tspritetype* pTSprite; // for the draw event
|
2021-10-17 14:22:25 +00:00
|
|
|
DExhumedActor* pOtherActor; // for the damage event, radialSpr for radial damage - owner will not be passed as it can be retrieved from this.
|
2021-09-08 20:08:55 +00:00
|
|
|
int nDamage, nRun;
|
|
|
|
|
|
|
|
int nRadialDamage; // Radial damage needs a bit more info.
|
2022-09-09 16:37:10 +00:00
|
|
|
double nDamageRadius;
|
2021-10-26 22:30:57 +00:00
|
|
|
DExhumedActor* pRadialActor;
|
2021-10-28 16:08:03 +00:00
|
|
|
|
2021-10-28 16:57:50 +00:00
|
|
|
bool isRadialEvent() const { return nMessage == 1; }
|
2021-09-08 20:08:55 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct ExhumedAI
|
|
|
|
{
|
2021-10-15 19:06:53 +00:00
|
|
|
//virtual ~ExhumedAI() = default;
|
2021-09-08 20:08:55 +00:00
|
|
|
virtual void ProcessChannel(RunListEvent* ev) {}
|
|
|
|
virtual void Tick(RunListEvent* ev) {}
|
|
|
|
virtual void Process(RunListEvent* ev) {}
|
|
|
|
virtual void Use(RunListEvent* ev) {}
|
|
|
|
virtual void TouchFloor(RunListEvent* ev) {}
|
|
|
|
virtual void LeaveSector(RunListEvent* ev) {}
|
|
|
|
virtual void EnterSector(RunListEvent* ev) {}
|
|
|
|
virtual void Damage(RunListEvent* ev) {}
|
|
|
|
virtual void Draw(RunListEvent* ev) {}
|
|
|
|
virtual void RadialDamage(RunListEvent* ev) {}
|
|
|
|
};
|
|
|
|
|
2021-10-15 19:06:53 +00:00
|
|
|
struct AIAnim : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
2021-10-15 19:07:33 +00:00
|
|
|
struct AIAnubis : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
void RadialDamage(RunListEvent* ev) override;
|
|
|
|
void Damage(RunListEvent* ev) override;
|
|
|
|
};
|
2021-10-15 19:06:53 +00:00
|
|
|
|
2021-10-15 19:07:58 +00:00
|
|
|
struct AIBubble : ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
2021-10-15 19:10:16 +00:00
|
|
|
class AIBullet : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
2021-10-15 19:17:25 +00:00
|
|
|
struct AIFish : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Damage(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
void RadialDamage(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
|
|
|
class AIFishLimb : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
2021-10-15 19:20:28 +00:00
|
|
|
struct AIGrenade : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
void RadialDamage(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
2021-10-15 19:25:17 +00:00
|
|
|
struct AILavaDude : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Damage(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct AILavaDudeLimb : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
2021-10-15 19:29:24 +00:00
|
|
|
struct AILion : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Damage(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
void RadialDamage(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
2021-10-15 19:58:07 +00:00
|
|
|
struct AICreatureChunk : public ExhumedAI
|
|
|
|
{
|
|
|
|
virtual void Tick(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
2021-10-15 20:02:06 +00:00
|
|
|
struct AIMummy : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Damage(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
void RadialDamage(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
2021-10-15 20:13:05 +00:00
|
|
|
struct AIElev : public ExhumedAI
|
|
|
|
{
|
|
|
|
void ProcessChannel(RunListEvent* ev) override;
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct AIWallFace : public ExhumedAI
|
|
|
|
{
|
|
|
|
void ProcessChannel(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct AISlide : public ExhumedAI
|
|
|
|
{
|
|
|
|
void ProcessChannel(RunListEvent* ev) override;
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct AITrap : public ExhumedAI
|
|
|
|
{
|
|
|
|
void ProcessChannel(RunListEvent* ev) override;
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct AISpark : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct AIEnergyBlock : public ExhumedAI
|
|
|
|
{
|
|
|
|
virtual void Damage(RunListEvent* ev) override;
|
|
|
|
virtual void RadialDamage(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct AIObject : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Damage(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
void RadialDamage(RunListEvent* ev) override;
|
|
|
|
};
|
2021-10-15 19:06:53 +00:00
|
|
|
|
2021-10-15 20:19:07 +00:00
|
|
|
struct AIPlayer : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Damage(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
void RadialDamage(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
2021-10-15 20:55:03 +00:00
|
|
|
struct AIQueenEgg : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Damage(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
void RadialDamage(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct AIQueenHead : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Damage(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
void RadialDamage(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct AIQueen : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Damage(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
void RadialDamage(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
2021-10-15 20:55:44 +00:00
|
|
|
struct AIRa : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
2021-10-15 21:00:02 +00:00
|
|
|
struct AIRat : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Damage(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
void RadialDamage(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
2021-10-15 21:03:09 +00:00
|
|
|
struct AIRex : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Damage(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
void RadialDamage(RunListEvent* ev) override;
|
|
|
|
};
|
2021-10-15 21:00:02 +00:00
|
|
|
|
2021-10-15 21:07:38 +00:00
|
|
|
struct AIRoach : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Damage(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
void RadialDamage(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
2021-10-15 21:13:28 +00:00
|
|
|
struct AIScorp : public ExhumedAI
|
|
|
|
{
|
2021-10-18 16:57:16 +00:00
|
|
|
void Effect(RunListEvent* ev, DExhumedActor* nTarget, int mode);
|
2021-10-15 21:13:28 +00:00
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Damage(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
void RadialDamage(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
2021-10-15 21:18:58 +00:00
|
|
|
struct AISet : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Damage(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
void RadialDamage(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct AISoul : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
2021-10-15 21:31:00 +00:00
|
|
|
struct AISnake : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
2021-10-15 21:25:20 +00:00
|
|
|
struct AISpider : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Damage(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
void RadialDamage(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
2021-10-15 21:29:25 +00:00
|
|
|
struct AIWasp : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Damage(RunListEvent* ev) override;
|
|
|
|
void Draw(RunListEvent* ev) override;
|
|
|
|
void RadialDamage(RunListEvent* ev) override;
|
|
|
|
};
|
2021-10-15 21:18:58 +00:00
|
|
|
|
2021-10-15 21:40:02 +00:00
|
|
|
struct AISWReady : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Process(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct AISWPause : public ExhumedAI
|
|
|
|
{
|
|
|
|
void ProcessChannel(RunListEvent* ev) override;
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Process(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct AISWStepOn : public ExhumedAI
|
|
|
|
{
|
|
|
|
void ProcessChannel(RunListEvent* ev) override;
|
|
|
|
void TouchFloor(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct AISWNotOnPause : public ExhumedAI
|
|
|
|
{
|
|
|
|
void ProcessChannel(RunListEvent* ev) override;
|
|
|
|
void Tick(RunListEvent* ev) override;
|
|
|
|
void Process(RunListEvent* ev) override;
|
|
|
|
void TouchFloor(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct AISWPressSector : public ExhumedAI
|
|
|
|
{
|
|
|
|
void ProcessChannel(RunListEvent* ev) override;
|
|
|
|
void Use(RunListEvent* ev) override;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct AISWPressWall : public ExhumedAI
|
|
|
|
{
|
|
|
|
void Process(RunListEvent* ev) override;
|
|
|
|
void Use(RunListEvent* ev) override;
|
|
|
|
};
|
2021-10-15 21:18:58 +00:00
|
|
|
|
2021-09-08 20:08:55 +00:00
|
|
|
|
2021-10-15 16:49:35 +00:00
|
|
|
typedef void(*AiFunc)(int, int, int, int nRun);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
2020-11-29 23:23:57 +00:00
|
|
|
extern FreeListArray<RunStruct, kMaxRuns> RunData;
|
2021-10-15 19:06:53 +00:00
|
|
|
|
2020-08-18 07:52:08 +00:00
|
|
|
extern RunChannel sRunChannels[kMaxChannels];
|
2021-11-21 19:13:19 +00:00
|
|
|
extern int NewRun;
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
void runlist_InitRun();
|
|
|
|
|
|
|
|
int runlist_GrabRun();
|
|
|
|
int runlist_FreeRun(int nRun);
|
2021-10-17 14:22:25 +00:00
|
|
|
int runlist_AddRunRec(int index, int object, int aitype);
|
|
|
|
int runlist_AddRunRec(int index, DExhumedActor* object, int aitype);
|
|
|
|
int runlist_AddRunRec(int index, RunStruct* other);
|
2020-08-18 07:52:08 +00:00
|
|
|
int runlist_HeadRun();
|
|
|
|
void runlist_InitChan();
|
2021-11-21 19:13:19 +00:00
|
|
|
void runlist_ChangeChannel(int eax, int dx);
|
|
|
|
void runlist_ReadyChannel(int eax);
|
2021-11-22 22:56:36 +00:00
|
|
|
void runlist_ProcessSectorTag(sectortype* pSector, int nLotag, int nHitag);
|
2020-08-18 07:52:08 +00:00
|
|
|
int runlist_AllocChannel(int a);
|
|
|
|
void runlist_DoSubRunRec(int RunPtr);
|
|
|
|
void runlist_SubRunRec(int RunPtr);
|
2021-11-22 17:22:38 +00:00
|
|
|
void runlist_ProcessWallTag(walltype* pWall, int nLotag, int nHitag);
|
2021-10-22 16:08:41 +00:00
|
|
|
int runlist_CheckRadialDamage(DExhumedActor* actor);
|
2021-11-21 19:13:19 +00:00
|
|
|
void runlist_RadialDamageEnemy(DExhumedActor* pActor, int nDamage, int nRadius);
|
|
|
|
void runlist_DamageEnemy(DExhumedActor* nSprite, DExhumedActor* nSprite2, int nDamage);
|
2021-10-28 16:57:50 +00:00
|
|
|
void runlist_SignalRun(int NxtPtr, int edx, void(ExhumedAI::* func)(RunListEvent*), RunListEvent* ev = nullptr);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
void runlist_CleanRunRecs();
|
|
|
|
void runlist_ExecObjects();
|
|
|
|
|
|
|
|
// scorp
|
|
|
|
|
2022-09-07 07:48:05 +00:00
|
|
|
void BuildScorp(DExhumedActor* nSprite, const DVector3& pos, sectortype* pSector, DAngle nAngle, int nChannel);
|
2021-10-15 16:49:35 +00:00
|
|
|
void FuncScorp(int, int, int, int);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// set
|
|
|
|
|
2022-09-07 07:48:05 +00:00
|
|
|
void BuildSet(DExhumedActor* nSprite, const DVector3& pos, sectortype* pSector, DAngle nAngle, int nChannel);
|
2021-10-15 16:49:35 +00:00
|
|
|
void FuncSoul(int, int, int, int);
|
|
|
|
void FuncSet(int, int, int, int);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// snake
|
|
|
|
|
2020-10-11 11:14:32 +00:00
|
|
|
enum { kSnakeSprites = 8 }; // or rename to kSnakeParts?
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// 32bytes
|
|
|
|
struct Snake
|
|
|
|
{
|
2021-12-07 17:53:02 +00:00
|
|
|
TObjPtr<DExhumedActor*> pEnemy; // nRun
|
|
|
|
TObjPtr<DExhumedActor*> pSprites[kSnakeSprites];
|
2020-08-18 07:52:08 +00:00
|
|
|
|
2021-11-21 19:13:19 +00:00
|
|
|
int16_t nCountdown;
|
|
|
|
int16_t nRun;
|
2020-08-18 07:52:08 +00:00
|
|
|
|
2021-11-09 16:46:10 +00:00
|
|
|
uint8_t c[8];
|
2021-11-21 19:13:19 +00:00
|
|
|
int16_t nAngle;
|
|
|
|
int16_t nSnakePlayer;
|
2020-08-18 07:52:08 +00:00
|
|
|
};
|
|
|
|
|
2020-11-29 23:18:32 +00:00
|
|
|
enum { kMaxSnakes = 50 };
|
|
|
|
|
|
|
|
extern FreeListArray<Snake, kMaxSnakes> SnakeList;
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
void InitSnakes();
|
2021-11-21 19:13:19 +00:00
|
|
|
int GrabSnake();
|
2022-09-10 20:16:37 +00:00
|
|
|
void BuildSnake(int nPlayer, double zVal);
|
2021-10-15 16:49:35 +00:00
|
|
|
void FuncSnake(int, int, int, int);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// spider
|
|
|
|
|
2022-09-07 07:48:05 +00:00
|
|
|
DExhumedActor* BuildSpider(DExhumedActor* nSprite, const DVector3& pos, sectortype* pSector, DAngle nAngle);
|
2021-10-15 16:49:35 +00:00
|
|
|
void FuncSpider(int a, int, int b, int nRun);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// switch
|
|
|
|
|
|
|
|
void InitLink();
|
|
|
|
void InitSwitch();
|
|
|
|
|
2021-10-15 16:49:35 +00:00
|
|
|
void FuncSwReady(int, int, int, int);
|
|
|
|
void FuncSwPause(int, int, int, int);
|
|
|
|
void FuncSwStepOn(int, int, int, int);
|
|
|
|
void FuncSwNotOnPause(int, int, int, int);
|
|
|
|
void FuncSwPressSector(int, int, int, int);
|
|
|
|
void FuncSwPressWall(int, int, int, int);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
2021-10-15 16:37:39 +00:00
|
|
|
std::pair<int, int> BuildSwPause(int nChannel, int nLink, int ebx);
|
2021-11-23 00:18:20 +00:00
|
|
|
std::pair<int, int> BuildSwNotOnPause(int nChannel, int nLink, sectortype* pSector, int ecx);
|
2020-08-18 07:52:08 +00:00
|
|
|
int BuildLink(int nCount, ...);
|
2021-11-23 00:18:20 +00:00
|
|
|
std::pair<int, int> BuildSwPressSector(int nChannel, int nLink, sectortype* pSector, int ecx);
|
|
|
|
std::pair<int, int> BuildSwStepOn(int nChannel, int nLink, sectortype* pSector);
|
2021-11-16 17:45:07 +00:00
|
|
|
std::pair<int, int> BuildSwReady(int nChannel, int nLink);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
2021-11-22 17:22:38 +00:00
|
|
|
std::pair<int, int> BuildSwPressWall(int nChannel, int nLink, walltype* pWall);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// wasp
|
|
|
|
|
2022-09-07 07:48:05 +00:00
|
|
|
DExhumedActor* BuildWasp(DExhumedActor* nSprite, const DVector3& pos, sectortype* pSector, DAngle nAngle, bool bEggWasp);
|
2021-10-15 16:49:35 +00:00
|
|
|
void FuncWasp(int eax, int, int edx, int nRun);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-10-11 11:14:32 +00:00
|
|
|
enum { kMessageMask = 0x7F0000 };
|
2020-08-18 07:52:08 +00:00
|
|
|
inline int GrabTimeSlot(int nVal) { return -1; }
|
2021-02-27 13:05:55 +00:00
|
|
|
inline int dmgAdjust(int dmg, int fact = 2) { return dmg; }
|
|
|
|
inline bool easy() { return false; }
|
2019-08-26 03:59:14 +00:00
|
|
|
|
2019-11-22 23:11:37 +00:00
|
|
|
END_PS_NS
|
|
|
|
|