From eaa3536c027a4f7c1b879b78ab0ecdefcdb4833d Mon Sep 17 00:00:00 2001 From: fusion32 Date: Sun, 8 Jun 2025 19:54:40 -0300 Subject: impl `TCreature::Move` which was absolute hell + some tidying up --- reference/game.c | 483 ------------------------------------------------------- 1 file changed, 483 deletions(-) (limited to 'reference') diff --git a/reference/game.c b/reference/game.c index fec668b..7e6d16d 100644 --- a/reference/game.c +++ b/reference/game.c @@ -22210,58 +22210,6 @@ LAB_0808ffd8: __cxa_throw(puVar3,&RESULT::typeinfo,0); } - - -void CheckContainerDestination(Object *Obj,Object *Con) - -{ - bool bVar1; - undefined4 *puVar2; - int iVar3; - ulong uVar4; - ulong *puVar5; - Object local_4c [4]; - Object local_3c [4]; - ulong local_2c; - Object Help; - - local_2c = Con->ObjectID; - do { - puVar5 = &local_2c; - // try { // try from 08090164 to 08090227 has its CatchHandler @ 08090243 - Object::getObjectType(local_3c); - if (local_3c[0].ObjectID == 0) { - Object::getObjectType(local_4c); - bVar1 = ObjectType::getFlag((ObjectType *)local_4c,CHEST); - if (!bVar1) { - local_4c[0] = (Object)Con->ObjectID; - iVar3 = CountObjectsInContainer(local_4c); - Object::getObjectType(local_3c); - uVar4 = ObjectType::getAttribute((ObjectType *)local_3c,CAPACITY); - if ((int)uVar4 <= iVar3) { - puVar2 = (undefined4 *)__cxa_allocate_exception(4); - *puVar2 = 10; -LAB_080901af: - // WARNING: Subroutine does not return - __cxa_throw(puVar2,&RESULT::typeinfo,0); - } - } - return; - } - local_3c[0] = (Object)Obj->ObjectID; - if (local_2c == local_3c[0].ObjectID) { - puVar2 = (undefined4 *)__cxa_allocate_exception(4,puVar5); - *puVar2 = 9; - goto LAB_080901af; - } - Object::getContainer(local_4c); - local_3c[0].ObjectID = local_4c[0].ObjectID; - local_2c = local_4c[0].ObjectID; - } while( true ); -} - - - void CheckContainerPlace(ObjectType *Type,Object *Con,Object *oldObj) { @@ -22388,175 +22336,6 @@ LAB_080904cb: __cxa_throw(puVar3,&RESULT::typeinfo,0); } - - -void CheckInventoryDestination(Object *Obj,Object *Con,bool Split) - -{ - uint uVar1; - Object OVar2; - bool bVar3; - int ClothesType; - ulong uVar4; - ulong uVar5; - ulong uVar6; - undefined4 *puVar7; - int Position; - bool bVar8; - undefined4 uVar9; - int local_68; - int Hand; - ulong uStack_5c; - bool Split_local; - Object Help; - Object local_4c [4]; - ulong local_3c; - Object local_2c; - Object Help_1; - - local_2c = (Object)Con->ObjectID; - // try { // try from 08090584 to 08090930 has its CatchHandler @ 080909c5 - uVar4 = GetObjectBodyPosition(&local_2c); - uVar1 = uVar4 - 5; - if ((1 < uVar1) && (uVar4 != 10)) { - Object::getObjectType(&local_2c); - bVar3 = ObjectType::getFlag((ObjectType *)&local_2c,CLOTHES); - if (!bVar3) { - puVar7 = (undefined4 *)__cxa_allocate_exception(4); - *puVar7 = 0xb; - goto LAB_0809079e; - } - Object::getObjectType(&local_2c); - uVar5 = ObjectType::getAttribute((ObjectType *)&local_2c,BODYPOSITION); - if (uVar5 == 0) { - puVar7 = (undefined4 *)__cxa_allocate_exception(4); - *puVar7 = 0xc; - goto LAB_0809079e; - } - if (uVar4 != uVar5) { - puVar7 = (undefined4 *)__cxa_allocate_exception(4); - *puVar7 = 0xd; - goto LAB_0809079e; - } - } - local_2c = (Object)Con->ObjectID; - uVar5 = GetObjectCreatureID(&local_2c); - Object::getObjectType(&local_2c); - bVar3 = ObjectType::getFlag((ObjectType *)&local_2c,CLOTHES); - if (bVar3) { - Object::getObjectType(&local_2c); - uVar6 = ObjectType::getAttribute((ObjectType *)&local_2c,BODYPOSITION); - if ((uVar6 == 0) && (uVar1 < 2)) { - uVar9 = 5; - uVar4 = uVar5; - GetBodyObject((ulong)&local_2c,uVar5); - bVar3 = false; - local_3c = NONE.ObjectID; - local_4c[0].ObjectID = NONE.ObjectID; - if ((local_2c.ObjectID != NONE.ObjectID) && - (uStack_5c = Obj->ObjectID, local_4c[0].ObjectID = uStack_5c, - local_2c.ObjectID != uStack_5c)) { - bVar3 = true; - } - if (!bVar3) { - uVar9 = 6; - GetBodyObject((ulong)local_4c,uVar5); - OVar2.ObjectID = local_4c[0].ObjectID; - bVar3 = false; - local_2c.ObjectID = local_4c[0].ObjectID; - bVar8 = local_4c[0].ObjectID != NONE.ObjectID; - uStack_5c = NONE.ObjectID; - local_4c[0].ObjectID = NONE.ObjectID; - if ((bVar8) && - (local_4c[0] = (Object)Obj->ObjectID, local_3c = local_4c[0].ObjectID, - OVar2.ObjectID != local_4c[0].ObjectID)) { - bVar3 = true; - } - uVar4 = uVar5; - if (!bVar3) { - return; - } - } - puVar7 = (undefined4 *)__cxa_allocate_exception(4,uVar4,uVar9); - *puVar7 = 0xe; - goto LAB_0809079e; - } - } - uVar6 = uVar5; - GetBodyObject((ulong)&stack0xffffffa4,uVar5); - local_4c[0].ObjectID = NONE.ObjectID; - local_3c = NONE.ObjectID; - if (uStack_5c == NONE.ObjectID) { - if (uVar1 < 2) { - local_68 = 5; - do { - GetBodyObject((ulong)&stack0xffffffa4,uVar5); - local_4c[0].ObjectID = NONE.ObjectID; - if (uStack_5c != NONE.ObjectID) { - Object::getObjectType(local_4c); - bVar3 = ObjectType::getFlag((ObjectType *)local_4c,CLOTHES); - if (bVar3) { - Object::getObjectType(local_4c); - uVar4 = ObjectType::getAttribute((ObjectType *)local_4c,BODYPOSITION); - if (uVar4 == 0) { - puVar7 = (undefined4 *)__cxa_allocate_exception(4); - *puVar7 = 0xf; - goto LAB_0809079e; - } - } - Object::getObjectType(local_4c); - bVar3 = ObjectType::getFlag((ObjectType *)local_4c,WEAPON); - if (!bVar3) { - Object::getObjectType(local_4c); - bVar3 = ObjectType::getFlag((ObjectType *)local_4c,THROW); - if (!bVar3) { - Object::getObjectType(local_4c); - bVar3 = ObjectType::getFlag((ObjectType *)local_4c,BOW); - if (!bVar3) { - Object::getObjectType(local_4c); - bVar3 = ObjectType::getFlag((ObjectType *)local_4c,WAND); - if (!bVar3) goto LAB_080906c2; - } - } - } - Object::getObjectType(local_4c); - bVar3 = ObjectType::getFlag((ObjectType *)local_4c,WEAPON); - if (!bVar3) { - Object::getObjectType(local_4c); - bVar3 = ObjectType::getFlag((ObjectType *)local_4c,THROW); - if (!bVar3) { - Object::getObjectType(local_4c); - bVar3 = ObjectType::getFlag((ObjectType *)local_4c,BOW); - if (!bVar3) { - Object::getObjectType(local_4c); - bVar3 = ObjectType::getFlag((ObjectType *)local_4c,WAND); - if (!bVar3) goto LAB_080906c2; - } - } - } - if ((Split) || - (local_4c[0] = (Object)Obj->ObjectID, local_3c = local_4c[0].ObjectID, - uStack_5c != local_4c[0].ObjectID)) { - puVar7 = (undefined4 *)__cxa_allocate_exception(4); - *puVar7 = 0x10; - goto LAB_0809079e; - } - } -LAB_080906c2: - local_68 = local_68 + 1; - } while (local_68 < 7); - } - return; - } - puVar7 = (undefined4 *)__cxa_allocate_exception(4,uVar6,uVar4); - *puVar7 = 4; -LAB_0809079e: - // WARNING: Subroutine does not return - __cxa_throw(puVar7,&RESULT::typeinfo,0); -} - - - void CheckInventoryPlace(ObjectType *Type,Object *Con,Object *OldObj) { @@ -43304,268 +43083,6 @@ void __static_initialization_and_destruction_0(int __initialize_p,int __priority return; } -// DWARF original prototype: void Move(TCreature * this, Object * Obj, int zx, int zy, int zz, uchar -// Count) - -void __thiscall TCreature::Move(TCreature *this,Object *Obj,int zx,int zy,int zz,uchar Count) - -{ - bool bVar1; - bool bVar2; - ulong uVar3; - undefined4 *puVar4; - int *piVar5; - int Delay; - uint Count_00; - Object *Obj_00; - Object *pOVar6; - int iVar7; - int local_a0; - int b_1; - int b; - int iStack_94; - uchar Count_local; - int local_90; - Object local_8c [4]; - Object local_7c [4]; - Object local_6c; - Object DestCon; - Object local_5c; - Object DestObj; - Object local_4c [4]; - Object local_3c [4]; - Object local_2c; - Object Dest; - - b._3_1_ = Count; - // try { // try from 080bf7d5 to 080bfb3a has its CatchHandler @ 080c01e0 - bVar1 = Object::exists(Obj); - if (bVar1) { - local_2c.ObjectID = (this->CrObject).ObjectID; - if (Obj->ObjectID == local_2c.ObjectID) { - Go(this,zx,zy,zz); - return; - } - Object::getObjectType(&local_2c); - if (local_2c.ObjectID == 99) { - TCombat::DelayAttack(&this->Combat,2000); - } - Object::getObjectType(&local_2c); - bVar1 = ObjectType::getFlag((ObjectType *)&local_2c,CUMULATIVE); - // try { // try from 080bfff5 to 080c0037 has its CatchHandler @ 080c01e0 - if ((bVar1) && (uVar3 = Object::getAttribute(Obj,AMOUNT), uVar3 < Count)) { - uVar3 = Object::getAttribute(Obj,AMOUNT); - b._3_1_ = (byte)uVar3; - } - if (zx == 0xffff) { - if (zy == 0) { - b_1 = 1; - iVar7 = b_1; - do { - b_1 = iVar7; - local_6c = (Object)Obj->ObjectID; - // try { // try from 080bfb73 to 080bfb94 has its CatchHandler @ 080c003d - GetBodyContainer((ulong)&local_5c,this->ID); - CheckInventoryDestination(&local_6c,&local_5c,false); - if ((1 < b_1 - 5U) && (b_1 != 10)) break; - iVar7 = b_1 + 1; - } while (b_1 + 1 < 0xb); - zy = b_1; - if (b_1 == 0) { - local_a0 = 1; - do { - pOVar6 = (Object *)this->ID; - iVar7 = local_a0; - // try { // try from 080bfbe3 to 080bfc4b has its CatchHandler @ 080c01e0 - GetBodyObject((ulong)&local_6c,(int)pOVar6); - local_5c.ObjectID = ::NONE.ObjectID; - if (local_6c.ObjectID != ::NONE.ObjectID) { - Object::getObjectType(&local_5c); - pOVar6 = (Object *)0x4; - bVar1 = ObjectType::getFlag((ObjectType *)&local_5c,CONTAINER); - if (bVar1) { - pOVar6 = &local_5c; - local_5c.ObjectID = local_6c.ObjectID; - local_4c[0] = (Object)Obj->ObjectID; - // try { // try from 080bffcb to 080bffcf has its CatchHandler @ 080c0067 - CheckContainerDestination(local_4c,pOVar6); - b_1 = local_a0; - } - } - local_a0 = local_a0 + 1; - } while (local_a0 < 0xb); - zy = b_1; - if (b_1 == 0) { - puVar4 = (undefined4 *)__cxa_allocate_exception(4,pOVar6,iVar7); - *puVar4 = 4; - goto LAB_080bfb23; - } - } - } - if (((0 < zy) && (0x34 < zy - 0xbU)) && (zy < 0x50)) { - pOVar6 = &local_6c; - Obj_00 = (Object *)this->ID; - GetBodyContainer((ulong)pOVar6,(int)Obj_00); - local_5c.ObjectID = ::NONE.ObjectID; - if (zy < 0x40) { - Obj_00 = (Object *)this->ID; - GetBodyObject((ulong)local_3c,(int)Obj_00); - local_5c.ObjectID = local_3c[0].ObjectID; - } - else { - if (zz < 0xfe) { - ObjectType::setTypeID((ObjectType *)&local_2c,0); - Obj_00 = (Object *)this->ID; - GetObject((ulong)local_3c,(int)Obj_00,0xffff,zy,zz,(ObjectType *)zz); - local_5c.ObjectID = local_3c[0].ObjectID; - } - if (zz == 0xfe) { - local_4c[0].ObjectID = ::NONE.ObjectID; - if (local_6c.ObjectID == ::NONE.ObjectID) goto LAB_080bfeb5; - Object::getContainer(local_3c); - local_6c.ObjectID = local_3c[0].ObjectID; - Obj_00 = pOVar6; - } - } - bVar1 = false; - if (local_5c.ObjectID != ::NONE.ObjectID) { - local_4c[0].ObjectID = ::NONE.ObjectID; - local_3c[0].ObjectID = ::NONE.ObjectID; - Object::getObjectType(local_3c); - Obj_00 = (Object *)0x4; - bVar1 = ObjectType::getFlag((ObjectType *)local_3c,CONTAINER); - } - if (bVar1) { - local_6c.ObjectID = local_5c.ObjectID; - local_5c.ObjectID = ::NONE.ObjectID; - local_2c.ObjectID = ::NONE.ObjectID; - } - bVar1 = false; - local_4c[0].ObjectID = ::NONE.ObjectID; - local_3c[0].ObjectID = ::NONE.ObjectID; - if (local_5c.ObjectID != ::NONE.ObjectID) { - Object::getObjectType(local_3c); - Obj_00 = (Object *)0x6; - bVar2 = ObjectType::getFlag((ObjectType *)local_3c,CUMULATIVE); - if (bVar2) { - Object::getObjectType(local_3c); - Obj_00 = &local_5c; - Object::getObjectType(&local_2c); - if (local_3c[0].ObjectID == local_2c.ObjectID) { - bVar1 = true; - } - } - } - if (bVar1) { - Count_00 = (uint)b._3_1_; - Obj_00 = (Object *)0x2; - // try { // try from 080bfd46 to 080bfd4a has its CatchHandler @ 080c01e0 - uVar3 = Object::getAttribute(&local_5c,AMOUNT); - if (100 < uVar3 + Count_00) { - Obj_00 = (Object *)0x2; - // try { // try from 080bfdd1 to 080bffa7 has its CatchHandler @ 080c01e0 - uVar3 = Object::getAttribute(&local_5c,AMOUNT); - Count_00 = 100 - uVar3; - } - if (0 < (int)Count_00) { - Obj_00 = local_8c; - local_2c.ObjectID = ::NONE.ObjectID; - local_7c[0].ObjectID = local_5c.ObjectID; - local_8c[0] = (Object)Obj->ObjectID; - // try { // try from 080bfd98 to 080bfd9c has its CatchHandler @ 080c0082 - Merge(this->ID,Obj_00,local_7c,Count_00,&local_2c); - b._3_1_ = b._3_1_ - (char)Count_00; - if (b._3_1_ == 0) { - return; - } - } - local_7c[0] = (Object)::NONE.ObjectID; - local_5c.ObjectID = local_7c[0].ObjectID; - } - local_8c[0].ObjectID = ::NONE.ObjectID; - if (local_6c.ObjectID != ::NONE.ObjectID) { - local_7c[0].ObjectID = local_6c.ObjectID; - local_8c[0].ObjectID = local_5c.ObjectID; - local_4c[0] = (Object)Obj->ObjectID; - // try { // try from 080bfd13 to 080bfd17 has its CatchHandler @ 080c00b2 - ::Move(this->ID,local_4c,local_7c,(uint)b._3_1_,false,local_8c); - return; - } - puVar4 = (undefined4 *)__cxa_allocate_exception(4,Obj_00); - *puVar4 = 5; - goto LAB_080bfb23; - } - error(&DAT_08106e00,zy); - } - else { - GetMapContainer((int)&local_2c,zx,zy); - bVar1 = Object::exists(&local_2c); - if (bVar1) { - Object::getObjectType(local_3c); - bVar1 = ObjectType::getFlag((ObjectType *)local_3c,HANG); - if (bVar1) { - bVar1 = false; - bVar2 = CoordinateFlag(); - if ((bVar2) || (bVar2 = CoordinateFlag(), bVar2)) { - bVar1 = true; - } - if (bVar1) { - local_3c[0].ObjectID = local_2c.ObjectID; - bVar1 = ObjectInRange(this->ID,local_3c,1); - if (!bVar1) { - bVar1 = ToDoClear(this); - if ((bVar1) && (this->Type == PLAYER)) { - SendSnapback(this->Connection); - } - local_4c[0] = (Object)Obj->ObjectID; - uVar3 = GetObjectCreatureID(local_4c); - if (uVar3 != this->ID) { - local_5c = (Object)Obj->ObjectID; - ToDoMove(this,&local_5c,0xffff,0,0,'\x01'); - } - ToDoGo(this,zx,zy,zz,false,0x7fffffff); - local_5c = (Object)Obj->ObjectID; - ToDoMove(this,&local_5c,zx,zy,zz,'\x01'); - if (this->NrToDo == 0) { - return; - } - this->LockToDo = true; - this->ActToDo = 0; - local_90 = CalculateDelay(this); - iStack_94 = 1; - piVar5 = &stack0xffffff6c; - if (0 < local_90) { - piVar5 = &local_90; - } - iVar7 = *piVar5; - priority_queue<>::insert(&ToDoQueue); - this->NextWakeup = iVar7 + ServerMilliseconds; - return; - } - } - } - local_5c.ObjectID = ::NONE.ObjectID; - local_4c[0].ObjectID = local_2c.ObjectID; - local_6c = (Object)Obj->ObjectID; - ::Move(this->ID,&local_6c,local_4c,(uint)b._3_1_,false,&local_5c); - return; - } - } - puVar4 = (undefined4 *)__cxa_allocate_exception(4); - *puVar4 = 0xffffffff; - } - else { -LAB_080bfeb5: - puVar4 = (undefined4 *)__cxa_allocate_exception(4); - *puVar4 = 1; - } -LAB_080bfb23: - // WARNING: Subroutine does not return - __cxa_throw(puVar4,&RESULT::typeinfo,0); -} - - - // DWARF original prototype: void Trade(TCreature * this, Object * Obj, ulong PartnerID) void __thiscall TCreature::Trade(TCreature *this,Object *Obj,ulong PartnerID) -- cgit v1.2.3