Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool __thiscall
- CATHODE::ResourceDatabase::add_resource_COLLISION_MAPPING_
- (ResourceDatabase *this,uint param_1,COLLISION_MAPPING *param_2)
- {
- int iVar1;
- char cVar2;
- bool bVar3;
- MemoryPool *pMVar4;
- code *UNRECOVERED_JUMPTABLE;
- undefined uVar5;
- long *plVar6;
- long lVar7;
- undefined8 *puVar8;
- long *plVar9;
- long *local_58;
- pMVar4 = MemoryManager::m_instance;
- plVar6 = (long *)MemoryPool::pr_allocate(MemoryManager::m_instance,0x10);
- if (plVar6 == (long *)0x0) {
- // WARNING: Could not recover jumptable at 0x0001004e5ec0. Too many branches
- // WARNING: Treating indirect jump as call
- UNRECOVERED_JUMPTABLE = (code *)SoftwareBreakpoint(1,0x1004e5ec4);
- uVar5 = (*UNRECOVERED_JUMPTABLE)();
- return (bool)uVar5;
- }
- lVar7 = (**(code **)(*plVar6 + 0x18))();
- (**(code **)*plVar6)(plVar6);
- plVar9 = plVar6 + 1;
- *(int *)plVar9 = 0;
- *(undefined4 *)((long)plVar6 + 0xc) = 1;
- *plVar6 = (long)(PTR_vtable_101f166d8 + 0x10);
- plVar6[2] = lVar7;
- MemoryTracker::set_owner
- ((MemoryTracker *)&MemoryAllocation<CATHODE::CONTAINER_FOR_COLLISION_MAPPING>::m_tracker
- ,pMVar4);
- do {
- cVar2 = '\x01';
- bVar3 = (bool)ExclusiveMonitorPass(plVar9,0x10);
- if (bVar3) {
- *(int *)plVar9 = *(int *)plVar9 + 1;
- cVar2 = ExclusiveMonitorsStatus();
- }
- } while (cVar2 != '\0');
- puVar8 = (undefined8 *)plVar6[2];
- *puVar8 = &PTR__CONTAINER_FOR_TRAVERSAL_SEGMENT_1021a7fd0;
- puVar8[1] = param_2;
- do {
- cVar2 = '\x01';
- bVar3 = (bool)ExclusiveMonitorPass(plVar9,0x10);
- if (bVar3) {
- *(int *)plVar9 = *(int *)plVar9 + 1;
- cVar2 = ExclusiveMonitorsStatus();
- }
- } while (cVar2 != '\0');
- local_58 = plVar6;
- if (*(int *)plVar9 == 1) {
- (***(code ***)plVar6[2])();
- }
- do {
- iVar1 = *(int *)plVar9;
- cVar2 = '\x01';
- bVar3 = (bool)ExclusiveMonitorPass(plVar9,0x10);
- if (bVar3) {
- *(int *)plVar9 = iVar1 + -1;
- cVar2 = ExclusiveMonitorsStatus();
- }
- } while (cVar2 != '\0');
- if (iVar1 + -1 == 0) {
- MemoryAllocationBase::release((MemoryAllocationBase *)plVar6);
- }
- uVar5 = add_resource_ptr(this,param_1,(MemoryPtr *)&local_58);
- if (local_58 != (long *)0x0) {
- if (*(int *)(local_58 + 1) == 1) {
- (***(code ***)local_58[2])();
- }
- plVar6 = local_58 + 1;
- do {
- iVar1 = *(int *)plVar6;
- cVar2 = '\x01';
- bVar3 = (bool)ExclusiveMonitorPass(plVar6,0x10);
- if (bVar3) {
- *(int *)plVar6 = iVar1 + -1;
- cVar2 = ExclusiveMonitorsStatus();
- }
- } while (cVar2 != '\0');
- if (iVar1 + -1 == 0) {
- MemoryAllocationBase::release((MemoryAllocationBase *)local_58);
- }
- }
- return (bool)uVar5;
- }
Add Comment
Please, Sign In to add comment