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
|
|
|
|
|
|
|
|
void InitAnims();
|
2021-10-24 18:21:27 +00:00
|
|
|
void DestroyAnim(DExhumedActor* nAnim);
|
2021-11-22 22:35:11 +00:00
|
|
|
DExhumedActor* BuildAnim(DExhumedActor* actor, int val, int val2, int x, int y, int z, sectortype* pSector, int nRepeat, int nFlag);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
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-22 21:38:27 +00:00
|
|
|
void BuildSplash(DExhumedActor* actor, sectortype* nSector);
|
2021-10-24 17:18:11 +00:00
|
|
|
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// anubis
|
|
|
|
|
2021-10-17 16:23:42 +00:00
|
|
|
void BuildAnubis(DExhumedActor* nSprite, int x, int y, int z, int nSector, int 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
|
2021-11-16 17:45:07 +00:00
|
|
|
int16_t field_8; // 8
|
|
|
|
int16_t nSeq; // 10
|
|
|
|
int16_t field_C; // 12
|
|
|
|
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;
|
2020-08-18 07:52:08 +00:00
|
|
|
extern int lasthitz;
|
|
|
|
extern int lasthitx;
|
|
|
|
extern int lasthity;
|
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);
|
2021-10-19 22:26:26 +00:00
|
|
|
DExhumedActor* BuildBullet(DExhumedActor* pActor, int nType, int val1, int nAngle, DExhumedActor* pTarget, int val3);
|
|
|
|
|
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);
|
2021-11-16 17:41:34 +00:00
|
|
|
void BackUpBullet(int *x, int *y, int nAngle);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// fish
|
|
|
|
|
2021-10-23 11:02:43 +00:00
|
|
|
void BuildFish(DExhumedActor* nSprite, int x, int y, int z, int nSector, int 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);
|
2021-11-16 17:50:02 +00:00
|
|
|
void ThrowGrenade(int nPlayer, int edx, int ebx, int ecx, int 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
|
|
|
|
{
|
2021-11-21 19:13:19 +00:00
|
|
|
int16_t nSeq;
|
|
|
|
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-21 19:13:19 +00:00
|
|
|
extern int16_t nTemperature[];
|
2020-08-18 07:52:08 +00:00
|
|
|
|
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 StopFiringWeapon(int nPlayer);
|
|
|
|
void FireWeapon(int nPlayer);
|
|
|
|
void CheckClip(int nPlayer);
|
|
|
|
void MoveWeapons(int nPlayer);
|
2020-08-24 03:22:52 +00:00
|
|
|
void DrawWeapons(double smooth);
|
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
|
|
|
|
|
2021-11-16 17:41:34 +00:00
|
|
|
void BuildLava(DExhumedActor* nSprite, int x, int y, int z, int nSector, int nAngle, int nChannel);
|
2021-10-17 19:06:56 +00:00
|
|
|
DExhumedActor* BuildLavaLimb(DExhumedActor* nSprite, int edx, int 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();
|
2021-11-22 17:51:22 +00:00
|
|
|
void AddFlash(sectortype* pSector, int x, int y, int z, int val);
|
2020-08-18 07:52:08 +00:00
|
|
|
void SetTorch(int nPlayer, int bTorchOnOff);
|
|
|
|
void UndoFlashes();
|
|
|
|
void DoLights();
|
2021-11-22 17:22:38 +00:00
|
|
|
void AddFlow(sectortype* pSect, int nSpeed, int b, int ang = -1);
|
|
|
|
void AddFlow(walltype* pWall, int nSpeed, int b, int ang = -1);
|
2021-11-09 16:27:54 +00:00
|
|
|
void BuildFlash(int nPlayer, int nVal);
|
2021-11-22 18:08:49 +00:00
|
|
|
void AddGlow(sectortype* nSector, int nVal);
|
2021-11-22 18:14:26 +00:00
|
|
|
void AddFlicker(sectortype* nSector, int nVal);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
|
|
|
|
// lion
|
|
|
|
|
2021-11-16 17:41:34 +00:00
|
|
|
void BuildLion(DExhumedActor* nSprite, int x, int y, int z, int nSector, int 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-10-22 15:45:06 +00:00
|
|
|
DExhumedActor* pActor;
|
2020-08-18 07:52:08 +00:00
|
|
|
int x;
|
|
|
|
int y;
|
|
|
|
int field_8;
|
|
|
|
};
|
|
|
|
extern BlockInfo sBlockInfo[];
|
|
|
|
|
2021-10-21 21:41:54 +00:00
|
|
|
extern Collision hiHit;
|
2021-09-17 07:24:14 +00:00
|
|
|
extern DExhumedActor* nChunkSprite[];
|
2021-09-17 07:01:17 +00:00
|
|
|
extern DExhumedActor* nBodySprite[];
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
signed int lsqrt(int a1);
|
|
|
|
void MoveThings();
|
|
|
|
void ResetMoveFifo();
|
|
|
|
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);
|
2021-11-22 22:35:11 +00:00
|
|
|
void WheresMyMouth(int nPlayer, vec3_t* pos, sectortype** sectnum);
|
2021-10-15 22:31:28 +00:00
|
|
|
int GetActorHeight(DExhumedActor* nSprite);
|
|
|
|
DExhumedActor* insertActor(int, int);
|
2021-11-22 18:32:47 +00:00
|
|
|
inline DExhumedActor* insertActor(sectortype* s, int st)
|
|
|
|
{
|
|
|
|
return insertActor(sector.IndexOf(s), 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 CreatePushBlock(int nSector);
|
|
|
|
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
|
|
|
|
2021-10-21 19:10:17 +00:00
|
|
|
DExhumedActor* BuildCreatureChunk(DExhumedActor* pSrc, int nPic, bool bSpecial = false);
|
2020-08-18 07:52:08 +00:00
|
|
|
void BuildNear(int x, int y, int walldist, int nSector);
|
2021-10-21 18:06:49 +00:00
|
|
|
int PlotCourseToSprite(DExhumedActor* nSprite1, DExhumedActor* nSprite2);
|
2021-11-09 16:27:54 +00:00
|
|
|
void CheckSectorFloor(int nSector, int z, int *x, int *y);
|
2021-10-20 21:02:23 +00:00
|
|
|
int GetAngleToSprite(DExhumedActor* nSprite1, DExhumedActor* nSprite2);
|
2021-11-22 21:20:53 +00:00
|
|
|
int GetWallNormal(walltype* nWall);
|
2021-10-21 18:06:49 +00:00
|
|
|
int GetUpAngle(DExhumedActor* nSprite1, int nVal, DExhumedActor* nSprite2, int ecx);
|
2021-11-22 20:03:10 +00:00
|
|
|
void MoveSector(sectortype* pSector, int nAngle, int *nXVel, int *nYVel);
|
2021-10-21 17:57:46 +00:00
|
|
|
Collision AngleChase(DExhumedActor* nSprite, DExhumedActor* nSprite2, int ebx, int ecx, int 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
|
|
|
|
2021-10-17 23:05:38 +00:00
|
|
|
void BuildMummy(DExhumedActor* val, int x, int y, int z, int nSector, int nAngle);
|
2020-08-18 07:52:08 +00:00
|
|
|
void FuncMummy(int nSector, int edx, int nRun);
|
|
|
|
|
|
|
|
// 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-10-21 11:20:00 +00:00
|
|
|
extern 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-22 22:40:53 +00:00
|
|
|
void SnapBobs(sectortype* nSectorA, sectortype* nSectorB);
|
2021-11-09 16:27:54 +00:00
|
|
|
DExhumedActor* FindWallSprites(int nSector);
|
2020-08-18 07:52:08 +00:00
|
|
|
void AddMovingSector(int nSector, int edx, int ebx, int ecx);
|
2021-10-21 16:28:06 +00:00
|
|
|
void ProcessTrailSprite(DExhumedActor* nSprite, int nLotag, int nHitag);
|
2021-11-22 22:40:53 +00:00
|
|
|
void AddSectorBob(sectortype* nSector, 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-09 16:27:54 +00:00
|
|
|
DExhumedActor* BuildEnergyBlock(int nSector);
|
2021-11-22 22:45:19 +00:00
|
|
|
int BuildElevC(int arg1, int nChannel, sectortype* nSector, DExhumedActor* nWallSprite, int arg5, int arg6, int nCount, ...);
|
|
|
|
int BuildElevF(int nChannel, sectortype* nSector, DExhumedActor* nWallSprite, int arg_4, int arg_5, int nCount, ...);
|
2021-11-22 17:22:38 +00:00
|
|
|
int BuildWallFace(int nChannel, walltype* pWall, int nCount, ...);
|
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();
|
2021-10-26 19:10:51 +00:00
|
|
|
void BuildQueen(DExhumedActor* nSprite, int x, int y, int z, int nSector, int 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-10-19 13:06:46 +00:00
|
|
|
DExhumedActor* pActor;
|
|
|
|
DExhumedActor* pTarget;
|
|
|
|
|
2021-11-21 19:13:19 +00:00
|
|
|
int16_t nAction;
|
|
|
|
int16_t nFrame;
|
|
|
|
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();
|
2021-11-09 16:27:54 +00:00
|
|
|
void BuildRat(DExhumedActor* nSprite, int x, int y, int z, int nSector, int 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
|
|
|
|
|
2021-11-16 17:41:34 +00:00
|
|
|
void BuildRex(DExhumedActor* nSprite, int x, int y, int z, int nSector, int 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
|
|
|
|
|
2021-11-09 16:27:54 +00:00
|
|
|
void BuildRoach(int nType, DExhumedActor* nSprite, int x, int y, int z, int nSector, int 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.
|
|
|
|
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.
|
|
|
|
int 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);
|
2020-08-18 07:52:08 +00:00
|
|
|
void runlist_ProcessSectorTag(int nSector, int nLotag, int nHitag);
|
|
|
|
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
|
|
|
|
|
2021-11-16 17:41:34 +00:00
|
|
|
void BuildScorp(DExhumedActor* nSprite, int x, int y, int z, int nSector, int 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
|
|
|
|
|
2021-11-16 17:41:34 +00:00
|
|
|
void BuildSet(DExhumedActor* nSprite, int x, int y, int z, int nSector, int 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-10-19 09:19:50 +00:00
|
|
|
DExhumedActor* pEnemy; // nRun
|
|
|
|
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();
|
|
|
|
void BuildSnake(int nPlayer, int zVal);
|
2021-10-15 16:49:35 +00:00
|
|
|
void FuncSnake(int, int, int, int);
|
2020-08-18 07:52:08 +00:00
|
|
|
|
|
|
|
// spider
|
|
|
|
|
2021-11-09 16:27:54 +00:00
|
|
|
DExhumedActor* BuildSpider(DExhumedActor* nSprite, int x, int y, int z, int nSector, int 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-22 20:37:33 +00:00
|
|
|
std::pair<int, int> BuildSwNotOnPause(int nChannel, int nLink, sectortype* nSector, int ecx);
|
2020-08-18 07:52:08 +00:00
|
|
|
int BuildLink(int nCount, ...);
|
2021-11-22 20:37:33 +00:00
|
|
|
std::pair<int, int> BuildSwPressSector(int nChannel, int nLink, sectortype* nSector, int ecx);
|
|
|
|
std::pair<int, int> BuildSwStepOn(int nChannel, int nLink, sectortype* nSector);
|
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
|
|
|
|
|
2021-11-16 17:41:34 +00:00
|
|
|
DExhumedActor* BuildWasp(DExhumedActor* nSprite, int x, int y, int z, int nSector, int 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
|
|
|
|
|