10-16-2020, 16:27
I may have found a potential fix but I need some help.
After having a dig into the Creature Isle Mac files, I found the following function: Living::MoveToPos((void))
Here's the IDB code for that function in CI:
After some debugging in game and forcing villagers to use many other variations of MoveToPos, it seems that each variation inherits from the code above. Even animals don't ignore altitude. I even tried forcing villagers to use the football variation of MoveToPos, but it still checked for altitude.
If the MobileWallHug::MoveTo((void)) function can be skipped, this may avoid checking altitude and make the villager just go to the position instead, which is what we want.
The only problem is, I'm struggling to find this function within the Creature Isle .exe equivalent. Even finding it within the more documented Black & White .idb is pretty tough. Any ideas how I could find this function in CreatureIsle.exe?
This pathing issue ruins playthroughs of Creature Isle, particularly my mod as it uses the Creature Isle engine as a base. Would really appreciate some help with this!
After having a dig into the Creature Isle Mac files, I found the following function: Living::MoveToPos((void))
Here's the IDB code for that function in CI:
Code:
seg000:000509D0 # Living::MoveToPos((void))
seg000:000509D0 .globl .MoveToPos__6LivingFv
seg000:000509D0 .MoveToPos__6LivingFv: # CODE XREF: Animal::MoveToPos((void))+C↓p
seg000:000509D0 # 00194574↓p ...
seg000:000509D0 mflr r0
seg000:000509D4 stw r31, -4(sp)
seg000:000509D8 stw r30, -8(sp)
seg000:000509DC mr r30, r3
seg000:000509E0 stw r0, 8(sp)
seg000:000509E4 stwu sp, -0x40(sp)
seg000:000509E8 lbz r0, 0x24(r3)
seg000:000509EC extrwi. r0, r0, 1,26
seg000:000509F0 beq loc_509FC
seg000:000509F4 li r3, 0
seg000:000509F8 b loc_50A28
seg000:000509FC # ---------------------------------------------------------------------------
seg000:000509FC
seg000:000509FC loc_509FC: # CODE XREF: Living::MoveToPos((void))+20↑j
seg000:000509FC bl .MoveTo__13MobileWallHugFv # MobileWallHug::MoveTo((void))
seg000:00050A00 mr r31, r3
seg000:00050A04 cmpwi r31, 0xA
seg000:00050A08 bne loc_50A24
seg000:00050A0C mr r3, r30
seg000:00050A10 lbz r4, 0x8D(r30)
seg000:00050A14 lwz r12, 0(r30)
seg000:00050A18 lwz r12, 0x950(r12)
seg000:00050A1C bl sub_63ABE0
seg000:00050A20 lwz rtoc, 0x14(sp)
seg000:00050A24
seg000:00050A24 loc_50A24: # CODE XREF: Living::MoveToPos((void))+38↑j
seg000:00050A24 mr r3, r31
seg000:00050A28
seg000:00050A28 loc_50A28: # CODE XREF: Living::MoveToPos((void))+28↑j
seg000:00050A28 lwz r0, 0x48(sp)
seg000:00050A2C addi sp, sp, 0x40
seg000:00050A30 mtlr r0
seg000:00050A34 lwz r31, -4(sp)
seg000:00050A38 lwz r30, -8(sp)
seg000:00050A3C blr
seg000:00050A3C # End of function Living::MoveToPos((void))
After some debugging in game and forcing villagers to use many other variations of MoveToPos, it seems that each variation inherits from the code above. Even animals don't ignore altitude. I even tried forcing villagers to use the football variation of MoveToPos, but it still checked for altitude.
If the MobileWallHug::MoveTo((void)) function can be skipped, this may avoid checking altitude and make the villager just go to the position instead, which is what we want.
The only problem is, I'm struggling to find this function within the Creature Isle .exe equivalent. Even finding it within the more documented Black & White .idb is pretty tough. Any ideas how I could find this function in CreatureIsle.exe?
This pathing issue ruins playthroughs of Creature Isle, particularly my mod as it uses the Creature Isle engine as a base. Would really appreciate some help with this!