Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void create_havok_world(char *param_1)
- {
- COLLISION_MAPPING *pCVar1;
- DYNAMIC_PHYSICS_SYSTEM *pDVar2;
- void *pvVar3;
- int iVar4;
- undefined *puVar5;
- undefined8 uVar6;
- undefined8 uVar7;
- uint uVar8;
- undefined4 uVar9;
- size_t sVar10;
- WEIGHTED_COLLISION_MANAGER *this;
- undefined8 *puVar11;
- void *pvVar12;
- hkpWorld *phVar13;
- long *plVar14;
- undefined4 *puVar15;
- long lVar16;
- ulong uVar17;
- hkpPhysicsSystem *phVar18;
- hkpWorldCinfo *this_00;
- int iVar19;
- hkpWorldObject *this_01;
- hkpPhysicsSystem **pphVar20;
- long lVar21;
- uint local_98c;
- uint local_988 [2];
- ulong local_980;
- undefined8 uStack2424;
- undefined8 uStack2416;
- undefined8 uStack2408;
- char acStack2128 [2000];
- long local_80;
- local_80 = *(long *)__got::___stack_chk_guard;
- __stubs::_bzero(acStack2128,2000);
- _macdoze_sprintf(acStack2128,"%sCOLLISION.MAP");
- CA::FileIn::FileIn((FileIn *)&local_980,acStack2128,true);
- local_988[0] = 0;
- CA::FileIn::read((FileIn *)&local_980,local_988,4);
- local_98c = 0;
- CA::FileIn::read((FileIn *)&local_980,&local_98c,4);
- DAT_102538a50 = local_98c;
- DAT_102538b20 = local_98c + 3000;
- if (DAT_102538b20 != 0) {
- uVar17 = (ulong)DAT_102538b20;
- sVar10 = (uVar17 + (ulong)DAT_102538b20 * 2) * 0x10;
- if (CA::ca_malloc_aligned_hook == (code *)0x0) {
- DAT_102538b18 = (void *)__aligned_malloc(sVar10,8);
- }
- else {
- DAT_102538b18 = (void *)(*CA::ca_malloc_aligned_hook)(sVar10,8);
- }
- puVar15 = (undefined4 *)((long)DAT_102538b18 + 0x10);
- do {
- *(undefined8 *)(puVar15 + -2) = 0;
- *(undefined8 *)(puVar15 + -4) = 0xffffffff00000000;
- *puVar15 = 0;
- *(undefined8 *)(puVar15 + 1) = 0xffffffffffffffff;
- *(undefined8 *)(puVar15 + 5) = 0;
- *(undefined8 *)(puVar15 + 3) = 0;
- puVar15[7] = 0;
- puVar15 = puVar15 + 0xc;
- uVar17 = uVar17 - 1;
- } while (uVar17 != 0);
- }
- CA::FileIn::read((FileIn *)&local_980,DAT_102538b18,local_988[0]);
- CA::FileIn::_FileIn((FileIn *)&local_980);
- _macdoze_sprintf(acStack2128,"%sPHYSICS.MAP");
- CA::FileIn::FileIn((FileIn *)&local_980,acStack2128,true);
- local_988[0] = 0;
- CA::FileIn::read((FileIn *)&local_980,local_988,4);
- local_98c = 0;
- CA::FileIn::read((FileIn *)&local_980,&local_98c,4);
- uVar17 = (ulong)local_98c;
- if (local_98c != 0) {
- DAT_102538b30 = local_98c;
- if (CA::ca_malloc_aligned_hook == (code *)0x0) {
- DAT_102538b28 = (void *)__aligned_malloc(uVar17 * 0x50,8);
- }
- else {
- DAT_102538b28 = (void *)(*CA::ca_malloc_aligned_hook)(uVar17 * 0x50,8);
- }
- lVar16 = 0;
- do {
- puVar15 = (undefined4 *)((long)DAT_102538b28 + lVar16);
- *puVar15 = 0xffffffff;
- *(undefined8 *)(puVar15 + 3) = 0;
- *(undefined8 *)(puVar15 + 1) = 0;
- *(undefined8 *)(puVar15 + 5) = 0x3f80000000000000;
- *(undefined8 *)(puVar15 + 9) = 0;
- *(undefined8 *)(puVar15 + 7) = 0;
- puVar15[0xb] = 0x3f800000;
- *(undefined8 *)(puVar15 + 0xc) = 0;
- *(undefined8 *)(puVar15 + 0xe) = 0;
- *(undefined8 *)(puVar15 + 0x10) = 0x3f800000;
- lVar16 = lVar16 + 0x50;
- *(undefined8 *)(puVar15 + 0x12) = 0;
- uVar17 = uVar17 - 1;
- } while (uVar17 != 0);
- CA::FileIn::read((FileIn *)&local_980,DAT_102538b28,local_988[0]);
- }
- CA::FileIn::_FileIn((FileIn *)&local_980);
- if (DAT_102538b20 != 0) {
- lVar16 = 0;
- uVar17 = 0;
- do {
- pCVar1 = (COLLISION_MAPPING *)((long)DAT_102538b18 + lVar16);
- local_980 = local_980 & 0xffffffff00000000 | (ulong)*(uint *)(pCVar1 + 8);
- local_988[0] = *(uint *)(pCVar1 + 0x10);
- uVar8 = CATHODE::ResourceRegistry::find_resource_index
- (CATHODE::ResourceRegistry::m_instance,(ShortGuid *)&local_980,
- (ShortGuid *)local_988);
- if (uVar8 != 0xffffffff) {
- CATHODE::ResourceDatabase::add_resource_COLLISION_MAPPING_
- ((ResourceDatabase *)CATHODE::ResourceRegistry::m_instance,uVar8,pCVar1);
- *(undefined4 *)(pCVar1 + 8) = 0;
- }
- uVar17 = uVar17 + 1;
- lVar16 = lVar16 + 0x30;
- } while (uVar17 < DAT_102538b20);
- }
- if (DAT_102538b30 != 0) {
- lVar16 = 0;
- uVar17 = 0;
- do {
- pDVar2 = (DYNAMIC_PHYSICS_SYSTEM *)((long)DAT_102538b28 + lVar16);
- local_980 = local_980 & 0xffffffff00000000 | (ulong)*(uint *)(pDVar2 + 8);
- local_988[0] = *(uint *)(pDVar2 + 0xc);
- uVar8 = CATHODE::ResourceRegistry::find_resource_index
- (CATHODE::ResourceRegistry::m_instance,(ShortGuid *)&local_980,
- (ShortGuid *)local_988);
- if (uVar8 != 0xffffffff) {
- CATHODE::ResourceDatabase::add_resource_DYNAMIC_PHYSICS_SYSTEM_
- ((ResourceDatabase *)CATHODE::ResourceRegistry::m_instance,uVar8,pDVar2);
- }
- uVar17 = uVar17 + 1;
- lVar16 = lVar16 + 0x50;
- } while (uVar17 < DAT_102538b30);
- }
- _macdoze_sprintf(acStack2128,"%sCOLLISION.BIN");
- this = (WEIGHTED_COLLISION_MANAGER *)WEIGHTED_COLLISION_MANAGER::get_instance();
- WEIGHTED_COLLISION_MANAGER::initialise(this,acStack2128);
- _macdoze_sprintf(acStack2128,"data\\material_data\\%s");
- load_physical_materials_database_from_xml(acStack2128);
- _macdoze_sprintf(acStack2128,"%s%s%s");
- DAT_102538a98 = read_packfile(acStack2128,(void **)&_systemsData,"hkpPhysicsData");
- _macdoze_sprintf(acStack2128,"%s%s%s");
- DAT_102538a90 = read_packfile(acStack2128,(void **)&_physicsData,"hkpPhysicsData");
- lVar16 = _physicsData;
- if (0 < *(int *)(_physicsData + 0x28)) {
- lVar21 = 0;
- do {
- phVar18 = *(hkpPhysicsSystem **)(*(long *)(lVar16 + 0x20) + lVar21 * 8);
- if (0 < *(int *)(phVar18 + 0x20)) {
- iVar19 = 0;
- LAB_1004d0a54:
- this_01 = *(hkpWorldObject **)(*(long *)(phVar18 + 0x18) + (long)iVar19 * 8);
- switch(*(uint *)(this_01 + 0x4c) & 0x1f) {
- case 0:
- hkpWorldObject::addProperty(this_01,0x1130,0x44000080);
- _compoundShape = *(undefined8 *)(this_01 + 0x20);
- hkpRigidBody::setRestitution((hkpRigidBody *)this_01,1.0);
- hkpRigidBody::setFriction((hkpRigidBody *)this_01,1.0);
- pvVar12 = __stubs::_pthread_getspecific(hkMemoryRouter::s_memoryRouter);
- pvVar3 = hkMemoryRouter::s_fallbackRouter;
- if (pvVar12 != (void *)0x0) {
- pvVar3 = pvVar12;
- }
- puVar11 = (undefined8 *)
- (**(code **)(**(long **)((long)pvVar3 + 0x58) + 0x10))
- (*(long **)((long)pvVar3 + 0x58),0x30);
- puVar11[3] = 0x3f0000003c23d70a;
- puVar11[2] = 0x3e4ccccd3e4ccccd;
- puVar11[4] = 0x3f0000003dcccccd;
- *(undefined4 *)(puVar11 + 5) = 0;
- *puVar11 = &PTR_getExactType_1021a8a38;
- puVar11[1] = this_01;
- hkpEntity::addContactListener((hkpEntity *)this_01,(hkpContactListener *)puVar11);
- *(undefined2 *)(this_01 + 0xfe) = 1;
- this_01[0x4a] = (hkpWorldObject)0x0;
- break;
- case 9:
- hkpWorldObject::addProperty(this_01,0x1130,0x44800000);
- _ballisticShape = *(long *)(this_01 + 0x20);
- pvVar12 = __stubs::_pthread_getspecific(hkMemoryRouter::s_memoryRouter);
- pvVar3 = hkMemoryRouter::s_fallbackRouter;
- if (pvVar12 != (void *)0x0) {
- pvVar3 = pvVar12;
- }
- puVar11 = (undefined8 *)
- (**(code **)(**(long **)((long)pvVar3 + 0x58) + 0x10))
- (*(long **)((long)pvVar3 + 0x58),0x30);
- *puVar11 = &PTR_getExactType_1021a89c0;
- puVar11[1] = this_01;
- puVar11[3] = 0x3f0000003c23d70a;
- puVar11[2] = 0x3e4ccccd3e4ccccd;
- puVar11[4] = 0x3f0000003dcccccd;
- *(undefined4 *)(puVar11 + 5) = 0;
- hkpEntity::addContactListener((hkpEntity *)this_01,(hkpContactListener *)puVar11);
- *(undefined2 *)(this_01 + 0xfe) = 1;
- this_01[0x4a] = (hkpWorldObject)0x0;
- iVar4 = *(int *)(_ballisticShape + 0x40);
- goto joined_r0x0001004d0b90;
- case 0xb:
- hkpWorldObject::addProperty(this_01,0x1130,0x44008000);
- _landscapeShape = *(long *)(this_01 + 0x20);
- uVar9 = hkpGroupFilter::calcFilterInfo(9,0,0,0);
- *(undefined4 *)(this_01 + 0x4c) = uVar9;
- pvVar12 = __stubs::_pthread_getspecific(hkMemoryRouter::s_memoryRouter);
- pvVar3 = hkMemoryRouter::s_fallbackRouter;
- if (pvVar12 != (void *)0x0) {
- pvVar3 = pvVar12;
- }
- puVar11 = (undefined8 *)
- (**(code **)(**(long **)((long)pvVar3 + 0x58) + 0x10))
- (*(long **)((long)pvVar3 + 0x58),0x30);
- *puVar11 = &PTR_getExactType_1021a89c0;
- puVar11[1] = this_01;
- puVar11[3] = 0x3f0000003c23d70a;
- puVar11[2] = 0x3e4ccccd3e4ccccd;
- puVar11[4] = 0x3f0000003dcccccd;
- *(undefined4 *)(puVar11 + 5) = 0;
- hkpEntity::addContactListener((hkpEntity *)this_01,(hkpContactListener *)puVar11);
- *(undefined2 *)(this_01 + 0xfe) = 1;
- this_01[0x4a] = (hkpWorldObject)0x0;
- iVar4 = *(int *)(_landscapeShape + 0x40);
- joined_r0x0001004d0b90:
- if (iVar4 == 0) goto LAB_1004d0bcc;
- break;
- case 0xd:
- hkpWorldObject::addProperty(this_01,0x1130,0x44008080);
- _pathShape = *(undefined8 *)(this_01 + 0x20);
- goto LAB_1004d0bcc;
- case 0x12:
- _proxyShape = *(undefined8 *)(this_01 + 0x20);
- LAB_1004d0bcc:
- hkReferencedObject::addReference((hkReferencedObject *)this_01);
- hkpPhysicsSystem::removeRigidBody(phVar18,iVar19);
- lVar16 = _physicsData;
- if (*(int *)(phVar18 + 0x20) <= iVar19) goto LAB_1004d0980;
- goto LAB_1004d0a54;
- }
- iVar19 = iVar19 + 1;
- lVar16 = _physicsData;
- if (*(int *)(phVar18 + 0x20) <= iVar19) goto LAB_1004d0980;
- goto LAB_1004d0a54;
- }
- LAB_1004d0980:
- lVar21 = lVar21 + 1;
- } while (lVar21 < *(int *)(lVar16 + 0x28));
- }
- this_00 = *(hkpWorldCinfo **)(lVar16 + 0x18);
- hkpWorldCinfo::setBroadPhaseWorldSize(this_00,1024.0);
- hkpWorldCinfo::setupSolverInfo(this_00,4);
- this_00[199] = (hkpWorldCinfo)0x0;
- *(undefined4 *)(this_00 + 0x100) = 0x80;
- this_00[0x38] = (hkpWorldCinfo)0x2;
- this_00[0xfd] = (hkpWorldCinfo)0x3;
- this_00[0x10c] = (hkpWorldCinfo)0x1;
- *(undefined4 *)(this_00 + 0x60) = 0x3dcccccd;
- this_00[0x94] = (hkpWorldCinfo)0x0;
- *(undefined4 *)(this_00 + 0x80) = 0x3d088889;
- *(undefined8 *)(this_00 + 0x28) = 0;
- *(undefined8 *)(this_00 + 0x20) = 0xc0fb22d200000000;
- uVar7 = hkpBroadPhase::s_createTreeBroadPhaseFunction;
- uVar6 = hkpBroadPhase::s_createSweepAndPruneBroadPhaseFunction;
- uVar17 = cRead_8(fpcr);
- cWrite_8(fpcr,uVar17 | 0x1000000);
- hkpBroadPhase::s_createSweepAndPruneBroadPhaseFunction = hk3AxisSweep32CreateBroadPhase;
- hkpBroadPhase::s_createTreeBroadPhaseFunction = hkpTreeBroadPhase32_createTreeBroadPhase;
- pvVar12 = __stubs::_pthread_getspecific(hkMemoryRouter::s_memoryRouter);
- pvVar3 = hkMemoryRouter::s_fallbackRouter;
- if (pvVar12 != (void *)0x0) {
- pvVar3 = pvVar12;
- }
- phVar13 = (hkpWorld *)
- (**(code **)(**(long **)((long)pvVar3 + 0x58) + 0x10))
- (*(long **)((long)pvVar3 + 0x58),0x440);
- hkpWorld::hkpWorld(phVar13,*(hkpWorldCinfo **)(_physicsData + 0x18),0x133ece8);
- _world = phVar13;
- hkpWorld::setMemoryWatchDog
- (phVar13,(hkWorldMemoryAvailableWatchDog *)&_havok_world_memory_watchdog);
- phVar13 = _world;
- *(undefined8 *)(_world + 0x354) = 0x461c4000461c4000;
- *(undefined8 *)(phVar13 + 0x36c) = 0x358637be358637be;
- *(undefined8 *)(phVar13 + 0x364) = 0x358637be358637be;
- hkpWorld::registerWithJobQueue(_jobQueue);
- phVar13 = _world;
- pvVar12 = __stubs::_pthread_getspecific(hkMemoryRouter::s_memoryRouter);
- pvVar3 = hkMemoryRouter::s_fallbackRouter;
- if (pvVar12 != (void *)0x0) {
- pvVar3 = pvVar12;
- }
- plVar14 = (long *)(**(code **)(**(long **)((long)pvVar3 + 0x58) + 0x10))
- (*(long **)((long)pvVar3 + 0x58),0x80);
- hkpBroadPhaseBorder::hkpBroadPhaseBorder((hkpBroadPhaseBorder *)plVar14,_world,0,0);
- puVar5 = PTR_vtable_101f12888;
- *plVar14 = (long)(PTR_vtable_101f12888 + 0x10);
- plVar14[3] = (long)(puVar5 + 0x70);
- plVar14[4] = (long)(puVar5 + 0xa8);
- plVar14[5] = (long)(puVar5 + 0xe0);
- hkpWorld::setBroadPhaseBorder(phVar13,(hkpBroadPhaseBorder *)plVar14);
- if (DAT_102538b30 != 0) {
- uVar17 = 0;
- do {
- pvVar3 = DAT_102538b28;
- DYNAMIC_PHYSICS_SYSTEM::create_system
- ((DYNAMIC_PHYSICS_SYSTEM *)((long)DAT_102538b28 + uVar17 * 0x50));
- pphVar20 = (hkpPhysicsSystem **)((long)pvVar3 + uVar17 * 0x50 + 0x48);
- phVar18 = *pphVar20;
- if (phVar18 != (hkpPhysicsSystem *)0x0) {
- hkpWorld::addPhysicsSystem(_world,phVar18);
- phVar18 = *pphVar20;
- if (0 < *(int *)(phVar18 + 0x20)) {
- lVar16 = 0;
- do {
- hkpEntity::addContactListener
- (*(hkpEntity **)(*(long *)(phVar18 + 0x18) + lVar16 * 8),
- ImpactListener::m_instance);
- lVar16 = lVar16 + 1;
- } while (lVar16 < *(int *)(phVar18 + 0x20));
- }
- }
- uVar17 = uVar17 + 1;
- } while (uVar17 < DAT_102538b30);
- }
- _macdoze_sprintf(acStack2128,"%sENVIRONMENT_ANIMATION.DAT");
- EnvironmentAnimationSystem::initialise
- (*(EnvironmentAnimationSystem **)(_game_globals + 0xf8),acStack2128);
- uStack2424 = 0;
- local_980 = 0;
- uStack2408 = 0;
- uStack2416 = 0;
- pvVar12 = __stubs::_pthread_getspecific(hkMemoryRouter::s_memoryRouter);
- pvVar3 = hkMemoryRouter::s_fallbackRouter;
- if (pvVar12 != (void *)0x0) {
- pvVar3 = pvVar12;
- }
- plVar14 = (long *)(**(code **)(**(long **)((long)pvVar3 + 0x58) + 0x10))
- (*(long **)((long)pvVar3 + 0x58),0x130);
- hkpAabbPhantom::hkpAabbPhantom((hkpAabbPhantom *)plVar14,(hkAabb *)&local_980,0);
- _aabbPhantom = plVar14;
- (**(code **)(*plVar14 + 0x60))(plVar14);
- hkpWorld::addPhantom(_world,(hkpPhantom *)_aabbPhantom);
- hkpAgentRegisterUtil::registerAllAgents(*(hkpCollisionDispatcher **)(_world + 200));
- if (0 < *(int *)(_physicsData + 0x28)) {
- lVar16 = 0;
- do {
- hkpWorld::addPhysicsSystem
- (_world,*(hkpPhysicsSystem **)(*(long *)(_physicsData + 0x20) + lVar16 * 8));
- lVar16 = lVar16 + 1;
- } while (lVar16 < *(int *)(_physicsData + 0x28));
- }
- hkpWorld::updateCollisionFilterOnWorld(_world,0,1);
- if (*(long *)__got::___stack_chk_guard == local_80) {
- hkpBroadPhase::s_createSweepAndPruneBroadPhaseFunction = (code *)uVar6;
- hkpBroadPhase::s_createTreeBroadPhaseFunction = (code *)uVar7;
- return;
- }
- hkpBroadPhase::s_createSweepAndPruneBroadPhaseFunction = (code *)uVar6;
- hkpBroadPhase::s_createTreeBroadPhaseFunction = (code *)uVar7;
- // WARNING: Subroutine does not return
- __stubs::___stack_chk_fail();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement