diff --git a/Source/gendung.cpp b/Source/gendung.cpp index 50122dc90..dc26eb2f2 100644 --- a/Source/gendung.cpp +++ b/Source/gendung.cpp @@ -32,6 +32,7 @@ char nTrapTable[2049]; char leveltype; // weak unsigned char currlevel; // idb char TransList[256]; +// TODO: probably unsigned char char nSolidTable[2049]; int level_frame_count[2049]; ScrollStruct ScrollInfo; diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 6de49cbac..aac59578a 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -2119,6 +2119,9 @@ void __fastcall SetMissDir(int mi, int dir) SetMissAnim(mi, _LOBYTE(missile[mi]._miAnimType)); } +// TODO: replace `int mi` parameter with `missile_graphic_id mi` +// to enable the compiler to optimize int to char properly +// check for example the calls in `InitMonsterGFX` void __fastcall LoadMissileGFX(int mi) { MisFileData *v1; // esi diff --git a/Source/monster.cpp b/Source/monster.cpp index 4fdf73459..a7f7a71f4 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -2,7 +2,9 @@ #include "../types.h" -int MissileFileFlag; // weak +// Tracks which missile files are already loaded +int MissileFileFlag; + int monster_cpp_init_value; // weak int monstkills[MAXMONSTERS]; int monstactive[MAXMONSTERS]; @@ -502,10 +504,10 @@ void __cdecl GetLevelMTypes() if ( MonstAvailTbl[i] & mamask ) { skeltypes[nt++] = i; + } } } } - } AddMonsterType(skeltypes[random(88, nt)], 1); } @@ -520,9 +522,9 @@ void __cdecl GetLevelMTypes() if ( MonstAvailTbl[i] & mamask ) { typelist[nt++] = i; + } } } - } if ( monstdebug ) { @@ -558,168 +560,123 @@ void __cdecl GetLevelMTypes() void __fastcall InitMonsterGFX(int monst) { - int v1; // esi - int v2; // ebx - int v3; // ebx - int *v4; // edi - int *v5; // eax - char v6; // cl - unsigned char *v7; // eax - char v8; // cl - int *v9; // ecx - int v10; // edx - int v11; // ecx - int v12; // ecx - bool v13; // zf - int v14; // ecx - void **v15; // esi - unsigned char *v16; // eax - int v17; // edx - int v18; // ecx - void *v19; // ecx - //int v20; // ecx - //int v21; // ecx - //int v22; // ecx - //int v23; // ecx - //int v24; // ecx - //int v25; // ecx - char strBuff[256]; // [esp+Ch] [ebp-114h] - int mon_id; // [esp+10Ch] [ebp-14h] - int *v28; // [esp+110h] [ebp-10h] - int v29; // [esp+114h] [ebp-Ch] - int *v30; // [esp+118h] [ebp-8h] - int v31; // [esp+11Ch] [ebp-4h] - - v29 = 0; - mon_id = monst; - v1 = monst; - v2 = (unsigned char)Monsters[monst].mtype; - v31 = v2; - v3 = v2 << 7; - v4 = (int *)Monsters[monst].Anims[0].Frames; - v5 = (int *)((char *)monsterdata[0].Frames + v3); - v30 = (int *)Monsters[monst].Anims[0].Frames; - v28 = (int *)((char *)monsterdata[0].Frames + v3); - do + int mtype = (unsigned char)Monsters[monst].mtype; + char strBuff[256]; + + MonsterData *pmonsterdata = &monsterdata[mtype]; + + for ( int anim = 0; anim < 6; anim++ ) { - v6 = animletter[v29]; - if ( (v6 != 's' || *(int *)((char *)&monsterdata[0].has_special + v3)) && *v5 > 0 ) + if ( (animletter[anim] != 's' || pmonsterdata->has_special) && pmonsterdata->Frames ) { - sprintf(strBuff, *(const char **)((char *)&monsterdata[0].GraphicType + v3), v6); - v7 = LoadFileInMem(strBuff, 0); - *(v4 - 1) = (int)v7; - if ( Monsters[v1].mtype != MT_GOLEM || (v8 = animletter[v29], v8 != 's') && v8 != 'd' ) + sprintf(strBuff, pmonsterdata->GraphicType, animletter[anim]); + + Monsters[monst].Anims[anim].CMem = LoadFileInMem(strBuff, NULL); + + if ( Monsters[monst].mtype != MT_GOLEM || (animletter[anim] != 's' && animletter[anim] != 'd') ) { - v30 = 0; - v9 = v4; - do + + for ( int i = 0; i < 8; i++ ) { - v10 = (int)&v7[*(_DWORD *)&v7[4 * (_DWORD)v30]]; - v30 = (int *)((char *)v30 + 1); - *v9 = v10; - ++v9; + // TODO: this can probably be cleaned up by defining the CMem structure + Monsters[monst].Anims[anim].Frames[i] = + (unsigned char*) + ((int)Monsters[monst].Anims[anim].CMem + ((int *)Monsters[monst].Anims[anim].CMem)[i]); } - while ( (signed int)v30 < 8 ); } else { - memset32(v4, (int)v7, 8u); - v4 = v30; - } - v5 = v28; - } - v11 = *v5; - ++v29; - v4[8] = v11; - v4[9] = v5[6]; - ++v5; - v4 += 11; - v28 = v5; - v30 = v4; - } - while ( v29 < 6 ); - Monsters[v1].MData = (MonsterData *)((char *)monsterdata + v3); - v12 = *(int *)((char *)&monsterdata[0].flags + v3); - Monsters[v1].flags_1 = v12; - Monsters[v1].flags_2 = (v12 - 64) >> 1; - Monsters[v1].mMinHP = *((_BYTE *)&monsterdata[0].mMinHP + v3); - v13 = *(int *)((char *)&monsterdata[0].has_trans + v3) == 0; - Monsters[v1].mMaxHP = *((_BYTE *)&monsterdata[0].mMaxHP + v3); - v14 = *(int *)((char *)&monsterdata[0].has_special + v3); - Monsters[v1].has_special = v14; - Monsters[v1].mAFNum = *(&monsterdata[0].mAFNum + v3); - if ( !v13 ) + for ( int i = 0; i < 8; i++ ) + { + Monsters[monst].Anims[anim].Frames[i] = Monsters[monst].Anims[anim].CMem; + } + } + } + + // TODO: either the AnimStruct members have wrong naming or the MonsterData ones it seems + Monsters[monst].Anims[anim].Rate = pmonsterdata->Frames[0]; + Monsters[monst].Anims[anim].Delay = pmonsterdata->Rate[0]; + } + + + Monsters[monst].MData = pmonsterdata; + Monsters[monst].flags_1 = pmonsterdata->flags; + Monsters[monst].flags_2 = (pmonsterdata->flags - 64) >> 1; + Monsters[monst].mMinHP = pmonsterdata->mMinHP; + Monsters[monst].mMaxHP = pmonsterdata->mMaxHP; + Monsters[monst].has_special = pmonsterdata->has_special; + Monsters[monst].mAFNum = pmonsterdata->mAFNum; + + if ( pmonsterdata->has_trans ) { - v15 = (void **)&Monsters[v1].trans_file; - v16 = LoadFileInMem(*(char **)((char *)&monsterdata[0].TransFile + v3), 0); - v17 = *(int *)((char *)&monsterdata[0].has_special + v3); - v18 = mon_id; - *v15 = v16; - InitMonsterTRN(v18, v17); - v19 = *v15; - *v15 = 0; - mem_free_dbg(v19); + Monsters[monst].trans_file = LoadFileInMem(pmonsterdata->TransFile, NULL); + InitMonsterTRN(monst, pmonsterdata->has_special); + + void *trans_file = Monsters[monst].trans_file; + Monsters[monst].trans_file = NULL; + + mem_free_dbg(trans_file); } - if ( v31 >= MT_NMAGMA && v31 <= MT_WMAGMA && !(MissileFileFlag & 1) ) + + if ( mtype >= MT_NMAGMA && mtype <= MT_WMAGMA && !(MissileFileFlag & 1) ) { - MissileFileFlag |= 1u; + MissileFileFlag |= 1; LoadMissileGFX(MFILE_MAGBALL); } - if ( v31 >= MT_STORM && v31 <= MT_MAEL && !(MissileFileFlag & 2) ) + if ( mtype >= MT_STORM && mtype <= MT_MAEL && !(MissileFileFlag & 2) ) { - MissileFileFlag |= 2u; + MissileFileFlag |= 2; LoadMissileGFX(MFILE_THINLGHT); } - if ( v31 == MT_SUCCUBUS ) + if ( mtype == MT_SUCCUBUS ) { - if ( MissileFileFlag & 4 ) - return; - MissileFileFlag |= 4u; + if ( MissileFileFlag & 4 ) return; + + MissileFileFlag |= 4; LoadMissileGFX(MFILE_FLARE); LoadMissileGFX(MFILE_FLAREEXP); } - if ( v31 == MT_SNOWWICH ) + if ( mtype == MT_SNOWWICH ) { - if ( MissileFileFlag & 0x20 ) - return; - MissileFileFlag |= 0x20u; + if ( MissileFileFlag & 0x20 ) return; + + MissileFileFlag |= 0x20; LoadMissileGFX(MFILE_SCUBMISB); LoadMissileGFX(MFILE_SCBSEXPB); } - if ( v31 == MT_HLSPWN ) + if ( mtype == MT_HLSPWN ) { - if ( MissileFileFlag & 0x40 ) - return; - MissileFileFlag |= 0x40u; + if ( MissileFileFlag & 0x40 ) return; + + MissileFileFlag |= 0x40; LoadMissileGFX(MFILE_SCUBMISD); LoadMissileGFX(MFILE_SCBSEXPD); } - if ( v31 == MT_SOLBRNR ) + if ( mtype == MT_SOLBRNR ) { - if ( (MissileFileFlag & 0x80u) != 0 ) - return; + if ( MissileFileFlag & 0x80 ) return; + MissileFileFlag |= 0x80; LoadMissileGFX(MFILE_SCUBMISC); LoadMissileGFX(MFILE_SCBSEXPC); } - if ( v31 >= MT_INCIN && v31 <= MT_HELLBURN && !(MissileFileFlag & 8) ) + if ( mtype >= MT_INCIN && mtype <= MT_HELLBURN && !(MissileFileFlag & 8) ) { - MissileFileFlag |= 8u; + MissileFileFlag |= 8; LoadMissileGFX(MFILE_KRULL); } - if ( v31 >= MT_NACID && v31 <= MT_XACID && !(MissileFileFlag & 0x10) ) + if ( mtype >= MT_NACID && mtype <= MT_XACID && !(MissileFileFlag & 0x10) ) { - MissileFileFlag |= 0x10u; + MissileFileFlag |= 0x10; LoadMissileGFX(MFILE_ACIDBF); LoadMissileGFX(MFILE_ACIDSPLA); LoadMissileGFX(MFILE_ACIDPUD); } - if ( v31 == MT_DIABLO ) + if ( mtype == MT_DIABLO ) { LoadMissileGFX(MFILE_FIREPLAR); } } -// 64CCE0: using guessed type int MissileFileFlag; void __fastcall ClearMVars(int i) { @@ -735,183 +692,150 @@ void __fastcall ClearMVars(int i) void __fastcall InitMonster(int i, int rd, int mtype, int x, int y) { - int v5; // ebx - int v6; // esi - CMonster *monst; // edi - MonsterData *v8; // eax - char *v9; // ecx - int v10; // eax - int v11; // eax - //int v12; // ecx - int v13; // eax - int v16; // eax - MonsterData *v17; // eax - int v18; // eax - MonsterData *v19; // eax - short v20; // cx - int v21; // edx - int v22; // edx - int v24; // ecx - int v25; // ecx - char v26; // dl - int v27; // ecx - char v28; // dl + CMonster *monst = &Monsters[mtype]; + + monster[i]._mmode = MM_STAND; + monster[i]._mx = x; + monster[i]._mfutx = x; + monster[i]._moldx = x; + monster[i]._mdir = rd; + monster[i]._my = y; + monster[i]._mfuty = y; + monster[i]._moldy = y; + monster[i]._mMTidx = mtype; + monster[i].mName = monst->MData->mName; + monster[i].MType = monst; + monster[i].MData = monst->MData; + monster[i]._mAFNum = (int)monst->Anims[0].Frames[rd]; + monster[i]._mAnimDelay = monst->Anims[0].Delay; + monster[i]._mAnimCnt = random(88, monst->Anims[0].Delay - 1); + monster[i]._mAnimLen = monst->Anims[0].Rate; + monster[i]._mAnimFrame = random(88, monst->Anims[0].Rate - 1) + 1; - v5 = rd; - v6 = i; - monster[v6]._mmode = MM_STAND; - monst = &Monsters[mtype]; - monster[v6]._mx = x; - monster[v6]._mfutx = x; - monster[v6]._moldx = x; - v8 = monst->MData; - monster[v6]._mdir = rd; - monster[v6]._my = y; - monster[v6]._mfuty = y; - monster[v6]._moldy = y; - monster[v6]._mMTidx = mtype; - v9 = v8->mName; - monster[v6].mName = v9; - monster[v6].MType = monst; - monster[v6].MData = v8; - monster[v6]._mAFNum = (int)monst->Anims[0].Frames[rd]; - v10 = monst->Anims[0].Delay; - monster[v6]._mAnimDelay = v10; - monster[v6]._mAnimCnt = random(88, v10 - 1); - v11 = monst->Anims[0].Rate; - monster[v6]._mAnimLen = v11; - v13 = random(88, v11 - 1); - monster[v6]._mAnimFrame = v13 + 1; if ( monst->mtype == MT_DIABLO ) - v16 = random(88, 1) + 1666; + { + monster[i]._mmaxhp = (random(88, 1) + 1666) << 6; + } else - v16 = monst->mMinHP + random(88, monst->mMaxHP - monst->mMinHP + 1); - monster[v6]._mmaxhp = v16 << 6; - if ( gbMaxPlayers == 1 ) { - monster[v6]._mmaxhp >>= 1; - if ( monster[v6]._mmaxhp < 64 ) - monster[v6]._mmaxhp = 64; + monster[i]._mmaxhp = (monst->mMinHP + random(88, monst->mMaxHP - monst->mMinHP + 1)) << 6; } - monster[v6]._mhitpoints = monster[v6]._mmaxhp; - v17 = monst->MData; - monster[v6]._mAi = v17->mAi; - monster[v6]._mint = v17->mInt; - _LOBYTE(monster[v6]._pathcount) = 0; - monster[v6]._uniqtype = 0; - monster[v6]._msquelch = 0; - _LOBYTE(monster[v6]._mgoal) = 1; - monster[v6]._mgoalvar1 = 0; - monster[v6]._mgoalvar2 = 0; - monster[v6]._mgoalvar3 = 0; - monster[v6].field_18 = 0; - monster[v6]._mDelFlag = 0; - monster[v6]._mRndSeed = GetRndSeed(); - v18 = GetRndSeed(); - monster[v6].mWhoHit = 0; - monster[v6]._mAISeed = v18; - v19 = monst->MData; - _LOBYTE(monster[v6].mLevel) = v19->mLevel; - monster[v6].mExp = v19->mExp; - monster[v6].mHit = v19->mHit; - monster[v6].mMinDamage = v19->mMinDamage; - monster[v6].mMaxDamage = v19->mMaxDamage; - monster[v6].mHit2 = v19->mHit2; - monster[v6].mMinDamage2 = v19->mMinDamage2; - monster[v6].mMaxDamage2 = v19->mMaxDamage2; - monster[v6].mArmorClass = v19->mArmorClass; - v20 = v19->mMagicRes; - monster[v6].leader = 0; - monster[v6].leaderflag = 0; - _LOWORD(monster[v6].mMagicRes) = v20; - v21 = v19->mFlags; - monster[v6].mtalkmsg = 0; - monster[v6]._mFlags = v21; - if ( monster[v6]._mAi == AI_GARG ) - { - v22 = (int)monst->Anims[5].Frames[v5]; - monster[v6]._mFlags |= 4u; - monster[v6]._mAFNum = v22; - monster[v6]._mAnimFrame = 1; - monster[v6]._mmode = MM_SATTACK; + + if ( gbMaxPlayers == 1 ) + { + monster[i]._mmaxhp >>= 1; + if ( monster[i]._mmaxhp < 64 ) + { + monster[i]._mmaxhp = 64; + } + } + + monster[i]._mhitpoints = monster[i]._mmaxhp; + monster[i]._mAi = monst->MData->mAi; + monster[i]._mint = monst->MData->mInt; + monster[i]._pathcount = 0; + monster[i]._uniqtype = 0; + monster[i]._msquelch = 0; + monster[i]._mgoal = 1; + monster[i]._mgoalvar1 = 0; + monster[i]._mgoalvar2 = 0; + monster[i]._mgoalvar3 = 0; + monster[i].field_18 = 0; + monster[i]._mDelFlag = 0; + monster[i]._mRndSeed = GetRndSeed(); + monster[i].mWhoHit = 0; + monster[i]._mAISeed = GetRndSeed(); + monster[i].mLevel = monst->MData->mLevel; + monster[i].mExp = monst->MData->mExp; + monster[i].mHit = monst->MData->mHit; + monster[i].mMinDamage = monst->MData->mMinDamage; + monster[i].mMaxDamage = monst->MData->mMaxDamage; + monster[i].mHit2 = monst->MData->mHit2; + monster[i].mMinDamage2 = monst->MData->mMinDamage2; + monster[i].mMaxDamage2 = monst->MData->mMaxDamage2; + monster[i].mArmorClass = monst->MData->mArmorClass; + monster[i].leader = 0; + monster[i].leaderflag = 0; + monster[i].mMagicRes = monst->MData->mMagicRes; + monster[i].mtalkmsg = 0; + monster[i]._mFlags = monst->MData->mFlags; + + if ( monster[i]._mAi == AI_GARG ) + { + monster[i]._mFlags |= 4u; + monster[i]._mAFNum = (int)monst->Anims[5].Frames[rd]; + monster[i]._mAnimFrame = 1; + monster[i]._mmode = MM_SATTACK; } + if ( gnDifficulty == DIFF_NIGHTMARE ) { - v24 = monster[v6]._mmaxhp; - _LOBYTE(monster[v6].mLevel) += 15; - monster[v6].mHit += 85; - monster[v6].mHit2 += 85; - v25 = 3 * v24 + 64; - monster[v6]._mmaxhp = v25; - monster[v6]._mhitpoints = v25; - monster[v6].mExp = 2 * (monster[v6].mExp + 1000); - monster[v6].mMinDamage = 2 * (monster[v6].mMinDamage + 2); - monster[v6].mMaxDamage = 2 * (monster[v6].mMaxDamage + 2); - monster[v6].mMinDamage2 = 2 * (monster[v6].mMinDamage2 + 2); - _LOBYTE(v25) = 2 * (monster[v6].mMaxDamage2 + 2); - monster[v6].mArmorClass += 50; - monster[v6].mMaxDamage2 = v25; + monster[i].mLevel += 15; + monster[i].mHit += 85; + monster[i].mHit2 += 85; + monster[i]._mmaxhp = 3 * monster[i]._mmaxhp + 64; + monster[i]._mhitpoints = monster[i]._mmaxhp; + monster[i].mExp = 2 * (monster[i].mExp + 1000); + monster[i].mMinDamage = 2 * (monster[i].mMinDamage + 2); + monster[i].mMaxDamage = 2 * (monster[i].mMaxDamage + 2); + monster[i].mMinDamage2 = 2 * (monster[i].mMinDamage2 + 2); + monster[i].mArmorClass += 50; + monster[i].mMaxDamage2 = 2 * (monster[i].mMaxDamage2 + 2); } + if ( gnDifficulty == DIFF_HELL ) { - v26 = 4 * monster[v6].mMinDamage; - v27 = 4 * monster[v6]._mmaxhp + 192; - _LOBYTE(monster[v6].mLevel) += 30; - monster[v6]._mmaxhp = v27; - monster[v6]._mhitpoints = v27; - _LOWORD(v27) = monster[v6].mExp; - monster[v6].mHit += 120; - monster[v6].mHit2 += 120; - monster[v6].mExp = 4 * (v27 + 1000); - monster[v6].mMinDamage = v26 + 6; - monster[v6].mMaxDamage = 4 * monster[v6].mMaxDamage + 6; - monster[v6].mMinDamage2 = 4 * monster[v6].mMinDamage2 + 6; - v28 = 4 * monster[v6].mMaxDamage2 + 6; - monster[v6].mArmorClass += 80; - monster[v6].mMaxDamage2 = v28; - _LOWORD(monster[v6].mMagicRes) = v19->mMagicRes2; + monster[i].mLevel += 30; + monster[i]._mmaxhp = 4 * monster[i]._mmaxhp + 192; + monster[i]._mhitpoints = monster[i]._mmaxhp; + monster[i].mHit += 120; + monster[i].mHit2 += 120; + monster[i].mExp = 4 * (monster[i].mExp + 1000); + monster[i].mMinDamage = 4 * monster[i].mMinDamage + 6; + monster[i].mMaxDamage = 4 * monster[i].mMaxDamage + 6; + monster[i].mMinDamage2 = 4 * monster[i].mMinDamage2 + 6; + monster[i].mArmorClass += 80; + monster[i].mMaxDamage2 = 4 * monster[i].mMaxDamage2 + 6; + monster[i].mMagicRes = monst->MData->mMagicRes2; } } -// 679660: using guessed type char gbMaxPlayers; void __cdecl ClrAllMonsters() { - int i; // edi - int v6; // eax + MonsterStruct *Monst; - for ( i = 0; i < 200; i++ ) + for ( int i = 0; i < 200; i++ ) { + Monst = &monster[i]; ClearMVars(i); - monster[i].mName = "Invalid Monster"; - monster[i]._mgoal = 0; - monster[i]._mmode = 0; - monster[i]._mVar1 = 0; - monster[i]._mVar2 = 0; - monster[i]._mx = 0; - monster[i]._my = 0; - monster[i]._mfutx = 0; - monster[i]._mfuty = 0; - monster[i]._moldx = 0; - monster[i]._moldy = 0; - monster[i]._mdir = random(89, 8); - monster[i]._mxvel = 0; - monster[i]._myvel = 0; - monster[i]._mAFNum = 0; - monster[i]._mAnimDelay = 0; - monster[i]._mAnimCnt = 0; - monster[i]._mAnimLen = 0; - monster[i]._mAnimFrame = 0; - monster[i]._mFlags = 0; - monster[i]._mDelFlag = 0; - v6 = random(89, gbActivePlayers); - monster[i]._menemy = v6; - monster[i]._menemyx = plr[v6]._px; - monster[i]._menemyy = plr[v6]._py; - } -} -// 67862C: using guessed type char gbActivePlayers; - -bool __fastcall MonstPlace(int xp, int yp) + Monst->mName = "Invalid Monster"; + Monst->_mgoal = 0; + Monst->_mmode = 0; + Monst->_mVar1 = 0; + Monst->_mVar2 = 0; + Monst->_mx = 0; + Monst->_my = 0; + Monst->_mfutx = 0; + Monst->_mfuty = 0; + Monst->_moldx = 0; + Monst->_moldy = 0; + Monst->_mdir = random(89, 8); + Monst->_mxvel = 0; + Monst->_myvel = 0; + Monst->_mAFNum = 0; + Monst->_mAnimDelay = 0; + Monst->_mAnimCnt = 0; + Monst->_mAnimLen = 0; + Monst->_mAnimFrame = 0; + Monst->_mFlags = 0; + Monst->_mDelFlag = 0; + Monst->_menemy = random(89, gbActivePlayers); + Monst->_menemyx = plr[Monst->_menemy]._px; + Monst->_menemyy = plr[Monst->_menemy]._py; + } +} + +BOOL __fastcall MonstPlace(int xp, int yp) { if ( xp < 0 || xp >= 112 || yp < 0 || yp >= 112 @@ -920,11 +844,11 @@ bool __fastcall MonstPlace(int xp, int yp) || dFlags[xp][yp] & 2 || dFlags[xp][yp] & 8 ) { - return 0; + return FALSE; } else { - return SolidLoc(xp, yp) == 0; + return !SolidLoc(xp, yp); } } @@ -6410,7 +6334,7 @@ void __fastcall MAI_Golum(int i) signed int v12; // ecx int v13; // eax bool v14; // eax - int *v15; // esi + unsigned char *v15; // esi bool v16; // eax int v17; // esi int v18; // edi diff --git a/Source/monster.h b/Source/monster.h index d3bb0a759..73a3c05de 100644 --- a/Source/monster.h +++ b/Source/monster.h @@ -25,7 +25,7 @@ void __fastcall InitMonsterGFX(int monst); void __fastcall ClearMVars(int i); void __fastcall InitMonster(int i, int rd, int mtype, int x, int y); void __cdecl ClrAllMonsters(); -bool __fastcall MonstPlace(int xp, int yp); +BOOL __fastcall MonstPlace(int xp, int yp); void __fastcall PlaceMonster(int i, int mtype, int x, int y); void __fastcall PlaceUniqueMonst(int uniqindex, int miniontype, int unpackfilesize); void __cdecl PlaceQuestMonsters(); diff --git a/Source/player.cpp b/Source/player.cpp index dc90b5367..12d3cb1f4 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -1270,13 +1270,14 @@ void __fastcall InitPlayerLoc(int pnum, bool flag) } } -bool __fastcall SolidLoc(int x, int y) +BOOL __fastcall SolidLoc(int x, int y) { - bool result; // eax + BOOL result; // eax if ( x < 0 || y < 0 || x >= 112 || y >= 112 ) - result = 0; + result = FALSE; else + // TODO: remove cast when changing nSolidTable to unsigned char result = (unsigned char)nSolidTable[dPiece[0][y + 112 * x]]; return result; } diff --git a/Source/player.h b/Source/player.h index d9875981e..09820bbc3 100644 --- a/Source/player.h +++ b/Source/player.h @@ -38,7 +38,7 @@ void __fastcall AddPlrMonstExper(int lvl, int exp, char pmask); void __fastcall InitPlayer(int pnum, bool FirstTime); void __cdecl InitMultiView(); void __fastcall InitPlayerLoc(int pnum, bool flag); -bool __fastcall SolidLoc(int x, int y); +BOOL __fastcall SolidLoc(int x, int y); bool __fastcall PlrDirOK(int pnum, int dir); void __fastcall PlrClrTrans(int x, int y); void __fastcall PlrDoTrans(int x, int y); diff --git a/structs.h b/structs.h index ce347c540..9a39c7955 100644 --- a/structs.h +++ b/structs.h @@ -139,7 +139,7 @@ struct MonsterData int flags; // width? int mType; char *GraphicType; - int has_special; + BOOL has_special; char *sndfile; int snd_special; int has_trans; @@ -480,8 +480,8 @@ struct MissileStruct struct AnimStruct { - int CMem; // [unsigned] char * ?? - unsigned char *Frames[8]; // array of 8 pointers // TODO: to CelBuf struct? + unsigned char *CMem; + unsigned char *Frames[8]; // TODO: to CelBuf struct? int Rate; int Delay; }; @@ -510,12 +510,12 @@ struct MonsterStruct { int _mMTidx; int _mmode; - int _mgoal; + unsigned char _mgoal; int _mgoalvar1; int _mgoalvar2; int _mgoalvar3; int field_18; - int _pathcount; + unsigned char _pathcount; int _mx; int _my; int _mfutx; @@ -563,7 +563,7 @@ struct MonsterStruct unsigned char _uniqtrans; char _udeadval; char mWhoHit; - short mLevel; /* char */ + char mLevel; unsigned short mExp; unsigned char mHit; unsigned char mMinDamage; @@ -573,7 +573,7 @@ struct MonsterStruct unsigned char mMaxDamage2; char mArmorClass; char falign_CB; - int mMagicRes; /* ushort */ + unsigned short mMagicRes; int mtalkmsg; unsigned char leader; unsigned char leaderflag;