- first half of AI code fully cleaned up (except owner)

This commit is contained in:
Christoph Oelckers 2021-11-14 19:25:25 +01:00
parent 04218f4f89
commit 758bf78c81
22 changed files with 114 additions and 139 deletions

View file

@ -9,8 +9,8 @@ Enemy enemy[MAXTYPES];
int checksight_ang = 0;
void skeletonChill(PLAYER& plr, DWHActor* i);
void goblinChill(PLAYER& plr, DWHActor* i);
void skeletonChill(PLAYER& plr, DWHActor* actor);
void goblinChill(PLAYER& plr, DWHActor* actor);
void createDemonAI();
@ -640,8 +640,8 @@ void castspell(PLAYER& plr, DWHActor* actor) {
spawned.backuploc();
}
void skullycastspell(PLAYER& plr, int i) {
auto& spr = sprite[i];
void skullycastspell(PLAYER& plr, DWHActor* actor) {
auto& spr = actor->s();
auto spawnedactor = InsertActor(spr.sectnum, MISSILE);
auto& spawned = spawnedactor->s();
@ -669,7 +669,7 @@ void skullycastspell(PLAYER& plr, int i) {
discrim = 1;
spawned.zvel = (short)(((plr.z + (48 << 8) - spawned.z) << 7) / discrim);
spawned.owner = (short)i;
spawned.owner = actor->GetSpriteIndex();
spawned.clipdist = 16;
spawned.lotag = 512;
spawned.hitag = 0;

View file

@ -121,19 +121,19 @@ extern int checksight_ang;
void aiProcess();
Collision aimove(DWHActor* actor);
Collision aifly(DWHActor* i);
void aisearch(PLAYER& plr, DWHActor* i, boolean fly);
boolean checksector6(DWHActor* i);
int checkfluid(DWHActor* i, Collision& florhit);
void processfluid(DWHActor* i, Collision& florHit, boolean fly);
void castspell(PLAYER& plr, DWHActor* i);
void skullycastspell(PLAYER& plr, int i);
void attack(PLAYER& plr, DWHActor* i);
Collision aifly(DWHActor* actor);
void aisearch(PLAYER& plr, DWHActor* actor, boolean fly);
boolean checksector6(DWHActor* actor);
int checkfluid(DWHActor* actor, Collision& florhit);
void processfluid(DWHActor* actor, Collision& florHit, boolean fly);
void castspell(PLAYER& plr, DWHActor* actor);
void skullycastspell(PLAYER& plr, DWHActor*);
void attack(PLAYER& plr, DWHActor* actor);
int checkmove(DWHActor* actor, int dax, int day);
boolean checkdist(PLAYER& plr, DWHActor* i);
boolean checkdist(DWHActor* i, int x, int y, int z);
boolean checkdist(PLAYER& plr, DWHActor* actor);
boolean checkdist(DWHActor* actor, int x, int y, int z);
extern int checksight_ang;
boolean checksight(PLAYER& plr, DWHActor* i);
boolean checksight(PLAYER& plr, DWHActor* actor);
void monsterweapon(int i);
PLAYER* aiGetPlayerTarget(short i);
boolean actoruse(short i);
@ -141,28 +141,28 @@ boolean actoruse(short i);
void initAI();
void aiInit();
void premapDemon(DWHActor* i);
void premapDevil(DWHActor* i);
void premapDragon(DWHActor* i);
void premapFatwitch(DWHActor* i);
void premapFish(DWHActor* i);
void premapFred(DWHActor* i);
void premapGoblin(DWHActor* i);
void premapGonzo(DWHActor* i);
void premapGron(DWHActor* i);
void premapGuardian(DWHActor* i);
void premapImp(DWHActor* i);
void premapJudy(DWHActor* i);
void premapKatie(DWHActor* i);
void premapKobold(DWHActor* i);
void premapKurt(DWHActor* i);
void premapMinotaur(DWHActor* i);
void premapNewGuy(DWHActor* i);
void premapRat(DWHActor* i);
void premapSkeleton(DWHActor* i);
void premapSkully(DWHActor* i);
void premapSpider(DWHActor* i);
void premapWillow(DWHActor* i);
void premapDemon(DWHActor* actor);
void premapDevil(DWHActor* actor);
void premapDragon(DWHActor* actor);
void premapFatwitch(DWHActor* actor);
void premapFish(DWHActor* actor);
void premapFred(DWHActor* actor);
void premapGoblin(DWHActor* actor);
void premapGonzo(DWHActor* actor);
void premapGron(DWHActor* actor);
void premapGuardian(DWHActor* actor);
void premapImp(DWHActor* actor);
void premapJudy(DWHActor* actor);
void premapKatie(DWHActor* actor);
void premapKobold(DWHActor* actor);
void premapKurt(DWHActor* actor);
void premapMinotaur(DWHActor* actor);
void premapNewGuy(DWHActor* actor);
void premapRat(DWHActor* actor);
void premapSkeleton(DWHActor* actor);
void premapSkully(DWHActor* actor);
void premapSpider(DWHActor* actor);
void premapWillow(DWHActor* actor);
void deaddude(short sn);

View file

@ -71,7 +71,6 @@ static void chasedragon(PLAYER& plr, DWHActor* actor)
static void fleedragon(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
spr.lotag -= TICSPERFRAME;
@ -126,7 +125,6 @@ static void diedragon(PLAYER& plr, DWHActor* actor)
static void castdragon(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
spr.lotag -= TICSPERFRAME;
@ -262,7 +260,6 @@ static void nukeddragon(PLAYER& plr, DWHActor* actor)
static void paindragon(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
spr.lotag -= TICSPERFRAME;
@ -319,7 +316,6 @@ void dragonProcess(PLAYER& plr)
static void dragonAttack2(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
spr.lotag -= TICSPERFRAME;

View file

@ -3,7 +3,7 @@
BEGIN_WH_NS
static void throwspank(PLAYER& plr, DWHActor* i);
static void throwspank(PLAYER& plr, DWHActor* actor);
static void chasefatwitch(PLAYER& plr, DWHActor* actor)
{
@ -245,7 +245,6 @@ static void diefatwitch(PLAYER& plr, DWHActor* actor)
static void throwspank(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
auto spawnedactor = InsertActor(spr.sectnum, MISSILE);
@ -269,7 +268,7 @@ static void throwspank(PLAYER& plr, DWHActor* actor)
if (discrim == 0)
discrim = 1;
spawned.zvel = (short)(((plr.z + (48 << 8) - spawned.z) << 7) / discrim);
spawned.owner = (short)i;
spawned.owner = actor->GetSpriteIndex();
spawned.clipdist = 16;
spawned.lotag = 512;
spawned.hitag = 0;

View file

@ -6,7 +6,6 @@ BEGIN_WH_NS
static void chasefish(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
spr.lotag -= TICSPERFRAME;
@ -86,7 +85,6 @@ static void diefish(PLAYER& plr, DWHActor* actor)
static void attackfish(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
spr.z = spr.sector()->floorz;
@ -153,7 +151,6 @@ static void searchfish(PLAYER& plr, DWHActor* actor)
static void facefish(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
boolean cansee = ::cansee(plr.x, plr.y, plr.z, plr.sector, spr.x, spr.y, spr.z - (tileHeight(spr.picnum) << 7),

View file

@ -3,7 +3,7 @@
BEGIN_WH_NS
static void checkexplfred(PLAYER& plr, DWHActor* i);
static void checkexplfred(PLAYER& plr, DWHActor* actor);
static void chasefred(PLAYER& plr, DWHActor* actor)
@ -183,7 +183,6 @@ static void facefred(PLAYER& plr, DWHActor* actor)
static void attackfred(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
getzrange(spr.x, spr.y, spr.z - 1, spr.sectnum, (spr.clipdist) << 2, CLIPMASK0);
@ -292,7 +291,6 @@ static void resurectfred(PLAYER& plr, DWHActor* actor)
static void checkexplfred(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
WHSectIterator it(spr.sectnum);

View file

@ -3,7 +3,7 @@
BEGIN_WH_NS
static void checkexplgoblin(PLAYER& plr, DWHActor* i);
static void checkexplgoblin(PLAYER& plr, DWHActor* actor);
static void chasegoblin(PLAYER& plr, DWHActor* actor)
@ -228,7 +228,6 @@ static void standgoblin(PLAYER& plr, DWHActor* actor)
static void attackgoblin(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
getzrange(spr.x, spr.y, spr.z - 1, spr.sectnum, (spr.clipdist) << 2, CLIPMASK0);
@ -359,7 +358,6 @@ void goblinChill(PLAYER& plr, DWHActor* actor)
static void goblinWar(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
short k;
@ -535,7 +533,6 @@ void goblinWarProcess(PLAYER& plr)
static void checkexplgoblin(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
WHSectIterator it(spr.sectnum);

View file

@ -3,9 +3,9 @@
BEGIN_WH_NS
static void gonzopike(short s, PLAYER& plr);
static void checkexplgonzo(PLAYER& plr, DWHActor* i);
static boolean patrolprocess(PLAYER& plr, DWHActor* i);
static void gonzopike(DWHActor* s, PLAYER& plr);
static void checkexplgonzo(PLAYER& plr, DWHActor* actor);
static boolean patrolprocess(PLAYER& plr, DWHActor* actor);
static void chasegonzo(PLAYER& plr, DWHActor* actor)
{
@ -353,7 +353,6 @@ static void facegonzo(PLAYER& plr, DWHActor* actor)
static void attackgonzo(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
getzrange(spr.x, spr.y, spr.z - 1, spr.sectnum, (spr.clipdist) << 2, CLIPMASK0);
@ -440,7 +439,6 @@ static void attackgonzo(PLAYER& plr, DWHActor* actor)
static void fleegonzo(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
spr.lotag -= TICSPERFRAME;
@ -480,7 +478,6 @@ static void fleegonzo(PLAYER& plr, DWHActor* actor)
static void castgonzo(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
spr.lotag -= TICSPERFRAME;
@ -492,7 +489,7 @@ static void castgonzo(PLAYER& plr, DWHActor* actor)
if (spr.picnum == GONZOCSWAT) {
spr.extra--;
spritesound(S_GENTHROW, actor);
gonzopike(i, plr);
gonzopike(actor, plr);
SetNewStatus(actor, CHASE);
}
}
@ -560,7 +557,6 @@ void gonzoProcess(PLAYER& plr)
while (auto actor = it.Next())
{
SPRITE& spr = actor->s();
int i = actor->GetSpriteIndex();
switch (spr.extra) {
case 1: // forward
@ -657,41 +653,41 @@ static boolean patrolprocess(PLAYER& plr, DWHActor* actor)
return target != -1;
}
static void gonzopike(short s, PLAYER& plr) {
auto spawnedactor = InsertActor(sprite[s].sectnum, JAVLIN);
auto& spr = spawnedactor->s();
static void gonzopike(DWHActor* actor, PLAYER& plr) {
auto& spr = actor->s();
auto spawnedactor = InsertActor(spr.sectnum, JAVLIN);
auto& spawned = spawnedactor->s();
spr.x = sprite[s].x;
spr.y = sprite[s].y;
spr.z = sprite[s].z - (40 << 8);
spawned.x = spr.x;
spawned.y = spr.y;
spawned.z = spr.z - (40 << 8);
spr.cstat = 21;
spr.picnum = THROWPIKE;
spr.ang = (short)(((sprite[s].ang + 2048 + 96) - 512) & 2047);
spr.xrepeat = 24;
spr.yrepeat = 24;
spr.clipdist = 32;
spawned.cstat = 21;
spawned.picnum = THROWPIKE;
spawned.ang = (short)(((spr.ang + 2048 + 96) - 512) & 2047);
spawned.xrepeat = 24;
spawned.yrepeat = 24;
spawned.clipdist = 32;
spr.extra = sprite[s].ang;
spr.shade = -15;
spr.xvel = (short)((krand() & 256) - 128);
spr.yvel = (short)((krand() & 256) - 128);
spawned.extra = spr.ang;
spawned.shade = -15;
spawned.xvel = (short)((krand() & 256) - 128);
spawned.yvel = (short)((krand() & 256) - 128);
spr.zvel = (short)(((plr.z + (8 << 8) - sprite[s].z) << 7) / ksqrt((plr.x - sprite[s].x) * (plr.x - sprite[s].x) + (plr.y - sprite[s].y) * (plr.y - sprite[s].y)));
spawned.zvel = (short)(((plr.z + (8 << 8) - spr.z) << 7) / ksqrt((plr.x - spr.x) * (plr.x - spr.x) + (plr.y - spr.y) * (plr.y - spr.y)));
spr.zvel += ((krand() % 256) - 128);
spawned.zvel += ((krand() % 256) - 128);
spr.owner = s;
spr.lotag = 1024;
spr.hitag = 0;
spr.pal = 0;
spawned.owner = actor->GetSpriteIndex();
spawned.lotag = 1024;
spawned.hitag = 0;
spawned.pal = 0;
spr.backuploc();
}
static void checkexplgonzo(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
WHSectIterator it(spr.sectnum);

View file

@ -3,13 +3,12 @@
BEGIN_WH_NS
static void checkexplgron(PLAYER& plr, DWHActor* i);
static void throwhalberd(int s);
static void checkexplgron(PLAYER& plr, DWHActor* actor);
static void throwhalberd(DWHActor* s);
static void chasegron(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
spr.lotag -= TICSPERFRAME;
@ -282,7 +281,6 @@ static void facegron(PLAYER& plr, DWHActor* actor)
static void attackgron(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
if (spr.picnum == GRONSWATTACK) {
@ -372,7 +370,6 @@ static void fleegron(PLAYER& plr, DWHActor* actor)
static void castgron(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
spr.lotag -= TICSPERFRAME;
@ -380,7 +377,7 @@ static void castgron(PLAYER& plr, DWHActor* actor)
if (spr.picnum == GRONHALATTACK) {
spr.extra--;
spritesound(S_THROWPIKE, actor);
throwhalberd(i);
throwhalberd(actor);
SetNewStatus(actor, CHASE);
}
else if (spr.picnum == GRONMUATTACK) {
@ -427,7 +424,6 @@ static void diegron(PLAYER& plr, DWHActor* actor)
static void checkexplgron(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
WHSectIterator it(spr.sectnum);
@ -452,38 +448,40 @@ static void checkexplgron(PLAYER& plr, DWHActor* actor)
}
}
static void throwhalberd(int s) {
auto spawnedactor = InsertActor(sprite[s].sectnum, JAVLIN);
SPRITE& spr = spawnedactor->s();
static void throwhalberd(DWHActor* actor) {
spr.x = sprite[s].x;
spr.y = sprite[s].y;
spr.z = sprite[s].z - (40 << 8);
auto& spr = actor->s();
auto spawnedactor = InsertActor(spr.sectnum, JAVLIN);
SPRITE& spawned = spawnedactor->s();
spr.cstat = 17;
spawned.x = spr.x;
spawned.y = spr.y;
spawned.z = spr.z - (40 << 8);
spr.picnum = THROWHALBERD;
spr.detail = THROWHALBERDTYPE;
spr.ang = (short)(((sprite[s].ang + 2048) - 512) & 2047);
spr.xrepeat = 8;
spr.yrepeat = 16;
spr.clipdist = 32;
spawned.cstat = 17;
spr.extra = sprite[s].ang;
spr.shade = -15;
spr.xvel = (short)((krand() & 256) - 128);
spr.yvel = (short)((krand() & 256) - 128);
spr.zvel = (short)((krand() & 256) - 128);
spr.owner = (short)s;
spr.lotag = 0;
spr.hitag = 0;
spr.pal = 0;
spawned.picnum = THROWHALBERD;
spawned.detail = THROWHALBERDTYPE;
spawned.ang = (short)(((spr.ang + 2048) - 512) & 2047);
spawned.xrepeat = 8;
spawned.yrepeat = 16;
spawned.clipdist = 32;
spr.cstat = 0;
int daz = (((spr.zvel) * TICSPERFRAME) >> 3);
movesprite(spawnedactor, (bcos(spr.extra) * TICSPERFRAME) << 7,
(bsin(spr.extra) * TICSPERFRAME) << 7, daz, 4 << 8, 4 << 8, 1);
spr.cstat = 21;
spawned.extra = spr.ang;
spawned.shade = -15;
spawned.xvel = (short)((krand() & 256) - 128);
spawned.yvel = (short)((krand() & 256) - 128);
spawned.zvel = (short)((krand() & 256) - 128);
spawned.owner = actor->GetSpriteIndex();
spawned.lotag = 0;
spawned.hitag = 0;
spawned.pal = 0;
spawned.cstat = 0;
int daz = (((spawned.zvel) * TICSPERFRAME) >> 3);
movesprite(spawnedactor, (bcos(spawned.extra) * TICSPERFRAME) << 7,
(bsin(spawned.extra) * TICSPERFRAME) << 7, daz, 4 << 8, 4 << 8, 1);
spawned.cstat = 21;
spr.backuploc();
}

View file

@ -74,7 +74,6 @@ static void chaseguardian(PLAYER& plr, DWHActor* actor)
static void nukedguardian(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
if (isWh2()) {

View file

@ -3,7 +3,7 @@
BEGIN_WH_NS
static void checkexplimp(PLAYER& plr, DWHActor* i);
static void checkexplimp(PLAYER& plr, DWHActor* actor);
static void chaseimp(PLAYER& plr, DWHActor* actor)
{
@ -233,7 +233,6 @@ static void fleeimp(PLAYER& plr, DWHActor* actor)
static void attackimp(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
getzrange(spr.x, spr.y, spr.z - 1, spr.sectnum, (spr.clipdist) << 2, CLIPMASK0);
@ -306,7 +305,6 @@ static void skirmishimp(PLAYER& plr, DWHActor* actor)
static void checkexplimp(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
WHSectIterator it(spr.sectnum);

View file

@ -3,7 +3,7 @@
BEGIN_WH_NS
void spawnabaddy(DWHActor* i, int monster);
void spawnabaddy(DWHActor* actor, int monster);
static void chasejudy(PLAYER& plr, DWHActor* actor)
{
@ -218,7 +218,6 @@ static void fleejudy(PLAYER& plr, DWHActor* actor)
static void castjudy(PLAYER& plr, DWHActor* actor)
{
int i = actor->GetSpriteIndex();
SPRITE& spr = actor->s();
spr.lotag -= TICSPERFRAME;
@ -286,7 +285,7 @@ static void castjudy(PLAYER& plr, DWHActor* actor)
spr.picnum = JUDYATTACK2;
spritesound(S_JUDY1 + krand() % 4, actor);
if (krand() % 100 > 50)
skullycastspell(plr, i);
skullycastspell(plr, actor);
else {
if (krand() % 100 > 70) {
if (krand() % 100 > 50) {
@ -358,8 +357,6 @@ void judyOperate(PLAYER& plr)
while (auto actor = it.Next())
{
SPRITE& spri = actor->s();
int i = actor->GetSpriteIndex();
spri.ang = (short)(getangle(plr.x - spri.x, plr.y - spri.y) & 2047);
if (cansee(plr.x, plr.y, plr.z, plr.sector, spri.x, spri.y,

View file

@ -3,7 +3,7 @@
BEGIN_WH_NS
void spawnabaddy(DWHActor* i, int monster);
void spawnabaddy(DWHActor* actor, int monster);
static void chasekatie(PLAYER& plr, DWHActor* actor)
{

View file

@ -3,7 +3,7 @@
BEGIN_WH_NS
static void checkexplkobold(PLAYER& plr, DWHActor* i);
static void checkexplkobold(PLAYER& plr, DWHActor* actor);
static void chasekobold(PLAYER& plr, DWHActor* actor)
{

View file

@ -3,7 +3,7 @@
BEGIN_WH_NS
static void checkexplminotaur(PLAYER& plr, DWHActor* i);
static void checkexplminotaur(PLAYER& plr, DWHActor* actor);
static void chaseminotaur(PLAYER& plr, DWHActor* actor)
{

View file

@ -348,7 +348,7 @@ static void castnewguy(PLAYER& plr, DWHActor* actor)
spr.extra--;
spr.picnum = NEWGUY;
spritesound(S_WISP, actor);
skullycastspell(plr, i);
skullycastspell(plr, actor);
SetNewStatus(actor, CHASE);
}
if (spr.picnum == NEWGUYBOW + 2) {

View file

@ -3,7 +3,7 @@
BEGIN_WH_NS
static void checkexplskeleton(PLAYER& plr, DWHActor* i);
static void checkexplskeleton(PLAYER& plr, DWHActor* actor);
static void chaseskeleton(PLAYER& plr, DWHActor* actor)
{

View file

@ -216,7 +216,7 @@ static void castskully(PLAYER& plr, DWHActor* actor)
if (spr.picnum == SKULLYATTACK + 2) {
spr.picnum = SKULLY;
spritesound(S_SKULLWITCH1 + krand() % 3, actor);
skullycastspell(plr, i);
skullycastspell(plr, actor);
SetNewStatus(actor, CHASE);
}
checksector6(actor);

View file

@ -3,7 +3,7 @@
BEGIN_WH_NS
static void checkexplspider(PLAYER& plr, DWHActor* i);
static void checkexplspider(PLAYER& plr, DWHActor* actor);
static void chasespider(PLAYER& plr, DWHActor* actor)
{

View file

@ -3,7 +3,7 @@
BEGIN_WH_NS
static void willowDrain(PLAYER& plr, DWHActor* i);
static void willowDrain(PLAYER& plr, DWHActor* actor);
static void chasewillow(PLAYER& plr, DWHActor* actor)
{

View file

@ -2,7 +2,7 @@
struct Item {
using Callback = void (*)(PLAYER &plr, DWHActor* i);
using Callback = void (*)(PLAYER &plr, DWHActor* actor);
int sizx, sizy;
boolean treasures, cflag;

View file

@ -194,7 +194,7 @@ void newstatus(short sn, int seq);
void makeafire(int i, int firetype);
void explosion(int i, int x, int y, int z, int owner);
void explosion2(int i, int x, int y, int z, int owner);
void trailingsmoke(DWHActor* i, boolean ball);
void trailingsmoke(DWHActor* actor, boolean ball);
void icecubes(int i, int x, int y, int z, int owner);
boolean damageactor(PLAYER& plr, DWHActor* hitobject, DWHActor* actor);
Collision movesprite(DWHActor*, int dx, int dy, int dz, int ceildist, int flordist, int cliptype);