mirror of
https://github.com/ZDoom/Raze.git
synced 2025-03-13 20:42:11 +00:00
- added most of the remaining play code.
This commit is contained in:
parent
96637a25d1
commit
f50b0f937d
30 changed files with 12813 additions and 82 deletions
|
@ -121,6 +121,8 @@ enum
|
|||
GAMEFLAG_PSEXHUMED = GAMEFLAG_POWERSLAVE | GAMEFLAG_EXHUMED, // the two games really are the same, except for the name and the publisher.
|
||||
GAMEFLAG_WORLDTOUR = 0x00008000,
|
||||
GAMEFLAG_DUKEDC = 0x00010000,
|
||||
GAMEGLAG_WH = 0x00020000,
|
||||
GAMEFLAG_WH2 = 0x00040000,
|
||||
GAMEFLAGMASK = 0x0000FFFF, // flags allowed from grpinfo
|
||||
|
||||
// We still need these for the parsers.
|
||||
|
@ -202,6 +204,11 @@ inline bool isShareware()
|
|||
return g_gameType & GAMEFLAG_SHAREWARE;
|
||||
}
|
||||
|
||||
inline bool isWh2()
|
||||
{
|
||||
return g_gameType & GAMEFLAG_WH2;
|
||||
}
|
||||
|
||||
TArray<GrpEntry> GrpScan();
|
||||
void S_PauseSound(bool notmusic, bool notsfx);
|
||||
void S_ResumeSound(bool notsfx);
|
||||
|
|
|
@ -23,7 +23,19 @@ set( PCH_SOURCES
|
|||
src/aiskully.cpp
|
||||
src/aispider.cpp
|
||||
src/aiwillow.cpp
|
||||
src/items.cpp
|
||||
src/names.cpp
|
||||
src/potions.cpp
|
||||
src/sndnames.cpp
|
||||
src/spellbooks.cpp
|
||||
src/weapons.cpp
|
||||
src/wepdata.cpp
|
||||
src/whani.cpp
|
||||
src/whfx.cpp
|
||||
src/whmap.cpp
|
||||
src/whobj.cpp
|
||||
src/whplr.cpp
|
||||
src/whtag.cpp
|
||||
)
|
||||
|
||||
add_game_library2( whaven )
|
||||
|
|
|
@ -35,30 +35,6 @@ void createSkullyAI();
|
|||
void createSpiderAI();
|
||||
void createWillowAI();
|
||||
|
||||
void premapDemon(short i);
|
||||
void premapDevil(short i);
|
||||
void premapDragon(short i);
|
||||
void premapFatwitch(short i);
|
||||
void premapFish(short i);
|
||||
void premapFred(short i);
|
||||
void premapGoblin(short i);
|
||||
void premapGonzo(short i);
|
||||
void premapGron(short i);
|
||||
void premapGuardian(short i);
|
||||
void premapImp(short i);
|
||||
void premapJudy(short i);
|
||||
void premapKatie(short i);
|
||||
void premapKobold(short i);
|
||||
void premapKurt(short i);
|
||||
void premapMinotaur(short i);
|
||||
void premapNewGuy(short i);
|
||||
void premapRat(short i);
|
||||
void premapSkeleton(short i);
|
||||
void premapSkully(short i);
|
||||
void premapSpider(short i);
|
||||
void premapWillow(short i);
|
||||
|
||||
|
||||
void initAI()
|
||||
{
|
||||
|
||||
|
@ -75,7 +51,7 @@ void initAI()
|
|||
* PATROL
|
||||
*/
|
||||
|
||||
if (game.WH2)
|
||||
if (isWh2())
|
||||
createImpAI();
|
||||
else
|
||||
createGoblinAI();
|
||||
|
@ -123,7 +99,7 @@ static void aiInit() {
|
|||
killcnt++;
|
||||
}
|
||||
else if (pic == RAT) {
|
||||
.premapRat(i);
|
||||
premapRat(i);
|
||||
}
|
||||
else if (pic == FISH) {
|
||||
premapFish(i);
|
||||
|
@ -137,12 +113,12 @@ static void aiInit() {
|
|||
case GOBLINSTAND:
|
||||
case GOBLINCHILL:
|
||||
killcnt++;
|
||||
if (game.WH2 && spr.picnum == IMP) {
|
||||
if (isWh2() && spr.picnum == IMP) {
|
||||
premapImp(i);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!game.WH2)
|
||||
if (!isWh2())
|
||||
premapGoblin(i);
|
||||
break;
|
||||
case DEVIL:
|
||||
|
@ -251,7 +227,7 @@ void aiProcess() {
|
|||
for (i = headspritestat[PATROL]; i >= 0; i = nextsprite) {
|
||||
nextsprite = nextspritestat[i];
|
||||
|
||||
SPRITE spr = sprite[i];
|
||||
SPRITE& spr = sprite[i];
|
||||
short movestat = (short)movesprite((short)i, ((sintable[(spr.ang + 512) & 2047]) * TICSPERFRAME) << 3,
|
||||
((sintable[spr.ang]) * TICSPERFRAME) << 3, 0, 4 << 8, 4 << 8, 0);
|
||||
if (zr_florz > spr.z + (48 << 8)) {
|
||||
|
@ -293,14 +269,14 @@ void aiProcess() {
|
|||
|
||||
for (i = headspritestat[CHASE]; i >= 0; i = nextsprite) {
|
||||
nextsprite = nextspritestat[i];
|
||||
SPRITE spr = sprite[i];
|
||||
SPRITE& spr = sprite[i];
|
||||
if (enemy[spr.detail] != null && enemy[spr.detail].chase != null)
|
||||
enemy[spr.detail].chase.process(plr, i);
|
||||
}
|
||||
|
||||
for (i = headspritestat[RESURECT]; i >= 0; i = nextsprite) {
|
||||
nextsprite = nextspritestat[i];
|
||||
SPRITE spr = sprite[i];
|
||||
SPRITE& spr = sprite[i];
|
||||
if (enemy[spr.detail] != null && enemy[spr.detail].resurect != null) {
|
||||
enemy[spr.detail].resurect.process(plr, i);
|
||||
}
|
||||
|
@ -308,7 +284,7 @@ void aiProcess() {
|
|||
|
||||
for (i = headspritestat[FINDME]; i >= 0; i = nextsprite) {
|
||||
nextsprite = nextspritestat[i];
|
||||
SPRITE spr = sprite[i];
|
||||
SPRITE& spr = sprite[i];
|
||||
|
||||
if (enemy[spr.detail] != null && enemy[spr.detail].search != null)
|
||||
enemy[spr.detail].search.process(plr, i);
|
||||
|
@ -316,7 +292,7 @@ void aiProcess() {
|
|||
|
||||
for (i = headspritestat[NUKED]; i >= 0; i = nextsprite) {
|
||||
nextsprite = nextspritestat[i];
|
||||
SPRITE spr = sprite[i];
|
||||
SPRITE& spr = sprite[i];
|
||||
|
||||
if (spr.picnum == ZFIRE) {
|
||||
spr.lotag -= TICSPERFRAME;
|
||||
|
@ -331,14 +307,14 @@ void aiProcess() {
|
|||
|
||||
for (i = headspritestat[FROZEN]; i >= 0; i = nextsprite) {
|
||||
nextsprite = nextspritestat[i];
|
||||
SPRITE spr = sprite[i];
|
||||
SPRITE& spr = sprite[i];
|
||||
if (enemy[spr.detail] != null && enemy[spr.detail].frozen != null)
|
||||
enemy[spr.detail].frozen.process(plr, i);
|
||||
}
|
||||
|
||||
for (i = headspritestat[PAIN]; i >= 0; i = nextsprite) {
|
||||
nextsprite = nextspritestat[i];
|
||||
SPRITE spr = sprite[i];
|
||||
SPRITE& spr = sprite[i];
|
||||
|
||||
if (enemy[spr.detail] != null && enemy[spr.detail].pain != null)
|
||||
enemy[spr.detail].pain.process(plr, i);
|
||||
|
@ -346,7 +322,7 @@ void aiProcess() {
|
|||
|
||||
for (i = headspritestat[FACE]; i >= 0; i = nextsprite) {
|
||||
nextsprite = nextspritestat[i];
|
||||
SPRITE spr = sprite[i];
|
||||
SPRITE& spr = sprite[i];
|
||||
|
||||
if (enemy[spr.detail] != null && enemy[spr.detail].face != null)
|
||||
enemy[spr.detail].face.process(plr, i);
|
||||
|
@ -354,9 +330,9 @@ void aiProcess() {
|
|||
|
||||
for (i = headspritestat[ATTACK]; i >= 0; i = nextsprite) {
|
||||
nextsprite = nextspritestat[i];
|
||||
SPRITE spr = sprite[i];
|
||||
SPRITE& spr = sprite[i];
|
||||
|
||||
if (game.WH2 && attacktheme == 0) {
|
||||
if (isWh2() && attacktheme == 0) {
|
||||
attacktheme = 1;
|
||||
startsong((rand() % 2) + 2);
|
||||
}
|
||||
|
@ -367,7 +343,7 @@ void aiProcess() {
|
|||
|
||||
for (i = headspritestat[FLEE]; i >= 0; i = nextsprite) {
|
||||
nextsprite = nextspritestat[i];
|
||||
SPRITE spr = sprite[i];
|
||||
SPRITE& spr = sprite[i];
|
||||
|
||||
if (enemy[spr.detail] != null && enemy[spr.detail].flee != null)
|
||||
enemy[spr.detail].flee.process(plr, i);
|
||||
|
@ -375,7 +351,7 @@ void aiProcess() {
|
|||
|
||||
for (i = headspritestat[CAST]; i >= 0; i = nextsprite) {
|
||||
nextsprite = nextspritestat[i];
|
||||
SPRITE spr = sprite[i];
|
||||
SPRITE& spr = sprite[i];
|
||||
|
||||
if (enemy[spr.detail] != null && enemy[spr.detail].cast != null)
|
||||
enemy[spr.detail].cast.process(plr, i);
|
||||
|
@ -383,14 +359,14 @@ void aiProcess() {
|
|||
|
||||
for (i = headspritestat[DIE]; i >= 0; i = nextsprite) {
|
||||
nextsprite = nextspritestat[i];
|
||||
SPRITE spr = sprite[i];
|
||||
SPRITE& spr = sprite[i];
|
||||
if (enemy[spr.detail] != null && enemy[spr.detail].die != null)
|
||||
enemy[spr.detail].die.process(plr, i);
|
||||
}
|
||||
|
||||
for (i = headspritestat[SKIRMISH]; i >= 0; i = nextsprite) {
|
||||
nextsprite = nextspritestat[i];
|
||||
SPRITE spr = sprite[i];
|
||||
SPRITE& spr = sprite[i];
|
||||
|
||||
if (enemy[spr.detail] != null && enemy[spr.detail].skirmish != null)
|
||||
enemy[spr.detail].skirmish.process(plr, i);
|
||||
|
@ -398,7 +374,7 @@ void aiProcess() {
|
|||
|
||||
for (i = headspritestat[STAND]; i >= 0; i = nextsprite) {
|
||||
nextsprite = nextspritestat[i];
|
||||
SPRITE spr = sprite[i];
|
||||
SPRITE& spr = sprite[i];
|
||||
|
||||
if (enemy[spr.detail] != null && enemy[spr.detail].stand != null)
|
||||
enemy[spr.detail].stand.process(plr, i);
|
||||
|
@ -406,7 +382,7 @@ void aiProcess() {
|
|||
|
||||
for (i = headspritestat[CHILL]; i >= 0; i = nextsprite) {
|
||||
nextsprite = nextspritestat[i];
|
||||
SPRITE spr = sprite[i];
|
||||
SPRITE& spr = sprite[i];
|
||||
switch (spr.detail) {
|
||||
case GOBLINTYPE:
|
||||
goblinChill(plr, i);
|
||||
|
@ -419,7 +395,7 @@ void aiProcess() {
|
|||
|
||||
for (i = headspritestat[DEAD]; i >= 0; i = nextsprite) {
|
||||
nextsprite = nextspritestat[i];
|
||||
SPRITE spr = sprite[i];
|
||||
SPRITE& spr = sprite[i];
|
||||
|
||||
getzrange(spr.x, spr.y, spr.z - 1, spr.sectnum, (spr.clipdist) << 2, CLIPMASK0);
|
||||
switch (checkfluid(i, zr_florhit)) {
|
||||
|
@ -449,7 +425,7 @@ int aimove(short i) {
|
|||
setsprite(i, ox, oy, oz);
|
||||
|
||||
if ((movestate & kHitTypeMask) != kHitWall) {
|
||||
if (game.WH2)
|
||||
if (isWh2())
|
||||
sprite[i].z += WH2GRAVITYCONSTANT;
|
||||
else
|
||||
sprite[i].z += GRAVITYCONSTANT;
|
||||
|
@ -463,7 +439,7 @@ int aimove(short i) {
|
|||
}
|
||||
|
||||
int aifly(short i) {
|
||||
SPRITE spr = sprite[i];
|
||||
SPRITE& spr = sprite[i];
|
||||
int movestate = movesprite(i, ((sintable[(sprite[i].ang + 512) & 2047]) * TICSPERFRAME) << 3,
|
||||
((sintable[sprite[i].ang & 2047]) * TICSPERFRAME) << 3, 0, 4 << 8, 4 << 8, CLIFFCLIP);
|
||||
|
||||
|
@ -481,7 +457,7 @@ int aifly(short i) {
|
|||
}
|
||||
|
||||
void aisearch(PLAYER& plr, short i, boolean fly) {
|
||||
SPRITE spr = sprite[i];
|
||||
SPRITE& spr = sprite[i];
|
||||
spr.lotag -= TICSPERFRAME;
|
||||
|
||||
// if (plr.invisibletime > 0) {
|
||||
|
@ -542,7 +518,7 @@ void aisearch(PLAYER& plr, short i, boolean fly) {
|
|||
}
|
||||
|
||||
boolean checksector6(short i) {
|
||||
SPRITE spr = sprite[i];
|
||||
SPRITE& spr = sprite[i];
|
||||
if (sector[spr.sectnum].floorz - (32 << 8) < sector[spr.sectnum].ceilingz) {
|
||||
if (sector[spr.sectnum].lotag == 6)
|
||||
newstatus(i, DIE);
|
||||
|
@ -556,7 +532,7 @@ boolean checksector6(short i) {
|
|||
}
|
||||
|
||||
int checkfluid(int i, int zr_florhit) {
|
||||
SPRITE spr = sprite[i];
|
||||
SPRITE& spr = sprite[i];
|
||||
if (isValidSector(spr.sectnum) && (zr_florhit & kHitTypeMask) == kHitSector && (sector[spr.sectnum].floorpicnum == WATER
|
||||
/* || sector[spr.sectnum].floorpicnum == LAVA2 */ || sector[spr.sectnum].floorpicnum == LAVA
|
||||
|| sector[spr.sectnum].floorpicnum == SLIME || sector[spr.sectnum].floorpicnum == FLOORMIRROR
|
||||
|
@ -577,7 +553,7 @@ int checkfluid(int i, int zr_florhit) {
|
|||
}
|
||||
|
||||
void processfluid(int i, int zr_florhit, boolean fly) {
|
||||
SPRITE spr = sprite[i];
|
||||
SPRITE& spr = sprite[i];
|
||||
switch (checkfluid(i, zr_florhit)) {
|
||||
case TYPELAVA:
|
||||
if (!fly) {
|
||||
|
@ -601,7 +577,7 @@ void castspell(PLAYER& plr, int i) {
|
|||
|
||||
sprite[j].x = sprite[i].x;
|
||||
sprite[j].y = sprite[i].y;
|
||||
if (game.WH2 || sprite[i].picnum == SPAWNFIREBALL)
|
||||
if (isWh2() || sprite[i].picnum == SPAWNFIREBALL)
|
||||
sprite[j].z = sprite[i].z - ((tilesizy[sprite[i].picnum] >> 1) << 8);
|
||||
else
|
||||
sprite[j].z = getflorzofslope(sprite[i].sectnum, sprite[i].x, sprite[i].y) - ((tilesizy[sprite[i].picnum] >> 1) << 8);
|
||||
|
@ -621,7 +597,7 @@ void castspell(PLAYER& plr, int i) {
|
|||
int discrim = ksqrt((plr.x - sprite[j].x) * (plr.x - sprite[j].x) + (plr.y - sprite[j].y) * (plr.y - sprite[j].y));
|
||||
if (discrim == 0)
|
||||
discrim = 1;
|
||||
if (game.WH2)
|
||||
if (isWh2())
|
||||
sprite[j].zvel = (short)(((plr.z + (8 << 8) - sprite[j].z) << 7) / discrim);
|
||||
else
|
||||
sprite[j].zvel = (short)(((plr.z + (48 << 8) - sprite[j].z) << 7) / discrim);
|
||||
|
@ -703,7 +679,7 @@ void attack(PLAYER& plr, int i) {
|
|||
}
|
||||
|
||||
int k = 5;
|
||||
if (!game.WH2) {
|
||||
if (!isWh2()) {
|
||||
k = krand() % 100;
|
||||
if (k > (plr.armortype << 3))
|
||||
k = 15;
|
||||
|
@ -726,7 +702,7 @@ void attack(PLAYER& plr, int i) {
|
|||
if ((krand() % 2) != 0)
|
||||
playsound_loc(S_BREATH1 + (krand() % 6), sprite[i].x, sprite[i].y);
|
||||
|
||||
if (game.WH2)
|
||||
if (isWh2())
|
||||
k = (krand() % 5) + 5;
|
||||
else
|
||||
k >>= 2;
|
||||
|
@ -738,7 +714,7 @@ void attack(PLAYER& plr, int i) {
|
|||
|
||||
case DEVILTYPE:
|
||||
playsound_loc(S_DEMONTHROW, sprite[i].x, sprite[i].y);
|
||||
if (!game.WH2)
|
||||
if (!isWh2())
|
||||
k >>= 2;
|
||||
break;
|
||||
|
||||
|
@ -748,7 +724,7 @@ void attack(PLAYER& plr, int i) {
|
|||
playsound_loc(S_KOBOLDHIT, plr.x, plr.y);
|
||||
playsound_loc(S_BREATH1 + (krand() % 6), plr.x, plr.y);
|
||||
}
|
||||
if (game.WH2)
|
||||
if (isWh2())
|
||||
k = (krand() % 5) + 5;
|
||||
else
|
||||
k >>= 2;
|
||||
|
@ -763,7 +739,7 @@ void attack(PLAYER& plr, int i) {
|
|||
k >>= 3;
|
||||
break;
|
||||
case IMPTYPE:
|
||||
if (!game.WH2)
|
||||
if (!isWh2())
|
||||
break;
|
||||
playsound_loc(S_RIP1 + (krand() % 3), sprite[i].x, sprite[i].y);
|
||||
if ((krand() % 2) != 0) {
|
||||
|
@ -779,7 +755,7 @@ void attack(PLAYER& plr, int i) {
|
|||
}
|
||||
break;
|
||||
case GOBLINTYPE:
|
||||
if (game.WH2)
|
||||
if (isWh2())
|
||||
break;
|
||||
|
||||
playsound_loc(S_GENSWING, sprite[i].x, sprite[i].y);
|
||||
|
@ -836,7 +812,7 @@ void attack(PLAYER& plr, int i) {
|
|||
if (sprite[i].picnum != GRONSWATTACK)
|
||||
break;
|
||||
|
||||
if (game.WH2) {
|
||||
if (isWh2()) {
|
||||
k = (krand() % 20) + 5;
|
||||
if (sprite[i].shade > 30) {
|
||||
k += krand() % 10;
|
||||
|
@ -855,7 +831,7 @@ void attack(PLAYER& plr, int i) {
|
|||
playsound_loc(S_GENSWING, sprite[i].x, sprite[i].y);
|
||||
if (krand() % 10 > 4)
|
||||
playsound_loc(S_SWORD1 + (krand() % 6), sprite[i].x, sprite[i].y);
|
||||
if (game.WH2)
|
||||
if (isWh2())
|
||||
k = (krand() % 25) + 5;
|
||||
break;
|
||||
}
|
||||
|
@ -938,7 +914,7 @@ boolean checkdist(PLAYER& plr, int i) {
|
|||
}
|
||||
|
||||
boolean checkdist(int i, int x, int y, int z) {
|
||||
SPRITE spr = sprite[i];
|
||||
SPRITE& spr = sprite[i];
|
||||
|
||||
int attackdist = 512;
|
||||
int attackheight = 120;
|
||||
|
@ -1032,7 +1008,7 @@ void monsterweapon(int i) {
|
|||
case MINOTAURDEAD:
|
||||
weap.xrepeat = 25;
|
||||
weap.yrepeat = 20;
|
||||
if (!game.WH2) {
|
||||
if (!isWh2()) {
|
||||
if (krand() % 100 > 50) {
|
||||
weap.picnum = WEAPON4;
|
||||
}
|
||||
|
@ -1193,7 +1169,7 @@ PLAYER& aiGetPlayerTarget(short i) {
|
|||
}
|
||||
|
||||
boolean actoruse(short i) {
|
||||
SPRITE spr = sprite[i];
|
||||
SPRITE& spr = sprite[i];
|
||||
|
||||
neartag(spr.x, spr.y, spr.z, spr.sectnum, spr.ang, neartag, 1024, 3);
|
||||
|
||||
|
|
|
@ -115,6 +115,7 @@ enum EAIConst
|
|||
};
|
||||
|
||||
extern Enemy enemy[MAXTYPES];
|
||||
extern int checksight_ang;
|
||||
|
||||
void aiProcess();
|
||||
int aimove(short i);
|
||||
|
@ -135,6 +136,32 @@ void monsterweapon(int i);
|
|||
PLAYER& aiGetPlayerTarget(short i);
|
||||
boolean actoruse(short i);
|
||||
|
||||
void initAI();
|
||||
|
||||
void premapDemon(short i);
|
||||
void premapDevil(short i);
|
||||
void premapDragon(short i);
|
||||
void premapFatwitch(short i);
|
||||
void premapFish(short i);
|
||||
void premapFred(short i);
|
||||
void premapGoblin(short i);
|
||||
void premapGonzo(short i);
|
||||
void premapGron(short i);
|
||||
void premapGuardian(short i);
|
||||
void premapImp(short i);
|
||||
void premapJudy(short i);
|
||||
void premapKatie(short i);
|
||||
void premapKobold(short i);
|
||||
void premapKurt(short i);
|
||||
void premapMinotaur(short i);
|
||||
void premapNewGuy(short i);
|
||||
void premapRat(short i);
|
||||
void premapSkeleton(short i);
|
||||
void premapSkully(short i);
|
||||
void premapSpider(short i);
|
||||
void premapWillow(short i);
|
||||
|
||||
|
||||
inline int findplayer() {
|
||||
return 0; // no multiplayer support, apparently...
|
||||
}
|
||||
|
|
|
@ -215,7 +215,7 @@ static void frozen(PLAYER& plr, short i) {
|
|||
static void nuked(PLAYER& plr, short i) {
|
||||
SPRITE& spr = sprite[i];
|
||||
|
||||
if (game.WH2) {
|
||||
if (isWh2()) {
|
||||
chunksofmeat(plr, i, spr.x, spr.y, spr.z, spr.sectnum, spr.ang);
|
||||
trailingsmoke(i, false);
|
||||
newstatus((short)i, DIE);
|
||||
|
@ -254,7 +254,7 @@ static void cast(PLAYER& plr, short i) {
|
|||
|
||||
void createDevilAI() {
|
||||
auto &e = enemy[DEVILTYPE];
|
||||
e.info.Init(game.WH2 ? 50 : 36, game.WH2 ? 50 : 36, 2048, 120, 0, 64, false, 50, 0);
|
||||
e.info.Init(isWh2() ? 50 : 36, isWh2() ? 50 : 36, 2048, 120, 0, 64, false, 50, 0);
|
||||
e.chase = chase;
|
||||
e.die = die;
|
||||
e.pain = pain;
|
||||
|
|
|
@ -181,7 +181,7 @@ static void search(PLAYER& plr, short i) {
|
|||
static void nuked(PLAYER& plr, short i) {
|
||||
SPRITE& spr = sprite[i];
|
||||
|
||||
if (game.WH2) {
|
||||
if (isWh2()) {
|
||||
chunksofmeat(plr, i, spr.x, spr.y, spr.z, spr.sectnum, spr.ang);
|
||||
trailingsmoke(i, false);
|
||||
newstatus((short)i, DIE);
|
||||
|
@ -467,7 +467,7 @@ static void throwhalberd(int s) {
|
|||
|
||||
void createGronAI() {
|
||||
auto& e = enemy[GRONTYPE];
|
||||
e.info.Init(game.WH2 ? 35 : 30, game.WH2 ? 35 : 30, -1, 120, 0, 64, false, 300, 0);
|
||||
e.info.Init(isWh2() ? 35 : 30, isWh2() ? 35 : 30, -1, 120, 0, 64, false, 300, 0);
|
||||
e.info.getAttackDist = [](EnemyInfo& e, SPRITE& spr)
|
||||
{
|
||||
int out = e.attackdist;
|
||||
|
@ -485,7 +485,7 @@ void createGronAI() {
|
|||
|
||||
e.info.getHealth = [](EnemyInfo& e, SPRITE& spr)
|
||||
{
|
||||
if (game.WH2) {
|
||||
if (isWh2()) {
|
||||
if (spr.picnum == GRONHAL)
|
||||
return adjusthp(65);
|
||||
if (spr.picnum == GRONMU)
|
||||
|
|
|
@ -73,7 +73,7 @@ static void chase(PLAYER& plr, short i) {
|
|||
static void nuked(PLAYER& plr, short i) {
|
||||
SPRITE& spr = sprite[i];
|
||||
|
||||
if (game.WH2) {
|
||||
if (isWh2()) {
|
||||
chunksofmeat(plr, i, spr.x, spr.y, spr.z, spr.sectnum, spr.ang);
|
||||
trailingsmoke(i, false);
|
||||
newstatus((short)i, DIE);
|
||||
|
@ -227,7 +227,7 @@ static void cast(PLAYER& plr, short i) {
|
|||
|
||||
void createGuardianAI() {
|
||||
auto& e = enemy[GUARDIANTYPE];
|
||||
e.info.Init(game.WH2 ? 35 : 32, game.WH2 ? 35 : 32, 4096, 120, 0, 64, true, game.WH2 ? 100 : 200, 0);
|
||||
e.info.Init(isWh2() ? 35 : 32, isWh2() ? 35 : 32, 4096, 120, 0, 64, true, isWh2() ? 100 : 200, 0);
|
||||
e.chase = chase;
|
||||
e.nuked = nuked;
|
||||
e.attack = attack;
|
||||
|
|
|
@ -263,7 +263,7 @@ static void frozen(PLAYER& plr, short i) {
|
|||
static void nuked(PLAYER& plr, short i) {
|
||||
SPRITE& spr = sprite[i];
|
||||
|
||||
if (game.WH2) {
|
||||
if (isWh2()) {
|
||||
chunksofmeat(plr, i, spr.x, spr.y, spr.z, spr.sectnum, spr.ang);
|
||||
trailingsmoke(i, false);
|
||||
newstatus((short)i, DIE);
|
||||
|
@ -333,7 +333,7 @@ static void checkexpl(PLAYER& plr, short i) {
|
|||
|
||||
void createKoboldAI() {
|
||||
auto& e = enemy[KOBOLDTYPE];
|
||||
e.info.Init(game.WH2 ? 60 : 54, game.WH2 ? 60 : 54, 1024, 120, 0, 64, false, 20, 0);
|
||||
e.info.Init(isWh2() ? 60 : 54, isWh2() ? 60 : 54, 1024, 120, 0, 64, false, 20, 0);
|
||||
e.chase = chase;
|
||||
e.die = die;
|
||||
e.pain = pain;
|
||||
|
|
|
@ -129,7 +129,7 @@ static void skirmish(PLAYER& plr, short i) {
|
|||
static void nuked(PLAYER& plr, short i) {
|
||||
SPRITE& spr = sprite[i];
|
||||
|
||||
if (game.WH2) {
|
||||
if (isWh2()) {
|
||||
chunksofmeat(plr, i, spr.x, spr.y, spr.z, spr.sectnum, spr.ang);
|
||||
trailingsmoke(i, false);
|
||||
newstatus((short)i, DIE);
|
||||
|
@ -333,7 +333,7 @@ void createMinotaurAI() {
|
|||
//picanm[MINOTAUR + 16] = 0;
|
||||
|
||||
auto& e = enemy[MINOTAURTYPE];
|
||||
e.info.Init(64, 64, 1024 + 512, 120, 0, 64, false, game.WH2 ? 80 : 100, 0);
|
||||
e.info.Init(64, 64, 1024 + 512, 120, 0, 64, false, isWh2() ? 80 : 100, 0);
|
||||
e.chase = chase;
|
||||
e.resurect = resurect;
|
||||
e.skirmish = skirmish;
|
||||
|
|
|
@ -271,7 +271,7 @@ static void frozen(PLAYER& plr, short i) {
|
|||
static void nuked(PLAYER& plr, short i) {
|
||||
SPRITE& spr = sprite[i];
|
||||
|
||||
if (game.WH2) {
|
||||
if (isWh2()) {
|
||||
chunksofmeat(plr, i, spr.x, spr.y, spr.z, spr.sectnum, spr.ang);
|
||||
trailingsmoke(i, false);
|
||||
newstatus((short)i, DIE);
|
||||
|
@ -354,7 +354,7 @@ static void checkexpl(PLAYER& plr, short i) {
|
|||
|
||||
void createSkeletonAI() {
|
||||
auto& e = enemy[SKELETONTYPE];
|
||||
e.info.Init(game.WH2 ? 35 : 24, game.WH2 ? 35 : 24, 1024, 120, 0, 64, false, game.WH2 ? 25 : 30, 0);
|
||||
e.info.Init(isWh2() ? 35 : 24, isWh2() ? 35 : 24, 1024, 120, 0, 64, false, isWh2() ? 25 : 30, 0);
|
||||
e.chase = chase;
|
||||
e.die = die;
|
||||
e.face = face;
|
||||
|
|
|
@ -84,7 +84,7 @@ static void attack(PLAYER& plr, short i) {
|
|||
if (plr.shockme < 0)
|
||||
if ((krand() & 1) != 0) {
|
||||
plr.shockme = 120;
|
||||
if (!game.WH2) {
|
||||
if (!isWh2()) {
|
||||
plr.lvl--;
|
||||
switch (plr.lvl) {
|
||||
case 1:
|
||||
|
@ -230,7 +230,7 @@ static void die(PLAYER& plr, short i) {
|
|||
static void nuked(PLAYER& plr, short i) {
|
||||
SPRITE& spr = sprite[i];
|
||||
|
||||
if (game.WH2) {
|
||||
if (isWh2()) {
|
||||
chunksofmeat(plr, i, spr.x, spr.y, spr.z, spr.sectnum, spr.ang);
|
||||
trailingsmoke(i, false);
|
||||
newstatus((short)i, DIE);
|
||||
|
@ -267,7 +267,7 @@ static void willowDrain(PLAYER& plr, short i) {
|
|||
|
||||
void createWillowAI() {
|
||||
auto& e = enemy[WILLOWTYPE];
|
||||
e.info.Init(32, 32, 512, 120, 0, 64, true, game.WH2 ? 5 : 400, 0);
|
||||
e.info.Init(32, 32, 512, 120, 0, 64, true, isWh2() ? 5 : 400, 0);
|
||||
e.chase = chase;
|
||||
e.attack = attack;
|
||||
e.face = face;
|
||||
|
|
|
@ -202,6 +202,10 @@ enum
|
|||
TBLACKKEY = 15,
|
||||
TGLASSKEY = 16,
|
||||
TIVORYKEY = 17,
|
||||
|
||||
MAXWEAPONS = 10,
|
||||
MAXPOTIONS = 5,
|
||||
|
||||
};
|
||||
|
||||
END_WH_NS
|
||||
|
|
20
source/games/whaven/src/item.h
Normal file
20
source/games/whaven/src/item.h
Normal file
|
@ -0,0 +1,20 @@
|
|||
#pragma once
|
||||
|
||||
struct Item {
|
||||
|
||||
using Callback = void (*)(PLAYER &plr, short i);
|
||||
|
||||
int sizx, sizy;
|
||||
boolean treasures, cflag;
|
||||
Callback pickup;
|
||||
|
||||
void Init(int sizx, int sizy, boolean treasure, boolean cflag, Callback call)
|
||||
{
|
||||
this->sizx = sizx;
|
||||
this->sizy = sizy;
|
||||
this->treasures = treasure;
|
||||
this->cflag = cflag;
|
||||
this->callback = call;
|
||||
}
|
||||
};
|
||||
|
1129
source/games/whaven/src/items.cpp
Normal file
1129
source/games/whaven/src/items.cpp
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,6 +1,8 @@
|
|||
#include "ns.h"
|
||||
#include "gamecontrol.h"
|
||||
|
||||
BEGIN_WH_NS
|
||||
|
||||
short KNIFEREADY;
|
||||
short KNIFEATTACK;
|
||||
short RFIST;
|
||||
|
@ -167,7 +169,7 @@ short SHIELD;
|
|||
|
||||
void InitNames()
|
||||
{
|
||||
if(!game.WH2) {
|
||||
if(!isWh2()) {
|
||||
KNIFEREADY = 1249;
|
||||
KNIFEATTACK = 1261;
|
||||
RFIST = 1268;
|
||||
|
|
|
@ -83,8 +83,16 @@ struct PLAYER {
|
|||
boolean noclip;
|
||||
|
||||
// no copy assignments for this one!
|
||||
PLAYER() = default;
|
||||
PLAYER(const PLAYER&) = delete;
|
||||
PLAYER& operator=(const PLAYER&) = delete;
|
||||
};
|
||||
|
||||
struct WEAPONINF {
|
||||
int daweapontics;
|
||||
int daweaponframe;
|
||||
int currx;
|
||||
int curry;
|
||||
};
|
||||
|
||||
END_WH_NS
|
||||
|
|
193
source/games/whaven/src/potions.cpp
Normal file
193
source/games/whaven/src/potions.cpp
Normal file
|
@ -0,0 +1,193 @@
|
|||
#include "ns.h"
|
||||
#include "wh.h"
|
||||
|
||||
BEGIN_WH_NS
|
||||
|
||||
int potiontilenum;
|
||||
|
||||
void potiontext(PLAYER& plr) {
|
||||
if( plr.potion[plr.currentpotion] > 0)
|
||||
switch(plr.currentpotion) {
|
||||
case 0:
|
||||
showmessage("Health Potion", 240);
|
||||
break;
|
||||
case 1:
|
||||
showmessage("Strength Potion", 240);
|
||||
break;
|
||||
case 2:
|
||||
showmessage("Cure Poison Potion", 240);
|
||||
break;
|
||||
case 3:
|
||||
showmessage("Resist Fire Potion", 240);
|
||||
break;
|
||||
case 4:
|
||||
showmessage("Invisibility Potion", 240);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void potionchange(int snum)
|
||||
{
|
||||
PLAYER& plr = player[snum];
|
||||
|
||||
int key = ((plr.pInput.bits & (15 << 16)) >> 16) - 1;
|
||||
if(key != -1 && key < 7)
|
||||
{
|
||||
if(key == 5 || key == 6)
|
||||
{
|
||||
key = ( key == 5 ? -1 : 1 );
|
||||
plr.currentpotion += key;
|
||||
if(plr.currentpotion < 0)
|
||||
plr.currentpotion = 4;
|
||||
if(plr.currentpotion >= MAXPOTIONS)
|
||||
plr.currentpotion = 0;
|
||||
} else plr.currentpotion = key;
|
||||
SND_Sound(S_BOTTLES);
|
||||
potiontext(plr);
|
||||
}
|
||||
}
|
||||
|
||||
void usapotion(PLAYER& plr) {
|
||||
|
||||
if( plr.currentpotion == 0 && plr.health >= plr.maxhealth )
|
||||
return;
|
||||
|
||||
if( plr.currentpotion == 2 && plr.poisoned == 0 )
|
||||
return;
|
||||
|
||||
if( plr.potion[plr.currentpotion] <= 0)
|
||||
return;
|
||||
else
|
||||
plr.potion[plr.currentpotion]--;
|
||||
|
||||
switch(plr.currentpotion) {
|
||||
case 0: // health potion
|
||||
if( plr.health+25 > plr.maxhealth) {
|
||||
plr.health=0;
|
||||
SND_Sound(S_DRINK);
|
||||
addhealth(plr, plr.maxhealth);
|
||||
}
|
||||
else {
|
||||
SND_Sound(S_DRINK);
|
||||
addhealth(plr, 25);
|
||||
}
|
||||
startblueflash(10);
|
||||
break;
|
||||
case 1: // strength
|
||||
plr.strongtime=3200;
|
||||
SND_Sound(S_DRINK);
|
||||
startredflash(10);
|
||||
break;
|
||||
case 2: // anti venom
|
||||
SND_Sound(S_DRINK);
|
||||
plr.poisoned=0;
|
||||
plr.poisontime=0;
|
||||
startwhiteflash(10);
|
||||
showmessage("poison cured", 360);
|
||||
addhealth(plr, 0);
|
||||
break;
|
||||
case 3: // fire resist
|
||||
SND_Sound(S_DRINK);
|
||||
plr.manatime=3200;
|
||||
startwhiteflash(10);
|
||||
if( lavasnd != -1 ) {
|
||||
stopsound(lavasnd);
|
||||
lavasnd = -1;
|
||||
}
|
||||
break;
|
||||
case 4: // invisi
|
||||
SND_Sound(S_DRINK);
|
||||
plr.invisibletime=3200;
|
||||
startgreenflash(10);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
boolean potionspace(PLAYER& plr, int vial) {
|
||||
if(plr.potion[vial] > 9)
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
void updatepotion(PLAYER& plr, int vial) {
|
||||
switch(vial) {
|
||||
case HEALTHPOTION:
|
||||
plr.potion[0]++;
|
||||
break;
|
||||
case STRENGTHPOTION:
|
||||
plr.potion[1]++;
|
||||
break;
|
||||
case ARMORPOTION:
|
||||
plr.potion[2]++;
|
||||
break;
|
||||
case FIREWALKPOTION:
|
||||
plr.potion[3]++;
|
||||
break;
|
||||
case INVISIBLEPOTION:
|
||||
plr.potion[4]++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void potionpic(PLAYER& plr, int currentpotion, int x, int y, int scale) {
|
||||
int tilenum = SFLASKBLUE;
|
||||
|
||||
if( netgame )
|
||||
return;
|
||||
x = x + mulscale(200, scale, 16);
|
||||
y = y - mulscale(94, scale, 16);
|
||||
engine.rotatesprite(x<<16,y<<16,scale,0,SPOTIONBACKPIC,0, 0, 8 | 16, 0, 0, xdim, ydim-1);
|
||||
engine.rotatesprite((x - mulscale(4, scale, 16))<<16,(y - mulscale(7, scale, 16))<<16,scale,0,SPOTIONARROW+currentpotion,0, 0, 8 | 16, 0, 0, xdim, ydim-1);
|
||||
|
||||
x += mulscale(4, scale, 16);
|
||||
for(int i = 0; i < MAXPOTIONS; i++) {
|
||||
if(plr.potion[i] < 0)
|
||||
plr.potion[i] = 0;
|
||||
if(plr.potion[i] > 0) {
|
||||
switch(i) {
|
||||
case 1:
|
||||
tilenum=SFLASKGREEN;
|
||||
break;
|
||||
case 2:
|
||||
tilenum=SFLASKOCHRE;
|
||||
break;
|
||||
case 3:
|
||||
tilenum=SFLASKRED;
|
||||
break;
|
||||
case 4:
|
||||
tilenum=SFLASKTAN;
|
||||
break;
|
||||
}
|
||||
potiontilenum=tilenum;
|
||||
|
||||
engine.rotatesprite((x + mulscale(i*20, scale, 16))<<16,(y + mulscale(19, scale, 16))<<16,scale,0,potiontilenum,0, 0, 8 | 16, 0, 0, xdim, ydim-1);
|
||||
char potionbuf[50];
|
||||
Bitoa(plr.potion[i],potionbuf);
|
||||
|
||||
game.getFont(3).drawText(x + mulscale(7 +(i*20), scale, 16),y+mulscale(7, scale, 16), potionbuf, scale, 0, 0, TextAlign.Left, 0, false);
|
||||
}
|
||||
else
|
||||
engine.rotatesprite((x + mulscale(i*20, scale, 16))<<16,(y + mulscale(19, scale, 16))<<16,scale,0,SFLASKBLACK,0, 0, 8 | 16, 0, 0, xdim, ydim-1);
|
||||
}
|
||||
}
|
||||
|
||||
void randompotion(int i) {
|
||||
if( (engine.krand()%100) > 20)
|
||||
return;
|
||||
|
||||
int j=engine.insertsprite(sprite[i].sectnum,(short)0);
|
||||
|
||||
sprite[j].x=sprite[i].x;
|
||||
sprite[j].y=sprite[i].y;
|
||||
sprite[j].z=sprite[i].z-(12<<8);
|
||||
sprite[j].shade=-12;
|
||||
sprite[j].pal=0;
|
||||
sprite[j].cstat=0;
|
||||
sprite[j].cstat&=~3;
|
||||
sprite[j].xrepeat=64;
|
||||
sprite[j].yrepeat=64;
|
||||
int type = engine.krand()%4;
|
||||
sprite[j].picnum = (short) (FLASKBLUE + type);
|
||||
sprite[j].detail = (short) (FLASKBLUETYPE + type);
|
||||
}
|
301
source/games/whaven/src/sndnames.cpp
Normal file
301
source/games/whaven/src/sndnames.cpp
Normal file
|
@ -0,0 +1,301 @@
|
|||
#include "ns.h"
|
||||
#include "gamecontrol.h"
|
||||
|
||||
int S_THUNDER1 = 0;
|
||||
int S_THUNDER2 = 1;
|
||||
int S_THUNDER3 = 2;
|
||||
int S_THUNDER4 = 3;
|
||||
int S_WINDLOOP1 = 4;
|
||||
int S_WAVELOOP1 = 5;
|
||||
int S_LAVALOOP1 = 6;
|
||||
int S_FIRELOOP1 = 7;
|
||||
int S_STONELOOP1 = 8;
|
||||
int S_BATSLOOP = 9;
|
||||
int S_PLRWEAPON0 = 10;
|
||||
int S_PLRWEAPON1 = 11;
|
||||
int S_PLRWEAPON2 = 12;
|
||||
int S_PLRWEAPON3 = 13;
|
||||
int S_PLRWEAPON4 = 14;
|
||||
int S_GOBLIN1 = 15;
|
||||
int S_GOBLIN2 = 16;
|
||||
int S_GOBLIN3 = 17;
|
||||
int S_GOBPAIN1 = 18;
|
||||
int S_GOBPAIN2 = 19;
|
||||
int S_GOBDIE1 = 20;
|
||||
int S_GOBDIE2 = 21;
|
||||
int S_GOBDIE3 = 22;
|
||||
int S_KSNARL1 = 23;
|
||||
int S_KSNARL2 = 24;
|
||||
int S_KSNARL3 = 25;
|
||||
int S_KSNARL4 = 26;
|
||||
int S_KPAIN1 = 27;
|
||||
int S_KPAIN2 = 28;
|
||||
int S_KDIE1 = 29;
|
||||
int S_KDIE2 = 30;
|
||||
int S_DEMON1 = 31;
|
||||
int S_DEMON2 = 32;
|
||||
int S_DEMON3 = 33;
|
||||
int S_DEMON4 = 34;
|
||||
int S_DEMON5 = 35;
|
||||
int S_DEMONDIE1 = 36;
|
||||
int S_DEMONDIE2 = 37;
|
||||
int S_MSNARL1 = 38;
|
||||
int S_MSNARL2 = 39;
|
||||
int S_MSNARL3 = 40;
|
||||
int S_MSNARL4 = 41;
|
||||
int S_MPAIN1 = 42;
|
||||
int S_MDEATH1 = 43;
|
||||
int S_DRAGON1 = 44;
|
||||
int S_DRAGON2 = 45;
|
||||
int S_DRAGON3 = 46;
|
||||
int S_RIP1 = 47;
|
||||
int S_RIP2 = 48;
|
||||
int S_RIP3 = 49;
|
||||
int S_SKELHIT1 = 50;
|
||||
int S_SKELHIT2 = 51;
|
||||
int S_SKELETONDIE = 52;
|
||||
int S_GUARDIAN1 = 53;
|
||||
int S_GUARDIAN2 = 54;
|
||||
int S_GUARDIANPAIN1 = 55;
|
||||
int S_GUARDIANPAIN2 = 56;
|
||||
int S_GUARDIANDIE = 57;
|
||||
int S_WISP = 58;
|
||||
int S_WISP2 = 59;
|
||||
int S_SPLASH1 = 60;
|
||||
int S_SPLASH2 = 61;
|
||||
int S_SPLASH3 = 62;
|
||||
int S_SPLASH4 = 63;
|
||||
int S_SPLASH5 = 64;
|
||||
int S_SPLASH6 = 65;
|
||||
int S_WILLOWDIE = 66;
|
||||
int S_FATWITCHDIE = 67;
|
||||
int S_JUDY1 = 68;
|
||||
int S_JUDY2 = 69;
|
||||
int S_JUDY3 = 70;
|
||||
int S_JUDY4 = 71;
|
||||
int S_JUDYDIE = 72;
|
||||
int S_SKULLWITCH1 = 73;
|
||||
int S_SKULLWITCH2 = 74;
|
||||
int S_SKULLWITCH3 = 75;
|
||||
int S_SKULLWITCHDIE = 76;
|
||||
int S_GRONDEATHA = 77;
|
||||
int S_GRONDEATHB = 78;
|
||||
int S_GRONDEATHC = 79;
|
||||
int S_CHAIN1 = 80;
|
||||
int S_FLAME1 = 81;
|
||||
int S_GRONPAINA = 82;
|
||||
int S_GRONPAINB = 83;
|
||||
int S_GRONPAINC = 84;
|
||||
int S_CLUNK = 85;
|
||||
int S_DEMONTHROW = 86;
|
||||
int S_WITCHTHROW = 87;
|
||||
int S_DOOR1 = 88;
|
||||
int S_DOOR2 = 89;
|
||||
int S_DOOR3 = 90;
|
||||
int S_CREAKDOOR1 = 91;
|
||||
int S_CREAKDOOR2 = 92;
|
||||
int S_CREAKDOOR3 = 93;
|
||||
int S_STING1 = 94;
|
||||
int S_STING2 = 95;
|
||||
int S_POTION1 = 96;
|
||||
int S_GENTHROW = 97;
|
||||
int S_GENSWING = 98;
|
||||
int S_ARROWHIT = 99;
|
||||
int S_WALLHIT1 = 100;
|
||||
int S_GONG = 101;
|
||||
int S_SPELL1 = 102;
|
||||
int S_FREEZE = 103;
|
||||
int S_FREEZEDIE = 104;
|
||||
int S_TRAP1 = 105;
|
||||
int S_TRAP2 = 106;
|
||||
int S_RATS1 = 107;
|
||||
int S_RATS2 = 108;
|
||||
int S_WINDLOOP2 = 109;
|
||||
int S_BREATH1 = 110;
|
||||
int S_BREATH2 = 111;
|
||||
int S_PUSH1 = 112;
|
||||
int S_PUSH2 = 113;
|
||||
int S_PLRPAIN1 = 114;
|
||||
int S_PLRPAIN2 = 115;
|
||||
int S_GORE1 = 116;
|
||||
int S_GORE2 = 117;
|
||||
int S_GORE1A = 118;
|
||||
int S_GORE1B = 119;
|
||||
int S_DEADSTEP = 120;
|
||||
int S_HEARTBEAT = 121;
|
||||
int S_SOFTCHAINWALK = 122;
|
||||
int S_SOFTCREAKWALK = 123;
|
||||
int S_LOUDCHAINWALK = 124;
|
||||
int S_GRATEWALK = 125;
|
||||
int S_SCARYDUDE = 126;
|
||||
int S_WATERY = 127;
|
||||
int S_GLASSBREAK1 = 128;
|
||||
int S_GLASSBREAK2 = 129;
|
||||
int S_GLASSBREAK3 = 130;
|
||||
int S_TREASURE1 = 131;
|
||||
int S_SWORD1 = 132;
|
||||
int S_SWORD2 = 133;
|
||||
int S_SWORDCLINK1 = 134;
|
||||
int S_SWORDCLINK2 = 135;
|
||||
int S_SWORDCLINK3 = 136;
|
||||
int S_SWORDCLINK4 = 137;
|
||||
int S_SOCK1 = 138;
|
||||
int S_SOCK2 = 139;
|
||||
int S_SOCK3 = 140;
|
||||
int S_SOCK4 = 141;
|
||||
int S_KOBOLDHIT = 142;
|
||||
int S_SPIDERBITE = 143;
|
||||
int S_FIREBALL = 144;
|
||||
int S_WOOD1 = 145;
|
||||
int S_CHAINDOOR1 = 146;
|
||||
int S_PULLCHAIN1 = 147;
|
||||
int S_PICKUPAXE = 148;
|
||||
int S_EXPLODE = 149;
|
||||
int S_SKELSEE = 150;
|
||||
int S_BARRELBREAK = 151;
|
||||
int S_WARP = 152;
|
||||
int S_PICKUPFLAG = 155;
|
||||
int S_DROPFLAG = 156;
|
||||
int S_LAUGH = 157;
|
||||
int S_DRINK = 158;
|
||||
int S_PAGE = 159;
|
||||
int S_BOTTLES = 160;
|
||||
int S_CRACKING = 161;
|
||||
int S_PLRDIE1 = 162;
|
||||
int S_FATLAUGH = 163;
|
||||
|
||||
void InitSoundNames()
|
||||
{
|
||||
if (isWh2()) {
|
||||
S_WINDLOOP1 = 3;
|
||||
S_WAVELOOP1 = 4;
|
||||
S_LAVALOOP1 = 5;
|
||||
S_FIRELOOP1 = 6;
|
||||
S_STONELOOP1 = 7;
|
||||
S_BATSLOOP = 8;
|
||||
S_PLRWEAPON0 = 9;
|
||||
S_PLRWEAPON1 = 10;
|
||||
S_PLRWEAPON2 = 11;
|
||||
S_PLRWEAPON3 = 12;
|
||||
S_PLRWEAPON4 = 13;
|
||||
S_KSNARL1 = 14;
|
||||
S_KSNARL2 = 15;
|
||||
S_KSNARL3 = 16;
|
||||
S_KSNARL4 = 17;
|
||||
S_KPAIN1 = 18;
|
||||
S_KPAIN2 = 19;
|
||||
S_KDIE1 = 20;
|
||||
S_KDIE2 = 21;
|
||||
S_DEMON1 = 22;
|
||||
S_DEMON2 = 23;
|
||||
S_DEMON3 = 24;
|
||||
S_DEMON4 = 25;
|
||||
S_DEMON5 = 26;
|
||||
S_DEMONDIE1 = 27;
|
||||
S_DEMONDIE2 = 28;
|
||||
S_MSNARL1 = 29;
|
||||
S_MSNARL2 = 30;
|
||||
S_MSNARL3 = 31;
|
||||
S_MSNARL4 = 32;
|
||||
S_MPAIN1 = 33;
|
||||
S_MDEATH1 = 34;
|
||||
S_RIP1 = 35;
|
||||
S_RIP2 = 36;
|
||||
S_RIP3 = 37;
|
||||
S_SKELHIT1 = 38;
|
||||
S_SKELHIT2 = 39;
|
||||
S_SKELETONDIE = 40;
|
||||
S_SKELSEE = 41;
|
||||
S_GUARDIAN1 = 42;
|
||||
S_GUARDIAN2 = 43;
|
||||
S_GUARDIANPAIN1 = 44;
|
||||
S_GUARDIANPAIN2 = 45;
|
||||
S_GUARDIANDIE = 46;
|
||||
S_WISP = 47;
|
||||
S_WISP2 = 48;
|
||||
S_SPLASH1 = 49;
|
||||
S_SPLASH2 = 50;
|
||||
S_SPLASH3 = 51;
|
||||
S_SPLASH4 = 52;
|
||||
S_SPLASH5 = 53;
|
||||
S_WILLOWDIE = 54;
|
||||
S_JUDY1 = 55;
|
||||
S_JUDYDIE = 56;
|
||||
S_CHAIN1 = 57;
|
||||
S_FLAME1 = 58;
|
||||
S_CLUNK = 59;
|
||||
S_DEMONTHROW = 60;
|
||||
S_DOOR1 = 61;
|
||||
S_DOOR2 = 62;
|
||||
S_DOOR3 = 63;
|
||||
S_CREAKDOOR1 = 64;
|
||||
S_CREAKDOOR2 = 65;
|
||||
S_CREAKDOOR3 = 66;
|
||||
S_STING1 = 67;
|
||||
S_STING2 = 68;
|
||||
S_POTION1 = 69;
|
||||
S_GENTHROW = 70;
|
||||
S_GENSWING = 71;
|
||||
S_ARROWHIT = 72;
|
||||
S_WALLHIT1 = 73;
|
||||
S_GONG = 74;
|
||||
S_SPELL1 = 75;
|
||||
S_FREEZE = 76;
|
||||
S_FREEZEDIE = 77;
|
||||
S_TRAP1 = 78;
|
||||
S_TRAP2 = 79;
|
||||
S_RATS1 = 80;
|
||||
S_RATS2 = 81;
|
||||
S_WINDLOOP2 = 82;
|
||||
S_BREATH1 = 83;
|
||||
S_BREATH2 = 84;
|
||||
S_PUSH1 = 85;
|
||||
S_PUSH2 = 86;
|
||||
S_PLRPAIN1 = 87;
|
||||
S_PLRPAIN2 = 88;
|
||||
S_GORE1 = 89;
|
||||
S_GORE2 = 90;
|
||||
S_GORE1A = 91;
|
||||
S_GORE1B = 92;
|
||||
S_DEADSTEP = 93;
|
||||
S_HEARTBEAT = 94;
|
||||
S_SOFTCHAINWALK = 95;
|
||||
S_SOFTCREAKWALK = 96;
|
||||
S_LOUDCHAINWALK = 97;
|
||||
S_SCARYDUDE = 98;
|
||||
S_WATERY = 99;
|
||||
S_GLASSBREAK1 = 100;
|
||||
S_GLASSBREAK2 = 101;
|
||||
S_GLASSBREAK3 = 102;
|
||||
S_TREASURE1 = 103;
|
||||
S_SWORD1 = 104;
|
||||
S_SWORD2 = 105;
|
||||
S_SWORDCLINK1 = 106;
|
||||
S_SWORDCLINK2 = 107;
|
||||
S_SWORDCLINK3 = 108;
|
||||
S_SWORDCLINK4 = 109;
|
||||
S_SOCK1 = 110;
|
||||
S_SOCK2 = 111;
|
||||
S_SOCK3 = 112;
|
||||
S_SOCK4 = 113;
|
||||
S_KOBOLDHIT = 114;
|
||||
S_FIREBALL = 115;
|
||||
S_PULLCHAIN1 = 116;
|
||||
S_PICKUPAXE = 117;
|
||||
S_EXPLODE = 118;
|
||||
S_BARRELBREAK = 119;
|
||||
S_WARP = 120;
|
||||
S_PICKUPFLAG = 121;
|
||||
S_DROPFLAG = 122;
|
||||
S_LAUGH = 123;
|
||||
S_DRINK = 124;
|
||||
S_PAGE = 125;
|
||||
S_BOTTLES = 126;
|
||||
S_CRACKING = 127;
|
||||
S_PLRDIE1 = 128;
|
||||
S_GRONDEATHA = 136;
|
||||
S_GRONDEATHB = 137;
|
||||
S_GRONDEATHC = 138;
|
||||
S_GRONPAINA = 142;
|
||||
}
|
||||
}
|
203
source/games/whaven/src/sndnames.h
Normal file
203
source/games/whaven/src/sndnames.h
Normal file
|
@ -0,0 +1,203 @@
|
|||
#include "ns.h"
|
||||
|
||||
BEGIN_WH_NS
|
||||
|
||||
|
||||
extern int S_THUNDER1; //0;
|
||||
extern int S_THUNDER2; //1;
|
||||
extern int S_THUNDER3; //2;
|
||||
extern int S_THUNDER4; //3;
|
||||
extern int S_WINDLOOP1; //4;
|
||||
extern int S_WAVELOOP1; //5;
|
||||
extern int S_LAVALOOP1; //6;
|
||||
extern int S_FIRELOOP1; //7;
|
||||
extern int S_STONELOOP1; //8;
|
||||
extern int S_BATSLOOP; //9;
|
||||
extern int S_PLRWEAPON0; //10;
|
||||
extern int S_PLRWEAPON1; //11;
|
||||
extern int S_PLRWEAPON2; //12;
|
||||
extern int S_PLRWEAPON3; //13;
|
||||
extern int S_PLRWEAPON4; //14;
|
||||
extern int S_GOBLIN1; //15;
|
||||
extern int S_GOBLIN2; //16;
|
||||
extern int S_GOBLIN3; //17;
|
||||
extern int S_GOBPAIN1; //18;
|
||||
extern int S_GOBPAIN2; //19;
|
||||
extern int S_GOBDIE1; //20;
|
||||
extern int S_GOBDIE2; //21;
|
||||
extern int S_GOBDIE3; //22;
|
||||
extern int S_KSNARL1; //23;
|
||||
extern int S_KSNARL2; //24;
|
||||
extern int S_KSNARL3; //25;
|
||||
extern int S_KSNARL4; //26;
|
||||
extern int S_KPAIN1; //27;
|
||||
extern int S_KPAIN2; //28;
|
||||
extern int S_KDIE1; //29;
|
||||
extern int S_KDIE2; //30;
|
||||
extern int S_DEMON1; //31;
|
||||
extern int S_DEMON2; //32;
|
||||
extern int S_DEMON3; //33;
|
||||
extern int S_DEMON4; //34;
|
||||
extern int S_DEMON5; //35;
|
||||
extern int S_DEMONDIE1; //36;
|
||||
extern int S_DEMONDIE2; //37;
|
||||
extern int S_MSNARL1; //38;
|
||||
extern int S_MSNARL2; //39;
|
||||
extern int S_MSNARL3; //40;
|
||||
extern int S_MSNARL4; //41;
|
||||
extern int S_MPAIN1; //42;
|
||||
extern int S_MDEATH1; //43;
|
||||
extern int S_DRAGON1; //44;
|
||||
extern int S_DRAGON2; //45;
|
||||
extern int S_DRAGON3; //46;
|
||||
extern int S_RIP1; //47;
|
||||
extern int S_RIP2; //48;
|
||||
extern int S_RIP3; //49;
|
||||
extern int S_SKELHIT1; //50;
|
||||
extern int S_SKELHIT2; //51;
|
||||
extern int S_SKELETONDIE; //52;
|
||||
extern int S_GUARDIAN1; //53;
|
||||
extern int S_GUARDIAN2; //54;
|
||||
extern int S_GUARDIANPAIN1; //55;
|
||||
extern int S_GUARDIANPAIN2; //56;
|
||||
extern int S_GUARDIANDIE; //57;
|
||||
extern int S_WISP; //58;
|
||||
extern int S_WISP2; //59;
|
||||
extern int S_SPLASH1; //60;
|
||||
extern int S_SPLASH2; //61;
|
||||
extern int S_SPLASH3; //62;
|
||||
extern int S_SPLASH4; //63;
|
||||
extern int S_SPLASH5; //64;
|
||||
extern int S_SPLASH6; //65;
|
||||
extern int S_WILLOWDIE; //66;
|
||||
extern int S_FATWITCHDIE; //67;
|
||||
extern int S_JUDY1; //68;
|
||||
extern int S_JUDY2; //69;
|
||||
extern int S_JUDY3; //70;
|
||||
extern int S_JUDY4; //71;
|
||||
extern int S_JUDYDIE; //72;
|
||||
extern int S_SKULLWITCH1; //73;
|
||||
extern int S_SKULLWITCH2; //74;
|
||||
extern int S_SKULLWITCH3; //75;
|
||||
extern int S_SKULLWITCHDIE; //76;
|
||||
extern int S_GRONDEATHA; //77;
|
||||
extern int S_GRONDEATHB; //78;
|
||||
extern int S_GRONDEATHC; //79;
|
||||
extern int S_CHAIN1; //80;
|
||||
extern int S_FLAME1; //81;
|
||||
extern int S_GRONPAINA; //82;
|
||||
extern int S_GRONPAINB; //83;
|
||||
extern int S_GRONPAINC; //84;
|
||||
extern int S_CLUNK; //85;
|
||||
extern int S_DEMONTHROW; //86;
|
||||
extern int S_WITCHTHROW; //87;
|
||||
extern int S_DOOR1; //88;
|
||||
extern int S_DOOR2; //89;
|
||||
extern int S_DOOR3; //90;
|
||||
extern int S_CREAKDOOR1; //91;
|
||||
extern int S_CREAKDOOR2; //92;
|
||||
extern int S_CREAKDOOR3; //93;
|
||||
extern int S_STING1; //94;
|
||||
extern int S_STING2; //95;
|
||||
extern int S_POTION1; //96;
|
||||
extern int S_GENTHROW; //97;
|
||||
extern int S_GENSWING; //98;
|
||||
extern int S_ARROWHIT; //99;
|
||||
extern int S_WALLHIT1; //100;
|
||||
extern int S_GONG; //101;
|
||||
extern int S_SPELL1; //102;
|
||||
extern int S_FREEZE; //103;
|
||||
extern int S_FREEZEDIE; //104;
|
||||
extern int S_TRAP1; //105;
|
||||
extern int S_TRAP2; //106;
|
||||
extern int S_RATS1; //107;
|
||||
extern int S_RATS2; //108;
|
||||
extern int S_WINDLOOP2; //109;
|
||||
extern int S_BREATH1; //110;
|
||||
extern int S_BREATH2; //111;
|
||||
extern int S_PUSH1; //112;
|
||||
extern int S_PUSH2; //113;
|
||||
extern int S_PLRPAIN1; //114;
|
||||
extern int S_PLRPAIN2; //115;
|
||||
extern int S_GORE1; //116;
|
||||
extern int S_GORE2; //117;
|
||||
extern int S_GORE1A; //118;
|
||||
extern int S_GORE1B; //119;
|
||||
extern int S_DEADSTEP; //120;
|
||||
extern int S_HEARTBEAT; //121;
|
||||
extern int S_SOFTCHAINWALK; //122;
|
||||
extern int S_SOFTCREAKWALK; //123;
|
||||
extern int S_LOUDCHAINWALK; //124;
|
||||
extern int S_GRATEWALK; //125;
|
||||
extern int S_SCARYDUDE; //126;
|
||||
extern int S_WATERY; //127;
|
||||
extern int S_GLASSBREAK1; //128;
|
||||
extern int S_GLASSBREAK2; //129;
|
||||
extern int S_GLASSBREAK3; //130;
|
||||
extern int S_TREASURE1; //131;
|
||||
extern int S_SWORD1; //132;
|
||||
extern int S_SWORD2; //133;
|
||||
extern int S_SWORDCLINK1; //134;
|
||||
extern int S_SWORDCLINK2; //135;
|
||||
extern int S_SWORDCLINK3; //136;
|
||||
extern int S_SWORDCLINK4; //137;
|
||||
extern int S_SOCK1; //138;
|
||||
extern int S_SOCK2; //139;
|
||||
extern int S_SOCK3; //140;
|
||||
extern int S_SOCK4; //141;
|
||||
extern int S_KOBOLDHIT; //142;
|
||||
extern int S_SPIDERBITE; //143;
|
||||
extern int S_FIREBALL; //144;
|
||||
extern int S_WOOD1; //145;
|
||||
extern int S_CHAINDOOR1; //146;
|
||||
extern int S_PULLCHAIN1; //147;
|
||||
extern int S_PICKUPAXE; //148;
|
||||
extern int S_EXPLODE; //149;
|
||||
extern int S_SKELSEE; //150;
|
||||
extern int S_BARRELBREAK; //151;
|
||||
extern int S_WARP; //152;
|
||||
extern int S_PICKUPFLAG; //155;
|
||||
extern int S_DROPFLAG; //156;
|
||||
extern int S_LAUGH; //157;
|
||||
extern int S_DRINK; //158;
|
||||
extern int S_PAGE; //159;
|
||||
extern int S_BOTTLES; //160;
|
||||
extern int S_CRACKING; //161;
|
||||
extern int S_PLRDIE1; //162;
|
||||
extern int S_FATLAUGH; //163;
|
||||
|
||||
|
||||
enum WHSounds {
|
||||
|
||||
S_SPELL2 = 153,
|
||||
S_THROWPIKE = 154,
|
||||
|
||||
// WH2 Sounds
|
||||
S_AGM_ATTACK = 129,
|
||||
S_AGM_PAIN1 = 130,
|
||||
S_AGM_PAIN2 = 131,
|
||||
S_AGM_PAIN3 = 132,
|
||||
S_AGM_DIE1 = 133,
|
||||
S_AGM_DIE2 = 134,
|
||||
S_AGM_DIE3 = 135,
|
||||
S_FIRESWING = 145,
|
||||
S_FIREWEAPONLOOP = 146,
|
||||
S_ENERGYWEAPONLOOP = 147,
|
||||
S_ENERGYSWING = 148,
|
||||
S_BIGGLASSBREAK1 = 149,
|
||||
S_IMPGROWL1 = 152,
|
||||
S_IMPGROWL2 = 153,
|
||||
S_IMPGROWL3 = 154,
|
||||
S_IMPDIE1 = 155,
|
||||
S_IMPDIE2 = 156,
|
||||
S_SWINGDOOR = 157,
|
||||
S_NUKESPELL = 158,
|
||||
S_DOORSPELL = 159,
|
||||
S_FIRESPELL = 160,
|
||||
S_GENERALMAGIC1 = 161,
|
||||
S_GENERALMAGIC2 = 162,
|
||||
S_GENERALMAGIC3 = 163,
|
||||
S_GENERALMAGIC4 = 164,
|
||||
};
|
||||
|
||||
END_WH_NS
|
479
source/games/whaven/src/spellbooks.cpp
Normal file
479
source/games/whaven/src/spellbooks.cpp
Normal file
|
@ -0,0 +1,479 @@
|
|||
#include "ns.h"
|
||||
#include "wh.h"
|
||||
|
||||
BEGIN_WH_NS
|
||||
|
||||
void activatedaorb(PLAYER& plr) {
|
||||
if (plr.orbammo[plr.currentorb] <= 0)
|
||||
return;
|
||||
|
||||
switch (plr.currentorb) {
|
||||
case 0: // SCARE
|
||||
// shadowtime=1200+(plr.lvl*120);
|
||||
break;
|
||||
case 1: // NIGHT VISION
|
||||
// nightglowtime=2400+(plr.lvl*600);
|
||||
break;
|
||||
case 2: // FREEZE
|
||||
plr.orbactive[plr.currentorb] = -1;
|
||||
break;
|
||||
case 3: // MAGIC ARROW
|
||||
plr.orbactive[plr.currentorb] = -1;
|
||||
break;
|
||||
case 4: // OPEN DOORS
|
||||
plr.orbactive[plr.currentorb] = -1;
|
||||
break;
|
||||
case 5: // FLY
|
||||
// plr.orbactive[currentorb]=3600+(plr.lvl*600);
|
||||
break;
|
||||
case 6: // FIREBALL
|
||||
plr.orbactive[plr.currentorb] = -1;
|
||||
break;
|
||||
case 7: // NUKE
|
||||
plr.orbactive[plr.currentorb] = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
if (plr.orbammo[plr.currentorb] <= 0) {
|
||||
plr.orb[plr.currentorb] = 0;
|
||||
return;
|
||||
} else
|
||||
plr.orbammo[plr.currentorb]--;
|
||||
|
||||
plr.currweaponfired = 4;
|
||||
plr.currweapontics = isWh2() ? wh2throwanimtics[plr.currentorb][0].daweapontics : throwanimtics[plr.currentorb][0].daweapontics;
|
||||
}
|
||||
|
||||
void castaorb(PLAYER& plr) {
|
||||
int k;
|
||||
float daang;
|
||||
|
||||
switch (plr.currentorb) {
|
||||
case 0: // SCARE
|
||||
if (isWh2())
|
||||
playsound_loc(S_GENERALMAGIC4, plr.x, plr.y);
|
||||
plr.shadowtime = ((plr.lvl + 1) * 120) << 2;
|
||||
break;
|
||||
case 1: // NIGHTVISION
|
||||
plr.nightglowtime = 3600 + (plr.lvl * 120);
|
||||
break;
|
||||
case 2: // FREEZE
|
||||
if (isWh2())
|
||||
playsound_loc(S_GENERALMAGIC3, plr.x, plr.y);
|
||||
else
|
||||
playsound_loc(S_SPELL1, plr.x, plr.y);
|
||||
daang = plr.ang;
|
||||
shootgun(plr, daang, 6);
|
||||
break;
|
||||
case 3: // MAGIC ARROW
|
||||
if (isWh2()) {
|
||||
lockon(plr,10,2);
|
||||
playsound_loc(S_GENERALMAGIC2, plr.x, plr.y);
|
||||
}
|
||||
else {
|
||||
daang = BClampAngle(plr.ang - 36);
|
||||
for (k = 0; k < 10; k++) {
|
||||
daang = BClampAngle(daang + (k << 1));
|
||||
shootgun(plr, daang, 2);
|
||||
}
|
||||
playsound_loc(S_SPELL1, plr.x, plr.y);
|
||||
}
|
||||
break;
|
||||
case 4: // OPEN DOORS
|
||||
daang = plr.ang;
|
||||
shootgun(plr, daang, 7);
|
||||
if (isWh2())
|
||||
playsound_loc(S_DOORSPELL, plr.x, plr.y);
|
||||
else
|
||||
playsound_loc(S_SPELL1, plr.x, plr.y);
|
||||
break;
|
||||
case 5: // FLY
|
||||
plr.orbactive[plr.currentorb] = 3600 + (plr.lvl * 120);
|
||||
if (isWh2())
|
||||
playsound_loc(S_GENERALMAGIC1, plr.x, plr.y);
|
||||
else
|
||||
playsound_loc(S_SPELL1, plr.x, plr.y);
|
||||
break;
|
||||
case 6: // FIREBALL
|
||||
if (isWh2()) {
|
||||
lockon(plr,3,3);
|
||||
playsound_loc(S_FIRESPELL, plr.x, plr.y);
|
||||
}
|
||||
else {
|
||||
daang = plr.ang;
|
||||
shootgun(plr, daang, 3);
|
||||
playsound_loc(S_SPELL1, plr.x, plr.y);
|
||||
}
|
||||
break;
|
||||
case 7: // NUKE
|
||||
daang = plr.ang;
|
||||
shootgun(plr, daang, 4);
|
||||
if (isWh2())
|
||||
playsound_loc(S_NUKESPELL, plr.x, plr.y);
|
||||
else
|
||||
playsound_loc(S_SPELL1, plr.x, plr.y);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void spellswitch(PLAYER& plr, int j)
|
||||
{
|
||||
int i = plr.currentorb;
|
||||
while(i >= 0 && i < MAXNUMORBS) {
|
||||
i += j;
|
||||
|
||||
if(i == -1) i = MAXNUMORBS - 1;
|
||||
else if(i == MAXNUMORBS) i = 0;
|
||||
|
||||
if(plr.spellbookflip != 0 || i == plr.currentorb)
|
||||
break;
|
||||
|
||||
if (changebook(plr, i)) {
|
||||
displayspelltext(plr);
|
||||
plr.spelltime = 360;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void bookprocess(int snum) {
|
||||
PLAYER& plr = player[snum];
|
||||
|
||||
if (plr.currweaponanim == 0 && plr.currweaponflip == 0) {
|
||||
int bits = plr.pInput.bits;
|
||||
int spell = ((bits & (15 << 12)) >> 12) - 1;
|
||||
|
||||
if(spell != -1 && spell < 10)
|
||||
{
|
||||
if(spell != 9 && spell != 8) {
|
||||
if (changebook(plr, spell)) {
|
||||
displayspelltext(plr);
|
||||
plr.spelltime = 360;
|
||||
} else return;
|
||||
} else
|
||||
spellswitch(plr, spell == 9 ? -1 : 1);
|
||||
plr.orbshot = 0;
|
||||
}
|
||||
}
|
||||
|
||||
for (int j = 0; j < MAXNUMORBS; j++) {
|
||||
if (plr.orbactive[j] > -1) {
|
||||
plr.orbactive[j] -= TICSPERFRAME;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
boolean changebook(PLAYER& plr, int i) {
|
||||
if(plr.orbammo[i] <= 0 || plr.currentorb == i)
|
||||
return false;
|
||||
plr.currentorb = i;
|
||||
if (plr.spellbookflip == 0) {
|
||||
plr.spellbook = 0;
|
||||
plr.spellbooktics = 10;
|
||||
plr.spellbookflip = 1;
|
||||
SND_Sound(S_PAGE);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean lvlspellcheck(PLAYER& plr) {
|
||||
if(isWh2()) return true;
|
||||
|
||||
switch (plr.currentorb) {
|
||||
case 0:
|
||||
case 1:
|
||||
return true;
|
||||
case 2:
|
||||
if (plr.lvl > 1)
|
||||
return true;
|
||||
else
|
||||
showmessage("must attain 2nd level", 360);
|
||||
break;
|
||||
case 3:
|
||||
if (plr.lvl > 1)
|
||||
return true;
|
||||
else
|
||||
showmessage("must attain 2nd level", 360);
|
||||
break;
|
||||
case 4:
|
||||
if (plr.lvl > 2)
|
||||
return true;
|
||||
else
|
||||
showmessage("must attain 3rd level", 360);
|
||||
break;
|
||||
case 5:
|
||||
if (plr.lvl > 2)
|
||||
return true;
|
||||
else
|
||||
showmessage("must attain 3rd level", 360);
|
||||
|
||||
break;
|
||||
case 6:
|
||||
if (plr.lvl > 3)
|
||||
return true;
|
||||
else
|
||||
showmessage("must attain 4th level", 360);
|
||||
break;
|
||||
case 7:
|
||||
if (plr.lvl > 4)
|
||||
return true;
|
||||
else
|
||||
showmessage("must attain 5th level", 360);
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void speelbookprocess(PLAYER& plr) {
|
||||
if (plr.spelltime > 0)
|
||||
plr.spelltime -= TICSPERFRAME;
|
||||
|
||||
if (plr.spellbookflip == 1) {
|
||||
plr.spellbooktics -= TICSPERFRAME;
|
||||
if (plr.spellbooktics < 0)
|
||||
plr.spellbook++;
|
||||
if (plr.spellbook > 8)
|
||||
plr.spellbook = 8;
|
||||
if (plr.spellbook == 8)
|
||||
plr.spellbookflip = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void nukespell(PLAYER& plr, short j) {
|
||||
if(sprite[j].detail != WILLOWTYPE && sprite[j].pal == 6) //don't nuke freezed enemies
|
||||
return;
|
||||
|
||||
if (isWh2()) {
|
||||
// dont nuke a shade
|
||||
if (sprite[j].shade > 30)
|
||||
return;
|
||||
|
||||
newstatus(j, NUKED);
|
||||
sprite[j].pal = 0;
|
||||
sprite[j].cstat |= 1;
|
||||
sprite[j].cstat &= ~3;
|
||||
sprite[j].shade = 6;
|
||||
sprite[j].lotag = 360;
|
||||
sprite[j].ang = (short) plr.ang;
|
||||
sprite[j].hitag = 0;
|
||||
addscore(plr, 150);
|
||||
|
||||
int k = engine.insertsprite(sprite[j].sectnum, NUKED);
|
||||
sprite[k].lotag = 360;
|
||||
sprite[k].xrepeat = 30;
|
||||
sprite[k].yrepeat = 12;
|
||||
sprite[k].picnum = ZFIRE;
|
||||
sprite[k].pal = 0;
|
||||
sprite[k].ang = sprite[j].ang;
|
||||
sprite[k].x = sprite[j].x;
|
||||
sprite[k].y = sprite[j].y;
|
||||
sprite[k].z = sprite[j].z;
|
||||
sprite[k].cstat = sprite[j].cstat;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
switch (sprite[j].detail) {
|
||||
case WILLOWTYPE:
|
||||
case SPIDERTYPE:
|
||||
engine.deletesprite((short) j);
|
||||
addscore(plr, 10);
|
||||
break;
|
||||
case KOBOLDTYPE:
|
||||
sprite[j].picnum = KOBOLDCHAR;
|
||||
newstatus(j, NUKED);
|
||||
sprite[j].pal = 0;
|
||||
sprite[j].cstat |= 1;
|
||||
addscore(plr, 150);
|
||||
break;
|
||||
case DEVILTYPE:
|
||||
sprite[j].picnum = DEVILCHAR;
|
||||
newstatus(j, NUKED);
|
||||
sprite[j].pal = 0;
|
||||
sprite[j].cstat |= 1;
|
||||
addscore(plr, 150);
|
||||
break;
|
||||
case GOBLINTYPE:
|
||||
case IMPTYPE:
|
||||
sprite[j].picnum = GOBLINCHAR;
|
||||
newstatus(j, NUKED);
|
||||
sprite[j].pal = 0;
|
||||
sprite[j].cstat |= 1;
|
||||
addscore(plr, 150);
|
||||
break;
|
||||
case MINOTAURTYPE:
|
||||
sprite[j].picnum = MINOTAURCHAR;
|
||||
newstatus(j, NUKED);
|
||||
sprite[j].pal = 0;
|
||||
sprite[j].cstat |= 1;
|
||||
addscore(plr, 150);
|
||||
break;
|
||||
case SKELETONTYPE:
|
||||
sprite[j].picnum = SKELETONCHAR;
|
||||
newstatus(j, NUKED);
|
||||
sprite[j].pal = 0;
|
||||
sprite[j].cstat |= 1;
|
||||
addscore(plr, 150);
|
||||
break;
|
||||
case GRONTYPE:
|
||||
sprite[j].picnum = GRONCHAR;
|
||||
newstatus(j, NUKED);
|
||||
sprite[j].pal = 0;
|
||||
sprite[j].cstat |= 1;
|
||||
addscore(plr, 150);
|
||||
break;
|
||||
case DRAGONTYPE:
|
||||
sprite[j].picnum = DRAGONCHAR;
|
||||
newstatus(j, NUKED);
|
||||
sprite[j].pal = 0;
|
||||
sprite[j].cstat |= 1;
|
||||
addscore(plr, 150);
|
||||
break;
|
||||
case GUARDIANTYPE:
|
||||
sprite[j].picnum = GUARDIANCHAR;
|
||||
newstatus(j, NUKED);
|
||||
sprite[j].pal = 0;
|
||||
sprite[j].cstat |= 1;
|
||||
addscore(plr, 150);
|
||||
break;
|
||||
case FATWITCHTYPE:
|
||||
sprite[j].picnum = FATWITCHCHAR;
|
||||
newstatus(j, NUKED);
|
||||
sprite[j].pal = 0;
|
||||
sprite[j].cstat |= 1;
|
||||
addscore(plr, 150);
|
||||
break;
|
||||
case SKULLYTYPE:
|
||||
sprite[j].picnum = SKULLYCHAR;
|
||||
newstatus(j, NUKED);
|
||||
sprite[j].pal = 0;
|
||||
sprite[j].cstat |= 1;
|
||||
addscore(plr, 150);
|
||||
break;
|
||||
case JUDYTYPE:
|
||||
if (mapon < 24) {
|
||||
sprite[j].picnum = JUDYCHAR;
|
||||
newstatus(j, NUKED);
|
||||
sprite[j].pal = 0;
|
||||
sprite[j].cstat |= 1;
|
||||
addscore(plr, 150);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void medusa(PLAYER& plr, short j) {
|
||||
if(sprite[j].hitag <= 0) //don't freeze dead enemies
|
||||
return;
|
||||
|
||||
newstatus(j, FROZEN);
|
||||
int pic = sprite[j].picnum;
|
||||
switch (sprite[j].detail) {
|
||||
|
||||
case NEWGUYTYPE:
|
||||
sprite[j].picnum = NEWGUYPAIN;
|
||||
break;
|
||||
case KURTTYPE:
|
||||
sprite[j].picnum = GONZOCSWPAIN;
|
||||
break;
|
||||
case GONZOTYPE:
|
||||
if(pic == GONZOCSW || pic == GONZOCSWAT)
|
||||
sprite[j].picnum = GONZOCSWPAIN;
|
||||
else if(pic == GONZOGSW || pic == GONZOGSWAT)
|
||||
sprite[j].picnum = GONZOGSWPAIN;
|
||||
else if(pic == GONZOGHM || pic == GONZOGHMAT
|
||||
|| pic == GONZOGSH || pic == GONZOGSHAT)
|
||||
sprite[j].picnum = GONZOGHMPAIN;
|
||||
break;
|
||||
case KATIETYPE:
|
||||
sprite[j].picnum = KATIEPAIN;
|
||||
break;
|
||||
case KOBOLDTYPE:
|
||||
sprite[j].picnum = KOBOLDDIE;
|
||||
break;
|
||||
case DEVILTYPE:
|
||||
sprite[j].picnum = DEVILDIE;
|
||||
break;
|
||||
case FREDTYPE:
|
||||
sprite[j].picnum = FREDDIE;
|
||||
break;
|
||||
case GOBLINTYPE:
|
||||
case IMPTYPE:
|
||||
if(isWh2()) sprite[j].picnum = IMPDIE;
|
||||
else sprite[j].picnum = GOBLINDIE;
|
||||
break;
|
||||
case MINOTAURTYPE:
|
||||
sprite[j].picnum = MINOTAURDIE;
|
||||
break;
|
||||
case SPIDERTYPE:
|
||||
sprite[j].picnum = SPIDERDIE;
|
||||
break;
|
||||
case SKELETONTYPE:
|
||||
sprite[j].picnum = SKELETONDIE;
|
||||
break;
|
||||
case GRONTYPE:
|
||||
if(pic == GRONHAL || pic == GRONHALATTACK)
|
||||
sprite[j].picnum = (short) GRONHALDIE;
|
||||
else if(pic == GRONMU || pic == GRONMUATTACK)
|
||||
sprite[j].picnum = (short) GRONMUDIE;
|
||||
else if(pic == GRONSW || pic == GRONSWATTACK)
|
||||
sprite[j].picnum = (short) GRONSWDIE;
|
||||
break;
|
||||
}
|
||||
sprite[j].pal = 6;
|
||||
sprite[j].cstat |= 1;
|
||||
addscore(plr, 100);
|
||||
}
|
||||
|
||||
void displayspelltext(PLAYER& plr) {
|
||||
switch (plr.currentorb) {
|
||||
case 0:
|
||||
showmessage("scare spell", 360);
|
||||
break;
|
||||
case 1:
|
||||
showmessage("night vision spell", 360);
|
||||
break;
|
||||
case 2:
|
||||
showmessage("freeze spell", 360);
|
||||
break;
|
||||
case 3:
|
||||
showmessage("magic arrow spell", 360);
|
||||
break;
|
||||
case 4:
|
||||
showmessage("open door spell", 360);
|
||||
break;
|
||||
case 5:
|
||||
showmessage("fly spell", 360);
|
||||
break;
|
||||
case 6:
|
||||
showmessage("fireball spell", 360);
|
||||
break;
|
||||
case 7:
|
||||
showmessage("nuke spell", 360);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void orbpic(PLAYER& plr, int currentorb) {
|
||||
if (plr.orbammo[currentorb] < 0)
|
||||
plr.orbammo[currentorb] = 0;
|
||||
|
||||
Bitoa(plr.orbammo[currentorb], tempchar);
|
||||
|
||||
int y = 382;
|
||||
if (currentorb == 2)
|
||||
y = 381;
|
||||
if (currentorb == 3)
|
||||
y = 383;
|
||||
if (currentorb == 6)
|
||||
y = 383;
|
||||
if (currentorb == 7)
|
||||
y = 380;
|
||||
|
||||
int spellbookpage = sspellbookanim[currentorb][8].daweaponframe;
|
||||
overwritesprite(121 << 1, y, spellbookpage, 0, 0, 0);
|
||||
game.getFont(4).drawText(126 << 1,439, tempchar, 0, 0, TextAlign.Left, 0, false);
|
||||
}
|
||||
|
||||
END_WH_NS
|
2491
source/games/whaven/src/weapons.cpp
Normal file
2491
source/games/whaven/src/weapons.cpp
Normal file
File diff suppressed because it is too large
Load diff
699
source/games/whaven/src/wepdata.cpp
Normal file
699
source/games/whaven/src/wepdata.cpp
Normal file
|
@ -0,0 +1,699 @@
|
|||
#include "ns.h"
|
||||
#include "wh.h"
|
||||
|
||||
BEGIN_WH_NS
|
||||
|
||||
|
||||
const WEAPONINF sspellbookanim[MAXNUMORBS][9] =
|
||||
{
|
||||
// SCARE
|
||||
{{8, SSPELLBOOK8, 121, 389}, {8, SSPELLBOOK8 + 1, 121, 377},
|
||||
{8, SSPELLBOOK8 + 2, 121, 383}, {8, SSPELLBOOK8 + 3, 121, 385},
|
||||
{8, SSPELLBOOK8 + 4, 121, 389}, {8, SSPELLBOOK8 + 5, 121, 387},
|
||||
{8, SSPELLBOOK8 + 6, 121, 389}, {8, SSPELLBOOK8 + 7, 121, 389},
|
||||
{8, SSPELLBOOK8 + 7, 121, 389}
|
||||
},
|
||||
// NIGHT VISION
|
||||
{{8, SSPELLBOOK6, 121, 389}, {8, SSPELLBOOK6 + 1, 121, 377},
|
||||
{8, SSPELLBOOK6 + 2, 121, 383}, {8, SSPELLBOOK6 + 3, 121, 385},
|
||||
{8, SSPELLBOOK6 + 4, 121, 389}, {8, SSPELLBOOK6 + 5, 121, 387},
|
||||
{8, SSPELLBOOK6 + 6, 121, 389}, {8, SSPELLBOOK6 + 7, 121, 389},
|
||||
{8, SSPELLBOOK6 + 7, 121, 389}
|
||||
},
|
||||
// FREEZE
|
||||
{{8, SSPELLBOOK3, 121, 389}, {8, SSPELLBOOK3 + 1, 121, 377},
|
||||
{8, SSPELLBOOK3 + 2, 121, 383}, {8, SSPELLBOOK3 + 3, 121, 385},
|
||||
{8, SSPELLBOOK3 + 4, 121, 389}, {8, SSPELLBOOK3 + 5, 120, 387},
|
||||
{8, SSPELLBOOK3 + 6, 120, 389}, {8, SSPELLBOOK3 + 7, 120, 389},
|
||||
{8, SSPELLBOOK3 + 7, 121, 389}
|
||||
},
|
||||
// MAGIC ARROW
|
||||
{{8, SSPELLBOOKBLANK, 121, 389}, {8, SSPELLBOOKBLANK + 1, 121, 377},
|
||||
{8, SSPELLBOOKBLANK + 2, 121, 383}, {8, SSPELLBOOKBLANK + 3, 121, 385},
|
||||
{8, SSPELLBOOKBLANK + 4, 121, 389}, {8, SSPELLBOOKBLANK + 5, 121, 387},
|
||||
{8, SSPELLBOOKBLANK + 6, 120, 389}, {8, SSPELLBOOKBLANK + 7, 121, 389},
|
||||
{8, SSPELLBOOKBLANK + 7, 122, 389}
|
||||
},
|
||||
// OPEN DOORS
|
||||
{{8, SSPELLBOOK7, 121, 389}, {8, SSPELLBOOK7 + 1, 121, 377},
|
||||
{8, SSPELLBOOK7 + 2, 121, 383}, {8, SSPELLBOOK7 + 3, 121, 385},
|
||||
{8, SSPELLBOOK7 + 4, 121, 389}, {8, SSPELLBOOK7 + 5, 121, 387},
|
||||
{8, SSPELLBOOK7 + 6, 121, 389}, {8, SSPELLBOOK7 + 7, 121, 389},
|
||||
{8, SSPELLBOOK7 + 7, 121, 389}
|
||||
},
|
||||
// FLY
|
||||
{{8, SSPELLBOOK2, 121, 389}, {8, SSPELLBOOK2 + 1, 121, 377},
|
||||
{8, SSPELLBOOK2 + 2, 121, 383}, {8, SSPELLBOOK2 + 3, 121, 385},
|
||||
{8, SSPELLBOOK2 + 4, 121, 389}, {8, SSPELLBOOK2 + 5, 121, 387},
|
||||
{8, SSPELLBOOK2 + 6, 121, 389}, {8, SSPELLBOOK2 + 7, 121, 389},
|
||||
{8, SSPELLBOOK2 + 7, 121, 389}
|
||||
},
|
||||
// FIRE BALL
|
||||
{{8, SSPELLBOOK4, 121, 389}, {8, SSPELLBOOK4 + 1, 121, 377},
|
||||
{8, SSPELLBOOK4 + 2, 121, 383}, {8, SSPELLBOOK4 + 3, 121, 385},
|
||||
{8, SSPELLBOOK4 + 4, 121, 389}, {8, SSPELLBOOK4 + 5, 121, 387},
|
||||
{8, SSPELLBOOK4 + 6, 121, 389}, {8, SSPELLBOOK4 + 6, 121, 389},
|
||||
{8, SSPELLBOOK4 + 6, 121, 389}
|
||||
},
|
||||
// NUKE!
|
||||
{{8, SSPELLBOOK5, 121, 389}, {8, SSPELLBOOK5 + 1, 121, 377},
|
||||
{8, SSPELLBOOK5 + 2, 121, 383}, {8, SSPELLBOOK5 + 3, 121, 385},
|
||||
{8, SSPELLBOOK5 + 4, 121, 389}, {8, SSPELLBOOK5 + 5, 121, 387},
|
||||
{8, SSPELLBOOK5 + 6, 121, 389}, {8, SSPELLBOOK5 + 6, 121, 389},
|
||||
{8, SSPELLBOOK5 + 6, 121, 389}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
const WEAPONINF spikeanimtics[5] =
|
||||
{ {10, DIESPIKE, 136, 145},
|
||||
{10, DIESPIKE + 1, 136, 124},
|
||||
{10, DIESPIKE + 2, 136, 100},
|
||||
{10, DIESPIKE + 3, 136, 70},
|
||||
{10, DIESPIKE + 4, 136, 50} };
|
||||
|
||||
const WEAPONINF wh2throwanimtics[MAXNUMORBS][MAXFRAMES + 1] =
|
||||
{
|
||||
// MUTWOHANDS - scare spell
|
||||
{{1, EMPTY, 127, 170}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93},
|
||||
{10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83},
|
||||
{10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113},
|
||||
{10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117},
|
||||
{1, EMPTY, 127, 170}
|
||||
},
|
||||
// MUTWOHANDS - night vision
|
||||
{{10, ZFIREBALL, 0, 177}, {10, ZFIREBALL + 1, 0, 137}, {10, ZFIREBALL + 2, 48, 82},
|
||||
{10, ZFIREBALL + 3, 127, 41}, {10, ZFIREBALL + 4, 210, 9}, {10, ZFIREBALL + 5, 284, 26},
|
||||
{10, ZFIREBALL + 6, 213, 63}, {10, ZFIREBALL + 7, 147, 99}, {10, ZFIREBALL + 8, 91, 136},
|
||||
{10, ZFIREBALL + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170},
|
||||
{1, EMPTY, 127, 170}
|
||||
},
|
||||
// MUTWOHANDS - freeze
|
||||
{{1, EMPTY, 127, 170}, {10, ZFREEZE + 1, 0, 51}, {10, ZFREEZE + 2, 0, 71},
|
||||
{10, ZFREEZE + 3, 4, 85}, {10, ZFREEZE + 4, 32, 78}, {10, ZFREEZE + 5, 51, 80},
|
||||
{10, ZFREEZE + 6, 50, 80}, {10, ZFREEZE + 7, 49, 89}, {10, ZFREEZE + 8, 49, 89},
|
||||
{10, ZFREEZE + 9, 49, 98}, {10, ZFREEZE + 10, 47, 105}, {10, ZFREEZE + 11, 48, 121},
|
||||
{1, EMPTY, 127, 170}
|
||||
},
|
||||
// MUTWOHANDS - magic arrow
|
||||
{{1, EMPTY, 127, 170}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93},
|
||||
{10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83},
|
||||
{10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113},
|
||||
{10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117},
|
||||
{1, EMPTY, 127, 170}
|
||||
},
|
||||
// MUTWOHANDS - open door
|
||||
{{15, MUTWOHANDS, 19, 155}, {15, MUTWOHANDS + 1, 0, 128}, {15, MUTWOHANDS + 2, 0, 93},
|
||||
{15, MUTWOHANDS + 3, 0, 83}, {15, MUTWOHANDS + 4, 0, 72}, {15, MUTWOHANDS + 5, 0, 83},
|
||||
{15, MUTWOHANDS + 6, 10, 96}, {15, MUTWOHANDS + 7, 43, 109}, {15, MUTWOHANDS + 8, 69, 113},
|
||||
{15, MUTWOHANDS + 9, 65, 115}, {15, MUTWOHANDS + 10, 64, 117}, {15, MUTWOHANDS + 11, 63, 117},
|
||||
{1, EMPTY, 127, 170}
|
||||
},
|
||||
// MUMEDUSA - fly
|
||||
{{10, ZLIGHT, 0, 177}, {10, ZLIGHT + 1, 0, 137}, {10, ZLIGHT + 2, 48, 82},
|
||||
{10, ZLIGHT + 3, 127, 41}, {10, ZLIGHT + 4, 210, 9}, {10, ZLIGHT + 5, 284, 26},
|
||||
{10, ZLIGHT + 6, 213, 63}, {10, ZLIGHT + 7, 147, 99}, {10, ZLIGHT + 8, 91, 136},
|
||||
{10, ZLIGHT + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170},
|
||||
{1, EMPTY, 127, 170}
|
||||
},
|
||||
// MUTWOHANDS - fireball
|
||||
{{1, EMPTY, 127, 170}, {10, ZFIREBALL + 1, 0, 137}, {10, ZFIREBALL + 2, 48, 82},
|
||||
{10, ZFIREBALL + 3, 127, 41}, {10, ZFIREBALL + 4, 210, 9}, {10, ZFIREBALL + 5, 284, 26},
|
||||
{10, ZFIREBALL + 6, 213, 63}, {10, ZFIREBALL + 7, 147, 99}, {10, ZFIREBALL + 8, 91, 136},
|
||||
{10, ZFIREBALL + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170},
|
||||
{1, EMPTY, 127, 170}
|
||||
},
|
||||
// MUTWOHANDS - nuke
|
||||
{{1, EMPTY, 127, 170}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93},
|
||||
{10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83},
|
||||
{10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113},
|
||||
{10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117},
|
||||
{1, EMPTY, 127, 170}
|
||||
}
|
||||
};
|
||||
|
||||
const WEAPONINF throwanimtics[MAXNUMORBS][MAXFRAMES + 1] =
|
||||
{
|
||||
// MUTWOHANDS
|
||||
{ {10,MUTWOHANDS,19,155},{10,MUTWOHANDS + 1,0,128},{10,MUTWOHANDS + 2,0,93},
|
||||
{10,MUTWOHANDS + 3,0,83},{10,MUTWOHANDS + 4,0,72},{10,MUTWOHANDS + 5,0,83},
|
||||
{10,MUTWOHANDS + 6,10,96},{10,MUTWOHANDS + 7,43,109},{10,MUTWOHANDS + 8,69,113},
|
||||
{10,MUTWOHANDS + 9,65,115},{10,MUTWOHANDS + 10,64,117},{10,MUTWOHANDS + 11,63,117},
|
||||
{1,NULL,127,170}
|
||||
},
|
||||
// MUMEDUSA
|
||||
{ {10,MUMEDUSA,0,177},{10,MUMEDUSA + 1,0,137},{10,MUMEDUSA + 2,48,82},
|
||||
{10,MUMEDUSA + 3,127,41},{10,MUMEDUSA + 4,210,9},{10,MUMEDUSA + 5,284,26},
|
||||
{10,MUMEDUSA + 6,213,63},{10,MUMEDUSA + 7,147,99},{10,MUMEDUSA + 8,91,136},
|
||||
{10,MUMEDUSA + 9,46,183},{1,NULL,127,170},{1,NULL,127,170},
|
||||
{1,NULL,127,170}
|
||||
},
|
||||
// BMUTWOHANDS
|
||||
{ {10,MUTWOHANDS,19,155},{10,MUTWOHANDS + 1,0,128},{10,MUTWOHANDS + 2,0,93},
|
||||
{10,MUTWOHANDS + 3,0,83},{10,BMUTWOHANDS,0,74},{10,BMUTWOHANDS + 1,0,97},
|
||||
{10,BMUTWOHANDS + 2,10,109},{10,BMUTWOHANDS + 3,43,113},{10,BMUTWOHANDS + 4,69,115},
|
||||
{10,BMUTWOHANDS + 5,65,117},{10,BMUTWOHANDS + 6,64,117},{10,BMUTWOHANDS + 7,63,117},
|
||||
{1,NULL,127,170}
|
||||
},
|
||||
// MUTWOHANDS
|
||||
{ {10,MUTWOHANDS,19,155},{10,MUTWOHANDS + 1,0,128},{10,MUTWOHANDS + 2,0,93},
|
||||
{10,MUTWOHANDS + 3,0,83},{10,MUTWOHANDS + 4,0,72},{10,MUTWOHANDS + 5,0,83},
|
||||
{10,MUTWOHANDS + 6,10,96},{10,MUTWOHANDS + 7,43,109},{10,MUTWOHANDS + 8,69,113},
|
||||
{10,MUTWOHANDS + 9,65,115},{10,MUTWOHANDS + 10,64,117},{10,MUTWOHANDS + 11,63,117},
|
||||
{1,NULL,127,170}
|
||||
},
|
||||
// MUTWOHANDS
|
||||
{ {15,MUTWOHANDS,19,155},{15,MUTWOHANDS + 1,0,128},{15,MUTWOHANDS + 2,0,93},
|
||||
{15,MUTWOHANDS + 3,0,83},{15,MUTWOHANDS + 4,0,72},{15,MUTWOHANDS + 5,0,83},
|
||||
{15,MUTWOHANDS + 6,10,96},{15,MUTWOHANDS + 7,43,109},{15,MUTWOHANDS + 8,69,113},
|
||||
{15,MUTWOHANDS + 9,65,115},{15,MUTWOHANDS + 10,64,117},{15,MUTWOHANDS + 11,63,117},
|
||||
{1,NULL,127,170}
|
||||
},
|
||||
// MUMEDUSA
|
||||
{ {10,MUMEDUSA,0,177},{10,MUMEDUSA + 1,0,137},{10,MUMEDUSA + 2,48,82},
|
||||
{10,MUMEDUSA + 3,127,41},{10,MUMEDUSA + 4,210,9},{10,MUMEDUSA + 5,284,26},
|
||||
{10,MUMEDUSA + 6,213,63},{10,MUMEDUSA + 7,147,99},{10,MUMEDUSA + 8,91,136},
|
||||
{10,MUMEDUSA + 9,46,183},{1,NULL,127,170},{1,NULL,127,170},
|
||||
{1,NULL,127,170}
|
||||
},
|
||||
// MUTWOHANDS
|
||||
{ {10,MUTWOHANDS,19,155},{10,MUTWOHANDS + 1,0,128},{10,MUTWOHANDS + 2,0,93},
|
||||
{10,MUTWOHANDS + 3,0,83},{10,MUTWOHANDS + 4,0,72},{10,MUTWOHANDS + 5,0,83},
|
||||
{10,MUTWOHANDS + 6,10,96},{10,MUTWOHANDS + 7,43,109},{10,MUTWOHANDS + 8,69,113},
|
||||
{10,MUTWOHANDS + 9,65,115},{10,MUTWOHANDS + 10,64,117},{10,MUTWOHANDS + 11,63,117},
|
||||
{1,NULL,127,170}
|
||||
},
|
||||
// MUTWOHANDS
|
||||
{ {10,MUTWOHANDS,19,155},{10,MUTWOHANDS + 1,0,128},{10,MUTWOHANDS + 2,0,93},
|
||||
{10,MUTWOHANDS + 3,0,83},{10,MUTWOHANDS + 4,0,72},{10,MUTWOHANDS + 5,0,83},
|
||||
{10,MUTWOHANDS + 6,10,96},{10,MUTWOHANDS + 7,43,109},{10,MUTWOHANDS + 8,69,113},
|
||||
{10,MUTWOHANDS + 9,65,115},{10,MUTWOHANDS + 10,64,117},{10,MUTWOHANDS + 11,63,117},
|
||||
{1,NULL,127,170}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
const WEAPONINF cockanimtics[MAXFRAMES + 1] =
|
||||
{
|
||||
{24,NULL,10,10},
|
||||
{12,BOWREADYEND + 1,101,115},{12,BOWREADYEND + 2,112,0},
|
||||
{12,BOWREADYEND + 3,115,0},{12,BOWREADYEND + 4,75,13}
|
||||
};
|
||||
|
||||
const WEAPONINF zcockanimtics[MAXFRAMES + 1] =
|
||||
{
|
||||
{24, EMPTY, 10, 10},
|
||||
{12, BOWREADYEND + 1, 101, 115}, {12, BOWREADYEND + 2, 112, 0},
|
||||
{12, BOWREADYEND + 3, 115, 0}, {12, ZBOWWALK, 75, 13}
|
||||
};
|
||||
|
||||
//SCOTT
|
||||
const WEAPONINF zreadyanimtics[MAXWEAPONS][MAXFRAMES + 1] =
|
||||
{
|
||||
// FIST
|
||||
{{10, RFIST, 216, 180}, {10, RFIST, 216, 170}, {10, RFIST, 216, 160},
|
||||
{10, RFIST, 216, 150}, {10, RFIST, 216, 140}, {10, RFIST, 216, 130},
|
||||
{10, RFIST, 216, 124}, {1, RFIST, 216, 124}, {1, RFIST, 216, 124},
|
||||
{1, RFIST, 216, 122}, {1, RFIST, 216, 122}, {1, RFIST, 216, 122},
|
||||
{1, EMPTY, 147, 76}
|
||||
},
|
||||
// ZKNIFE
|
||||
{{10, ZKNIFEREADY, 69, 171}, {10, ZKNIFEREADY + 1, 11, 146}, {10, ZKNIFEREADY + 2, 25, 146},
|
||||
{10, ZKNIFEREADY + 3, 35, 158}, {10, ZKNIFEREADY + 4, 38, 158}, {10, ZKNIFEREADY + 5, 16, 157},
|
||||
{10, ZKNIFEREADY + 6, 37, 102}, {10, ZKNIFEREADY + 7, 239, 63}, {10, ZKNIFEREADY + 8, 214, 85},
|
||||
{10, ZKNIFEREADY + 9, 206, 110}, {10, ZKNIFEREADY + 10, 217, 108}, {10, ZKNIFEREADY + 11, 204, 95},
|
||||
{1, EMPTY, 147, 76}
|
||||
},
|
||||
// ZSHORTREADY
|
||||
{{12, ZSHORTREADY, 79, 169}, {12, ZSHORTREADY + 1, 95, 115}, {12, ZSHORTREADY + 2, 94, 93},
|
||||
{12, ZSHORTREADY + 3, 156, 77}, {12, ZSHORTREADY + 4, 218, 64}, {12, ZSHORTREADY + 5, 224, 57},
|
||||
{8, ZSHORTREADY + 6, 251, 54}, {1, ZSHORTREADY + 7, 243, 92}, {1, ZSHORTREADY + 7, 243, 92},
|
||||
{1, ZSHORTREADY + 7, 243, 92}, {1, ZSHORTREADY + 7, 243, 92}, {1, ZSHORTREADY + 7, 243, 92},
|
||||
{1, EMPTY, 147, 76}
|
||||
},
|
||||
// ZSTARATTACK
|
||||
{{6, ZSTARATTACK, 194, 195}, {6, ZSTARATTACK, 194, 185}, {6, ZSTARATTACK, 194, 175},
|
||||
{6, ZSTARATTACK, 194, 165}, {6, ZSTARATTACK, 194, 155}, {6, ZSTARATTACK, 194, 145},
|
||||
{6, ZSTARATTACK, 194, 135}, {6, ZSTARATTACK, 194, 125}, {6, ZSTARATTACK, 194, 115},
|
||||
{6, ZSTARATTACK, 194, 105}, {6, ZSTARATTACK, 194, 95}, {1, ZSTARATTACK, 194, 85},
|
||||
{1, EMPTY, 147, 76}
|
||||
},
|
||||
// SWORD
|
||||
{{10, SWORDPULL, 58, 160}, {10, SWORDPULL + 1, 81, 111}, {10, SWORDPULL + 2, 19, 88},
|
||||
{10, SWORDPULL + 3, 0, 93}, {10, SWORDPULL + 4, 104, 0}, {10, SWORDPULL + 5, 169, 0},
|
||||
{10, SWORDPULL + 6, 244, 38}, {6, SWORDPULL + 7, 225, 121}, {1, SWORDPULL + 7, 225, 121},
|
||||
{1, SWORDPULL + 7, 225, 121}, {1, SWORDPULL + 7, 225, 121}, {1, SWORDPULL + 7, 225, 121},
|
||||
{1, EMPTY, 147, 76}
|
||||
},
|
||||
// ZAXE
|
||||
{{8, ZAXEREADY, 0, 108}, {8, ZAXEREADY + 1, 0, 58}, {8, ZAXEREADY + 2, 0, 57},
|
||||
{8, ZAXEREADY + 3, 0, 69}, {8, ZAXEREADY + 4, 0, 100}, {8, ZAXEREADY + 5, 0, 9},
|
||||
{8, ZAXEREADY + 6, 33, 0}, {8, ZAXEREADY + 7, 61, 0}, {8, ZAXEREADY + 8, 73, 20},
|
||||
{8, ZAXEREADY + 9, 179, 117}, {8, EMPTY, 182, 116}, {1, EMPTY, 200, 122},
|
||||
{1, EMPTY, 147, 76}
|
||||
},
|
||||
// ZBOW
|
||||
{{12, ZBOWREADY, 0, 0}, {12, ZBOWREADY + 1, 0, 20}, {12, ZBOWREADY + 2, 0, 46},
|
||||
{12, ZBOWREADY + 3, 0, 26}, {12, ZBOWREADY + 4, 0, 0}, {12, ZBOWREADY + 5, 71, 0},
|
||||
{1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13},
|
||||
{1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13},
|
||||
{1, EMPTY, 147, 76}
|
||||
},
|
||||
// ZPIKE
|
||||
{{8, ZPIKEREADY, 0, 150}, {8, ZPIKEREADY + 1, 0, 94}, {8, ZPIKEREADY + 2, 47, 45},
|
||||
{8, ZPIKEREADY + 3, 138, 62}, {8, ZPIKEREADY + 4, 194, 95}, {8, ZPIKEREADY + 5, 59, 121},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76},
|
||||
{1, EMPTY, 147, 76}
|
||||
},
|
||||
{{12, ZTWOHANDREADY, 167, 131}, {12, ZTWOHANDREADY + 1, 71, 117}, {12, ZTWOHANDREADY, 0, 128},
|
||||
{12, ZTWOHANDREADY + 3, 0, 150}, {12, ZTWOHANDREADY + 4, 10, 74}, {12, ZTWOHANDREADY + 5, 44, 81},
|
||||
{12, ZTWOHANDREADY + 6, 0, 53}, {12, ZTWOHANDREADY + 7, 112, 0}, {12, ZTWOHANDREADY + 8, 220, 0},
|
||||
{12, ZTWOHANDREADY + 9, 198, 84}, {12, ZTWOHANDREADY + 10, 186, 120}, {12, ZTWOHANDREADY + 11, 188, 124},
|
||||
{1, EMPTY, 147, 76}
|
||||
},
|
||||
{{12, HALBERDDRAW, 183, 62}, {12, HALBERDDRAW + 1, 166, 10}, {12, HALBERDDRAW + 2, 173, 29},
|
||||
{12, HALBERDDRAW + 3, 114, 35}, {1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22},
|
||||
{1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22},
|
||||
{1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22}, {1, ZHALBERDATTACK, 245, 30},
|
||||
{1, EMPTY, 147, 76}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
const WEAPONINF readyanimtics[MAXWEAPONS][MAXFRAMES + 1] =
|
||||
{
|
||||
// FIST
|
||||
{{10, RFIST, 216, 180}, {10, RFIST, 216, 170}, {10, RFIST, 216, 160},
|
||||
{10, RFIST, 216, 150}, {10, RFIST, 216, 140}, {10, RFIST, 216, 130},
|
||||
{10, RFIST, 216, 124}, {1, RFIST, 216, 124}, {1, RFIST, 216, 124},
|
||||
{1, RFIST, 216, 122}, {1, RFIST, 216, 122}, {1, RFIST, 216, 122},
|
||||
{1, EMPTY, 147, 76}
|
||||
},
|
||||
// KNIFE
|
||||
{{10, KNIFEREADY, 69, 171}, {10, KNIFEREADY + 1, 11, 146}, {10, KNIFEREADY + 2, 25, 146},
|
||||
{10, KNIFEREADY + 3, 35, 158}, {10, KNIFEREADY + 4, 38, 158}, {10, KNIFEREADY + 5, 16, 157},
|
||||
{10, KNIFEREADY + 6, 37, 102}, {10, KNIFEREADY + 7, 239, 63}, {10, KNIFEREADY + 8, 214, 85},
|
||||
{10, KNIFEREADY + 9, 206, 110}, {10, KNIFEREADY + 10, 217, 108}, {10, KNIFEREADY + 11, 204, 95},
|
||||
{1, EMPTY, 147, 76}
|
||||
},
|
||||
// GOBSWORD
|
||||
{{12, GOBSWORDPULL, 79, 169}, {12, GOBSWORDPULL + 1, 95, 115}, {12, GOBSWORDPULL + 2, 94, 93},
|
||||
{12, GOBSWORDPULL + 3, 156, 77}, {12, GOBSWORDPULL + 4, 218, 64}, {12, GOBSWORDPULL + 5, 224, 57},
|
||||
{8, GOBSWORDPULL + 6, 251, 54}, {1, GOBSWORDPULL + 7, 243, 92}, {1, GOBSWORDPULL + 7, 243, 92},
|
||||
{1, GOBSWORDPULL + 7, 243, 92}, {1, GOBSWORDPULL + 7, 243, 92}, {1, GOBSWORDPULL + 7, 243, 92},
|
||||
{1, EMPTY, 147, 76}
|
||||
},
|
||||
// MORNINGSTAR
|
||||
{{6, MORNINGSTAR, 193, 190}, {6, MORNINGSTAR, 193, 180}, {6, MORNINGSTAR, 193, 170},
|
||||
{6, MORNINGSTAR, 193, 160}, {6, MORNINGSTAR, 193, 150}, {6, MORNINGSTAR, 193, 140},
|
||||
{6, MORNINGSTAR, 193, 130}, {6, MORNINGSTAR, 193, 120}, {6, MORNINGSTAR, 193, 110},
|
||||
{6, MORNINGSTAR, 193, 100}, {6, MORNINGSTAR, 193, 90}, {1, MORNINGSTAR, 193, 90},
|
||||
{1, EMPTY, 147, 76}
|
||||
},
|
||||
// SWORD
|
||||
{{10, SWORDPULL, 58, 160}, {10, SWORDPULL + 1, 81, 111}, {10, SWORDPULL + 2, 19, 88},
|
||||
{10, SWORDPULL + 3, 0, 93}, {10, SWORDPULL + 4, 104, 0}, {10, SWORDPULL + 5, 169, 0},
|
||||
{10, SWORDPULL + 6, 244, 38}, {6, SWORDPULL + 7, 225, 121}, {1, SWORDPULL + 7, 225, 121},
|
||||
{1, SWORDPULL + 7, 225, 121}, {1, SWORDPULL + 7, 225, 121}, {1, SWORDPULL + 7, 225, 121},
|
||||
{1, EMPTY, 147, 76}
|
||||
},
|
||||
{{12, BIGAXEDRAW, 71, 108}, {12, BIGAXEDRAW + 1, 17, 58}, {12, BIGAXEDRAW + 2, 0, 56},
|
||||
{12, BIGAXEDRAW + 3, 0, 71}, {12, BIGAXEDRAW + 4, 0, 102}, {12, BIGAXEDRAW + 5, 0, 11},
|
||||
{12, BIGAXEDRAW + 6, 33, 0}, {12, BIGAXEDRAW + 7, 69, 0}, {12, BIGAXEDRAW + 8, 75, 20},
|
||||
{12, BIGAXEDRAW9, 150, 92}, {12, BIGAXEDRAW10, 182, 116}, {1, EMPTY, 200, 122},
|
||||
{1, EMPTY, 147, 76}
|
||||
},
|
||||
// BOW
|
||||
{{12, BOWREADY, 0, 0}, {12, BOWREADY + 1, 0, 20}, {12, BOWREADY + 2, 0, 46},
|
||||
{12, BOWREADY + 3, 0, 26}, {12, BOWREADY + 4, 0, 0}, {12, BOWREADY + 5, 71, 0},
|
||||
{8, BOWREADYEND, 77, 23}, {1, BOWREADYEND, 77, 23}, {1, BOWREADYEND, 77, 23},
|
||||
{1, BOWREADYEND, 77, 23}, {1, BOWREADYEND, 77, 23}, {1, BOWREADYEND, 77, 23},
|
||||
{1, EMPTY, 147, 76}
|
||||
},
|
||||
{{8, PIKEDRAW, 0, 156}, {8, PIKEDRAW + 1, 15, 98}, {8, PIKEDRAW + 2, 83, 49},
|
||||
{8, PIKEDRAW + 3, 144, 66}, {8, PIKEDRAW + 4, 197, 99}, {8, PIKEDRAW + 5, 216, 131},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76},
|
||||
{1, EMPTY, 147, 76}
|
||||
},
|
||||
{{12, EXCALDRAW, 167, 130}, {12, EXCALDRAW + 1, 70, 117}, {12, EXCALDRAW + 2, 0, 128},
|
||||
{12, EXCALDRAW + 3, 0, 150}, {12, EXCALDRAW + 4, 4, 72}, {12, EXCALDRAW + 5, 38, 81},
|
||||
{12, EXCALDRAW + 6, 0, 44}, {12, EXCALDRAW + 7, 112, 0}, {12, EXCALDRAW + 8, 224, 0},
|
||||
{12, EXCALDRAW + 9, 198, 84}, {12, EXCALDRAW + 10, 186, 120}, {12, EXCALDRAW + 11, 188, 123},
|
||||
{1, EMPTY, 147, 76}
|
||||
},
|
||||
{{12, HALBERDDRAW, 183, 62}, {12, HALBERDDRAW + 1, 166, 10}, {12, HALBERDDRAW + 2, 173, 29},
|
||||
{12, HALBERDDRAW + 3, 114, 35}, {1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22},
|
||||
{1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22},
|
||||
{1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22},
|
||||
{1, EMPTY, 147, 76}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
const WEAPONINF weaponanimtics[MAXWEAPONS][MAXFRAMES] =
|
||||
{
|
||||
// FIST
|
||||
{{10, RFIST, 216, 120}, {10, RFIST + 1, 166, 113}, {10, RFIST + 2, 156, 129},
|
||||
{10, RFIST + 3, 169, 151}, {10, RFIST + 4, 153, 124}, {10, RFIST + 5, 224, 133},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
|
||||
},
|
||||
// KNIFE
|
||||
{{8, KNIFEATTACK, 189, 52}, {8, KNIFEATTACK + 1, 254, 68}, {8, EMPTY, 147, 76},
|
||||
{8, EMPTY, 80, 41}, {8, KNIFEATTACK + 2, 254, 69}, {8, KNIFEATTACK + 3, 218, 80},
|
||||
{8, KNIFEATTACK + 4, 137, 83}, {8, KNIFEATTACK + 5, 136, 100}, {8, KNIFEATTACK + 6, 126, 140},
|
||||
{8, KNIFEATTACK + 5, 136, 100}, {8, KNIFEATTACK + 4, 137, 83}, {8, KNIFEATTACK, 189, 52}
|
||||
},
|
||||
// GOBLINATTACK
|
||||
{{10, GOBSWORDATTACK, 243, 92}, {10, GOBSWORDATTACK + 1, 255, 68}, {10, GOBSWORDATTACK + 2, 279, 65},
|
||||
{10, GOBSWORDATTACK + 3, 238, 55}, {10, GOBSWORDATTACK + 4, 153, 52}, {10, GOBSWORDATTACK + 5, 129, 152},
|
||||
{10, GOBSWORDATTACK + 6, 90, 184}, {1, EMPTY, 297, 169}, {1, EMPTY, 275, 24},
|
||||
{1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}
|
||||
},
|
||||
// MORNINGSTAR
|
||||
{{12, MORNINGSTAR, 193, 90}, {12, MORNINGSTAR + 1, 102, 133}, {12, MORNINGSTAR + 2, 77, 164},
|
||||
{12, MORNINGSTAR + 3, 239, 86}, {12, EMPTY, 299, 86}, {12, EMPTY, 107, 52},
|
||||
{12, MORNINGSTAR + 4, 197, 24}, {12, MORNINGSTAR + 5, 125, 124}, {12, MORNINGSTAR + 6, 109, 191},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
|
||||
},
|
||||
// SWORD
|
||||
{{8, SWORDATTACK, 229, 123}, {8, SWORDATTACK + 1, 221, 87}, {8, SWORDATTACK + 2, 193, 21},
|
||||
{8, SWORDATTACK + 3, 173, 0}, {8, SWORDATTACK + 4, 61, 0}, {8, SWORDATTACK + 5, 33, 48},
|
||||
{8, SWORDATTACK + 6, 126, 131}, {8, SWORDATTACK + 7, 297, 164}, {3, EMPTY, 147, 76},
|
||||
{3, EMPTY, 80, 41}, {3, EMPTY, 107, 52}, {3, EMPTY, 147, 76}
|
||||
},
|
||||
{{12, BIGAXEATTACK, 184, 123}, {12, BIGAXEATTACK + 1, 223, 112}, {12, BIGAXEATTACK + 2, 63, 151},
|
||||
{12, BIGAXEATTACK + 3, 91, 133}, {12, BIGAXEATTACK + 4, 127, 138}, {12, BIGAXEATTACK + 5, 106, 128},
|
||||
{12, BIGAXEATTACK + 6, 117, 49}, {12, BIGAXEATTACK + 7, 140, 0}, {12, BIGAXEATTACK + 8, 152, 47},
|
||||
{12, BIGAXEATTACK + 9, 166, 143}, {12, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
|
||||
},
|
||||
// BOW
|
||||
{{8, BOWWALK, 75, 13}, {8, BOWWALK + 1, 90, 0}, {8, BOWWALK + 2, 70, 0},
|
||||
{8, BOWWALK + 3, 70, 0}, {6, BOWWALK + 4, 70, 0}, {4, BOWWALK + 5, 70, 0},
|
||||
{1, EMPTY, 126, 131}, {1, EMPTY, 297, 164}, {1, EMPTY, 147, 76},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
|
||||
},
|
||||
{{10, PIKEDRAW + 5, 216, 131}, {10, EMPTY, 80, 41}, {10, EMPTY, 107, 52}, {10, EMPTY, 147, 76},
|
||||
{10, PIKEATTACK1, 0, 47}, {10, PIKEATTACK1 + 1, 0, 0}, {10, PIKEATTACK1 + 2, 0, 0},
|
||||
{10, PIKEATTACK1 + 3, 73, 0}, {10, PIKEATTACK1 + 4, 130, 27}, {10, PIKEATTACK1 + 5, 138, 125},
|
||||
{12, EMPTY, 80, 41}, {1, EMPTY, 107, 52}
|
||||
},
|
||||
{{8, EXCALATTACK1, 98, 133}, {8, EXCALATTACK1 + 1, 123, 130}, {8, EXCALATTACK1 + 2, 125, 128},
|
||||
{8, EXCALATTACK1 + 3, 115, 82}, {8, EXCALATTACK1 + 4, 115, 6}, {8, EXCALATTACK1 + 5, 178, 0},
|
||||
{8, EXCALATTACK1 + 6, 155, 0}, {8, EXCALATTACK1 + 7, 143, 0}, {8, EXCALATTACK1 + 8, 90, 91},
|
||||
{8, EXCALATTACK1 + 9, 30, 159}, {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}
|
||||
},
|
||||
{{12, HALBERDATTACK1, 245, 22}, {12, EMPTY, 107, 52}, {12, EMPTY, 147, 76},
|
||||
{12, HALBERDATTACK1 + 1, 249, 45}, {12, HALBERDATTACK1 + 2, 161, 60}, {12, HALBERDATTACK1 + 3, 45, 88},
|
||||
{12, EMPTY, 80, 41}, {12, HALBERDATTACK1 + 3, 45, 88}, {12, HALBERDATTACK1 + 2, 161, 60},
|
||||
{12, HALBERDATTACK1 + 1, 249, 45}, {12, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
|
||||
}
|
||||
};
|
||||
|
||||
//SCOTT
|
||||
const WEAPONINF zweaponanimtics[MAXWEAPONS][MAXFRAMES] =
|
||||
{
|
||||
// FIST
|
||||
{{10, RFIST, 216, 120}, {10, RFIST + 1, 166, 113}, {10, RFIST + 2, 156, 129},
|
||||
{10, RFIST + 3, 169, 151}, {10, RFIST + 4, 153, 124}, {10, RFIST + 5, 224, 133},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
|
||||
},
|
||||
// ZKNIFE
|
||||
{{8, ZKNIFEATTACK, 189, 52}, {8, ZKNIFEATTACK + 1, 254, 68},
|
||||
{16, EMPTY, 147, 76}, {8, ZKNIFEATTACK + 1, 254, 68},
|
||||
{8, ZKNIFEATTACK + 2, 218, 80}, {8, ZKNIFEATTACK + 3, 137, 83},
|
||||
{8, ZKNIFEATTACK + 4, 136, 100}, {8, ZKNIFEATTACK + 5, 126, 140},
|
||||
{8, ZKNIFEATTACK + 4, 136, 100}, {8, ZKNIFEATTACK + 3, 137, 83},
|
||||
{8, ZKNIFEATTACK + 2, 218, 80}, {1, ZKNIFEATTACK, 189, 52}
|
||||
},
|
||||
// ZSHORTATTACK
|
||||
{{10, ZSHORTATTACK, 243, 68}, {10, ZSHORTATTACK + 4, 255, 50},
|
||||
{10, ZSHORTATTACK + 5, 279, 66}, {10, ZSHORTATTACK + 6, 238, 52},
|
||||
{10, ZSHORTATTACK + 7, 181, 49}, {10, ZSHORTATTACK + 8, 129, 141},
|
||||
{1, EMPTY, 90, 184}, {1, EMPTY, 297, 169}, {1, EMPTY, 275, 24},
|
||||
{1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}
|
||||
},
|
||||
// ZSTARATTACK
|
||||
{{12, ZSTARATTACK, 193, 90}, {12, ZSTARATTACK + 3, 102, 128},
|
||||
{12, ZSTARATTACK + 4, 77, 159}, {12, ZSTARATTACK + 5, 239, 79},
|
||||
{12, EMPTY, 299, 86}, {12, EMPTY, 107, 52},
|
||||
{12, ZSTARATTACK + 6, 175, 19}, {12, ZSTARATTACK + 7, 125, 124},
|
||||
{12, ZSTARATTACK + 8, 109, 187},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
|
||||
},
|
||||
// SWORD
|
||||
{{8, SWORDATTACK, 229, 123}, {8, SWORDATTACK + 1, 221, 87}, {8, SWORDATTACK + 2, 193, 21},
|
||||
{8, SWORDATTACK + 3, 173, 0}, {8, SWORDATTACK + 4, 61, 0}, {8, SWORDATTACK + 5, 33, 48},
|
||||
{8, SWORDATTACK + 6, 126, 131}, {8, SWORDATTACK + 7, 297, 164}, {3, EMPTY, 147, 76},
|
||||
{3, EMPTY, 80, 41}, {3, EMPTY, 107, 52}, {3, EMPTY, 147, 76}
|
||||
},
|
||||
// ZAXEATTACK
|
||||
{{6, ZAXEATTACK, 179, 117}, {6, ZAXEATTACK + 6, 217, 107},
|
||||
{6, ZAXEATTACK + 7, 106, 146}, {6, ZAXEATTACK + 8, 94, 128},
|
||||
{6, ZAXEATTACK + 9, 123, 132}, {6, ZAXEATTACK + 10, 102, 134},
|
||||
{6, ZAXEATTACK + 11, 112, 45}, {6, ZAXEATTACK + 12, 102, 0},
|
||||
{6, ZAXEATTACK + 13, 68, 42}, {6, ZAXEATTACK + 14, 42, 138},
|
||||
{6, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
|
||||
},
|
||||
// ZBOW
|
||||
{{8, ZBOWWALK, 75, 13}, {8, ZBOWATTACK, 90, 0}, {8, ZBOWATTACK + 1, 70, 0},
|
||||
{8, ZBOWATTACK + 2, 70, 0}, {6, ZBOWATTACK + 3, 70, 0}, {4, ZBOWATTACK + 4, 70, 0},
|
||||
{1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13},
|
||||
{1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13}, {1, EMPTY, 147, 76}
|
||||
},
|
||||
// ZPIKE
|
||||
{{10, ZPIKEREADY + 5, 210, 127}, {10, EMPTY, 80, 41}, {10, EMPTY, 107, 52}, {10, EMPTY, 147, 76},
|
||||
{10, ZPIKEATTACK, 0, 43}, {10, ZPIKEATTACK + 1, 0, 0}, {10, ZPIKEATTACK + 2, 0, 0},
|
||||
{10, ZPIKEATTACK + 3, 45, 0}, {10, ZPIKEATTACK + 4, 51, 23}, {10, ZPIKEATTACK + 5, 59, 121},
|
||||
{12, EMPTY, 80, 41}, {1, EMPTY, 107, 52}
|
||||
},
|
||||
{{8, ZTWOHANDATTACK, 98, 133}, {8, ZTWOHANDATTACK + 6, 115, 130},
|
||||
{8, ZTWOHANDATTACK + 7, 125, 128}, {8, ZTWOHANDATTACK + 8, 116, 82},
|
||||
{8, ZTWOHANDATTACK + 9, 117, 9}, {8, ZTWOHANDATTACK + 10, 180, 0},
|
||||
{8, ZTWOHANDATTACK + 11, 174, 0}, {8, ZTWOHANDATTACK + 12, 166, 0},
|
||||
{8, ZTWOHANDATTACK + 13, 125, 90}, {8, ZTWOHANDATTACK + 14, 83, 166},
|
||||
{1, EMPTY, 30, 159}, {1, EMPTY, 80, 41}
|
||||
},
|
||||
// { { 12,ZHALBERDATTACK,173,29 },{6,EMPTY,107,52},
|
||||
// { 6,EMPTY,147,76},{ 12,ZHALBERDATTACK+3,117,0 },
|
||||
// { 12,ZHALBERDATTACK+4,245,0},{12,ZHALBERDATTACK+5,237,0},
|
||||
// { 6,EMPTY,80,41 },{12,ZHALBERDATTACK+6,115,0},
|
||||
// { 12,ZHALBERDATTACK+7,9,0 },{ 12,ZHALBERDATTACK+8,0,42 },
|
||||
// { 1,ZHALBERDATTACK,173,29 },{ 1,EMPTY,147,76 }
|
||||
// }
|
||||
{{12, ZHALBERDATTACK, 245, 30}, {12, EMPTY, 107, 52}, {12, EMPTY, 147, 76},
|
||||
{12, HALBERDATTACK1 + 1, 249, 45}, {12, HALBERDATTACK1 + 2, 161, 60}, {12, HALBERDATTACK1 + 3, 45, 88},
|
||||
{12, EMPTY, 80, 41}, {12, HALBERDATTACK1 + 3, 45, 88}, {12, HALBERDATTACK1 + 2, 161, 60},
|
||||
{12, HALBERDATTACK1 + 1, 249, 45}, {12, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
|
||||
// SCOTT
|
||||
const WEAPONINF zlefthandanimtics[5][MAXFRAMES] =
|
||||
{
|
||||
{{10, RFIST, 15, 121}, {10, RFIST + 1, 17, 114}, {10, RFIST + 2, 54, 131},
|
||||
{10, RFIST + 3, 76, 152}, {10, RFIST + 4, 31, 126}, {10, RFIST + 5, 26, 135},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
|
||||
},
|
||||
// KNIFE
|
||||
{{8, KNIFEATTACK2, 0, 113}, {8, KNIFEATTACK2 + 1, 44, 111}, {8, KNIFEATTACK2 + 2, 119, 137},
|
||||
{8, KNIFEATTACK2 + 3, 187, 159}, {16, EMPTY, 136, 100}, {8, KNIFEATTACK2 + 3, 187, 159},
|
||||
{8, KNIFEATTACK2 + 2, 119, 137}, {8, KNIFEATTACK2 + 1, 44, 111}, {8, KNIFEATTACK2, 0, 113},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
|
||||
},
|
||||
// ZSHORTATTACK
|
||||
{{10, ZSHORTATTACK, 255, 50}, {10, ZSHORTATTACK + 1, 279, 66}, {10, ZSHORTATTACK + 2, 238, 52},
|
||||
{10, ZSHORTATTACK + 3, 181, 49}, {10, ZSHORTATTACK + 4, 129, 141}, {10, ZSHORTATTACK + 5, 70, 93},
|
||||
{10, EMPTY, 90, 184}, {1, EMPTY, 297, 169}, {1, EMPTY, 275, 24},
|
||||
{1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}
|
||||
},
|
||||
// ZSTARATTACK2
|
||||
{{12, ZSTARATTACK2, 38, 141}, {12, ZSTARATTACK2 + 1, 0, 111}, {12, ZSTARATTACK2 + 2, 0, 91},
|
||||
{12, ZSTARATTACK2 + 3, 0, 47}, {12, EMPTY, 0, 24}, {1, EMPTY, 0, 24},
|
||||
{1, EMPTY, 0, 24}, {1, EMPTY, 0, 24}, {1, EMPTY, 0, 24},
|
||||
{1, EMPTY, 0, 24}, {1, EMPTY, 0, 24}, {1, EMPTY, 0, 24}
|
||||
},
|
||||
// ZSHORTATTACK2
|
||||
{{10, ZSHORTATTACK2, 238, 99}, {10, ZSHORTATTACK2 + 1, 202, 11}, {10, ZSHORTATTACK2 + 2, 182, 0},
|
||||
{10, ZSHORTATTACK2 + 3, 79, 13}, {10, ZSHORTATTACK2 + 4, 79, 13}, {10, ZSHORTATTACK2 + 5, 119, 123},
|
||||
{10, ZSHORTATTACK2 + 6, 295, 179}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24},
|
||||
{1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
const WEAPONINF weaponanimtics2[MAXWEAPONS][MAXFRAMES] =
|
||||
{
|
||||
// FIST
|
||||
{{10, RFIST, 216, 120}, {10, RFIST + 1, 166, 113}, {10, RFIST + 2, 156, 129},
|
||||
{10, RFIST + 3, 169, 151}, {10, RFIST + 4, 153, 124}, {10, RFIST + 5, 224, 133},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
|
||||
},
|
||||
// KNIFE
|
||||
{{8, KNIFEATTACK, 189, 52}, {8, KNIFEATTACK + 1, 254, 68}, {16, EMPTY, 147, 76},
|
||||
{8, KNIFEATTACK2, 206, 114}, {8, KNIFEATTACK2 + 1, 107, 112}, {8, KNIFEATTACK2 + 2, 22, 138},
|
||||
{8, KNIFEATTACK2 + 3, 0, 161}, {16, EMPTY, 136, 100}, {8, KNIFEATTACK2 + 3, 0, 161},
|
||||
{8, KNIFEATTACK2 + 2, 22, 138}, {8, KNIFEATTACK2 + 1, 107, 112}, {8, KNIFEATTACK2, 206, 114}
|
||||
},
|
||||
// GOBLINATTACK
|
||||
{{10, GOBSWORDATTACK2, 236, 99}, {10, GOBSWORDATTACK2 + 1, 202, 24}, {10, GOBSWORDATTACK2 + 2, 181, 0},
|
||||
{10, GOBSWORDATTACK2 + 3, 52, 12}, {10, GOBSWORDATTACK2 + 4, 72, 72}, {10, GOBSWORDATTACK2 + 5, 134, 139},
|
||||
{10, GOBSWORDATTACK2 + 6, 297, 169}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24},
|
||||
{1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}
|
||||
},
|
||||
// MORNINGATTACK2
|
||||
{{12, MORNINGATTACK2, 85, 136}, {12, MORNINGATTACK2 + 1, 34, 110}, {12, MORNINGATTACK2 + 2, 32, 91},
|
||||
{12, MORNINGATTACK2 + 3, 186, 47}, {12, MORNINGATTACK2 + 4, 275, 24}, {1, EMPTY, 275, 24},
|
||||
{1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24},
|
||||
{1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}
|
||||
},
|
||||
// SWORD
|
||||
{{8, SWORDATTACK2 + 1, 195, 63}, {8, SWORDATTACK2 + 2, 250, 54}, {8, SWORDATTACK2 + 3, 275, 37},
|
||||
{16, EMPTY, 61, 0}, {8, SWORDATTACK2 + 4, 229, 66}, {8, SWORDATTACK2 + 5, 185, 0},
|
||||
{8, SWORDATTACK2 + 6, 158, 115}, {8, SWORDATTACK2 + 7, 57, 163}, {1, EMPTY, 57, 163},
|
||||
{1, EMPTY, 57, 163}, {1, EMPTY, 57, 163}, {1, EMPTY, 57, 163}
|
||||
},
|
||||
{{12, BIGAXEATTACK2, 200, 111}, {12, BIGAXEATTACK2 + 1, 5, 136}, {12, BIGAXEATTACK2 + 2, 69, 162},
|
||||
{12, BIGAXEATTACK2 + 3, 147, 164}, {12, BIGAXEATTACK2 + 4, 76, 152}, {12, BIGAXEATTACK2 + 5, 33, 95},
|
||||
{12, BIGAXEATTACK2 + 6, 0, 91}, {12, BIGAXEATTACK2 + 7, 0, 98}, {12, EMPTY, 147, 76},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
|
||||
},
|
||||
// BOW
|
||||
{{8, BOWWALK, 75, 13}, {8, BOWWALK + 1, 90, 0}, {8, BOWWALK + 2, 70, 0},
|
||||
{8, BOWWALK + 3, 70, 0}, {6, BOWWALK + 4, 70, 0}, {4, BOWWALK + 5, 70, 0},
|
||||
{1, EMPTY, 126, 131}, {1, EMPTY, 297, 164}, {1, EMPTY, 147, 76},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
|
||||
},
|
||||
{{10, PIKEATTACK2, 266, 147}, {10, PIKEATTACK2 + 1, 182, 117}, {10, PIKEATTACK2 + 2, 123, 84},
|
||||
{10, PIKEATTACK2 + 3, 7, 48}, {10, PIKEATTACK2 + 4, 0, 83}, {10, PIKEATTACK2 + 5, 0, 158},
|
||||
{10, PIKEATTACK2 + 6, 25, 117}, {10, PIKEATTACK2 + 7, 139, 93}, {10, PIKEATTACK2 + 8, 234, 75},
|
||||
{8, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
|
||||
},
|
||||
{{8, EXCALATTACK2, 0, 143}, {8, EXCALATTACK2 + 1, 0, 103}, {8, EXCALATTACK2 + 2, 0, 70},
|
||||
{8, EXCALATTACK2 + 3, 48, 0}, {8, EXCALATTACK2 + 4, 67, 0}, {8, EXCALATTACK2 + 5, 78, 21},
|
||||
{8, EXCALATTACK2 + 6, 165, 107}, {8, EXCALATTACK2 + 7, 260, 168}, {1, EMPTY, 130, 27},
|
||||
{1, EMPTY, 138, 125}, {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}
|
||||
},
|
||||
{{12, HALBERDATTACK1, 245, 22}, {12, HALBERDATTACK2, 114, 35}, {12, HALBERDATTACK2 + 1, 105, 87},
|
||||
{12, HALBERDATTACK2 + 2, 54, 107}, {12, HALBERDATTACK2 + 3, 48, 102}, {1, HALBERDATTACK2 + 3, 48, 102},
|
||||
{1, HALBERDATTACK2 + 3, 48, 102}, {12, HALBERDATTACK2 + 2, 54, 107}, {12, HALBERDATTACK2 + 1, 105, 87},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
|
||||
}
|
||||
};
|
||||
|
||||
//SCOTT
|
||||
const WEAPONINF zweaponanimtics2[MAXWEAPONS][MAXFRAMES] =
|
||||
{
|
||||
// FIST
|
||||
{{10, RFIST, 216, 120}, {10, RFIST + 1, 166, 113}, {10, RFIST + 2, 156, 129},
|
||||
{10, RFIST + 3, 169, 151}, {10, RFIST + 4, 153, 124}, {10, RFIST + 5, 224, 133},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
|
||||
},
|
||||
// ZKNIFE
|
||||
{{8, ZKNIFEATTACK, 189, 52}, {8, ZKNIFEATTACK + 1, 254, 68}, {16, EMPTY, 147, 76},
|
||||
{8, ZKNIFEATTACK2, 206, 114}, {8, ZKNIFEATTACK2 + 1, 107, 112}, {8, ZKNIFEATTACK2 + 2, 22, 138},
|
||||
{8, ZKNIFEATTACK2 + 3, 0, 161}, {16, EMPTY, 136, 100}, {8, KNIFEATTACK2 + 3, 0, 161},
|
||||
{8, ZKNIFEATTACK2 + 2, 22, 138}, {8, ZKNIFEATTACK2 + 1, 107, 112}, {8, KNIFEATTACK2, 206, 114}
|
||||
},
|
||||
// ZSHORTATTACK2
|
||||
{{10, ZSHORTATTACK2, 238, 99}, {10, ZSHORTATTACK2 + 1, 202, 11},
|
||||
{10, ZSHORTATTACK2 + 2, 182, 0}, {10, ZSHORTATTACK2 + 3, 79, 13},
|
||||
{10, ZSHORTATTACK2 + 4, 40, 45}, {10, ZSHORTATTACK2 + 5, 119, 123},
|
||||
{10, ZSHORTATTACK2 + 6, 295, 179}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24},
|
||||
{1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}
|
||||
},
|
||||
// ZSTARATTACK2
|
||||
{{12, ZSTARATTACK2, 44, 110}, {12, ZSTARATTACK2 + 1, 26, 91}, {12, ZSTARATTACK2 + 2, 177, 38},
|
||||
{12, ZSTARATTACK2 + 3, 262, 11}, {12, EMPTY, 275, 24}, {1, EMPTY, 275, 24},
|
||||
{1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24},
|
||||
{1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}
|
||||
},
|
||||
// SWORD
|
||||
{{8, SWORDATTACK2 + 1, 195, 63}, {8, SWORDATTACK2 + 2, 250, 54}, {8, SWORDATTACK2 + 3, 275, 37},
|
||||
{16, EMPTY, 61, 0}, {8, SWORDATTACK2 + 4, 229, 66}, {8, SWORDATTACK2 + 5, 185, 0},
|
||||
{8, SWORDATTACK2 + 6, 158, 115}, {8, SWORDATTACK2 + 7, 57, 163}, {1, EMPTY, 57, 163},
|
||||
{1, EMPTY, 57, 163}, {1, EMPTY, 57, 163}, {1, EMPTY, 57, 163}
|
||||
},
|
||||
// ZAXEATTACK2
|
||||
{{6, ZAXEATTACK2, 200, 111}, {6, ZAXEATTACK2 + 1, 5, 136}, {6, ZAXEATTACK2 + 2, 69, 162},
|
||||
{6, ZAXEATTACK2 + 3, 147, 164}, {6, ZAXEATTACK2 + 4, 76, 152}, {6, ZAXEATTACK2 + 5, 33, 95},
|
||||
{6, ZAXEATTACK2 + 6, 0, 91}, {6, ZAXEATTACK2 + 7, 0, 98}, {6, EMPTY, 147, 76},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
|
||||
},
|
||||
// ZBOW
|
||||
{{8, ZBOWWALK, 75, 13}, {8, ZBOWATTACK, 90, 0}, {8, ZBOWATTACK + 1, 70, 0},
|
||||
{8, ZBOWATTACK + 2, 70, 0}, {6, ZBOWATTACK + 3, 70, 0}, {4, ZBOWATTACK + 4, 70, 0},
|
||||
{1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13},
|
||||
{1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13}, {1, EMPTY, 147, 76}
|
||||
},
|
||||
|
||||
// ZPIKEATTACK2
|
||||
{{10, ZPIKEATTACK2, 266, 147}, {10, ZPIKEATTACK2 + 1, 182, 117}, {10, ZPIKEATTACK2 + 2, 123, 84},
|
||||
{10, ZPIKEATTACK2 + 3, 7, 48}, {10, ZPIKEATTACK2 + 4, 0, 83}, {10, ZPIKEATTACK2 + 5, 0, 158},
|
||||
{10, ZPIKEATTACK2 + 6, 25, 117}, {10, ZPIKEATTACK2 + 7, 139, 93}, {10, ZPIKEATTACK2 + 8, 234, 75},
|
||||
{8, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
|
||||
},
|
||||
// ZTWOHANDATTACK2
|
||||
{{8, ZTWOHANDATTACK2, 0, 143}, {8, ZTWOHANDATTACK2 + 1, 0, 103}, {8, ZTWOHANDATTACK2 + 2, 0, 70},
|
||||
{8, ZTWOHANDATTACK2 + 3, 41, 0}, {8, ZTWOHANDATTACK2 + 4, 54, 0}, {8, ZTWOHANDATTACK2 + 5, 166, 21},
|
||||
{8, ZTWOHANDATTACK2 + 6, 242, 108}, {8, EMPTY, 260, 168}, {1, EMPTY, 130, 27},
|
||||
{1, EMPTY, 138, 125}, {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}
|
||||
},
|
||||
// ZHALBERDATTACK2
|
||||
{{12, HALBERDATTACK1, 245, 22}, {12, HALBERDATTACK2, 114, 35}, {12, HALBERDATTACK2 + 1, 105, 87},
|
||||
{12, HALBERDATTACK2 + 2, 54, 107}, {12, HALBERDATTACK2 + 3, 48, 102}, {1, HALBERDATTACK2 + 3, 48, 102},
|
||||
{1, HALBERDATTACK2 + 3, 48, 102}, {12, HALBERDATTACK2 + 2, 54, 107}, {12, HALBERDATTACK2 + 1, 105, 87},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
const WEAPONINF lefthandanimtics[5][MAXFRAMES] =
|
||||
{
|
||||
{{10, RFIST, 15, 121}, {10, RFIST + 1, 17, 114}, {10, RFIST + 2, 54, 131},
|
||||
{10, RFIST + 3, 76, 152}, {10, RFIST + 4, 31, 126}, {10, RFIST + 5, 26, 135},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
|
||||
},
|
||||
// KNIFE
|
||||
{{8, KNIFEATTACK2, 0, 113}, {8, KNIFEATTACK2 + 1, 44, 111}, {8, KNIFEATTACK2 + 2, 119, 137},
|
||||
{8, KNIFEATTACK2 + 3, 187, 159}, {16, EMPTY, 136, 100}, {8, KNIFEATTACK2 + 3, 187, 159},
|
||||
{8, KNIFEATTACK2 + 2, 119, 137}, {8, KNIFEATTACK2 + 1, 44, 111}, {8, KNIFEATTACK2, 0, 113},
|
||||
{1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
|
||||
},
|
||||
// GOBLINATTACK
|
||||
{{10, GOBSWORDATTACK, 243, 92}, {10, GOBSWORDATTACK + 1, 255, 68}, {10, GOBSWORDATTACK + 2, 279, 65},
|
||||
{10, GOBSWORDATTACK + 3, 238, 55}, {10, GOBSWORDATTACK + 4, 153, 52}, {10, GOBSWORDATTACK + 5, 129, 152},
|
||||
{10, GOBSWORDATTACK + 6, 90, 184}, {1, EMPTY, 297, 169}, {1, EMPTY, 275, 24},
|
||||
{1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}
|
||||
},
|
||||
// MORNINGATTACK2
|
||||
|
||||
{{12, MORNINGATTACK2, 38, 141}, {12, MORNINGATTACK2 + 1, 0, 111}, {12, MORNINGATTACK2 + 2, 0, 91},
|
||||
{12, MORNINGATTACK2 + 3, 0, 47}, {12, MORNINGATTACK2 + 4, 0, 24}, {1, EMPTY, 0, 24},
|
||||
{1, EMPTY, 0, 24}, {1, EMPTY, 0, 24}, {1, EMPTY, 0, 24},
|
||||
{1, EMPTY, 0, 24}, {1, EMPTY, 0, 24}, {1, EMPTY, 0, 24}
|
||||
|
||||
},
|
||||
|
||||
// GOBLINATTACK2
|
||||
{{10, GOBSWORDATTACK2, 236, 99}, {10, GOBSWORDATTACK2 + 1, 202, 24}, {10, GOBSWORDATTACK2 + 2, 181, 0},
|
||||
{10, GOBSWORDATTACK2 + 3, 52, 12}, {10, GOBSWORDATTACK2 + 4, 72, 72}, {10, GOBSWORDATTACK2 + 5, 134, 139},
|
||||
{10, GOBSWORDATTACK2 + 6, 297, 169}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24},
|
||||
{1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
END_WH_NS
|
|
@ -6,12 +6,287 @@ BEGIN_WH_NS
|
|||
|
||||
using SPRITE = spritetype;
|
||||
using boolean = bool;
|
||||
using byte = uint8_t;
|
||||
|
||||
END_WH_NS
|
||||
|
||||
#include "globals.h"
|
||||
#include "names.h"
|
||||
#include "item.h"
|
||||
#include "wh1names.h"
|
||||
#include "wh2names.h"
|
||||
#include "sndnames.h"
|
||||
#include "player.h"
|
||||
#include "ai.h"
|
||||
#include "printf.h"
|
||||
#include "gstrings.h"
|
||||
#include "gamecontrol.h"
|
||||
|
||||
BEGIN_WH_NS
|
||||
|
||||
|
||||
enum EItems
|
||||
{
|
||||
ITEMSBASE = 101,
|
||||
SILVERBAGTYPE = 101,
|
||||
GOLDBAGTYPE = 102,
|
||||
HELMETTYPE = 103,
|
||||
PLATEARMORTYPE = 104,
|
||||
CHAINMAILTYPE = 105,
|
||||
LEATHERARMORTYPE = 106,
|
||||
GIFTBOXTYPE = 107,
|
||||
FLASKBLUETYPE = 108,
|
||||
FLASKGREENTYPE = 109,
|
||||
FLASKOCHRETYPE = 110,
|
||||
FLASKREDTYPE = 111,
|
||||
FLASKTANTYPE = 112,
|
||||
DIAMONDRINGTYPE = 113,
|
||||
SHADOWAMULETTYPE = 114,
|
||||
GLASSSKULLTYPE = 115,
|
||||
AHNKTYPE = 116,
|
||||
BLUESCEPTERTYPE = 117,
|
||||
YELLOWSCEPTERTYPE = 118,
|
||||
ADAMANTINERINGTYPE = 119,
|
||||
ONYXRINGTYPE = 120,
|
||||
PENTAGRAMTYPE = 121,
|
||||
CRYSTALSTAFFTYPE = 122,
|
||||
AMULETOFTHEMISTTYPE = 123,
|
||||
HORNEDSKULLTYPE = 124,
|
||||
THEHORNTYPE = 125,
|
||||
SAPHIRERINGTYPE = 126,
|
||||
BRASSKEYTYPE = 127,
|
||||
BLACKKEYTYPE = 128,
|
||||
GLASSKEYTYPE = 129,
|
||||
IVORYKEYTYPE = 130,
|
||||
SCROLLSCARETYPE = 131,
|
||||
SCROLLNIGHTTYPE = 132,
|
||||
SCROLLFREEZETYPE = 133,
|
||||
SCROLLMAGICTYPE = 134,
|
||||
SCROLLOPENTYPE = 135,
|
||||
SCROLLFLYTYPE = 136,
|
||||
SCROLLFIREBALLTYPE = 137,
|
||||
SCROLLNUKETYPE = 138,
|
||||
QUIVERTYPE = 139,
|
||||
BOWTYPE = 140,
|
||||
WEAPON1TYPE = 141,
|
||||
WEAPON1ATYPE = 142,
|
||||
GOBWEAPONTYPE = 143,
|
||||
WEAPON2TYPE = 144,
|
||||
WEAPON3ATYPE = 145,
|
||||
WEAPON3TYPE = 146,
|
||||
WEAPON4TYPE = 147,
|
||||
THROWHALBERDTYPE = 148,
|
||||
WEAPON5TYPE = 149,
|
||||
GONZOSHIELDTYPE = 150,
|
||||
SHIELDTYPE = 151,
|
||||
WEAPON5BTYPE = 152,
|
||||
WALLPIKETYPE = 153,
|
||||
WEAPON6TYPE = 154,
|
||||
WEAPON7TYPE = 155,
|
||||
GYSERTYPE = 156, //WH1
|
||||
SPIKEBLADETYPE = 157,
|
||||
SPIKETYPE = 158,
|
||||
SPIKEPOLETYPE = 159,
|
||||
MONSTERBALLTYPE = 160,
|
||||
WEAPON8TYPE = 161,
|
||||
MAXITEMS = 162,
|
||||
};
|
||||
|
||||
|
||||
struct Delayitem {
|
||||
int item;
|
||||
int timer;
|
||||
boolean func;
|
||||
|
||||
void memmove(const Delayitem& source)
|
||||
{
|
||||
item = source.item;
|
||||
timer = source.timer;
|
||||
func = source.func;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
struct SwingDoor {
|
||||
int wall[8];
|
||||
int sector;
|
||||
int angopen;
|
||||
int angclosed;
|
||||
int angopendir;
|
||||
int ang;
|
||||
int anginc;
|
||||
int x[8];
|
||||
int y[8];
|
||||
};
|
||||
|
||||
struct PLOCATION {
|
||||
int x;
|
||||
int y;
|
||||
int z;
|
||||
float ang;
|
||||
float horiz;
|
||||
};
|
||||
|
||||
|
||||
extern int killcnt;
|
||||
|
||||
// whobj
|
||||
|
||||
extern int justwarpedcnt;
|
||||
extern byte flashflag;
|
||||
extern short torchpattern[];
|
||||
extern int monsterwarptime;
|
||||
|
||||
short adjusthp(int hp);
|
||||
void timerprocess(PLAYER& plr);
|
||||
int getPickHeight();
|
||||
void processobjs(PLAYER& plr);
|
||||
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(int i, boolean ball);
|
||||
void icecubes(int i, int x, int y, int z, int owner);
|
||||
boolean damageactor(PLAYER& plr, int hitobject, short i);
|
||||
int movesprite(short spritenum, int dx, int dy, int dz, int ceildist, int flordist, int cliptype);
|
||||
void trowajavlin(int s);
|
||||
void spawnhornskull(short i);
|
||||
void spawnapentagram(int sn);
|
||||
|
||||
|
||||
// whplr
|
||||
|
||||
extern PLAYER player[MAXPLAYERS];
|
||||
extern PLOCATION gPrevPlayerLoc[MAXPLAYERS];
|
||||
extern short monsterangle[MAXSPRITESONSCREEN], monsterlist[MAXSPRITESONSCREEN];
|
||||
extern int shootgunzvel;
|
||||
extern boolean justteleported;
|
||||
extern int victor;
|
||||
extern int autohoriz; // XXX NOT FOR MULTIPLAYER
|
||||
|
||||
extern int pyrn;
|
||||
extern int mapon;
|
||||
extern int damage_vel, damage_svel, damage_angvel;
|
||||
|
||||
void viewBackupPlayerLoc(int nPlayer);
|
||||
void playerdead(PLAYER& plr);
|
||||
void initplayersprite(PLAYER& plr);
|
||||
void updateviewmap(PLAYER& plr);
|
||||
void plruse(PLAYER& plr);
|
||||
void chunksofmeat(PLAYER& plr, int hitsprite, int hitx, int hity, int hitz, short hitsect, int daang);
|
||||
void addhealth(PLAYER& plr, int hp);
|
||||
void addarmor(PLAYER& plr, int arm);
|
||||
void addscore(PLAYER& plr, int score);
|
||||
void goesupalevel(PLAYER& plr);
|
||||
|
||||
// whtag.cpp
|
||||
|
||||
extern int d_soundplayed;
|
||||
extern int delaycnt;
|
||||
extern Delayitem delayitem[MAXSECTORS];
|
||||
|
||||
extern short ironbarsector[16];
|
||||
extern short ironbarscnt;
|
||||
extern int ironbarsgoal1[16], ironbarsgoal2[16];
|
||||
extern short ironbarsdone[16], ironbarsanim[16];
|
||||
extern int ironbarsgoal[16];
|
||||
|
||||
extern short warpsectorlist[64], warpsectorcnt;
|
||||
extern short xpanningsectorlist[16], xpanningsectorcnt;
|
||||
extern short ypanningwalllist[128], ypanningwallcnt;
|
||||
extern short floorpanninglist[64], floorpanningcnt;
|
||||
extern SwingDoor swingdoor[MAXSWINGDOORS];
|
||||
extern short swingcnt;
|
||||
|
||||
extern short dragsectorlist[16], dragxdir[16], dragydir[16], dragsectorcnt;
|
||||
extern int dragx1[16], dragy1[16], dragx2[16], dragy2[16], dragfloorz[16];
|
||||
|
||||
|
||||
void operatesprite(PLAYER& plr, short s);
|
||||
void operatesector(PLAYER& plr, int s);
|
||||
void animatetags(int nPlayer);
|
||||
void dodelayitems(int tics);
|
||||
void setdelayfunc(int item, int delay);
|
||||
|
||||
// whmap
|
||||
|
||||
extern boolean nextlevel;
|
||||
|
||||
void loadnewlevel(int mapon);
|
||||
void preparesectors();
|
||||
boolean prepareboard(const char* fname);
|
||||
|
||||
// whani
|
||||
void animateobjs(PLAYER& plr);
|
||||
boolean isBlades(int pic);
|
||||
|
||||
// weapons
|
||||
|
||||
extern const WEAPONINF sspellbookanim[MAXNUMORBS][9];
|
||||
extern const WEAPONINF spikeanimtics[5];
|
||||
extern const WEAPONINF wh2throwanimtics[MAXNUMORBS][MAXFRAMES + 1];
|
||||
extern const WEAPONINF throwanimtics[MAXNUMORBS][MAXFRAMES + 1];
|
||||
extern const WEAPONINF cockanimtics[MAXFRAMES + 1];
|
||||
extern const WEAPONINF zcockanimtics[MAXFRAMES + 1];
|
||||
extern const WEAPONINF zreadyanimtics[MAXWEAPONS][MAXFRAMES + 1];
|
||||
extern const WEAPONINF readyanimtics[MAXWEAPONS][MAXFRAMES + 1];
|
||||
extern const WEAPONINF weaponanimtics[MAXWEAPONS][MAXFRAMES];
|
||||
extern const WEAPONINF zweaponanimtics[MAXWEAPONS][MAXFRAMES];
|
||||
extern const WEAPONINF zlefthandanimtics[5][MAXFRAMES];
|
||||
extern const WEAPONINF weaponanimtics2[MAXWEAPONS][MAXFRAMES];
|
||||
extern const WEAPONINF zweaponanimtics2[MAXWEAPONS][MAXFRAMES];
|
||||
extern const WEAPONINF lefthandanimtics[5][MAXFRAMES];
|
||||
|
||||
extern int dropshieldcnt;
|
||||
extern boolean droptheshield;
|
||||
extern int dahand;
|
||||
extern int weapondrop;
|
||||
extern int snakex, snakey;
|
||||
extern int enchantedsoundhandle;
|
||||
|
||||
boolean checkmedusadist(int i, int x, int y, int z, int lvl);
|
||||
void autoweaponchange(PLAYER& plr, int dagun);
|
||||
void weaponchange(int snum);
|
||||
void plrfireweapon(PLAYER& plr);
|
||||
void weaponsprocess(int snum);
|
||||
void shootgun(PLAYER& plr, float ang, int guntype);
|
||||
boolean checkweapondist(int i, int x, int y, int z, int guntype);
|
||||
void swingdapunch(PLAYER& plr, int daweapon);
|
||||
void swingdaweapon(PLAYER& plr);
|
||||
void swingdacrunch(PLAYER& plr, int daweapon);
|
||||
void swingdasound(int daweapon, boolean enchanted);
|
||||
|
||||
boolean isItemSprite(int i);
|
||||
void InitItems();
|
||||
|
||||
// spellbook
|
||||
|
||||
void activatedaorb(PLAYER& plr);
|
||||
void castaorb(PLAYER& plr);
|
||||
void spellswitch(PLAYER& plr, int j);
|
||||
void bookprocess(int snum);
|
||||
boolean changebook(PLAYER& plr, int i);
|
||||
boolean lvlspellcheck(PLAYER& plr);
|
||||
void speelbookprocess(PLAYER& plr);
|
||||
void nukespell(PLAYER& plr, short j);
|
||||
void medusa(PLAYER& plr, short j);
|
||||
void displayspelltext(PLAYER& plr);
|
||||
void orbpic(PLAYER& plr, int currentorb);
|
||||
|
||||
// potion
|
||||
extern int potiontilenum;
|
||||
void potiontext(PLAYER& plr);
|
||||
void potionchange(int snum);
|
||||
void usapotion(PLAYER& plr);
|
||||
boolean potionspace(PLAYER& plr, int vial);
|
||||
void updatepotion(PLAYER& plr, int vial);
|
||||
void potionpic(PLAYER& plr, int currentpotion, int x, int y, int scale);
|
||||
void randompotion(int i);
|
||||
|
||||
|
||||
inline void showmessage(const char* msg, int)
|
||||
{
|
||||
Printf(PRINT_NOTIFY, "%s\n", GStrings(msg));
|
||||
}
|
||||
|
||||
END_WH_NS
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#include "ns.h"
|
||||
#pragma once
|
||||
|
||||
BEGIN_WH_NS
|
||||
|
||||
|
|
1417
source/games/whaven/src/whani.cpp
Normal file
1417
source/games/whaven/src/whani.cpp
Normal file
File diff suppressed because it is too large
Load diff
1078
source/games/whaven/src/whfx.cpp
Normal file
1078
source/games/whaven/src/whfx.cpp
Normal file
File diff suppressed because it is too large
Load diff
853
source/games/whaven/src/whmap.cpp
Normal file
853
source/games/whaven/src/whmap.cpp
Normal file
|
@ -0,0 +1,853 @@
|
|||
#include "ns.h"
|
||||
#include "wh.h"
|
||||
|
||||
BEGIN_WH_NS
|
||||
|
||||
|
||||
|
||||
boolean nextlevel;
|
||||
|
||||
void loadnewlevel(int mapon) {
|
||||
#if 0
|
||||
MapInfo nextmap;
|
||||
if(gCurrentEpisode != nullptr && (nextmap = gCurrentEpisode.getMap(mapon)) != nullptr) {
|
||||
boardfilename = nextmap.path;
|
||||
Console.Println("Entering level " + boardfilename);
|
||||
nextlevel = true;
|
||||
gGameScreen.loadboard(boardfilename, nullptr);
|
||||
} else game.show();
|
||||
#endif
|
||||
}
|
||||
|
||||
void preparesectors() {
|
||||
int endwall, j, k = 0, startwall;
|
||||
int dax, day;
|
||||
int dasector;
|
||||
int dax2, day2;
|
||||
|
||||
for (int i = 0; i < numsectors; i++) {
|
||||
ceilingshadearray[i] = sector[i].ceilingshade;
|
||||
floorshadearray[i] = sector[i].floorshade;
|
||||
|
||||
if(isWh2()) {
|
||||
if(mapon == 13)
|
||||
{
|
||||
auto& s = sector[i];
|
||||
if(i == 209 && s.lotag == 62)
|
||||
s.lotag = 0;
|
||||
if(i == 435 && s.lotag == 0)
|
||||
s.lotag = 62;
|
||||
}
|
||||
}
|
||||
|
||||
// if (sector[i].lotag == 100)
|
||||
// spikesector[spikecnt++] = i;
|
||||
|
||||
if (sector[i].lotag == 70)
|
||||
skypanlist[skypancnt++] = (short) i;
|
||||
|
||||
if (sector[i].lotag >= 80 && sector[i].lotag <= 89)
|
||||
floorpanninglist[floorpanningcnt++] = (short) i;
|
||||
|
||||
if (sector[i].lotag >= 900 && sector[i].lotag <= 999) {
|
||||
lavadrylandsector[lavadrylandcnt] = (short) i;
|
||||
lavadrylandcnt++;
|
||||
}
|
||||
|
||||
if (sector[i].lotag >= 2100 && sector[i].lotag <= 2199) {
|
||||
startwall = sector[i].wallptr;
|
||||
endwall = startwall + sector[i].wallnum - 1;
|
||||
dax = 0;
|
||||
day = 0;
|
||||
for (j = startwall; j <= endwall; j++) {
|
||||
dax += wall[j].x;
|
||||
day += wall[j].y;
|
||||
}
|
||||
revolvepivotx[revolvecnt] = (int) (dax / (endwall - startwall + 1));
|
||||
revolvepivoty[revolvecnt] = (int) (day / (endwall - startwall + 1));
|
||||
|
||||
k = 0;
|
||||
for (j = startwall; j <= endwall; j++) {
|
||||
revolvex[revolvecnt][k] = wall[j].x;
|
||||
revolvey[revolvecnt][k] = wall[j].y;
|
||||
k++;
|
||||
}
|
||||
revolvesector[revolvecnt] = (short) i;
|
||||
revolveang[revolvecnt] = 0;
|
||||
|
||||
revolveclip[revolvecnt] = 1;
|
||||
if (sector[i].ceilingz == sector[wall[startwall].nextsector].ceilingz)
|
||||
revolveclip[revolvecnt] = 0;
|
||||
|
||||
revolvecnt++;
|
||||
}
|
||||
|
||||
switch (sector[i].lotag) {
|
||||
case 131:
|
||||
case 132:
|
||||
case 133:
|
||||
case 134:
|
||||
case DOORSWINGTAG:
|
||||
startwall = sector[i].wallptr;
|
||||
endwall = startwall + sector[i].wallnum - 1;
|
||||
for (j = startwall; j <= endwall; j++) {
|
||||
if (wall[j].lotag == 4) {
|
||||
k = wall[wall[wall[wall[j].point2].point2].point2].point2;
|
||||
if ((wall[j].x == wall[k].x) && (wall[j].y == wall[k].y)) {
|
||||
swingdoor[swingcnt].wall[0] = j;
|
||||
swingdoor[swingcnt].wall[1] = wall[j].point2;
|
||||
swingdoor[swingcnt].wall[2] = wall[wall[j].point2].point2;
|
||||
swingdoor[swingcnt].wall[3] = wall[wall[wall[j].point2].point2].point2;
|
||||
swingdoor[swingcnt].angopen = 1536;
|
||||
swingdoor[swingcnt].angclosed = 0;
|
||||
swingdoor[swingcnt].angopendir = -1;
|
||||
} else {
|
||||
swingdoor[swingcnt].wall[0] = wall[j].point2;
|
||||
swingdoor[swingcnt].wall[1] = j;
|
||||
swingdoor[swingcnt].wall[2] = lastwall(j);
|
||||
swingdoor[swingcnt].wall[3] = lastwall(swingdoor[swingcnt].wall[2]);
|
||||
swingdoor[swingcnt].angopen = 512;
|
||||
swingdoor[swingcnt].angclosed = 0;
|
||||
swingdoor[swingcnt].angopendir = 1;
|
||||
}
|
||||
for (k = 0; k < 4; k++) {
|
||||
swingdoor[swingcnt].x[k] = wall[swingdoor[swingcnt].wall[k]].x;
|
||||
swingdoor[swingcnt].y[k] = wall[swingdoor[swingcnt].wall[k]].y;
|
||||
}
|
||||
swingdoor[swingcnt].sector = i;
|
||||
swingdoor[swingcnt].ang = swingdoor[swingcnt].angclosed;
|
||||
swingdoor[swingcnt].anginc = 0;
|
||||
swingcnt++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 11:
|
||||
xpanningsectorlist[xpanningsectorcnt++] = (short) i;
|
||||
break;
|
||||
case 12:
|
||||
dasector = i;
|
||||
dax = 0x7fffffff;
|
||||
day = 0x7fffffff;
|
||||
dax2 = 0x80000000;
|
||||
day2 = 0x80000000;
|
||||
startwall = sector[i].wallptr;
|
||||
endwall = startwall + sector[i].wallnum - 1;
|
||||
for (j = startwall; j <= endwall; j++) {
|
||||
if (wall[j].x < dax)
|
||||
dax = wall[j].x;
|
||||
if (wall[j].y < day)
|
||||
day = wall[j].y;
|
||||
if (wall[j].x > dax2)
|
||||
dax2 = wall[j].x;
|
||||
if (wall[j].y > day2)
|
||||
day2 = wall[j].y;
|
||||
if (wall[j].lotag == 3)
|
||||
k = j;
|
||||
}
|
||||
if (wall[k].x == dax)
|
||||
dragxdir[dragsectorcnt] = -16;
|
||||
if (wall[k].y == day)
|
||||
dragydir[dragsectorcnt] = -16;
|
||||
if (wall[k].x == dax2)
|
||||
dragxdir[dragsectorcnt] = 16;
|
||||
if (wall[k].y == day2)
|
||||
dragydir[dragsectorcnt] = 16;
|
||||
|
||||
dasector = wall[startwall].nextsector;
|
||||
dragx1[dragsectorcnt] = 0x7fffffff;
|
||||
dragy1[dragsectorcnt] = 0x7fffffff;
|
||||
dragx2[dragsectorcnt] = 0x80000000;
|
||||
dragy2[dragsectorcnt] = 0x80000000;
|
||||
startwall = sector[dasector].wallptr;
|
||||
endwall = startwall + sector[dasector].wallnum - 1;
|
||||
for (j = startwall; j <= endwall; j++) {
|
||||
if (wall[j].x < dragx1[dragsectorcnt])
|
||||
dragx1[dragsectorcnt] = wall[j].x;
|
||||
if (wall[j].y < dragy1[dragsectorcnt])
|
||||
dragy1[dragsectorcnt] = wall[j].y;
|
||||
if (wall[j].x > dragx2[dragsectorcnt])
|
||||
dragx2[dragsectorcnt] = wall[j].x;
|
||||
if (wall[j].y > dragy2[dragsectorcnt])
|
||||
dragy2[dragsectorcnt] = wall[j].y;
|
||||
}
|
||||
|
||||
dragx1[dragsectorcnt] += (wall[sector[i].wallptr].x - dax);
|
||||
dragy1[dragsectorcnt] += (wall[sector[i].wallptr].y - day);
|
||||
dragx2[dragsectorcnt] -= (dax2 - wall[sector[i].wallptr].x);
|
||||
dragy2[dragsectorcnt] -= (day2 - wall[sector[i].wallptr].y);
|
||||
dragfloorz[dragsectorcnt] = sector[i].floorz;
|
||||
|
||||
dragsectorlist[dragsectorcnt++] = (short) i;
|
||||
break;
|
||||
case 10:
|
||||
case 14:
|
||||
// case 15:
|
||||
// captureflag sector
|
||||
case 4002:
|
||||
warpsectorlist[warpsectorcnt++] = (short) i;
|
||||
break;
|
||||
case 10000:
|
||||
bobbingsectorlist[bobbingsectorcnt++] = (short) i;
|
||||
}
|
||||
if (sector[i].floorpicnum == TELEPAD && sector[i].lotag == 0)
|
||||
warpsectorlist[warpsectorcnt++] = (short) i;
|
||||
if (sector[i].floorpicnum == FLOORMIRROR)
|
||||
floormirrorsector[floormirrorcnt++] = (short) i;
|
||||
}
|
||||
|
||||
ypanningwallcnt = 0;
|
||||
for (int i = 0; i < numwalls; i++) {
|
||||
wallshadearray[i] = wall[i].shade;
|
||||
if (wall[i].lotag == 1) {
|
||||
if (ypanningwallcnt < ypanningwalllist.length)
|
||||
ypanningwalllist[ypanningwallcnt++] = (short) i;
|
||||
}
|
||||
}
|
||||
|
||||
// // Map starts out completed WH2 XXX
|
||||
// // for(i=0;i<(MAXSECTORS>>3);i++) show2dsector[i] = 0xff;
|
||||
// for(i=0;i<(MAXSECTORS>>3);i++) show2dsector[i] = 0x00;
|
||||
// // for(i=0;i<(MAXWALLS>>3);i++) show2dwall[i] = 0xff;
|
||||
// for(i=0;i<(MAXWALLS>>3);i++) show2dwall[i] = 0x00;
|
||||
// // for(i=0;i<(MAXSPRITES>>3);i++) show2dsprite[i] = 0xff;
|
||||
// for(i=0;i<(MAXSPRITES>>3);i++) show2dsprite[i] = 0x00;
|
||||
}
|
||||
|
||||
boolean prepareboard(const char* fname) {
|
||||
|
||||
short i;
|
||||
short treesize;
|
||||
|
||||
PLAYER plr = player[0];
|
||||
|
||||
srand(17);
|
||||
|
||||
BuildPos out = nullptr;
|
||||
out = loadboard(fname);
|
||||
|
||||
plr.x = out.x;
|
||||
plr.y = out.y;
|
||||
plr.z = out.z;
|
||||
plr.ang = out.ang;
|
||||
plr.sector = out.sectnum;
|
||||
|
||||
// int ratcnt = 0;
|
||||
swingcnt = 0;
|
||||
xpanningsectorcnt = 0;
|
||||
ypanningwallcnt = 0;
|
||||
floorpanningcnt = 0;
|
||||
// crushsectorcnt=0;
|
||||
revolvecnt = 0;
|
||||
warpsectorcnt = 0;
|
||||
dragsectorcnt = 0;
|
||||
ironbarscnt = 0;
|
||||
bobbingsectorcnt = 0;
|
||||
playertorch = 0;
|
||||
|
||||
damage_angvel = 0;
|
||||
damage_svel = 0;
|
||||
damage_vel = 0;
|
||||
|
||||
hours = 0;
|
||||
minutes = 0;
|
||||
seconds = 0;
|
||||
fortieth = 0;
|
||||
|
||||
// goblinwarcnt = 0;
|
||||
treasurescnt = 0;
|
||||
treasuresfound = 0;
|
||||
killcnt = 0;
|
||||
kills = 0;
|
||||
expgained = 0;
|
||||
// numinterpolations=0;
|
||||
|
||||
// the new mirror code
|
||||
floormirrorcnt = 0;
|
||||
tilesizx[FLOORMIRROR] = 0;
|
||||
tilesizy[FLOORMIRROR] = 0;
|
||||
|
||||
for (i = 0; i < ARROWCOUNTLIMIT; i++)
|
||||
arrowsprite[i] = -1;
|
||||
for (i = 0; i < THROWPIKELIMIT; i++)
|
||||
throwpikesprite[i] = -1;
|
||||
|
||||
lavadrylandcnt = 0;
|
||||
aiInit();
|
||||
|
||||
for (i = 0; i < MAXSPRITES; i++) { // setup sector effect options
|
||||
if (sprite[i].statnum >= MAXSTATUS)
|
||||
continue;
|
||||
|
||||
SPRITE& spr = sprite[i];
|
||||
|
||||
if(!isWh2() && mapon == 5 && i == 0 && spr.lotag == 0 && spr.hitag == 0) {
|
||||
spr.lotag = 1;
|
||||
spr.hitag = 34;
|
||||
}
|
||||
|
||||
if (sprite[i].picnum == CONE) {
|
||||
sparksx = sprite[i].x;
|
||||
sparksy = sprite[i].y;
|
||||
sparksz = sprite[i].z;
|
||||
for (int j = 0; j < 10; j++) {
|
||||
makesparks(i, 1);
|
||||
}
|
||||
for (int j = 10; j < 20; j++) {
|
||||
makesparks(i, 2);
|
||||
}
|
||||
for (int j = 20; j < 30; j++) {
|
||||
makesparks(i, 3);
|
||||
}
|
||||
sprite[i].cstat &= ~3;
|
||||
sprite[i].cstat |= 0x8000;
|
||||
sprite[i].clipdist = 4;
|
||||
changespritestat(i, (short) 0);
|
||||
sector[sprite[i].sectnum].lotag = 50;
|
||||
sector[sprite[i].sectnum].hitag = sprite[i].hitag;
|
||||
if (sector[sprite[i].sectnum].hitag == 0)
|
||||
sector[sprite[i].sectnum].hitag = 1;
|
||||
}
|
||||
|
||||
if ((spr.cstat & (16 + 32)) == (16 + 32))
|
||||
spr.cstat &= ~(16 | 32);
|
||||
|
||||
// if (spr.picnum == RAT) {
|
||||
// ratcnt++;
|
||||
// if (ratcnt > 10)
|
||||
// deletesprite((short) i);
|
||||
// }
|
||||
|
||||
if (spr.picnum == SPAWN) {
|
||||
deletesprite((short) i);
|
||||
}
|
||||
|
||||
if (spr.picnum == TORCH) {
|
||||
spr.cstat &= ~3;
|
||||
changespritestat(i, TORCHLIGHT);
|
||||
}
|
||||
|
||||
if (spr.picnum == STANDINTORCH || spr.picnum == BOWLOFFIRE) {
|
||||
changespritestat(i, TORCHLIGHT);
|
||||
}
|
||||
|
||||
if (spr.picnum == GLOW) {
|
||||
changespritestat(i, GLOWLIGHT);
|
||||
}
|
||||
|
||||
if (spr.picnum == SNDEFFECT) {
|
||||
sector[spr.sectnum].extra = spr.lotag;
|
||||
deletesprite((short) i);
|
||||
}
|
||||
|
||||
if (spr.picnum == SNDLOOP) { // loop on
|
||||
sector[spr.sectnum].extra = (short) (32768 | (spr.lotag << 1) | 1);
|
||||
deletesprite((short) i);
|
||||
}
|
||||
|
||||
if (spr.picnum == SNDLOOPOFF) { // loop off
|
||||
sector[spr.sectnum].extra = (short) (32768 | (spr.lotag << 1));
|
||||
deletesprite((short) i);
|
||||
}
|
||||
|
||||
if (spr.lotag == 80) {
|
||||
ironbarsector[ironbarscnt] = spr.sectnum;
|
||||
ironbarsdone[ironbarscnt] = 0;
|
||||
ironbarsanim[ironbarscnt] = (short) i;
|
||||
ironbarsgoal[ironbarscnt] = 0;
|
||||
ironbarscnt++;
|
||||
}
|
||||
|
||||
if(isWh2()) {
|
||||
switch (spr.picnum) {
|
||||
case WH2HELMET:
|
||||
spr.detail = HELMETTYPE;
|
||||
break;
|
||||
case WH2PLATEARMOR:
|
||||
spr.detail = PLATEARMORTYPE;
|
||||
break;
|
||||
case WH2CHAINMAIL:
|
||||
spr.detail = CHAINMAILTYPE;
|
||||
break;
|
||||
case WH2LEATHERARMOR:
|
||||
spr.detail = LEATHERARMORTYPE;
|
||||
break;
|
||||
case WH2PENTAGRAM:
|
||||
spr.detail = PENTAGRAMTYPE;
|
||||
break;
|
||||
case WH2CRYSTALSTAFF:
|
||||
spr.detail = CRYSTALSTAFFTYPE;
|
||||
break;
|
||||
case WH2AMULETOFTHEMIST:
|
||||
spr.detail = AMULETOFTHEMISTTYPE;
|
||||
break;
|
||||
case WH2HORNEDSKULL:
|
||||
spr.detail = HORNEDSKULLTYPE;
|
||||
break;
|
||||
case WH2THEHORN:
|
||||
spr.detail = THEHORNTYPE;
|
||||
break;
|
||||
case WH2BRASSKEY:
|
||||
spr.detail = BRASSKEYTYPE;
|
||||
break;
|
||||
case WH2BLACKKEY:
|
||||
spr.detail = BLACKKEYTYPE;
|
||||
break;
|
||||
case WH2GLASSKEY:
|
||||
spr.detail = GLASSKEYTYPE;
|
||||
break;
|
||||
case WH2IVORYKEY:
|
||||
spr.detail = IVORYKEYTYPE;
|
||||
break;
|
||||
case WH2SCROLLSCARE:
|
||||
spr.detail = SCROLLSCARETYPE;
|
||||
break;
|
||||
case WH2SCROLLNIGHT:
|
||||
spr.detail = SCROLLNIGHTTYPE;
|
||||
break;
|
||||
case WH2SCROLLFREEZE:
|
||||
spr.detail = SCROLLFREEZETYPE;
|
||||
break;
|
||||
case WH2SCROLLMAGIC:
|
||||
spr.detail = SCROLLMAGICTYPE;
|
||||
break;
|
||||
case WH2SCROLLOPEN:
|
||||
spr.detail = SCROLLOPENTYPE;
|
||||
break;
|
||||
case WH2SCROLLFLY:
|
||||
spr.detail = SCROLLFLYTYPE;
|
||||
break;
|
||||
case WH2SCROLLFIREBALL:
|
||||
spr.detail = SCROLLFIREBALLTYPE;
|
||||
break;
|
||||
case WH2SCROLLNUKE:
|
||||
spr.detail = SCROLLNUKETYPE;
|
||||
break;
|
||||
case WH2QUIVER:
|
||||
spr.detail = QUIVERTYPE;
|
||||
break;
|
||||
case WALLBOW:
|
||||
case WH2BOW:
|
||||
spr.detail = BOWTYPE;
|
||||
break;
|
||||
case WH2WEAPON1:
|
||||
spr.detail = WEAPON1TYPE;
|
||||
break;
|
||||
case WH2WEAPON1A:
|
||||
spr.detail = WEAPON1ATYPE;
|
||||
break;
|
||||
case WH2GOBWEAPON:
|
||||
spr.detail = GOBWEAPONTYPE;
|
||||
break;
|
||||
case WH2WEAPON2:
|
||||
spr.detail = WEAPON2TYPE;
|
||||
break;
|
||||
case WALLAXE:
|
||||
case WH2WEAPON4:
|
||||
spr.detail = WEAPON4TYPE;
|
||||
break;
|
||||
case WH2THROWHALBERD:
|
||||
spr.detail = THROWHALBERDTYPE;
|
||||
break;
|
||||
case WH2WEAPON5:
|
||||
spr.detail = WEAPON5TYPE;
|
||||
break;
|
||||
case WH2SHIELD:
|
||||
spr.detail = SHIELDTYPE;
|
||||
break;
|
||||
case WH2WEAPON5B:
|
||||
spr.detail = WEAPON5BTYPE;
|
||||
break;
|
||||
case WALLPIKE:
|
||||
case WH2THROWPIKE + 1:
|
||||
spr.detail = WALLPIKETYPE;
|
||||
break;
|
||||
case WH2WEAPON6:
|
||||
spr.detail = WEAPON6TYPE;
|
||||
break;
|
||||
case WH2WEAPON7:
|
||||
spr.detail = WEAPON7TYPE;
|
||||
break;
|
||||
case WEAPON8:
|
||||
spr.detail = WEAPON8TYPE;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
switch (spr.picnum) {
|
||||
case WH1HELMET:
|
||||
spr.detail = HELMETTYPE;
|
||||
break;
|
||||
case WH1PLATEARMOR:
|
||||
spr.detail = PLATEARMORTYPE;
|
||||
break;
|
||||
case WH1CHAINMAIL:
|
||||
spr.detail = CHAINMAILTYPE;
|
||||
break;
|
||||
case WH1LEATHERARMOR:
|
||||
spr.detail = LEATHERARMORTYPE;
|
||||
break;
|
||||
case WH1PENTAGRAM:
|
||||
spr.detail = PENTAGRAMTYPE;
|
||||
break;
|
||||
case WH1CRYSTALSTAFF:
|
||||
spr.detail = CRYSTALSTAFFTYPE;
|
||||
break;
|
||||
case WH1AMULETOFTHEMIST:
|
||||
spr.detail = AMULETOFTHEMISTTYPE;
|
||||
break;
|
||||
case WH1HORNEDSKULL:
|
||||
spr.detail = HORNEDSKULLTYPE;
|
||||
break;
|
||||
case WH1THEHORN:
|
||||
spr.detail = THEHORNTYPE;
|
||||
break;
|
||||
case WH1BRASSKEY:
|
||||
spr.detail = BRASSKEYTYPE;
|
||||
break;
|
||||
case WH1BLACKKEY:
|
||||
spr.detail = BLACKKEYTYPE;
|
||||
break;
|
||||
case WH1GLASSKEY:
|
||||
spr.detail = GLASSKEYTYPE;
|
||||
break;
|
||||
case WH1IVORYKEY:
|
||||
spr.detail = IVORYKEYTYPE;
|
||||
break;
|
||||
case WH1SCROLLSCARE:
|
||||
spr.detail = SCROLLSCARETYPE;
|
||||
break;
|
||||
case WH1SCROLLNIGHT:
|
||||
spr.detail = SCROLLNIGHTTYPE;
|
||||
break;
|
||||
case WH1SCROLLFREEZE:
|
||||
spr.detail = SCROLLFREEZETYPE;
|
||||
break;
|
||||
case WH1SCROLLMAGIC:
|
||||
spr.detail = SCROLLMAGICTYPE;
|
||||
break;
|
||||
case WH1SCROLLOPEN:
|
||||
spr.detail = SCROLLOPENTYPE;
|
||||
break;
|
||||
case WH1SCROLLFLY:
|
||||
spr.detail = SCROLLFLYTYPE;
|
||||
break;
|
||||
case WH1SCROLLFIREBALL:
|
||||
spr.detail = SCROLLFIREBALLTYPE;
|
||||
break;
|
||||
case WH1SCROLLNUKE:
|
||||
spr.detail = SCROLLNUKETYPE;
|
||||
break;
|
||||
case WH1QUIVER:
|
||||
spr.detail = QUIVERTYPE;
|
||||
break;
|
||||
case WALLBOW:
|
||||
case WH1BOW:
|
||||
spr.detail = BOWTYPE;
|
||||
break;
|
||||
case WH1WEAPON1:
|
||||
spr.detail = WEAPON1TYPE;
|
||||
break;
|
||||
case WH1WEAPON1A:
|
||||
spr.detail = WEAPON1ATYPE;
|
||||
break;
|
||||
case WH1GOBWEAPON:
|
||||
spr.detail = GOBWEAPONTYPE;
|
||||
break;
|
||||
case WH1WEAPON2:
|
||||
spr.detail = WEAPON2TYPE;
|
||||
break;
|
||||
case WALLAXE:
|
||||
case WH1WEAPON4:
|
||||
spr.detail = WEAPON4TYPE;
|
||||
break;
|
||||
case WH1THROWHALBERD:
|
||||
spr.detail = THROWHALBERDTYPE;
|
||||
break;
|
||||
case WH1WEAPON5:
|
||||
spr.detail = WEAPON5TYPE;
|
||||
break;
|
||||
case WH1SHIELD:
|
||||
spr.detail = SHIELDTYPE;
|
||||
break;
|
||||
case WH1WEAPON5B:
|
||||
spr.detail = WEAPON5BTYPE;
|
||||
break;
|
||||
case WALLPIKE:
|
||||
case WH1THROWPIKE + 1:
|
||||
spr.detail = WALLPIKETYPE;
|
||||
break;
|
||||
case WH1WEAPON6:
|
||||
spr.detail = WEAPON6TYPE;
|
||||
break;
|
||||
case WH1WEAPON7:
|
||||
spr.detail = WEAPON7TYPE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (spr.picnum) {
|
||||
case SILVERBAG:
|
||||
case SILVERCOINS:
|
||||
spr.detail = SILVERBAGTYPE;
|
||||
break;
|
||||
case GOLDBAG:
|
||||
case GOLDBAG2:
|
||||
case GOLDCOINS:
|
||||
case GOLDCOINS2:
|
||||
spr.detail = GOLDBAGTYPE;
|
||||
break;
|
||||
case GIFTBOX:
|
||||
spr.detail = GIFTBOXTYPE;
|
||||
break;
|
||||
case FLASKBLUE:
|
||||
spr.detail = FLASKBLUETYPE;
|
||||
break;
|
||||
case FLASKRED:
|
||||
spr.detail = FLASKREDTYPE;
|
||||
break;
|
||||
case FLASKGREEN:
|
||||
spr.detail = FLASKGREENTYPE;
|
||||
break;
|
||||
case FLASKOCHRE:
|
||||
spr.detail = FLASKOCHRETYPE;
|
||||
break;
|
||||
case FLASKTAN:
|
||||
spr.detail = FLASKTANTYPE;
|
||||
break;
|
||||
case DIAMONDRING:
|
||||
spr.detail = DIAMONDRINGTYPE;
|
||||
break;
|
||||
case SHADOWAMULET:
|
||||
spr.detail = SHADOWAMULETTYPE;
|
||||
break;
|
||||
case GLASSSKULL:
|
||||
spr.detail = GLASSSKULLTYPE;
|
||||
break;
|
||||
case AHNK:
|
||||
spr.detail = AHNKTYPE;
|
||||
break;
|
||||
case BLUESCEPTER:
|
||||
spr.detail = BLUESCEPTERTYPE;
|
||||
break;
|
||||
case YELLOWSCEPTER:
|
||||
spr.detail = YELLOWSCEPTERTYPE;
|
||||
break;
|
||||
case ADAMANTINERING:
|
||||
spr.detail = ADAMANTINERINGTYPE;
|
||||
break;
|
||||
case ONYXRING:
|
||||
spr.detail = ONYXRINGTYPE;
|
||||
break;
|
||||
case SAPHIRERING:
|
||||
spr.detail = SAPHIRERINGTYPE;
|
||||
break;
|
||||
case WALLSWORD:
|
||||
case WEAPON3A:
|
||||
spr.detail = WEAPON3ATYPE;
|
||||
break;
|
||||
case WEAPON3:
|
||||
spr.detail = WEAPON3TYPE;
|
||||
break;
|
||||
case GONZOBSHIELD:
|
||||
case GONZOCSHIELD:
|
||||
case GONZOGSHIELD:
|
||||
spr.detail = GONZOSHIELDTYPE;
|
||||
break;
|
||||
case SPIKEBLADE:
|
||||
spr.detail = SPIKEBLADETYPE;
|
||||
break;
|
||||
case SPIKE:
|
||||
spr.detail = SPIKETYPE;
|
||||
break;
|
||||
case SPIKEPOLE:
|
||||
spr.detail = SPIKEPOLETYPE;
|
||||
break;
|
||||
case MONSTERBALL:
|
||||
spr.detail = MONSTERBALLTYPE;
|
||||
break;
|
||||
case WH1HANGMAN + 1:
|
||||
case WH2HANGMAN + 1:
|
||||
if ((spr.picnum == (WH1HANGMAN + 1) && isWh2()) || (spr.picnum == WH2HANGMAN + 1 && !isWh2()))
|
||||
break;
|
||||
|
||||
spr.xrepeat = 28;
|
||||
spr.yrepeat = 28;
|
||||
break;
|
||||
case GOBLINDEAD:
|
||||
if (isWh2())
|
||||
break;
|
||||
spr.xrepeat = 36;
|
||||
spr.yrepeat = 36;
|
||||
break;
|
||||
case STONEGONZOBSH:
|
||||
case STONEGONZOBSW2:
|
||||
case STONEGONZOCHM:
|
||||
case STONEGONZOGSH:
|
||||
case STONEGRONDOVAL:
|
||||
case STONEGONZOBSW:
|
||||
spr.xrepeat = 24;
|
||||
spr.yrepeat = 24;
|
||||
break;
|
||||
case GONZOHMJUMP:
|
||||
case GONZOSHJUMP:
|
||||
spr.xrepeat = 24;
|
||||
spr.yrepeat = 24;
|
||||
spr.clipdist = 32;
|
||||
spr.extra = spr.lotag;
|
||||
spr.lotag = 20;
|
||||
if (spr.extra == 3) {
|
||||
spr.lotag = 80;
|
||||
}
|
||||
spr.cstat |= 0x101;
|
||||
break;
|
||||
|
||||
case PINE:
|
||||
spr.xrepeat = treesize = (short) (((krand() % 5) + 3) << 4);
|
||||
spr.yrepeat = treesize;
|
||||
break;
|
||||
|
||||
case GYSER:
|
||||
if (isWh2()) break;
|
||||
spr.xrepeat = 32;
|
||||
spr.yrepeat = 18;
|
||||
spr.shade = -17;
|
||||
spr.pal = 0;
|
||||
spr.detail = GYSERTYPE;
|
||||
// changespritestat(i,DORMANT);
|
||||
break;
|
||||
case PATROLPOINT:
|
||||
spr.xrepeat = 24;
|
||||
spr.yrepeat = 32;
|
||||
|
||||
spr.cstat &= ~3;
|
||||
spr.cstat |= 0x8000;
|
||||
spr.clipdist = 4;
|
||||
changespritestat(i, APATROLPOINT);
|
||||
break;
|
||||
case BARREL:
|
||||
case VASEA:
|
||||
case VASEB:
|
||||
case VASEC:
|
||||
case STAINGLASS1:
|
||||
case STAINGLASS2:
|
||||
case STAINGLASS3:
|
||||
case STAINGLASS4:
|
||||
case STAINGLASS5:
|
||||
case STAINGLASS6:
|
||||
case STAINGLASS7:
|
||||
case STAINGLASS8:
|
||||
case STAINGLASS9:
|
||||
spr.cstat |= 0x101;
|
||||
spr.clipdist = 64;
|
||||
break;
|
||||
case 2232: // team flags
|
||||
if (!isWh2())
|
||||
break;
|
||||
// netmarkflag(i);
|
||||
break;
|
||||
case 2233: // team flags
|
||||
if (isWh2())
|
||||
break;
|
||||
// XXX netmarkflag(i);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
if(isItemSprite(i)) {
|
||||
Item& item = items[(spr.detail & 0xFF) - ITEMSBASE];
|
||||
if(item.sizx != -1 && item.sizy != -1) {
|
||||
spr.xrepeat = (short) item.sizx;
|
||||
spr.yrepeat = (short) item.sizy;
|
||||
}
|
||||
|
||||
if(item.treasures)
|
||||
treasurescnt++;
|
||||
spr.cstat &= ~1;
|
||||
if(item.cflag)
|
||||
spr.cstat &= ~3;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
preparesectors();
|
||||
|
||||
automapping = 1;
|
||||
|
||||
if(isWh2()) {
|
||||
if(mapon == 5) {
|
||||
SPRITE& spr = sprite[185];
|
||||
if(spr.picnum == 172 && spr.x == -36864 && spr.y == -53504)
|
||||
deletesprite((short) 185);
|
||||
}
|
||||
|
||||
if(mapon == 13) {
|
||||
if(sector[427].floorpicnum == 291) {
|
||||
int s = insertsprite((short)427, (short)0);
|
||||
if(s != -1) {
|
||||
SPRITE& sp = sprite[s];
|
||||
sp.x = 27136;
|
||||
sp.y = 51712;
|
||||
sp.z = 7168;
|
||||
sp.picnum = WH2PENTAGRAM;
|
||||
sp.cstat = 515;
|
||||
sp.shade = -3;
|
||||
sp.xrepeat = sp.yrepeat = 64;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (justteleported) { // next level
|
||||
plr.hvel = 0;
|
||||
plr.spritenum = insertsprite(plr.sector, (short) 0);
|
||||
plr.oldsector = plr.sector;
|
||||
|
||||
sprite[plr.spritenum].x = plr.x;
|
||||
sprite[plr.spritenum].y = plr.y;
|
||||
sprite[plr.spritenum].z = sector[plr.sector].floorz;
|
||||
sprite[plr.spritenum].cstat = 1 + 256;
|
||||
sprite[plr.spritenum].picnum = isWh2() ? GRONSW : FRED;
|
||||
sprite[plr.spritenum].shade = 0;
|
||||
sprite[plr.spritenum].xrepeat = 36;
|
||||
sprite[plr.spritenum].yrepeat = 36;
|
||||
sprite[plr.spritenum].ang = (short) plr.ang;
|
||||
sprite[plr.spritenum].xvel = 0;
|
||||
sprite[plr.spritenum].yvel = 0;
|
||||
sprite[plr.spritenum].zvel = 0;
|
||||
sprite[plr.spritenum].owner = (short) (4096 + myconnectindex);
|
||||
sprite[plr.spritenum].lotag = 0;
|
||||
sprite[plr.spritenum].hitag = 0;
|
||||
sprite[plr.spritenum].pal = (short) (isWh2() ? 10 : 1);
|
||||
if(isWh2())
|
||||
sprite[plr.spritenum].clipdist = 48;
|
||||
|
||||
setsprite(plr.spritenum, plr.x, plr.y, plr.z + (getPlayerHeight() << 8));
|
||||
|
||||
warpfxsprite(plr.spritenum);
|
||||
plr.treasure[TBRASSKEY] = plr.treasure[TBLACKKEY] = plr.treasure[TGLASSKEY] = plr.treasure[TIVORYKEY] = 0;
|
||||
plr.treasure[TBLUESCEPTER] = plr.treasure[TYELLOWSCEPTER] = 0;
|
||||
|
||||
// protection from missile
|
||||
// anit-missile for level only
|
||||
// dont forget to cleanup values
|
||||
plr.treasure[TONYXRING] = 0;
|
||||
SND_CheckLoops();
|
||||
|
||||
justteleported = false;
|
||||
} else {
|
||||
initplayersprite(plr);
|
||||
dimension = 3;
|
||||
SND_Sound(S_SCARYDUDE);
|
||||
}
|
||||
|
||||
if (nextlevel) {
|
||||
gAutosaveRequest = true;
|
||||
nextlevel = false;
|
||||
}
|
||||
|
||||
if (mUserFlag != UserFlag.UserMap)
|
||||
startmusic(mapon - 1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
END_WH_NS
|
1919
source/games/whaven/src/whobj.cpp
Normal file
1919
source/games/whaven/src/whobj.cpp
Normal file
File diff suppressed because it is too large
Load diff
601
source/games/whaven/src/whplr.cpp
Normal file
601
source/games/whaven/src/whplr.cpp
Normal file
|
@ -0,0 +1,601 @@
|
|||
#include "ns.h"
|
||||
#include "wh.h"
|
||||
|
||||
BEGIN_WH_NS
|
||||
|
||||
PLAYER player[MAXPLAYERS];
|
||||
PLOCATION gPrevPlayerLoc[MAXPLAYERS];
|
||||
|
||||
short monsterangle[MAXSPRITESONSCREEN], monsterlist[MAXSPRITESONSCREEN];
|
||||
int shootgunzvel;
|
||||
|
||||
boolean justteleported;
|
||||
|
||||
int victor = 0;
|
||||
int autohoriz = 0; // XXX NOT FOR MULTIPLAYER
|
||||
|
||||
int pyrn;
|
||||
int mapon;
|
||||
int damage_vel, damage_svel, damage_angvel;
|
||||
|
||||
void viewBackupPlayerLoc( int nPlayer )
|
||||
{
|
||||
SPRITE& pSprite = sprite[player[nPlayer].spritenum];
|
||||
PLOCATION pPLocation = gPrevPlayerLoc[nPlayer];
|
||||
pPLocation.x = pSprite.x;
|
||||
pPLocation.y = pSprite.y;
|
||||
pPLocation.z = player[nPlayer].z;
|
||||
pPLocation.ang = player[nPlayer].ang;
|
||||
pPLocation.horiz = player[nPlayer].horiz + player[nPlayer].jumphoriz;
|
||||
}
|
||||
|
||||
void playerdead(PLAYER& plr) {
|
||||
if (plr.dead)
|
||||
return;
|
||||
|
||||
if (plr.potion[0] > 0 && plr.spiked == 0) {
|
||||
int i = plr.currentpotion;
|
||||
plr.currentpotion = 0;
|
||||
usapotion(plr);
|
||||
plr.currentpotion = i;
|
||||
return;
|
||||
}
|
||||
|
||||
plr.currspikeframe = 0;
|
||||
|
||||
if (plr.spiked == 1) {
|
||||
plr.spiketics = spikeanimtics[0].daweapontics;
|
||||
playsound_loc(S_GORE1, plr.x, plr.y);
|
||||
SND_Sound(S_HEARTBEAT);
|
||||
}
|
||||
|
||||
SND_Sound(S_PLRDIE1);
|
||||
|
||||
// netsendmove();
|
||||
plr.dead = true;
|
||||
}
|
||||
|
||||
void initplayersprite(PLAYER& plr) {
|
||||
if (difficulty > 1) {
|
||||
plr.currweapon = 1;
|
||||
plr.selectedgun = 1;
|
||||
} else {
|
||||
plr.currweapon = 4;
|
||||
plr.selectedgun = 4;
|
||||
}
|
||||
plr.currentpotion = 0;
|
||||
plr.helmettime = -1;
|
||||
plr.shadowtime = -1;
|
||||
plr.nightglowtime = -1;
|
||||
plr.strongtime = -1;
|
||||
plr.invisibletime = -1;
|
||||
plr.manatime = -1;
|
||||
plr.currentorb = 0;
|
||||
plr.currweaponfired = 3;
|
||||
plr.currweaponanim = 0;
|
||||
plr.currweaponattackstyle = 0;
|
||||
plr.currweaponflip = 0;
|
||||
|
||||
plr.vampiretime = 0;
|
||||
plr.shieldpoints = 0;
|
||||
plr.shieldtype = 0;
|
||||
plr.dead = false;
|
||||
plr.spiked = 0;
|
||||
plr.shockme = -1;
|
||||
plr.poisoned = 0;
|
||||
plr.poisontime = -1;
|
||||
|
||||
plr.oldsector = plr.sector;
|
||||
plr.horiz = 100;
|
||||
plr.height = getPlayerHeight();
|
||||
plr.z = sector[plr.sector].floorz - (plr.height << 8);
|
||||
|
||||
plr.spritenum = (short) insertsprite(plr.sector, (short) 0);
|
||||
|
||||
plr.onsomething = 1;
|
||||
|
||||
sprite[plr.spritenum].x = plr.x;
|
||||
sprite[plr.spritenum].y = plr.y;
|
||||
sprite[plr.spritenum].z = plr.z + (plr.height << 8);
|
||||
sprite[plr.spritenum].cstat = 1 + 256;
|
||||
sprite[plr.spritenum].picnum = isWh2() ? GRONSW : FRED;
|
||||
sprite[plr.spritenum].shade = 0;
|
||||
sprite[plr.spritenum].xrepeat = 36;
|
||||
sprite[plr.spritenum].yrepeat = 36;
|
||||
sprite[plr.spritenum].ang = (short) plr.ang;
|
||||
sprite[plr.spritenum].xvel = 0;
|
||||
sprite[plr.spritenum].yvel = 0;
|
||||
sprite[plr.spritenum].zvel = 0;
|
||||
sprite[plr.spritenum].owner = (short) (4096 + myconnectindex);
|
||||
sprite[plr.spritenum].lotag = 0;
|
||||
sprite[plr.spritenum].hitag = 0;
|
||||
sprite[plr.spritenum].pal = (short) (isWh2() ? 10 : 1);
|
||||
if(isWh2())
|
||||
sprite[plr.spritenum].clipdist = 48;
|
||||
|
||||
plr.selectedgun = 0;
|
||||
|
||||
if(isWh2()) {
|
||||
for (int i = 0; i <= 9; i++) {
|
||||
if (i < 5) {
|
||||
plr.ammo[i] = 40;
|
||||
plr.weapon[i] = 1;
|
||||
} else {
|
||||
plr.ammo[i] = 0;
|
||||
plr.weapon[i] = 0;
|
||||
}
|
||||
if (i < 8) {
|
||||
plr.orb[i] = 0;
|
||||
plr.orbammo[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (difficulty > 1) {
|
||||
plr.weapon[0] = plr.weapon[1] = 1;
|
||||
plr.ammo[0] = 32000;
|
||||
plr.ammo[1] = 45;
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
if (difficulty > 1) {
|
||||
for (int i = 0; i <= 9; i++) {
|
||||
plr.ammo[i] = 0;
|
||||
plr.weapon[i] = 0;
|
||||
if (i < 8) {
|
||||
plr.orb[i] = 0;
|
||||
plr.orbammo[i] = 0;
|
||||
}
|
||||
}
|
||||
plr.weapon[0] = plr.weapon[1] = 1;
|
||||
plr.ammo[0] = 32000;
|
||||
plr.ammo[1] = 45;
|
||||
} else {
|
||||
for (int i = 0; i <= 9; i++) {
|
||||
plr.ammo[i] = 0;
|
||||
plr.weapon[i] = 0;
|
||||
if (i < 5) {
|
||||
plr.ammo[i] = 40;
|
||||
plr.weapon[i] = 1;
|
||||
}
|
||||
if (i < 8) {
|
||||
plr.orb[i] = 0;
|
||||
plr.orbammo[i] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < MAXPOTIONS; i++)
|
||||
plr.potion[i] = 0;
|
||||
for (int i = 0; i < MAXTREASURES; i++)
|
||||
plr.treasure[i] = 0;
|
||||
|
||||
plr.lvl = 1;
|
||||
plr.score = 0;
|
||||
plr.health = 100;
|
||||
plr.maxhealth = 100;
|
||||
plr.armor = 0;
|
||||
plr.armortype = 0;
|
||||
plr.currentorb = 0;
|
||||
plr.currentpotion = 0;
|
||||
|
||||
if (difficulty > 1)
|
||||
plr.currweapon = plr.selectedgun = 1;
|
||||
else
|
||||
plr.currweapon = plr.selectedgun = 4;
|
||||
|
||||
if (isWh2()) {
|
||||
plr.potion[0] = 3;
|
||||
plr.potion[3] = 1;
|
||||
plr.currweapon = plr.selectedgun = 4;
|
||||
}
|
||||
|
||||
plr.currweaponfired = 3;
|
||||
plr.currweaponflip = 0;
|
||||
|
||||
for (int i = 0; i < MAXNUMORBS; i++)
|
||||
plr.orbactive[i] = -1;
|
||||
|
||||
lockclock = totalclock;
|
||||
playertorch = 0;
|
||||
|
||||
plr.spellbookflip = 0;
|
||||
|
||||
plr.invincibletime = plr.manatime = -1;
|
||||
plr.hasshot = 0;
|
||||
plr.orbshot = 0;
|
||||
displaytime = -1;
|
||||
plr.shadowtime = -1;
|
||||
plr.helmettime = -1;
|
||||
plr.nightglowtime = -1;
|
||||
plr.strongtime = -1;
|
||||
plr.invisibletime = -1;
|
||||
}
|
||||
|
||||
void updateviewmap(PLAYER& plr) {
|
||||
int i;
|
||||
if ((i = plr.sector) > -1) {
|
||||
int wallid = sector[i].wallptr;
|
||||
show2dsector[i >> 3] |= (1 << (i & 7));
|
||||
for (int j = sector[i].wallnum; j > 0; j--) {
|
||||
WALL wal = wall[wallid++];
|
||||
i = wal.nextsector;
|
||||
if (i < 0)
|
||||
continue;
|
||||
if ((wal.cstat & 0x0071) != 0)
|
||||
continue;
|
||||
if (wall[wal.nextwall] != nullptr && (wall[wal.nextwall].cstat & 0x0071) != 0)
|
||||
continue;
|
||||
if (sector[i] != nullptr && sector[i].ceilingz >= sector[i].floorz)
|
||||
continue;
|
||||
show2dsector[i >> 3] |= (1 << (i & 7));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void plruse(PLAYER& plr) {
|
||||
neartag(plr.x, plr.y, plr.z, (short) plr.sector, (short) plr.ang, neartag, 1024, 3);
|
||||
|
||||
if (neartag.tagsector >= 0) {
|
||||
if (sector[neartag.tagsector].hitag == 0) {
|
||||
operatesector(plr, neartag.tagsector);
|
||||
} else {
|
||||
short daang = (short) plr.ang;
|
||||
int daz2 = (int) (100 - plr.horiz) * 2000;
|
||||
hitscan(plr.x, plr.y, plr.z, plr.sector, // Start position
|
||||
sintable[(daang + 2560) & 2047], // X vector of 3D ang
|
||||
sintable[(daang + 2048) & 2047], // Y vector of 3D ang
|
||||
daz2, // Z vector of 3D ang
|
||||
pHitInfo, CLIPMASK1);
|
||||
|
||||
if (pHitInfo.hitwall >= 0) {
|
||||
if ((klabs(plr.x - pHitInfo.hitx) + klabs(plr.y - pHitInfo.hity) < 512)
|
||||
&& (klabs((plr.z >> 8) - ((pHitInfo.hitz >> 8) - (64))) <= (512 >> 3))) {
|
||||
int pic = wall[pHitInfo.hitwall].picnum;
|
||||
if(pic == PENTADOOR1 || pic == PENTADOOR2 || (pic >= PENTADOOR3 && pic <= PENTADOOR7))
|
||||
showmessage("find door trigger", 360);
|
||||
}
|
||||
}
|
||||
playsound_loc(S_PUSH1 + (krand() % 2), plr.x, plr.y);
|
||||
}
|
||||
}
|
||||
if (neartag.tagsprite >= 0) {
|
||||
if (sprite[neartag.tagsprite].lotag == 1) {
|
||||
if(sprite[neartag.tagsprite].picnum == PULLCHAIN1 || sprite[neartag.tagsprite].picnum == SKULLPULLCHAIN1) {
|
||||
sprite[neartag.tagsprite].lotag = 0;
|
||||
newstatus(neartag.tagsprite, PULLTHECHAIN);
|
||||
} else if(sprite[neartag.tagsprite].picnum == LEVERUP) {
|
||||
sprite[neartag.tagsprite].lotag = 0;
|
||||
newstatus(neartag.tagsprite, ANIMLEVERUP);
|
||||
}
|
||||
for (int i = 0; i < numsectors; i++)
|
||||
if (sector[i].hitag == sprite[neartag.tagsprite].hitag)
|
||||
operatesector(plr, i);
|
||||
} else
|
||||
operatesprite(plr, neartag.tagsprite);
|
||||
}
|
||||
}
|
||||
|
||||
void chunksofmeat(PLAYER& plr, int hitsprite, int hitx, int hity, int hitz, short hitsect, int daang) {
|
||||
|
||||
int j;
|
||||
short k;
|
||||
short zgore = 0;
|
||||
int chunk = REDCHUNKSTART;
|
||||
int newchunk;
|
||||
|
||||
if (!whcfg.gGameGore)
|
||||
return;
|
||||
|
||||
if (sprite[hitsprite].picnum == JUDY || sprite[hitsprite].picnum == JUDYATTACK1
|
||||
|| sprite[hitsprite].picnum == JUDYATTACK2)
|
||||
return;
|
||||
|
||||
switch (plr.selectedgun) {
|
||||
case 1:
|
||||
case 2:
|
||||
zgore = 1;
|
||||
break;
|
||||
case 3:
|
||||
case 4:
|
||||
zgore = 2;
|
||||
break;
|
||||
case 5:
|
||||
zgore = 3;
|
||||
break;
|
||||
case 6:
|
||||
zgore = 1;
|
||||
break;
|
||||
case 7:
|
||||
zgore = 2;
|
||||
break;
|
||||
case 8:
|
||||
case 9:
|
||||
zgore = 3;
|
||||
break;
|
||||
}
|
||||
|
||||
if (sprite[hitsprite].statnum == NUKED) {
|
||||
zgore = 32;
|
||||
}
|
||||
|
||||
if (sprite[hitsprite].picnum == RAT)
|
||||
zgore = 1;
|
||||
|
||||
if (sprite[hitsprite].picnum == WILLOW || sprite[hitsprite].picnum == WILLOWEXPLO
|
||||
|| sprite[hitsprite].picnum == WILLOWEXPLO + 1 || sprite[hitsprite].picnum == WILLOWEXPLO + 2
|
||||
|| sprite[hitsprite].picnum == GUARDIAN || sprite[hitsprite].picnum == GUARDIANATTACK
|
||||
|| sprite[hitsprite].picnum == DEMON)
|
||||
return;
|
||||
|
||||
if (sprite[hitsprite].picnum == SKELETON || sprite[hitsprite].picnum == SKELETONATTACK
|
||||
|| sprite[hitsprite].picnum == SKELETONDIE) {
|
||||
playsound_loc(S_SKELHIT1 + (krand() % 2), sprite[hitsprite].x, sprite[hitsprite].y);
|
||||
} else {
|
||||
if (krand() % 100 > 60)
|
||||
playsound_loc(S_GORE1 + (krand() % 4), sprite[hitsprite].x, sprite[hitsprite].y);
|
||||
}
|
||||
|
||||
if ((hitsprite >= 0) && (sprite[hitsprite].statnum < MAXSTATUS)) {
|
||||
for (k = 0; k < zgore; k++) {
|
||||
newchunk = 0;
|
||||
|
||||
j = insertsprite(hitsect, CHUNKOMEAT);
|
||||
if(j == -1)
|
||||
return;
|
||||
sprite[j].x = hitx;
|
||||
sprite[j].y = hity;
|
||||
sprite[j].z = hitz;
|
||||
sprite[j].cstat = 0;
|
||||
if (krand() % 100 > 50) {
|
||||
switch (sprite[hitsprite].detail) {
|
||||
case GRONTYPE:
|
||||
chunk = REDCHUNKSTART + (krand() % 8);
|
||||
break;
|
||||
case KOBOLDTYPE:
|
||||
if (sprite[hitsprite].pal == 0)
|
||||
chunk = BROWNCHUNKSTART + (krand() % 8);
|
||||
if (sprite[hitsprite].pal == 4)
|
||||
chunk = GREENCHUNKSTART + (krand() % 8);
|
||||
if (sprite[hitsprite].pal == 7)
|
||||
chunk = REDCHUNKSTART + (krand() % 8);
|
||||
break;
|
||||
case DRAGONTYPE:
|
||||
chunk = GREENCHUNKSTART + (krand() % 8);
|
||||
break;
|
||||
case DEVILTYPE:
|
||||
chunk = REDCHUNKSTART + (krand() % 8);
|
||||
break;
|
||||
case FREDTYPE:
|
||||
chunk = BROWNCHUNKSTART + (krand() % 8);
|
||||
break;
|
||||
case GOBLINTYPE:
|
||||
case IMPTYPE:
|
||||
if(isWh2() && (sprite[hitsprite].picnum == IMP || sprite[hitsprite].picnum == IMPATTACK)) {
|
||||
if (sprite[hitsprite].pal == 0)
|
||||
chunk = GREENCHUNKSTART + (krand() % 8);
|
||||
} else {
|
||||
if (sprite[hitsprite].pal == 0)
|
||||
chunk = GREENCHUNKSTART + (krand() % 8);
|
||||
if (sprite[hitsprite].pal == 4)
|
||||
chunk = BROWNCHUNKSTART + (krand() % 8);
|
||||
if (sprite[hitsprite].pal == 5)
|
||||
chunk = TANCHUNKSTART + (krand() % 8);
|
||||
}
|
||||
break;
|
||||
case MINOTAURTYPE:
|
||||
chunk = TANCHUNKSTART + (krand() % 8);
|
||||
break;
|
||||
case SPIDERTYPE:
|
||||
chunk = GREYCHUNKSTART + (krand() % 8);
|
||||
break;
|
||||
case SKULLYTYPE:
|
||||
case FATWITCHTYPE:
|
||||
case JUDYTYPE:
|
||||
chunk = REDCHUNKSTART + (krand() % 8);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
newchunk = 1;
|
||||
if (!isWh2())
|
||||
chunk = NEWCHUNK + (krand() % 9);
|
||||
else
|
||||
chunk = REDCHUNKSTART + (krand() % 8);
|
||||
}
|
||||
|
||||
if (sprite[hitsprite].detail == SKELETONTYPE)
|
||||
chunk = BONECHUNK1 + (krand() % 9);
|
||||
|
||||
if (plr.weapon[2] == 3 && plr.currweapon == 2) {
|
||||
sprite[j].picnum = ARROWFLAME;
|
||||
} else {
|
||||
sprite[j].picnum = (short) chunk; // = REDCHUNKSTART + (rand() % 8);
|
||||
}
|
||||
|
||||
sprite[j].shade = -16;
|
||||
sprite[j].xrepeat = 64;
|
||||
sprite[j].yrepeat = 64;
|
||||
sprite[j].clipdist = 16;
|
||||
sprite[j].ang = (short) (((krand() & 1023) - 1024) & 2047);
|
||||
sprite[j].xvel = (short) ((krand() & 1023) - 512);
|
||||
sprite[j].yvel = (short) ((krand() & 1023) - 512);
|
||||
sprite[j].zvel = (short) ((krand() & 1023) - 512);
|
||||
if (newchunk == 1)
|
||||
sprite[j].zvel <<= 1;
|
||||
sprite[j].owner = sprite[plr.spritenum].owner;
|
||||
sprite[j].lotag = 512;
|
||||
sprite[j].hitag = 0;
|
||||
sprite[j].pal = 0;
|
||||
movesprite((short) j, ((sintable[(sprite[j].ang + 512) & 2047]) * TICSPERFRAME) << 3,
|
||||
((sintable[sprite[j].ang & 2047]) * TICSPERFRAME) << 3, 0, 4 << 8, 4 << 8, 0);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void addhealth(PLAYER& plr, int hp) {
|
||||
if (plr.godMode && hp < 0)
|
||||
return;
|
||||
|
||||
plr.health += hp;
|
||||
|
||||
if (plr.health < 0)
|
||||
plr.health = 0;
|
||||
}
|
||||
|
||||
void addarmor(PLAYER& plr, int arm) {
|
||||
plr.armor += arm;
|
||||
|
||||
if (plr.armor < 0) {
|
||||
plr.armor = 0;
|
||||
plr.armortype = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void addscore(PLAYER& plr, int score) {
|
||||
if(plr == nullptr) return;
|
||||
|
||||
plr.score += score;
|
||||
expgained += score;
|
||||
|
||||
goesupalevel(plr);
|
||||
}
|
||||
|
||||
void goesupalevel(PLAYER& plr) {
|
||||
if (isWh2())
|
||||
goesupalevel2(plr);
|
||||
else
|
||||
goesupalevel1(plr);
|
||||
}
|
||||
|
||||
void goesupalevel2(PLAYER& plr) {
|
||||
switch (plr.lvl) {
|
||||
case 0:
|
||||
case 1:
|
||||
if (plr.score > 9999) {
|
||||
showmessage("thou art a warrior", 360);
|
||||
plr.lvl = 2;
|
||||
plr.maxhealth = 120;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (plr.score > 19999) {
|
||||
showmessage("thou art a swordsman", 360);
|
||||
plr.lvl = 3;
|
||||
plr.maxhealth = 140;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (plr.score > 29999) {
|
||||
showmessage("thou art a hero", 360);
|
||||
plr.lvl = 4;
|
||||
plr.maxhealth = 160;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (plr.score > 39999) {
|
||||
showmessage("thou art a champion", 360);
|
||||
plr.lvl = 5;
|
||||
plr.maxhealth = 180;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if (plr.score > 49999) {
|
||||
showmessage("thou art a superhero", 360);
|
||||
plr.lvl = 6;
|
||||
plr.maxhealth = 200;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
if (plr.score > 59999) {
|
||||
showmessage("thou art a lord", 360);
|
||||
plr.lvl = 7;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void goesupalevel1(PLAYER& plr) {
|
||||
if (plr.score > 2250 && plr.score < 4499 && plr.lvl < 2) {
|
||||
showmessage("thou art 2nd level", 360);
|
||||
plr.lvl = 2;
|
||||
plr.maxhealth = 120;
|
||||
} else if (plr.score > 4500 && plr.score < 8999 && plr.lvl < 3) {
|
||||
showmessage("thou art 3rd level", 360);
|
||||
plr.lvl = 3;
|
||||
plr.maxhealth = 140;
|
||||
} else if (plr.score > 9000 && plr.score < 17999 && plr.lvl < 4) {
|
||||
showmessage("thou art 4th level", 360);
|
||||
plr.lvl = 4;
|
||||
plr.maxhealth = 160;
|
||||
} else if (plr.score > 18000 && plr.score < 35999 && plr.lvl < 5) {
|
||||
showmessage("thou art 5th level", 360);
|
||||
plr.lvl = 5;
|
||||
plr.maxhealth = 180;
|
||||
} else if (plr.score > 36000 && plr.score < 74999 && plr.lvl < 6) {
|
||||
showmessage("thou art 6th level", 360);
|
||||
plr.lvl = 6;
|
||||
plr.maxhealth = 200;
|
||||
} else if (plr.score > 75000 && plr.score < 179999 && plr.lvl < 7) {
|
||||
showmessage("thou art 7th level", 360);
|
||||
plr.lvl = 7;
|
||||
} else if (plr.score > 180000 && plr.score < 279999 && plr.lvl < 8) {
|
||||
showmessage("thou art 8th level", 360);
|
||||
plr.lvl = 8;
|
||||
} else if (plr.score > 280000 && plr.score < 379999 && plr.lvl < 9) {
|
||||
showmessage("thou art hero", 360);
|
||||
plr.lvl = 9;
|
||||
}
|
||||
}
|
||||
|
||||
void lockon(PLAYER& plr, int numshots, int shootguntype) {
|
||||
short daang, i, k, n = 0, s;
|
||||
SPRITE spr;
|
||||
|
||||
for (i = 0; i < tspritelistcnt && n < numshots; i++) {
|
||||
spr = tspritelist[i];
|
||||
|
||||
if (cansee(plr.x, plr.y, plr.z, plr.sector, spr.x, spr.y, spr.z - (tilesizy[spr.picnum] << 7),
|
||||
spr.sectnum)) {
|
||||
switch (spr.detail) {
|
||||
case KOBOLDTYPE:
|
||||
case DEVILTYPE:
|
||||
case IMPTYPE:
|
||||
case MINOTAURTYPE:
|
||||
case SKELETONTYPE:
|
||||
case GRONTYPE:
|
||||
case DEMONTYPE:
|
||||
case GUARDIANTYPE:
|
||||
case WILLOWTYPE:
|
||||
case NEWGUYTYPE:
|
||||
case KURTTYPE:
|
||||
case GONZOTYPE:
|
||||
case KATIETYPE:
|
||||
monsterangle[n] = getangle(tspritelist[i].x - plr.x, tspritelist[i].y - plr.y);
|
||||
monsterlist[n] = i;
|
||||
n++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
daang = (short) (plr.ang - ((numshots * (128 / numshots)) >> 1));
|
||||
for (k = 0, s = 0; k < numshots; k++) {
|
||||
if (n > 0) {
|
||||
spr = tspritelist[monsterlist[s]];
|
||||
daang = monsterangle[s];
|
||||
shootgunzvel = ((spr.z - (48 << 8) - plr.z) << 8)
|
||||
/ ksqrt((spr.x - plr.x) * (spr.x - plr.x) + (spr.y - plr.y) * (spr.y - plr.y));
|
||||
s = (short) ((s + 1) % n);
|
||||
} else {
|
||||
daang += (128 / numshots);
|
||||
}
|
||||
shootgun(plr, daang, shootguntype);
|
||||
}
|
||||
}
|
||||
|
||||
int getPlayerHeight()
|
||||
{
|
||||
return isWh2() ? WH2PLAYERHEIGHT : PLAYERHEIGHT;
|
||||
}
|
||||
}
|
1037
source/games/whaven/src/whtag.cpp
Normal file
1037
source/games/whaven/src/whtag.cpp
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue