From 375d0d469bcf0825d6cd8d808789e987fc25c53f Mon Sep 17 00:00:00 2001 From: Dennis Duda Date: Sat, 11 Aug 2018 23:51:04 +0200 Subject: [PATCH] Fixed InitMonsterGFX, it now actually works! --- Source/monster.cpp | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/Source/monster.cpp b/Source/monster.cpp index a7f7a71f4..133c653f2 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -563,54 +563,51 @@ void __fastcall InitMonsterGFX(int monst) int mtype = (unsigned char)Monsters[monst].mtype; char strBuff[256]; - MonsterData *pmonsterdata = &monsterdata[mtype]; - for ( int anim = 0; anim < 6; anim++ ) { - if ( (animletter[anim] != 's' || pmonsterdata->has_special) && pmonsterdata->Frames ) + if ( (animletter[anim] != 's' || monsterdata[mtype].has_special) && monsterdata[mtype].Frames[anim] > 0 ) { - sprintf(strBuff, pmonsterdata->GraphicType, animletter[anim]); + sprintf(strBuff, monsterdata[mtype].GraphicType, animletter[anim]); - Monsters[monst].Anims[anim].CMem = LoadFileInMem(strBuff, NULL); + unsigned char* celBuf = LoadFileInMem(strBuff, NULL); + Monsters[monst].Anims[anim].CMem = celBuf; if ( Monsters[monst].mtype != MT_GOLEM || (animletter[anim] != 's' && animletter[anim] != 'd') ) { for ( int i = 0; i < 8; i++ ) { - // 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]); + &celBuf[((int *)celBuf)[i]]; } } else { for ( int i = 0; i < 8; i++ ) { - Monsters[monst].Anims[anim].Frames[i] = Monsters[monst].Anims[anim].CMem; + Monsters[monst].Anims[anim].Frames[i] = celBuf; } } } // 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].Anims[anim].Rate = monsterdata[mtype].Frames[anim]; + Monsters[monst].Anims[anim].Delay = monsterdata[mtype].Rate[anim]; } - 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; + Monsters[monst].MData = &monsterdata[mtype]; + Monsters[monst].flags_1 = monsterdata[mtype].flags; + Monsters[monst].flags_2 = (monsterdata[mtype].flags - 64) >> 1; + Monsters[monst].mMinHP = monsterdata[mtype].mMinHP; + Monsters[monst].mMaxHP = monsterdata[mtype].mMaxHP; + Monsters[monst].has_special = monsterdata[mtype].has_special; + Monsters[monst].mAFNum = monsterdata[mtype].mAFNum; - if ( pmonsterdata->has_trans ) + if ( monsterdata[mtype].has_trans ) { - Monsters[monst].trans_file = LoadFileInMem(pmonsterdata->TransFile, NULL); - InitMonsterTRN(monst, pmonsterdata->has_special); + Monsters[monst].trans_file = LoadFileInMem(monsterdata[mtype].TransFile, NULL); + InitMonsterTRN(monst, monsterdata[mtype].has_special); void *trans_file = Monsters[monst].trans_file; Monsters[monst].trans_file = NULL;