From bd145c3ebfc082286486a8700b9ce20bfd7383e2 Mon Sep 17 00:00:00 2001 From: fusion32 Date: Sat, 7 Jun 2025 01:44:53 -0300 Subject: implement TFindCreatures and KillStatistics --- reference/game.c | 472 ------------------------------------------------------- 1 file changed, 472 deletions(-) (limited to 'reference/game.c') diff --git a/reference/game.c b/reference/game.c index 65f96be..d50249a 100644 --- a/reference/game.c +++ b/reference/game.c @@ -29623,478 +29623,6 @@ void __static_initialization_and_destruction_0(int __initialize_p,int __priority return; } -// DWARF original prototype: void TFindCreatures(TFindCreatures * this, int radx, int rady, int x, -// int y, int Mask) - -void __thiscall -TFindCreatures::TFindCreatures(TFindCreatures *this,int radx,int rady,int x,int y,int Mask) - -{ - uint uVar1; - uint uVar2; - - uVar1 = x - radx; - uVar2 = y - rady; - this->endx = x + radx; - this->startx = uVar1; - this->starty = uVar2; - this->endy = y + rady; - if (0x7fffffff < uVar1) { - uVar1 = uVar1 + 0xf; - } - this->blockx = ((int)uVar1 >> 4) + -1; - if (0x7fffffff < uVar2) { - uVar2 = uVar2 + 0xf; - } - this->blocky = (int)uVar2 >> 4; - this->ActID = 0; - this->SkipID = 0; - this->Mask = Mask; - this->finished = false; - return; -} - - - -// DWARF original prototype: void TFindCreatures(TFindCreatures * this, int radx, int rady, int x, -// int y, int Mask) - -void __thiscall -TFindCreatures::TFindCreatures(TFindCreatures *this,int radx,int rady,int x,int y,int Mask) - -{ - uint uVar1; - uint uVar2; - - uVar1 = x - radx; - uVar2 = y - rady; - this->endy = y + rady; - this->startx = uVar1; - if (0x7fffffff < uVar1) { - uVar1 = uVar1 + 0xf; - } - this->endx = x + radx; - this->blockx = ((int)uVar1 >> 4) + -1; - this->starty = uVar2; - if (0x7fffffff < uVar2) { - uVar2 = uVar2 + 0xf; - } - this->blocky = (int)uVar2 >> 4; - this->ActID = 0; - this->SkipID = 0; - this->Mask = Mask; - this->finished = false; - return; -} - - - -// DWARF original prototype: void TFindCreatures(TFindCreatures * this, int radx, int rady, ulong -// CreatureID, int Mask) - -void __thiscall -TFindCreatures::TFindCreatures(TFindCreatures *this,int radx,int rady,ulong CreatureID,int Mask) - -{ - int iVar1; - int iVar2; - TCreature *pTVar3; - uint uVar4; - uint uVar5; - - pTVar3 = GetCreature(CreatureID); - if (pTVar3 == (TCreature *)0x0) { - error("TFindCreatures::TFindCreatures: Kreatur existiert nicht.\n"); - this->finished = true; - } - else { - iVar1 = pTVar3->posx; - iVar2 = pTVar3->posy; - uVar4 = iVar1 - radx; - this->startx = uVar4; - uVar5 = iVar2 - rady; - this->ActID = 0; - this->endy = iVar2 + rady; - if (0x7fffffff < uVar4) { - uVar4 = uVar4 + 0xf; - } - this->blockx = ((int)uVar4 >> 4) + -1; - this->finished = false; - this->endx = iVar1 + radx; - this->Mask = Mask; - this->starty = uVar5; - if (0x7fffffff < uVar5) { - uVar5 = uVar5 + 0xf; - } - this->blocky = (int)uVar5 >> 4; - this->SkipID = CreatureID; - } - return; -} - - - -// DWARF original prototype: void TFindCreatures(TFindCreatures * this, int radx, int rady, ulong -// CreatureID, int Mask) - -void __thiscall -TFindCreatures::TFindCreatures(TFindCreatures *this,int radx,int rady,ulong CreatureID,int Mask) - -{ - int iVar1; - int iVar2; - TCreature *pTVar3; - uint uVar4; - uint uVar5; - - pTVar3 = GetCreature(CreatureID); - if (pTVar3 == (TCreature *)0x0) { - error("TFindCreatures::TFindCreatures: Kreatur existiert nicht.\n"); - this->finished = true; - } - else { - iVar1 = pTVar3->posx; - iVar2 = pTVar3->posy; - uVar4 = iVar1 - radx; - this->startx = uVar4; - uVar5 = iVar2 - rady; - this->ActID = 0; - this->endy = iVar2 + rady; - if (0x7fffffff < uVar4) { - uVar4 = uVar4 + 0xf; - } - this->blockx = ((int)uVar4 >> 4) + -1; - this->finished = false; - this->endx = iVar1 + radx; - this->Mask = Mask; - this->starty = uVar5; - if (0x7fffffff < uVar5) { - uVar5 = uVar5 + 0xf; - } - this->blocky = (int)uVar5 >> 4; - this->SkipID = CreatureID; - } - return; -} - - - -// DWARF original prototype: void TFindCreatures(TFindCreatures * this, int radx, int rady, Object * -// Obj, int Mask) - -void __thiscall -TFindCreatures::TFindCreatures(TFindCreatures *this,int radx,int rady,Object *Obj,int Mask) - -{ - bool bVar1; - uint uVar2; - uint uVar3; - int local_38; - int x; - int y; - int z; - - bVar1 = Object::exists(Obj); - if (bVar1) { - z = Obj->ObjectID; - GetObjectCoordinates((Object *)&z,&local_38,&x,&y); - uVar3 = x - rady; - this->endx = local_38 + radx; - uVar2 = local_38 - radx; - this->SkipID = 0; - this->startx = uVar2; - this->endy = x + rady; - if (0x7fffffff < uVar2) { - uVar2 = uVar2 + 0xf; - } - this->blockx = ((int)uVar2 >> 4) + -1; - this->starty = uVar3; - if (0x7fffffff < uVar3) { - uVar3 = uVar3 + 0xf; - } - this->blocky = (int)uVar3 >> 4; - this->ActID = 0; - this->Mask = Mask; - this->finished = false; - } - else { - error(&DAT_08101a80); - this->finished = true; - } - return; -} - - - -// DWARF original prototype: void TFindCreatures(TFindCreatures * this, int radx, int rady, Object * -// Obj, int Mask) - -void __thiscall -TFindCreatures::TFindCreatures(TFindCreatures *this,int radx,int rady,Object *Obj,int Mask) - -{ - bool bVar1; - uint uVar2; - uint uVar3; - int local_38; - int x; - int y; - int z; - - bVar1 = Object::exists(Obj); - if (bVar1) { - z = Obj->ObjectID; - GetObjectCoordinates((Object *)&z,&local_38,&x,&y); - uVar3 = x - rady; - this->endx = local_38 + radx; - uVar2 = local_38 - radx; - this->SkipID = 0; - this->startx = uVar2; - this->endy = x + rady; - if (0x7fffffff < uVar2) { - uVar2 = uVar2 + 0xf; - } - this->blockx = ((int)uVar2 >> 4) + -1; - this->starty = uVar3; - if (0x7fffffff < uVar3) { - uVar3 = uVar3 + 0xf; - } - this->blocky = (int)uVar3 >> 4; - this->ActID = 0; - this->Mask = Mask; - this->finished = false; - } - else { - error(&DAT_08101a80); - this->finished = true; - } - return; -} - - - -// DWARF original prototype: void initSearch(TFindCreatures * this, int radx, int rady, int x, int -// y, int mask) - -void __thiscall -TFindCreatures::initSearch(TFindCreatures *this,int radx,int rady,int x,int y,int mask) - -{ - uint uVar1; - uint uVar2; - - uVar1 = x - radx; - uVar2 = y - rady; - this->endy = y + rady; - this->startx = uVar1; - if (0x7fffffff < uVar1) { - uVar1 = uVar1 + 0xf; - } - this->endx = x + radx; - this->blockx = ((int)uVar1 >> 4) + -1; - this->starty = uVar2; - if (0x7fffffff < uVar2) { - uVar2 = uVar2 + 0xf; - } - this->blocky = (int)uVar2 >> 4; - this->ActID = 0; - this->SkipID = 0; - this->Mask = mask; - this->finished = false; - return; -} - - - -// DWARF original prototype: ulong getNext(TFindCreatures * this) - -ulong __thiscall TFindCreatures::getNext(TFindCreatures *this) - -{ - CreatureType CVar1; - bool bVar2; - matrix<> *pmVar3; - int iVar4; - uint uVar5; - TCreature *pTVar6; - int iVar7; - ulong *puVar8; - ulong uVar9; - TCreature *cr; - - if (this->finished == false) { - do { - do { - do { - while( true ) { - uVar9 = this->ActID; - while (uVar9 == 0) { - uVar5 = this->endx; - iVar4 = this->blockx + 1; - if (0x7fffffff < uVar5) { - uVar5 = uVar5 + 0xf; - } - this->blockx = iVar4; - if ((int)uVar5 >> 4 < iVar4) { - uVar5 = this->startx; - if (0x7fffffff < uVar5) { - uVar5 = uVar5 + 0xf; - } - iVar4 = this->blocky + 1; - this->blockx = (int)uVar5 >> 4; - uVar5 = this->endy; - this->blocky = iVar4; - if (0x7fffffff < uVar5) { - uVar5 = uVar5 + 0xf; - } - if ((int)uVar5 >> 4 < iVar4) { - this->finished = true; - goto LAB_0809ec9e; - } - } - pmVar3 = FirstChainCreature; - iVar4 = this->blockx; - if ((((SBORROW4(iVar4,SectorXMin * 2) == iVar4 + SectorXMin * -2 < 0) && - (iVar4 <= SectorXMax * 2 + 1)) && - (iVar7 = this->blocky, - SBORROW4(iVar7,SectorYMin * 2) == iVar7 + SectorYMin * -2 < 0)) && - (iVar7 <= SectorYMax * 2 + 1)) { - iVar7 = iVar7 - FirstChainCreature->ymin; - iVar4 = iVar4 - FirstChainCreature->xmin; - if (((iVar4 < 0) || (FirstChainCreature->dx <= iVar4)) || - ((iVar7 < 0 || (FirstChainCreature->dy <= iVar7)))) { - error("matrix::operator(): Ungueltiger Index %d/%d.\n", - iVar4 + FirstChainCreature->xmin, - iVar7 + FirstChainCreature->ymin); - puVar8 = pmVar3->entry; - } - else { - puVar8 = FirstChainCreature->entry + - iVar4 + iVar7 * FirstChainCreature->dx; - } - this->ActID = *puVar8; - } - else { - this->ActID = 0; - } - uVar9 = this->ActID; - } - pTVar6 = GetCreature(uVar9); - if (pTVar6 != (TCreature *)0x0) break; - error("TFindCreatures::getNext: Kreatur existiert nicht.\n"); - this->ActID = 0; - } - this->ActID = pTVar6->NextChainCreature; - uVar9 = pTVar6->ID; - } while (uVar9 == this->SkipID); - bVar2 = false; - if ((this->startx <= pTVar6->posx) && (pTVar6->posx <= this->endx)) { - bVar2 = true; - } - } while (!bVar2); - bVar2 = false; - if ((this->starty <= pTVar6->posy) && (pTVar6->posy <= this->endy)) { - bVar2 = true; - } - } while ((((!bVar2) || ((CVar1 = pTVar6->Type, CVar1 == PLAYER && ((this->Mask & 1) == 0)))) - || ((CVar1 == NPC && ((this->Mask & 2) == 0)))) || - ((CVar1 == MONSTER && ((this->Mask & 4) == 0)))); - } - else { -LAB_0809ec9e: - uVar9 = 0; - } - return uVar9; -} - - - -// WARNING: Unknown calling convention -- yet parameter storage is locked - -void InitKillStatistics(void) - -{ - int i; - int iVar1; - - iVar1 = 0; - do { - KilledCreatures[iVar1] = 0; - KilledPlayers[iVar1] = 0; - iVar1 = iVar1 + 1; - } while (iVar1 < 0x200); - return; -} - - - -// WARNING: Variable defined which should be unmapped: NumberOfRaces -// WARNING: Unknown calling convention -- yet parameter storage is locked - -void WriteKillStatistics(void) - -{ - int i_1; - char *RaceNames; - int *KilledPlayers; - int *KilledCreatures; - char *Text; - char *pcVar1; - int i; - int iVar2; - char *__s; - int local_24; - int *Creatures; - int *Players; - char *Names; - int NumberOfRaces; - - Names = (char *)0x0; - RaceNames = (char *)operator_new__(0x3c00); - KilledPlayers = (int *)operator_new__(0x800); - KilledCreatures = (int *)operator_new__(0x800); - local_24 = 0; - iVar2 = 0; - pcVar1 = RaceNames; - __s = RaceNames; - do { - if ((::KilledCreatures[iVar2] != 0) || (::KilledPlayers[iVar2] != 0)) { - if (iVar2 < 1) { - builtin_strncpy(pcVar1,"(fire/poison/energy)",0x15); - } - else { - sprintf(__s,"%s %s",local_24 + 0x81c477e,RaceData[0].Name + local_24); - Text = Plural(__s,0); - Capitals(Text); - } - pcVar1 = pcVar1 + 0x1e; - __s = __s + 0x1e; - KilledPlayers[(int)Names] = ::KilledPlayers[iVar2]; - KilledCreatures[(int)Names] = ::KilledCreatures[iVar2]; - Names = Names + 1; - } - local_24 = local_24 + 0x150; - iVar2 = iVar2 + 1; - } while (iVar2 < 0x200); - KillStatisticsOrder((int)Names,RaceNames,KilledPlayers,KilledCreatures); - iVar2 = 0; - do { - ::KilledCreatures[iVar2] = 0; - ::KilledPlayers[iVar2] = 0; - iVar2 = iVar2 + 1; - } while (iVar2 < 0x200); - return; -} - -// WARNING: Unknown calling convention -- yet parameter storage is locked - -void ExitKillStatistics(void) - -{ - WriteKillStatistics(); - return; -} - char * GetRaceName(int Race) { -- cgit v1.2.3