mirror of https://github.com/zeldaret/botw.git
Merge pull request #40 from notyourav/place_mgr
ksys::map placement classes
This commit is contained in:
commit
a638e3dba1
|
@ -73822,14 +73822,14 @@
|
||||||
0x0000007100d49cb0,sub_7100D49CB0,56,
|
0x0000007100d49cb0,sub_7100D49CB0,56,
|
||||||
0x0000007100d49ce8,PlacementObj::ctor,124,_ZN4ksys3map6ObjectC1Ev!
|
0x0000007100d49ce8,PlacementObj::ctor,124,_ZN4ksys3map6ObjectC1Ev!
|
||||||
0x0000007100d49d64,PlacementObj::dtor,52,_ZN4ksys3map6ObjectD1Ev
|
0x0000007100d49d64,PlacementObj::dtor,52,_ZN4ksys3map6ObjectD1Ev
|
||||||
0x0000007100d49d98,PlacementObj::initData,380,
|
0x0000007100d49d98,PlacementObj::initData,380,_ZN4ksys3map6Object8initDataEPNS0_9MubinIterEhjPNS0_9ActorDataE!
|
||||||
0x0000007100d49f14,PlacementObj::initRevivalGameDataFlagAndMiscFlags,620,
|
0x0000007100d49f14,PlacementObj::initRevivalGameDataFlagAndMiscFlags,620,
|
||||||
0x0000007100d4a180,PlacementObj::free,120,_ZN4ksys3map6Object4freeEv
|
0x0000007100d4a180,PlacementObj::free,120,_ZN4ksys3map6Object4freeEv
|
||||||
0x0000007100d4a1f8,PlacementObj::x_8,132,
|
0x0000007100d4a1f8,PlacementObj::x_8,132,_ZN4ksys3map6Object10tryGetProcEb
|
||||||
0x0000007100d4a27c,PlacementObj::getActor_0,244,
|
0x0000007100d4a27c,PlacementObj::getActor_0,244,_ZN4ksys3map6Object11tryGetActorEb
|
||||||
0x0000007100d4a370,PlacementObj::x_10,244,
|
0x0000007100d4a370,PlacementObj::x_10,244,
|
||||||
0x0000007100d4a464,PlacementObj::getActorWithAccessor,88,_ZNK4ksys3map6Object20getActorWithAccessorERNS_3act24ActorLinkConstDataAccessE!
|
0x0000007100d4a464,PlacementObj::getActorWithAccessor,88,_ZN4ksys3map6Object20getActorWithAccessorERNS_3act24ActorLinkConstDataAccessE
|
||||||
0x0000007100d4a4bc,PlacementObj::getActor,140,_ZNK4ksys3map6Object8getActorEv
|
0x0000007100d4a4bc,PlacementObj::getActor,140,_ZN4ksys3map6Object8getActorEv
|
||||||
0x0000007100d4a548,PlacementObj::registerActor,320,_ZN4ksys3map6Object16registerBaseProcEPNS_3act8BaseProcE
|
0x0000007100d4a548,PlacementObj::registerActor,320,_ZN4ksys3map6Object16registerBaseProcEPNS_3act8BaseProcE
|
||||||
0x0000007100d4a688,PlacementObj::setActorDirect,8,_ZN4ksys3map6Object17setBaseProcDirectEPNS_3act8BaseProcE
|
0x0000007100d4a688,PlacementObj::setActorDirect,8,_ZN4ksys3map6Object17setBaseProcDirectEPNS_3act8BaseProcE
|
||||||
0x0000007100d4a690,PlacementObj::isEnemyOrNpcOrActiveOrMapPassive,84,_ZNK4ksys3map6Object32isEnemyOrNpcOrActiveOrMapPassiveEv
|
0x0000007100d4a690,PlacementObj::isEnemyOrNpcOrActiveOrMapPassive,84,_ZNK4ksys3map6Object32isEnemyOrNpcOrActiveOrMapPassiveEv
|
||||||
|
@ -73858,8 +73858,8 @@
|
||||||
0x0000007100d4c890,PlacementLinkData::getPlacementLODLinkObj,40,
|
0x0000007100d4c890,PlacementLinkData::getPlacementLODLinkObj,40,
|
||||||
0x0000007100d4c8b8,PlacementObj::getHashIdStringDebug,108,_ZNK4ksys3map6Object20getHashIdStringDebugEv
|
0x0000007100d4c8b8,PlacementObj::getHashIdStringDebug,108,_ZNK4ksys3map6Object20getHashIdStringDebugEv
|
||||||
0x0000007100d4c924,PlacementObj::getHashIdStringDebug_0,108,_ZNK4ksys3map6Object22getHashIdStringDebug_0Ev
|
0x0000007100d4c924,PlacementObj::getHashIdStringDebug_0,108,_ZNK4ksys3map6Object22getHashIdStringDebug_0Ev
|
||||||
0x0000007100d4c990,PlacementObj::unlinkActor,256,
|
0x0000007100d4c990,PlacementObj::unlinkActor,256,_ZN4ksys3map6Object10unlinkProcEb
|
||||||
0x0000007100d4ca90,PlacementObj::checkRevivalFlag,220,
|
0x0000007100d4ca90,PlacementObj::checkRevivalFlag,220,_ZNK4ksys3map6Object16checkRevivalFlagENS0_9ActorData4FlagE
|
||||||
0x0000007100d4cb6c,PlacementObj::getRails,24,_ZNK4ksys3map6Object8getRailsEv
|
0x0000007100d4cb6c,PlacementObj::getRails,24,_ZNK4ksys3map6Object8getRailsEv
|
||||||
0x0000007100d4cb84,PlacementObj::getRails_0,24,_ZNK4ksys3map6Object10getRails_0Ev
|
0x0000007100d4cb84,PlacementObj::getRails_0,24,_ZNK4ksys3map6Object10getRails_0Ev
|
||||||
0x0000007100d4cb9c,PlacementObj::allocLinkData,60,_ZN4ksys3map6Object13allocLinkDataEPN4sead4HeapE
|
0x0000007100d4cb9c,PlacementObj::allocLinkData,60,_ZN4ksys3map6Object13allocLinkDataEPN4sead4HeapE
|
||||||
|
@ -73867,19 +73867,19 @@
|
||||||
0x0000007100d4cbf8,PlacementObj::incrementLinkNum,340,_ZN4ksys3map6Object16incrementLinkNumEv
|
0x0000007100d4cbf8,PlacementObj::incrementLinkNum,340,_ZN4ksys3map6Object16incrementLinkNumEv
|
||||||
0x0000007100d4cd4c,PlacementObj::decrementLinkNum,20,_ZN4ksys3map6Object16decrementLinkNumEv
|
0x0000007100d4cd4c,PlacementObj::decrementLinkNum,20,_ZN4ksys3map6Object16decrementLinkNumEv
|
||||||
0x0000007100d4cd60,PlacementObj::initRevivalGameDataFlag,632,
|
0x0000007100d4cd60,PlacementObj::initRevivalGameDataFlag,632,
|
||||||
0x0000007100d4cfd8,PlacementObj::isRevivalGameDataFlagOn,124,
|
0x0000007100d4cfd8,PlacementObj::isRevivalGameDataFlagOn,124,_ZNK4ksys3map6Object23isRevivalGameDataFlagOnEv
|
||||||
0x0000007100d4d054,PlacementObj::setRevivalGameDataFlagValueIf,120,
|
0x0000007100d4d054,PlacementObj::setRevivalGameDataFlagValueIf,120,_ZN4ksys3map6Object21setRevivalFlagValueIfENS0_9ActorData4FlagEb
|
||||||
0x0000007100d4d0cc,PlacementObj::setRevivalGameDataFlagValue,24,
|
0x0000007100d4d0cc,PlacementObj::setRevivalGameDataFlagValue,24,_ZN4ksys3map6Object19setRevivalFlagValueEb
|
||||||
0x0000007100d4d0e4,PlacementObj::x_17_dragonCheck,876,
|
0x0000007100d4d0e4,PlacementObj::x_17_dragonCheck,876,
|
||||||
0x0000007100d4d450,PlacementObj::x_18,400,
|
0x0000007100d4d450,PlacementObj::x_18,400,_ZNK4ksys3map6Object4x_18Ev!
|
||||||
0x0000007100d4d5e0,PlacementObj::setupTargetLinks,176,
|
0x0000007100d4d5e0,PlacementObj::setupTargetLinks,176,_ZN4ksys3map6Object16setupTargetLinksEPS1_PNS0_10ObjectLinkEPN4sead4HeapE?
|
||||||
0x0000007100d4d690,PlacementObj::checkCreateOrDeleteLinkObjRevival,72,
|
0x0000007100d4d690,PlacementObj::checkCreateOrDeleteLinkObjRevival,72,_ZNK4ksys3map6Object33checkCreateOrDeleteLinkObjRevivalEv
|
||||||
0x0000007100d4d6d8,PlacementObj::shouldSkipSpawn,112,
|
0x0000007100d4d6d8,PlacementObj::shouldSkipSpawn,112,_ZNK4ksys3map6Object15shouldSkipSpawnEv
|
||||||
0x0000007100d4d748,PlacementObj::x_20_checkTraverseFlags,24,
|
0x0000007100d4d748,PlacementObj::x_20_checkTraverseFlags,24,_ZNK4ksys3map6Object18checkTraverseFlagsEv
|
||||||
0x0000007100d4d760,PlacementObj::shouldSkipSpawn_,284,
|
0x0000007100d4d760,PlacementObj::shouldSkipSpawn_,284,
|
||||||
0x0000007100d4d87c,PlacementObj::x_20,184,
|
0x0000007100d4d87c,PlacementObj::x_20,184,_ZNK4ksys3map6Object4x_20Ev!
|
||||||
0x0000007100d4d934,PlacementObj::postActorCreate,84,
|
0x0000007100d4d934,PlacementObj::postActorCreate,84,_ZN4ksys3map6Object17onBaseProcCreatedEPNS_3act8BaseProcE
|
||||||
0x0000007100d4d988,PlacementObj::spawnGenGroupActorsIfNeeded,16,
|
0x0000007100d4d988,PlacementObj::spawnGenGroupActorsIfNeeded,16,_ZN4ksys3map6Object27spawnGenGroupActorsIfNeededEPS1_
|
||||||
0x0000007100d4d998,sub_7100D4D998,288,
|
0x0000007100d4d998,sub_7100D4D998,288,
|
||||||
0x0000007100d4dab8,sub_7100D4DAB8,80,
|
0x0000007100d4dab8,sub_7100D4DAB8,80,
|
||||||
0x0000007100d4db08,sub_7100D4DB08,428,
|
0x0000007100d4db08,sub_7100D4DB08,428,
|
||||||
|
@ -73889,38 +73889,38 @@
|
||||||
0x0000007100d4dec4,PlacementObj::getUniqueName,104,_ZNK4ksys3map6Object13getUniqueNameEPPKc
|
0x0000007100d4dec4,PlacementObj::getUniqueName,104,_ZNK4ksys3map6Object13getUniqueNameEPPKc
|
||||||
0x0000007100d4df2c,PlacementObj::setTranslate,28,_ZN4ksys3map6Object12setTranslateERKN4sead7Vector3IfEE
|
0x0000007100d4df2c,PlacementObj::setTranslate,28,_ZN4ksys3map6Object12setTranslateERKN4sead7Vector3IfEE
|
||||||
0x0000007100d4df48,PlacementObj::x_22,128,
|
0x0000007100d4df48,PlacementObj::x_22,128,
|
||||||
0x0000007100d4dfc8,PlacementObj::setFieldATrue,36,
|
0x0000007100d4dfc8,PlacementObj::setFieldATrue,36,_ZN4ksys3map6Object13setFieldATrueEv
|
||||||
0x0000007100d4dfec,j__ZdlPv_848,4,
|
0x0000007100d4dfec,j__ZdlPv_848,4,
|
||||||
0x0000007100d4dff0,_ZN4sead15FixedSafeStringILi655EEaSERKNS_14SafeStringBaseIcEE,240,
|
0x0000007100d4dff0,_ZN4sead15FixedSafeStringILi655EEaSERKNS_14SafeStringBaseIcEE,240,
|
||||||
0x0000007100d4e0e0,getMapLinkDefinitionDescription,96,
|
0x0000007100d4e0e0,getMapLinkDefinitionDescription,96,_ZNK4ksys3map10ObjectLink14getDescriptionEv
|
||||||
0x0000007100d4e140,getMapLinkDefinitionDescription_0,96,
|
0x0000007100d4e140,getMapLinkDefinitionDescription_0,96,_ZN4ksys3map10ObjectLink21getDescriptionForTypeENS0_14MapLinkDefTypeE
|
||||||
0x0000007100d4e1a0,getMapLinkDefinitionNum,324,
|
0x0000007100d4e1a0,getMapLinkDefinitionNum,324,_ZN4ksys3map10ObjectLink14getTypeForNameERKN4sead14SafeStringBaseIcEE
|
||||||
0x0000007100d4e2e4,PlacementLink::getObjActor,20,_ZNK4ksys3map10ObjectLink13getObjectProcEv
|
0x0000007100d4e2e4,PlacementLink::getObjActor,20,_ZNK4ksys3map10ObjectLink14getObjectActorEv
|
||||||
0x0000007100d4e2f8,PlacementLink::getObjActorWithAccessor,24,_ZNK4ksys3map10ObjectLink25getObjectProcWithAccessorERNS_3act24ActorLinkConstDataAccessE
|
0x0000007100d4e2f8,PlacementLink::getObjActorWithAccessor,24,_ZNK4ksys3map10ObjectLink25getObjectProcWithAccessorERNS_3act24ActorLinkConstDataAccessE
|
||||||
0x0000007100d4e310,sub_7100D4E310,28,
|
0x0000007100d4e310,sub_7100D4E310,28,_ZN4ksys3map10ObjectLink14sub_7100D4E310ENS0_14MapLinkDefTypeE?
|
||||||
0x0000007100d4e32c,isPlacementLODOrForSaleLink,24,
|
0x0000007100d4e32c,isPlacementLODOrForSaleLink,24,_ZN4ksys3map10ObjectLink27isPlacementLODOrForSaleLinkENS0_14MapLinkDefTypeE
|
||||||
0x0000007100d4e344,PlacementLinkData::ctor,44,_ZN4ksys3map14ObjectLinkDataC1Ev
|
0x0000007100d4e344,PlacementLinkData::ctor,44,_ZN4ksys3map14ObjectLinkDataC1Ev
|
||||||
0x0000007100d4e370,PlacementLinkData::deleteArrays,136,
|
0x0000007100d4e370,PlacementLinkData::deleteArrays,136,_ZN4ksys3map14ObjectLinkData12deleteArraysEv
|
||||||
0x0000007100d4e3f8,PlacementLinkData::allocLinks,556,
|
0x0000007100d4e3f8,PlacementLinkData::allocLinks,556,
|
||||||
0x0000007100d4e624,PlacementLinkData::allocLinksToSelf,212,
|
0x0000007100d4e624,PlacementLinkData::allocLinksToSelf,212,_ZN4ksys3map14ObjectLinkData16allocLinksToSelfEiPN4sead4HeapE
|
||||||
0x0000007100d4e6f8,PlacementLinkData::dtor,292,
|
0x0000007100d4e6f8,PlacementLinkData::dtor,292,
|
||||||
0x0000007100d4e81c,PlacementObj::x,256,
|
0x0000007100d4e81c,PlacementObj::x,256,
|
||||||
0x0000007100d4e91c,PlacementLinkData::addLink,440,
|
0x0000007100d4e91c,PlacementLinkData::addLink,440,
|
||||||
0x0000007100d4ead4,PlacementLinkData::setupLinks,364,
|
0x0000007100d4ead4,PlacementLinkData::setupLinks,364,
|
||||||
0x0000007100d4ec40,sub_7100D4EC40,328,
|
0x0000007100d4ec40,sub_7100D4EC40,328,
|
||||||
0x0000007100d4ed88,PlacementLinkData::setGenGroup,16,
|
0x0000007100d4ed88,PlacementLinkData::setGenGroup,16,_ZN4ksys3map14ObjectLinkData11setGenGroupEPNS0_8GenGroupE
|
||||||
0x0000007100d4ed98,PlacementLinkData::checkCreateLinkObjRevival,52,
|
0x0000007100d4ed98,PlacementLinkData::checkCreateLinkObjRevival,52,
|
||||||
0x0000007100d4edcc,PlacementLinkData::checkDeleteLinkObjRevival,20,
|
0x0000007100d4edcc,PlacementLinkData::checkDeleteLinkObjRevival,20,
|
||||||
0x0000007100d4ede0,PlacementLinkArray::checkLink,280,
|
0x0000007100d4ede0,PlacementLinkArray::checkLink,280,_ZN4ksys3map15ObjectLinkArray9checkLinkENS0_14MapLinkDefTypeEb!
|
||||||
0x0000007100d4eef8,PlacementLinkArray::findLinkWithType,56,
|
0x0000007100d4eef8,PlacementLinkArray::findLinkWithType,56,_ZN4ksys3map15ObjectLinkArray16findLinkWithTypeENS0_14MapLinkDefTypeE
|
||||||
0x0000007100d4ef30,sub_7100D4EF30,116,
|
0x0000007100d4ef30,sub_7100D4EF30,116,
|
||||||
0x0000007100d4efa4,PlacementLinkData::x_2,332,
|
0x0000007100d4efa4,PlacementLinkData::x_2,332,
|
||||||
0x0000007100d4f0f0,sub_7100D4F0F0,224,
|
0x0000007100d4f0f0,sub_7100D4F0F0,224,
|
||||||
0x0000007100d4f1d0,sub_7100D4F1D0,532,
|
0x0000007100d4f1d0,sub_7100D4F1D0,532,
|
||||||
0x0000007100d4f3e4,sub_7100D4F3E4,496,
|
0x0000007100d4f3e4,sub_7100D4F3E4,496,
|
||||||
0x0000007100d4f5d4,PlacementLinkData::findLinkWithType,76,
|
0x0000007100d4f5d4,PlacementLinkData::findLinkWithType,76,_ZN4ksys3map14ObjectLinkData16findLinkWithTypeENS0_14MapLinkDefTypeE
|
||||||
0x0000007100d4f620,PlacementLinkData::findLinkWithType_0,76,
|
0x0000007100d4f620,PlacementLinkData::findLinkWithType_0,76,_ZN4ksys3map14ObjectLinkData18findLinkWithType_0ENS0_14MapLinkDefTypeE
|
||||||
0x0000007100d4f66c,PlacementLinkArray::findLinkWithType_0,56,
|
0x0000007100d4f66c,PlacementLinkArray::findLinkWithType_0,56,_ZN4ksys3map15ObjectLinkArray18findLinkWithType_0ENS0_14MapLinkDefTypeE
|
||||||
0x0000007100d4f6a4,sub_7100D4F6A4,88,
|
0x0000007100d4f6a4,sub_7100D4F6A4,88,
|
||||||
0x0000007100d4f6fc,PlacementLinkData::x_6,204,
|
0x0000007100d4f6fc,PlacementLinkData::x_6,204,
|
||||||
0x0000007100d4f7c8,PlacementLinkData::allocRails,92,
|
0x0000007100d4f7c8,PlacementLinkData::allocRails,92,
|
||||||
|
@ -92327,25 +92327,25 @@
|
||||||
0x00000071011e4224,sub_71011E4224,412,
|
0x00000071011e4224,sub_71011E4224,412,
|
||||||
0x00000071011e43c0,sub_71011E43C0,48,
|
0x00000071011e43c0,sub_71011E43C0,48,
|
||||||
0x00000071011e43f0,sub_71011E43F0,92,
|
0x00000071011e43f0,sub_71011E43F0,92,
|
||||||
0x00000071011e444c,PlacementMgr::deleteInstance,100,
|
0x00000071011e444c,PlacementMgr::deleteInstance,100,_ZN4ksys3map12PlacementMgr18SingletonDisposer_D1Ev
|
||||||
0x00000071011e44b0,PlacementMgr::deleteInstance2,108,
|
0x00000071011e44b0,PlacementMgr::deleteInstance2,108,_ZN4ksys3map12PlacementMgr18SingletonDisposer_D0Ev
|
||||||
0x00000071011e451c,PlacementMgr::createInstance,136,
|
0x00000071011e451c,PlacementMgr::createInstance,136,_ZN4ksys3map12PlacementMgr14createInstanceEPN4sead4HeapE!
|
||||||
0x00000071011e45a4,PlacementMgr::destroyInstance,88,
|
0x00000071011e45a4,PlacementMgr::destroyInstance,88,_ZN4ksys3map12PlacementMgr14deleteInstanceEv
|
||||||
0x00000071011e45fc,PlacementMgr::ctor,660,
|
0x00000071011e45fc,PlacementMgr::ctor,660,_ZN4ksys3map12PlacementMgrC1Ev!
|
||||||
0x00000071011e4890,PlacementMgr::threadFn,1120,
|
0x00000071011e4890,PlacementMgr::threadFn,1120,
|
||||||
0x00000071011e4cf0,PlacementMgr::invoked1,184,
|
0x00000071011e4cf0,PlacementMgr::invoked1,184,
|
||||||
0x00000071011e4da8,PlacementMgr::invoked2,24,
|
0x00000071011e4da8,PlacementMgr::invoked2,24,
|
||||||
0x00000071011e4dc0,sub_71011E4DC0,112,
|
0x00000071011e4dc0,sub_71011E4DC0,112,_ZN4ksys3map12PlacementMgrD1Ev?
|
||||||
0x00000071011e4e30,sub_71011E4E30,120,
|
0x00000071011e4e30,sub_71011E4E30,120,_ZN4ksys3map12PlacementMgrD0Ev?
|
||||||
0x00000071011e4ea8,PlacementMgr::__auto2,584,
|
0x00000071011e4ea8,PlacementMgr::__auto2,584,
|
||||||
0x00000071011e50f0,sub_71011E50F0,56,
|
0x00000071011e50f0,sub_71011E50F0,56,_ZN4ksys3map12PlacementMgr11releaseTreeEv
|
||||||
0x00000071011e5128,PlacementMgr::x_3,236,
|
0x00000071011e5128,PlacementMgr::x_3,236,_ZN4ksys3map12PlacementMgr3x_3Ev!
|
||||||
0x00000071011e5214,PlacementMgr::setRemoveInnerDataAcceptiveMaybe,8,
|
0x00000071011e5214,PlacementMgr::setRemoveInnerDataAcceptiveMaybe,8,_ZN4ksys3map12PlacementMgr8reset7F0Ev
|
||||||
0x00000071011e521c,PlacementMgr::calcRemoveInnerData,716,
|
0x00000071011e521c,PlacementMgr::calcRemoveInnerData,716,
|
||||||
0x00000071011e54e8,PlacementMgr::initBeforeStageGenB,84,
|
0x00000071011e54e8,PlacementMgr::initBeforeStageGenB,84,
|
||||||
0x00000071011e553c,PlacementMgr::startThreadAndClusteredRenderer,316,
|
0x00000071011e553c,PlacementMgr::startThreadAndClusteredRenderer,316,_ZN4ksys3map12PlacementMgr21initClusteredRendererEv!
|
||||||
0x00000071011e5678,PlacementMgr::stopThreads,152,
|
0x00000071011e5678,PlacementMgr::stopThreads,152,
|
||||||
0x00000071011e5710,PlacementMgr::__auto0,36,
|
0x00000071011e5710,PlacementMgr::__auto0,36,_ZN4ksys3map12PlacementMgr5auto0Ev
|
||||||
0x00000071011e5734,PlacementMgr::stopThread,120,
|
0x00000071011e5734,PlacementMgr::stopThread,120,
|
||||||
0x00000071011e57ac,PlacementMgr::__auto1,64,
|
0x00000071011e57ac,PlacementMgr::__auto1,64,
|
||||||
0x00000071011e57ec,PlacementMgr::createMapsAndInitAndStartPlacementThread,344,
|
0x00000071011e57ec,PlacementMgr::createMapsAndInitAndStartPlacementThread,344,
|
||||||
|
@ -92356,15 +92356,15 @@
|
||||||
0x00000071011e645c,PlacementMgr::preCalc,1760,
|
0x00000071011e645c,PlacementMgr::preCalc,1760,
|
||||||
0x00000071011e6b3c,PlacementMgr::requestDraw,292,
|
0x00000071011e6b3c,PlacementMgr::requestDraw,292,
|
||||||
0x00000071011e6c60,PlacementMgr::x_5,268,
|
0x00000071011e6c60,PlacementMgr::x_5,268,
|
||||||
0x00000071011e6d6c,PlacementMgr::printDebugInfo,248,
|
0x00000071011e6d6c,PlacementMgr::printDebugInfo,248,_ZN4ksys3map12PlacementMgr14printDebugInfoEv?
|
||||||
0x00000071011e6e64,PlacementMgr::isStaticCompoundReady,40,
|
0x00000071011e6e64,PlacementMgr::isStaticCompoundReady,40,
|
||||||
0x00000071011e6e8c,sub_71011E6E8C,84,
|
0x00000071011e6e8c,sub_71011E6E8C,84,
|
||||||
0x00000071011e6ee0,sub_71011E6EE0,204,
|
0x00000071011e6ee0,sub_71011E6EE0,204,
|
||||||
0x00000071011e6fac,PlacementMgr::incrementCounter,16,
|
0x00000071011e6fac,PlacementMgr::incrementCounter,16,_ZN4ksys3map12PlacementMgr16incrementCounterEv
|
||||||
0x00000071011e6fbc,PlacementMgr::x,172,
|
0x00000071011e6fbc,PlacementMgr::x,172,_ZN4ksys3map12PlacementMgr1xEv
|
||||||
0x00000071011e7068,PlacementMgr::__auto5,24,
|
0x00000071011e7068,PlacementMgr::__auto5,24,_ZN4ksys3map12PlacementMgr5auto5Ev
|
||||||
0x00000071011e7080,PlacementMgr::__auto16,80,
|
0x00000071011e7080,PlacementMgr::__auto16,80,_ZN4ksys3map12PlacementMgr6auto16Ev
|
||||||
0x00000071011e70d0,PlacementMgr::someFlagCheck,28,
|
0x00000071011e70d0,PlacementMgr::someFlagCheck,28,_ZNK4ksys3map12PlacementMgr13someFlagCheckEv
|
||||||
0x00000071011e70ec,PlacementMgr::threadHandleChecksAndDirectActorGen,276,
|
0x00000071011e70ec,PlacementMgr::threadHandleChecksAndDirectActorGen,276,
|
||||||
0x00000071011e7200,PlacementMgr::threadTraverse,7300,
|
0x00000071011e7200,PlacementMgr::threadTraverse,7300,
|
||||||
0x00000071011e8e84,PlacementMgr::threadLoadUnloadCheck,2376,
|
0x00000071011e8e84,PlacementMgr::threadLoadUnloadCheck,2376,
|
||||||
|
@ -92432,8 +92432,8 @@
|
||||||
0x00000071011ed3d8,OpenWorldSceneNavigator::getJpName,12,
|
0x00000071011ed3d8,OpenWorldSceneNavigator::getJpName,12,
|
||||||
0x00000071011ed3e4,nullsub_4651,4,
|
0x00000071011ed3e4,nullsub_4651,4,
|
||||||
0x00000071011ed3e8,nullsub_4652,4,
|
0x00000071011ed3e8,nullsub_4652,4,
|
||||||
0x00000071011ed3ec,PlacementTree::ctor,60,
|
0x00000071011ed3ec,PlacementTree::ctor,60,_ZN4ksys3map13PlacementTreeC1Ev?
|
||||||
0x00000071011ed428,sub_71011ED428,84,
|
0x00000071011ed428,sub_71011ED428,84,_ZN4ksys3map13PlacementTreeD1Ev?
|
||||||
0x00000071011ed47c,PlacementTree::x,940,
|
0x00000071011ed47c,PlacementTree::x,940,
|
||||||
0x00000071011ed828,PlacementTree::resetPlacementObjPtrs,160,
|
0x00000071011ed828,PlacementTree::resetPlacementObjPtrs,160,
|
||||||
0x00000071011ed8c8,PlacementTree::x_1,152,
|
0x00000071011ed8c8,PlacementTree::x_1,152,
|
||||||
|
|
Can't render this file because it is too large.
|
|
@ -86,6 +86,8 @@ target_sources(uking PRIVATE
|
||||||
actBaseProcMgr.h
|
actBaseProcMgr.h
|
||||||
actBaseProcUnit.cpp
|
actBaseProcUnit.cpp
|
||||||
actBaseProcUnit.h
|
actBaseProcUnit.h
|
||||||
|
actClusteredRenderer.cpp
|
||||||
|
actClusteredRenderer.h
|
||||||
actDebug.cpp
|
actDebug.cpp
|
||||||
actDebug.h
|
actDebug.h
|
||||||
actGlobalParameter.cpp
|
actGlobalParameter.cpp
|
||||||
|
|
|
@ -92,6 +92,7 @@ public:
|
||||||
f32 getAttackSpHitRatio() const;
|
f32 getAttackSpHitRatio() const;
|
||||||
s32 getAttackPower() const;
|
s32 getAttackPower() const;
|
||||||
|
|
||||||
|
bool checkLinkTagActivated(bool a, bool b);
|
||||||
map::ObjectLinkData* getMapObjectLinkData() const;
|
map::ObjectLinkData* getMapObjectLinkData() const;
|
||||||
map::Object* getMapObject() const;
|
map::Object* getMapObject() const;
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,9 @@ public:
|
||||||
void setActorFactory(ActorFactory* factory) { mActorFactory = factory; }
|
void setActorFactory(ActorFactory* factory) { mActorFactory = factory; }
|
||||||
bool get5a() const { return _5a; }
|
bool get5a() const { return _5a; }
|
||||||
|
|
||||||
|
sead::OffsetList<Actor>& getActorList() { return mActorList; }
|
||||||
|
sead::CriticalSection& getCS() { return mActorListCS; }
|
||||||
|
|
||||||
static void addScale(InstParamPack& pack, float scale);
|
static void addScale(InstParamPack& pack, float scale);
|
||||||
static void addScale(InstParamPack& pack, const sead::Vector3f& scale);
|
static void addScale(InstParamPack& pack, const sead::Vector3f& scale);
|
||||||
static bool isAITreeParam(const InstParamPack::Entry& entry);
|
static bool isAITreeParam(const InstParamPack::Entry& entry);
|
||||||
|
|
|
@ -102,6 +102,7 @@ public:
|
||||||
bool isDeletedOrDeleting() const {
|
bool isDeletedOrDeleting() const {
|
||||||
return mState == State::Delete || mStateFlags.isOn(StateFlags::RequestDelete);
|
return mState == State::Delete || mStateFlags.isOn(StateFlags::RequestDelete);
|
||||||
}
|
}
|
||||||
|
bool isDeleteOrInvalid() const { return mState >= act::BaseProc::State::Delete; }
|
||||||
|
|
||||||
/// For BaseProcLink or ActorLinkConstDataAccess.
|
/// For BaseProcLink or ActorLinkConstDataAccess.
|
||||||
bool acquire(ActorLinkConstDataAccess& accessor);
|
bool acquire(ActorLinkConstDataAccess& accessor);
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
#include "KingSystem/ActorSystem/actClusteredRenderer.h"
|
|
@ -0,0 +1,10 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace ksys::act {
|
||||||
|
|
||||||
|
class ClusteredRenderer {
|
||||||
|
public:
|
||||||
|
void startThread();
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ksys::act
|
|
@ -126,6 +126,7 @@ public:
|
||||||
u32 getModelFlags(const char* actor) const;
|
u32 getModelFlags(const char* actor) const;
|
||||||
bool getVariationMatAnim(const char* actor, const char** anim, f32* frame) const;
|
bool getVariationMatAnim(const char* actor, const char** anim, f32* frame) const;
|
||||||
bool getName(al::ByamlIter* iter, const char** name, s32 idx) const;
|
bool getName(al::ByamlIter* iter, const char** name, s32 idx) const;
|
||||||
|
bool sub_7100D30DF8(InvalidLifeConditions& info, const sead::Vector3f& vec);
|
||||||
|
|
||||||
const char* getString(const char* actor, const char* key,
|
const char* getString(const char* actor, const char* key,
|
||||||
const sead::SafeString& default_ = sead::SafeString::cEmptyString,
|
const sead::SafeString& default_ = sead::SafeString::cEmptyString,
|
||||||
|
|
|
@ -9,6 +9,7 @@ add_subdirectory(Ecosystem)
|
||||||
add_subdirectory(Effect)
|
add_subdirectory(Effect)
|
||||||
add_subdirectory(Event)
|
add_subdirectory(Event)
|
||||||
add_subdirectory(Framework)
|
add_subdirectory(Framework)
|
||||||
|
add_subdirectory(Graphics)
|
||||||
add_subdirectory(Map)
|
add_subdirectory(Map)
|
||||||
add_subdirectory(Mii)
|
add_subdirectory(Mii)
|
||||||
add_subdirectory(Physics)
|
add_subdirectory(Physics)
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
target_sources(uking PRIVATE
|
||||||
|
gfxForestRenderer.cpp
|
||||||
|
gfxForestRenderer.h
|
||||||
|
)
|
|
@ -0,0 +1 @@
|
||||||
|
#include "KingSystem/Graphics/gfxForestRenderer.h"
|
|
@ -0,0 +1,12 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <math/seadVector.h>
|
||||||
|
|
||||||
|
namespace ksys::gfx {
|
||||||
|
|
||||||
|
class ForestRenderer {
|
||||||
|
public:
|
||||||
|
s32 x_7(const sead::Vector3f& vec);
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ksys::gfx
|
|
@ -6,8 +6,18 @@ target_sources(uking PRIVATE
|
||||||
mapMubinIter.h
|
mapMubinIter.h
|
||||||
mapObject.cpp
|
mapObject.cpp
|
||||||
mapObject.h
|
mapObject.h
|
||||||
|
mapObjectGenGroup.cpp
|
||||||
|
mapObjectGenGroup.h
|
||||||
mapObjectLink.cpp
|
mapObjectLink.cpp
|
||||||
mapObjectLink.h
|
mapObjectLink.h
|
||||||
|
mapPlacementActors.cpp
|
||||||
|
mapPlacementActors.h
|
||||||
mapPlacementMgr.cpp
|
mapPlacementMgr.cpp
|
||||||
mapPlacementMgr.h
|
mapPlacementMgr.h
|
||||||
|
mapPlacementTree.cpp
|
||||||
|
mapPlacementTree.h
|
||||||
|
mapRail.cpp
|
||||||
|
mapRail.h
|
||||||
|
mapStagePreActorCache.cpp
|
||||||
|
mapStagePreActorCache.h
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,11 +1,25 @@
|
||||||
#include "KingSystem/Map/mapObject.h"
|
#include "KingSystem/Map/mapObject.h"
|
||||||
#include "KingSystem/ActorSystem/actBaseProcMgr.h"
|
#include "KingSystem/ActorSystem/actBaseProcMgr.h"
|
||||||
|
#include "KingSystem/ActorSystem/actInfoData.h"
|
||||||
|
#include "KingSystem/GameData/gdtManager.h"
|
||||||
|
#include "KingSystem/Graphics/gfxForestRenderer.h"
|
||||||
#include "KingSystem/Map/mapObjectLink.h"
|
#include "KingSystem/Map/mapObjectLink.h"
|
||||||
|
#include "KingSystem/Map/mapPlacementMgr.h"
|
||||||
|
#include "KingSystem/Map/mapStagePreActorCache.h"
|
||||||
|
#include "KingSystem/Terrain/teraSystem.h"
|
||||||
#include "KingSystem/Utils/Debug.h"
|
#include "KingSystem/Utils/Debug.h"
|
||||||
|
|
||||||
namespace ksys::map {
|
namespace ksys::map {
|
||||||
|
|
||||||
Object::Object() = default;
|
// NON_MATCHING
|
||||||
|
Object::Object() {
|
||||||
|
mHardModeFlags.makeAllZero();
|
||||||
|
_b = 0xFF;
|
||||||
|
_18 = nullptr;
|
||||||
|
_20 = nullptr;
|
||||||
|
mProc = nullptr;
|
||||||
|
mLinkData = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
Object::~Object() {
|
Object::~Object() {
|
||||||
if (mLinkData != nullptr) {
|
if (mLinkData != nullptr) {
|
||||||
|
@ -23,9 +37,7 @@ void Object::free() {
|
||||||
if (mProc)
|
if (mProc)
|
||||||
mProc = nullptr;
|
mProc = nullptr;
|
||||||
|
|
||||||
// TODO: figure out what this is
|
mFlags0.reset(Flag0::ResetOnFreed);
|
||||||
mFlags0.reset(Flag0::Freed);
|
|
||||||
|
|
||||||
mHardModeFlags.reset(HardModeFlag::ActorCreated);
|
mHardModeFlags.reset(HardModeFlag::ActorCreated);
|
||||||
|
|
||||||
if (mFlags0.isOn(Flag0::_80000))
|
if (mFlags0.isOn(Flag0::_80000))
|
||||||
|
@ -37,25 +49,99 @@ void Object::free() {
|
||||||
mLinkData->field_57 = 0;
|
mLinkData->field_57 = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// NON_MATCHING: functionally equivalent; CSEL instruction flipped
|
// NON_MATCHING
|
||||||
bool Object::getActorWithAccessor(act::ActorLinkConstDataAccess& accessor) const {
|
void Object::initData(MubinIter* iter, u8 idx, u32 actor_data_idx, ActorData* data) {
|
||||||
|
mActorDataIdx = 0xFFFF;
|
||||||
|
mFlags0.makeAllZero();
|
||||||
|
mRevivalGameDataFlagHash = gdt::InvalidHandle;
|
||||||
|
mId = 0;
|
||||||
|
mActorFlags8.makeAllZero();
|
||||||
|
mFlags.makeAllZero();
|
||||||
|
mIdx = 0;
|
||||||
|
mNumLinksPointingToMe = 0;
|
||||||
|
mStaticCompoundId = 0xFFFF;
|
||||||
|
_18 = nullptr;
|
||||||
|
_20 = nullptr;
|
||||||
|
_10 = nullptr;
|
||||||
|
_50 = nullptr;
|
||||||
|
mTraverseDist = 0.0f;
|
||||||
|
mTraverseDistInt = 0;
|
||||||
|
mHashId = 0;
|
||||||
|
mHardModeFlags.makeAllZero();
|
||||||
|
_b = 0xFF;
|
||||||
|
mProc = nullptr;
|
||||||
|
mLinkData = nullptr;
|
||||||
|
iter->tryGetFloatArrayByKey(&mTranslate.x, "Translate");
|
||||||
|
mMubinIter = *iter;
|
||||||
|
|
||||||
|
u32 hash = 0;
|
||||||
|
iter->tryGetParamUIntByKey(&hash, "HashId");
|
||||||
|
if (hash == 0)
|
||||||
|
hash = 0xFFFFFFFF;
|
||||||
|
mHashId = hash;
|
||||||
|
|
||||||
|
mIdx = idx;
|
||||||
|
mFlags0.setDirect(Flag0::_8);
|
||||||
|
mNumLinksPointingToMe = 0;
|
||||||
|
_10 = nullptr;
|
||||||
|
_18 = nullptr;
|
||||||
|
_20 = nullptr;
|
||||||
|
mStaticCompoundId = 0xFFFF;
|
||||||
|
mActorDataIdx = actor_data_idx;
|
||||||
|
mProc = nullptr;
|
||||||
|
mLinkData = nullptr;
|
||||||
|
mActorFlags8 = data->mActorFlags8;
|
||||||
|
|
||||||
|
auto* fr = StagePreActorCache::instance()->getForestRenderer();
|
||||||
|
if (fr != nullptr) {
|
||||||
|
if (fr->x_7(mTranslate) != -1) {
|
||||||
|
mFlags0.set(Flag0::_10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
initRevivalGameDataFlagAndMiscFlags(data, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
act::BaseProc* Object::tryGetProc(bool force) {
|
||||||
|
auto* bpm = act::BaseProcMgr::instance();
|
||||||
|
if (bpm == nullptr || !bpm->isHighPriorityThread())
|
||||||
|
return nullptr;
|
||||||
|
if (mProc == nullptr)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
act::BaseProc* result = nullptr;
|
||||||
|
if (!mProc->isDeleteOrInvalid())
|
||||||
|
result = mProc;
|
||||||
|
if (mProc->isDeleteOrInvalid() || force)
|
||||||
|
return result;
|
||||||
|
|
||||||
|
if (!mProc->isInit())
|
||||||
|
bpm->isAccessingProcSafe(mProc, nullptr);
|
||||||
|
return mProc;
|
||||||
|
}
|
||||||
|
|
||||||
|
act::Actor* Object::tryGetActor(bool force) {
|
||||||
|
auto* proc = tryGetProc(force);
|
||||||
|
return sead::DynamicCast<act::Actor>(proc);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Object::getActorWithAccessor(act::ActorLinkConstDataAccess& accessor) {
|
||||||
act::BaseProcMgr* instance = act::BaseProcMgr::instance();
|
act::BaseProcMgr* instance = act::BaseProcMgr::instance();
|
||||||
|
|
||||||
if (instance == nullptr || !instance->isHighPriorityThread() || mProc == nullptr)
|
if (instance == nullptr || !instance->isHighPriorityThread() || mProc == nullptr)
|
||||||
return accessor.acquire(nullptr);
|
return accessor.acquire(nullptr);
|
||||||
|
|
||||||
if (mProc->isInit() || mProc->isCalc())
|
if (!mProc->isDeleteOrInvalid())
|
||||||
return accessor.acquire(mProc);
|
return accessor.acquire(mProc);
|
||||||
|
|
||||||
return accessor.acquire(nullptr);
|
return accessor.acquire(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
act::Actor* Object::getActor() const {
|
act::Actor* Object::getActor() {
|
||||||
return sead::DynamicCast<act::Actor>(mProc);
|
return sead::DynamicCast<act::Actor>(mProc);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Object::registerBaseProc(act::BaseProc* proc) {
|
void Object::registerBaseProc(act::BaseProc* proc) {
|
||||||
const char* sActorStateStrings[4] = {"Init", "Calc", "Sleep", "Delete"};
|
static const char* sActorStateStrings[4] = {"Init", "Calc", "Sleep", "Delete"};
|
||||||
|
|
||||||
if (mProc != nullptr && mProc != proc) {
|
if (mProc != nullptr && mProc != proc) {
|
||||||
sead::FixedSafeString<1000> message;
|
sead::FixedSafeString<1000> message;
|
||||||
|
@ -65,7 +151,7 @@ void Object::registerBaseProc(act::BaseProc* proc) {
|
||||||
sActorStateStrings[static_cast<s32>(proc->getState())]);
|
sActorStateStrings[static_cast<s32>(proc->getState())]);
|
||||||
util::PrintDebug(message);
|
util::PrintDebug(message);
|
||||||
}
|
}
|
||||||
mProc = proc;
|
setBaseProcDirect(proc);
|
||||||
|
|
||||||
mFlags0.set(Flag0::_80);
|
mFlags0.set(Flag0::_80);
|
||||||
mFlags0.reset(Flag0::_80000000);
|
mFlags0.reset(Flag0::_80000000);
|
||||||
|
@ -93,7 +179,7 @@ bool Object::isEnemyOrNpcOrActiveOrMapPassive() const {
|
||||||
|
|
||||||
bool Object::isNpcOrActiveOrMapPassiveOrFlag1() const {
|
bool Object::isNpcOrActiveOrMapPassiveOrFlag1() const {
|
||||||
auto actFlags = mActorFlags8;
|
auto actFlags = mActorFlags8;
|
||||||
if (actFlags.isZero())
|
if (isFlags8Cleared())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
auto pa = PlacementMgr::instance()->mPlacementActors;
|
auto pa = PlacementMgr::instance()->mPlacementActors;
|
||||||
|
@ -108,13 +194,13 @@ bool Object::isNpcOrActiveOrMapPassiveOrFlag1() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Object::isMapPassive(const PlacementActors* pa) const {
|
bool Object::isMapPassive(const PlacementActors* pa) const {
|
||||||
if (mActorFlags8.isZero())
|
if (isFlags8Cleared())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (pa == nullptr)
|
if (pa == nullptr)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (pa->mActorData[mActorDataIdx].mFlags.isOnBit(ActorData::Flag::_16) ||
|
if (checkActorDataFlag(pa, ActorData::Flag::_16) ||
|
||||||
mActorFlags8.isOn(ActorFlag8::EnemyOrNpcOrActiveOrAreaOrAirWall))
|
mActorFlags8.isOn(ActorFlag8::EnemyOrNpcOrActiveOrAreaOrAirWall))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -146,20 +232,17 @@ f32 Object::getDispDistance(const ActorData* data, bool get_diameter, u32 unused
|
||||||
f32 Object::getDispDistance(const PlacementActors* pa, bool get_diameter,
|
f32 Object::getDispDistance(const PlacementActors* pa, bool get_diameter,
|
||||||
bool ignore_radius) const {
|
bool ignore_radius) const {
|
||||||
auto* dat = &pa->mActorData[mActorDataIdx];
|
auto* dat = &pa->mActorData[mActorDataIdx];
|
||||||
|
|
||||||
return getDispDistance(dat, get_diameter, 0, ignore_radius);
|
return getDispDistance(dat, get_diameter, 0, ignore_radius);
|
||||||
}
|
}
|
||||||
|
|
||||||
f32 Object::getDispDistance(bool get_diameter, bool ignore_radius) const {
|
f32 Object::getDispDistance(bool get_diameter, bool ignore_radius) const {
|
||||||
auto pa = PlacementMgr::instance()->mPlacementActors;
|
auto pa = PlacementMgr::instance()->mPlacementActors;
|
||||||
|
|
||||||
return getDispDistance(pa, get_diameter, ignore_radius);
|
return getDispDistance(pa, get_diameter, ignore_radius);
|
||||||
}
|
}
|
||||||
|
|
||||||
[[gnu::noinline]] f32 Object::getTraverseDist(const ActorData* data, bool get_diameter, u32,
|
[[gnu::noinline]] f32 Object::getTraverseDist(const ActorData* data, bool get_diameter, u32,
|
||||||
bool ignore_radius) const {
|
bool ignore_radius) const {
|
||||||
using DFlag = ActorData::Flag;
|
using DFlag = ActorData::Flag;
|
||||||
|
|
||||||
f32 dist = 0.0;
|
f32 dist = 0.0;
|
||||||
|
|
||||||
if (mFlags.isOn(Flag::HasTraversePos) && !ignore_radius) {
|
if (mFlags.isOn(Flag::HasTraversePos) && !ignore_radius) {
|
||||||
|
@ -186,22 +269,18 @@ f32 Object::getDispDistance(bool get_diameter, bool ignore_radius) const {
|
||||||
|
|
||||||
f32 Object::getTraverseDistForLOD() const {
|
f32 Object::getTraverseDistForLOD() const {
|
||||||
using DFlag = ActorData::Flag;
|
using DFlag = ActorData::Flag;
|
||||||
|
|
||||||
auto* data = &PlacementMgr::instance()->mPlacementActors->mActorData[mActorDataIdx];
|
auto* data = &PlacementMgr::instance()->mPlacementActors->mActorData[mActorDataIdx];
|
||||||
f32 dist = 0.0;
|
f32 dist = 0.0;
|
||||||
|
|
||||||
if (data->mFlags.isOnBit(ActorData::Flag::TraverseDistReset))
|
if (data->mFlags.isOnBit(ActorData::Flag::TraverseDistReset))
|
||||||
return 0.0;
|
return 0.0;
|
||||||
|
|
||||||
if (data->mFlags.isOnBit(ActorData::Flag::TraverseDistReset))
|
if (data->mFlags.isOnBit(ActorData::Flag::TraverseDistReset))
|
||||||
dist = 0.0;
|
dist = 0.0;
|
||||||
|
|
||||||
else if (data->mFlags.isOnBit(DFlag::TraverseDist400) ||
|
else if (data->mFlags.isOnBit(DFlag::TraverseDist400) ||
|
||||||
data->mFlags.isOnBit(DFlag::TraverseDist200) ||
|
data->mFlags.isOnBit(DFlag::TraverseDist200) ||
|
||||||
data->mFlags.isOnBit(DFlag::TraverseDist4000) ||
|
data->mFlags.isOnBit(DFlag::TraverseDist4000) ||
|
||||||
data->mFlags.isOnBit(DFlag::TraverseDist800))
|
data->mFlags.isOnBit(DFlag::TraverseDist800))
|
||||||
dist = mTraverseDist + 0.0;
|
dist = mTraverseDist + 0.0;
|
||||||
|
|
||||||
else if (data->mFlags.isOffBit(DFlag::TraverseDist2000))
|
else if (data->mFlags.isOffBit(DFlag::TraverseDist2000))
|
||||||
dist = mTraverseDist + 0.0;
|
dist = mTraverseDist + 0.0;
|
||||||
else
|
else
|
||||||
|
@ -217,7 +296,6 @@ f32 Object::getTraverseDistForLOD() const {
|
||||||
|
|
||||||
sead::Vector3f Object::getScale() const {
|
sead::Vector3f Object::getScale() const {
|
||||||
sead::Vector3f vec;
|
sead::Vector3f vec;
|
||||||
|
|
||||||
mMubinIter.getScale(&vec);
|
mMubinIter.getScale(&vec);
|
||||||
return vec;
|
return vec;
|
||||||
}
|
}
|
||||||
|
@ -235,7 +313,6 @@ const char* Object::getUnitConfigNameFromByaml() const {
|
||||||
const char* result;
|
const char* result;
|
||||||
if (!mMubinIter.tryGetParamStringByKey(&result, "UnitConfigName"))
|
if (!mMubinIter.tryGetParamStringByKey(&result, "UnitConfigName"))
|
||||||
result = "";
|
result = "";
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -246,7 +323,6 @@ Object* Object::findPlacementLODLinkObject(const PlacementActors*) const {
|
||||||
ObjectLink* result = mLinkData->mLinksToSelf.findLinkWithType(MapLinkDefType::PlacementLOD);
|
ObjectLink* result = mLinkData->mLinksToSelf.findLinkWithType(MapLinkDefType::PlacementLOD);
|
||||||
if (result)
|
if (result)
|
||||||
return result->other_obj;
|
return result->other_obj;
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -254,75 +330,196 @@ Object* Object::findPlacementLODLinkObject() const {
|
||||||
if (!mLinkData)
|
if (!mLinkData)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
ObjectLink* result = mLinkData->mLinksToSelf.findLinkWithType(MapLinkDefType::PlacementLOD);
|
ObjectLink* result = mLinkData->mLinksToSelf.findLinkWithType_0(MapLinkDefType::PlacementLOD);
|
||||||
if (result)
|
if (result)
|
||||||
return result->other_obj;
|
return result->other_obj;
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* Object::getHashIdStringDebug() const {
|
const char* Object::getHashIdStringDebug() const {
|
||||||
act::ActorDebug::HashUnused t;
|
return getHashIdStringDebug_0();
|
||||||
|
|
||||||
const char* terminator;
|
|
||||||
|
|
||||||
if (mMubinIter.tryGetParamUIntByKey(&t.hash, "HashId"))
|
|
||||||
terminator = act::ActorDebug::instance()->getNullStr(&t);
|
|
||||||
else
|
|
||||||
terminator = "";
|
|
||||||
|
|
||||||
return terminator;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* Object::getHashIdStringDebug_0() const {
|
const char* Object::getHashIdStringDebug_0() const {
|
||||||
act::ActorDebug::HashUnused t;
|
act::ActorDebug::HashUnused t;
|
||||||
|
|
||||||
const char* terminator;
|
const char* terminator;
|
||||||
|
|
||||||
if (mMubinIter.tryGetParamUIntByKey(&t.hash, "HashId"))
|
if (mMubinIter.tryGetParamUIntByKey(&t.hash, "HashId"))
|
||||||
terminator = act::ActorDebug::instance()->getNullStr(&t);
|
terminator = act::ActorDebug::instance()->getNullStr(&t);
|
||||||
else
|
else
|
||||||
terminator = "";
|
terminator = "";
|
||||||
|
|
||||||
return terminator;
|
return terminator;
|
||||||
}
|
}
|
||||||
|
|
||||||
void* Object::getRails() const {
|
void Object::unlinkProc(bool force) {
|
||||||
if (!mLinkData)
|
bool set = false;
|
||||||
return nullptr;
|
auto flag = Flag0::ResetOnUnlinkFailed;
|
||||||
|
|
||||||
return mLinkData->mRails;
|
if (!tera::checkTeraSystemStatus()) {
|
||||||
|
auto* thread = sead::ThreadMgr::instance()->getCurrentThread();
|
||||||
|
thread->getPriority();
|
||||||
|
}
|
||||||
|
static_cast<void>(mFlags0.isZero());
|
||||||
|
|
||||||
|
if (force || mFlags0.isOn(Flag0::ActorCreated))
|
||||||
|
set = true;
|
||||||
|
else if (checkActorDataFlag(PlacementMgr::instance()->mPlacementActors,
|
||||||
|
ActorData::Flag::RevivalEnable))
|
||||||
|
set = isRevivalGameDataFlagOn();
|
||||||
|
|
||||||
|
if (set)
|
||||||
|
flag = Flag0::ResetOnUnlink;
|
||||||
|
|
||||||
|
mFlags0.reset(flag);
|
||||||
|
mProc = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Object::checkRevivalFlag(ActorData::Flag bit) const {
|
||||||
|
if (bit == ActorData::Flag::RevivalEnable || bit == ActorData::Flag::RevivalForUsed ||
|
||||||
|
bit == ActorData::Flag::RevivalForDrop) {
|
||||||
|
if (getActorData().mFlags.isOffBit(bit))
|
||||||
|
return false;
|
||||||
|
return isRevivalGameDataFlagOn();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Object::isRevivalGameDataFlagOn() const {
|
||||||
|
bool x = false;
|
||||||
|
gdt::Manager::instance()->getBool(mRevivalGameDataFlagHash, &x, true);
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Object::setRevivalFlagValueIf(ActorData::Flag bit, bool value) {
|
||||||
|
if (bit == ActorData::Flag::RevivalEnable || bit == ActorData::Flag::RevivalForUsed ||
|
||||||
|
bit == ActorData::Flag::RevivalForDrop) {
|
||||||
|
if (getActorData().mFlags.isOnBit(bit)) {
|
||||||
|
setRevivalFlagValue(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Object::setRevivalFlagValue(bool value) {
|
||||||
|
gdt::Manager::instance()->setBool(value, mRevivalGameDataFlagHash);
|
||||||
|
}
|
||||||
|
|
||||||
|
// NON_MATCHING
|
||||||
|
bool Object::x_18() const {
|
||||||
|
act::InfoData::InvalidLifeConditions info;
|
||||||
|
const char* s;
|
||||||
|
auto* id = act::InfoData::instance();
|
||||||
|
|
||||||
|
if (PlacementMgr::instance() != nullptr &&
|
||||||
|
PlacementMgr::instance()->mPlacementActors != nullptr)
|
||||||
|
s = PlacementMgr::instance()->mPlacementActors->mActorData[mActorDataIdx].mActorName.cstr();
|
||||||
|
else
|
||||||
|
s = getUnitConfigNameFromByaml();
|
||||||
|
id->getInvalidLifeConditions(s, info);
|
||||||
|
|
||||||
|
sead::Vector3f temp = mTranslate;
|
||||||
|
return !id->sub_7100D30DF8(info, temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
// NON_MATCHING
|
||||||
|
bool Object::setupTargetLinks(Object* src, ObjectLink* link, sead::Heap* heap) {
|
||||||
|
if (mNumLinksPointingToMe == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (mLinkData == nullptr) {
|
||||||
|
mLinkData = new (heap) ObjectLinkData();
|
||||||
|
if (mLinkData == nullptr)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mLinkData->mLinksToSelf.links.isBufferReady())
|
||||||
|
return mLinkData->sub_7100D4EC40(src, link, this);
|
||||||
|
|
||||||
|
if (!mLinkData->allocLinksToSelf(mNumLinksPointingToMe, heap))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return mLinkData->sub_7100D4EC40(src, link, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Object::checkCreateOrDeleteLinkObjRevival() const {
|
||||||
|
if (mLinkData != nullptr)
|
||||||
|
return mLinkData->checkCreateOrDeleteLinkObjRevival();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Object::shouldSkipSpawn() const {
|
||||||
|
if (checkTraverseFlags() || shouldSkipSpawn_(false))
|
||||||
|
return true;
|
||||||
|
return checkCreateOrDeleteLinkObjRevival();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Object::checkTraverseFlags() const {
|
||||||
|
return mFlags0.isOn(Flag0::_500400);
|
||||||
|
}
|
||||||
|
|
||||||
|
// NON_MATCHING
|
||||||
|
bool Object::x_20() const {
|
||||||
|
if (getActorData().mFlags.isOffBit(ActorData::Flag::RevivalEnable))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (mFlags0.isOff(Flag0::_400400))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!shouldSkipSpawn_(false)) {
|
||||||
|
return checkCreateOrDeleteLinkObjRevival();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Object::onBaseProcCreated(act::BaseProc* actor) {
|
||||||
|
if (actor != nullptr) {
|
||||||
|
registerBaseProc(actor);
|
||||||
|
mFlags0.set(Flag0::ActorCreated);
|
||||||
|
} else {
|
||||||
|
mFlags0.reset(Flag0::_80002106);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Object::spawnGenGroupActorsIfNeeded(Object* obj) {
|
||||||
|
if (mLinkData != nullptr)
|
||||||
|
mLinkData->sub_7100D4FB78(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Object::setFieldATrue() {
|
||||||
|
if (mActorFlags8.isOn(ActorFlag8::MapPassive) || mActorFlags8.isOn(ActorFlag8::_8)) {
|
||||||
|
mActorFlags8.reset(ActorFlag8::MapPassive);
|
||||||
|
mActorFlags8.reset(ActorFlag8::_8);
|
||||||
|
mActorFlags8.set(ActorFlag8::EnemyOrNpcOrActiveOrAreaOrAirWall);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void* Object::getRails() const {
|
||||||
|
return getRails_0();
|
||||||
}
|
}
|
||||||
|
|
||||||
void* Object::getRails_0() const {
|
void* Object::getRails_0() const {
|
||||||
if (!mLinkData)
|
if (mLinkData == nullptr)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
return mLinkData->mRail;
|
||||||
return mLinkData->mRails;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Object::allocLinkData(sead::Heap* heap) {
|
bool Object::allocLinkData(sead::Heap* heap) {
|
||||||
mLinkData = new (heap) ObjectLinkData;
|
mLinkData = new (heap) ObjectLinkData;
|
||||||
|
|
||||||
return mLinkData != nullptr;
|
return mLinkData != nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Object::hasGenGroup() const {
|
bool Object::hasGenGroup() const {
|
||||||
if (!mLinkData)
|
if (!mLinkData)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return mLinkData->mGenGroup != nullptr;
|
return mLinkData->mGenGroup != nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Object::incrementLinkNum() {
|
void Object::incrementLinkNum() {
|
||||||
if (mNumLinksPointingToMe != 0xFF) {
|
if (mNumLinksPointingToMe != 0xFF) {
|
||||||
mNumLinksPointingToMe += 1;
|
mNumLinksPointingToMe++;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto name = sead::SafeString(getUnitConfigName());
|
if (sead::SafeString(getUnitConfigName()) == "LinkTagNone") {
|
||||||
|
|
||||||
if (name == "LinkTagNone") {
|
|
||||||
// More than 255 actors are specified in one generation group.
|
// More than 255 actors are specified in one generation group.
|
||||||
// If it is not a test, consult the programmer.
|
// If it is not a test, consult the programmer.
|
||||||
printDebugMsg(this,
|
printDebugMsg(this,
|
||||||
|
@ -345,18 +542,15 @@ void Object::decrementLinkNum() {
|
||||||
sead::Vector3f Object::getRotate() const {
|
sead::Vector3f Object::getRotate() const {
|
||||||
sead::Vector3f result;
|
sead::Vector3f result;
|
||||||
mMubinIter.getRotate(&result);
|
mMubinIter.getRotate(&result);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// NON_MATCHING: Vec3f copy incorrect
|
// NON_MATCHING: Vec3f copy incorrect
|
||||||
void Object::getTraversePosAndLoadDistance(sead::Vector3f* traverse_pos, f32* load_dist) const {
|
void Object::getTraversePosAndLoadDistance(sead::Vector3f* traverse_pos, f32* load_dist) const {
|
||||||
if (mFlags.isOn(Flag::HasTraversePos)) {
|
if (mFlags.isOn(Flag::HasTraversePos))
|
||||||
mMubinIter.tryGetFloatArrayByKey(&traverse_pos->x, "TraversePos");
|
mMubinIter.tryGetFloatArrayByKey(&traverse_pos->x, "TraversePos");
|
||||||
} else {
|
else
|
||||||
*traverse_pos = mTranslate;
|
*traverse_pos = mTranslate;
|
||||||
}
|
|
||||||
|
|
||||||
*load_dist = getLoadDistance(false);
|
*load_dist = getLoadDistance(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,26 +6,26 @@
|
||||||
#include "KingSystem/ActorSystem/actActor.h"
|
#include "KingSystem/ActorSystem/actActor.h"
|
||||||
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
|
#include "KingSystem/ActorSystem/actActorLinkConstDataAccess.h"
|
||||||
#include "KingSystem/ActorSystem/actDebug.h"
|
#include "KingSystem/ActorSystem/actDebug.h"
|
||||||
|
#include "KingSystem/GameData/gdtFlagHandle.h"
|
||||||
#include "KingSystem/Map/mapDebug.h"
|
#include "KingSystem/Map/mapDebug.h"
|
||||||
#include "KingSystem/Map/mapMubinIter.h"
|
#include "KingSystem/Map/mapMubinIter.h"
|
||||||
|
#include "KingSystem/Map/mapPlacementActors.h"
|
||||||
#include "KingSystem/Map/mapPlacementMgr.h"
|
#include "KingSystem/Map/mapPlacementMgr.h"
|
||||||
#include "KingSystem/Utils/Types.h"
|
#include "KingSystem/Utils/Types.h"
|
||||||
|
|
||||||
namespace ksys::act {
|
namespace ksys::act {
|
||||||
class BaseProc;
|
class BaseProc;
|
||||||
}
|
class BaseProcInitializer;
|
||||||
|
class BaseProcCreateTask;
|
||||||
|
} // namespace ksys::act
|
||||||
|
|
||||||
namespace ksys::map {
|
namespace ksys::map {
|
||||||
|
|
||||||
class Object;
|
|
||||||
|
|
||||||
class ObjectLinkData;
|
class ObjectLinkData;
|
||||||
struct ObjectLink;
|
struct ObjectLink;
|
||||||
struct ObjectLinkArray;
|
struct ObjectLinkArray;
|
||||||
|
|
||||||
class LinkTag;
|
class LinkTag;
|
||||||
|
|
||||||
// FIXME: incomplete
|
|
||||||
class Object {
|
class Object {
|
||||||
public:
|
public:
|
||||||
// TODO: rename
|
// TODO: rename
|
||||||
|
@ -35,12 +35,29 @@ public:
|
||||||
_8 = 0x8,
|
_8 = 0x8,
|
||||||
_10 = 0x10,
|
_10 = 0x10,
|
||||||
_20 = 0x20,
|
_20 = 0x20,
|
||||||
|
_40 = 0x40,
|
||||||
_80 = 0x80,
|
_80 = 0x80,
|
||||||
|
_100 = 0x100,
|
||||||
|
ActorCreated = 0x200,
|
||||||
|
_400 = 0x400,
|
||||||
|
_2000 = 0x2000,
|
||||||
|
_4000 = 0x4000,
|
||||||
_8000 = 0x8000,
|
_8000 = 0x8000,
|
||||||
_40000 = 0x40000,
|
_40000 = 0x40000,
|
||||||
_80000 = 0x80000,
|
_80000 = 0x80000,
|
||||||
Freed = 0xC65067E6,
|
_100000 = 0x100000,
|
||||||
|
_400000 = 0x400000,
|
||||||
|
_2000000 = 0x2000000,
|
||||||
|
_4000000 = 0x4000000,
|
||||||
|
_40000000 = 0x40000000,
|
||||||
_80000000 = 0x80000000,
|
_80000000 = 0x80000000,
|
||||||
|
ResetOnUnlinkFailed = _100 | _2000,
|
||||||
|
ResetOnUnlink = _2 | _4 | _80 | _100 | ActorCreated | _400 | _2000,
|
||||||
|
_400400 = _400 | _400000,
|
||||||
|
_500400 = _400400 | _100000,
|
||||||
|
_80002106 = _2 | _4 | _100 | _2000 | _80000000,
|
||||||
|
ResetOnFreed = ResetOnUnlink | _500400 | _20 | _40 | _4000 | _2000000 | _4000000 |
|
||||||
|
_40000000 | _80000000,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class Flag {
|
enum class Flag {
|
||||||
|
@ -74,21 +91,38 @@ public:
|
||||||
Object();
|
Object();
|
||||||
~Object();
|
~Object();
|
||||||
|
|
||||||
|
void initData(MubinIter* iter, u8 idx, u32 actor_data_idx, ActorData* data);
|
||||||
void free();
|
void free();
|
||||||
|
|
||||||
void onBaseProcCreated(act::BaseProc* proc);
|
|
||||||
|
|
||||||
bool getActorWithAccessor(act::ActorLinkConstDataAccess& accessor) const;
|
|
||||||
act::Actor* getActor() const;
|
|
||||||
void registerBaseProc(act::BaseProc* proc);
|
void registerBaseProc(act::BaseProc* proc);
|
||||||
void setBaseProcDirect(act::BaseProc* proc);
|
void setBaseProcDirect(act::BaseProc* proc);
|
||||||
|
void onBaseProcCreated(act::BaseProc* proc);
|
||||||
|
act::BaseProc* tryGetProc(bool force);
|
||||||
|
void unlinkProc(bool force);
|
||||||
|
|
||||||
|
bool getActorWithAccessor(act::ActorLinkConstDataAccess& accessor);
|
||||||
|
act::Actor* tryGetActor(bool force);
|
||||||
|
act::Actor* getActor();
|
||||||
|
|
||||||
|
LinkTag* tryGetLinkTag(bool force);
|
||||||
|
|
||||||
bool isEnemyOrNpcOrActiveOrMapPassive() const;
|
bool isEnemyOrNpcOrActiveOrMapPassive() const;
|
||||||
bool isFlags8Cleared() const;
|
bool isFlags8Cleared() const;
|
||||||
bool isNpcOrActiveOrMapPassiveOrFlag1() const;
|
bool isNpcOrActiveOrMapPassiveOrFlag1() const;
|
||||||
bool isMapPassive(const PlacementActors* pa) const;
|
bool isMapPassive(const PlacementActors* pa) const;
|
||||||
bool checkActorDataFlag(const PlacementActors* pa, ActorData::Flag flag) const;
|
|
||||||
bool isEnemyOrNpc(const PlacementActors* pa) const;
|
bool isEnemyOrNpc(const PlacementActors* pa) const;
|
||||||
|
bool isRevivalGameDataFlagOn() const;
|
||||||
|
bool checkActorDataFlag(const PlacementActors* pa, ActorData::Flag flag) const;
|
||||||
|
bool checkTraverseFlags() const;
|
||||||
|
bool checkRevivalFlag(ActorData::Flag bit) const;
|
||||||
|
|
||||||
|
void setRevivalFlagValueIf(ActorData::Flag bit, bool value);
|
||||||
|
void setRevivalFlagValue(bool value);
|
||||||
|
void setFieldATrue();
|
||||||
|
|
||||||
|
sead::Vector3f getScale() const;
|
||||||
|
sead::Vector3f getRotate() const;
|
||||||
|
void setTranslate(const sead::Vector3f& translate);
|
||||||
|
|
||||||
f32 getDispDistanceMultiplier() const {
|
f32 getDispDistanceMultiplier() const {
|
||||||
f32 mult = 1.0;
|
f32 mult = 1.0;
|
||||||
|
@ -99,18 +133,18 @@ public:
|
||||||
return mult;
|
return mult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void getTraversePosAndLoadDistance(sead::Vector3f* traverse_pos, f32* load_dist) const;
|
||||||
f32 getDispDistance(const PlacementActors* pa, bool get_diameter, bool ignore_radius) const;
|
f32 getDispDistance(const PlacementActors* pa, bool get_diameter, bool ignore_radius) const;
|
||||||
f32 getDispDistance(const ActorData* data, bool get_diameter, u32 unused,
|
f32 getDispDistance(const ActorData* data, bool get_diameter, u32 unused,
|
||||||
bool ignore_radius) const;
|
bool ignore_radius) const;
|
||||||
f32 getDispDistance(bool get_diameter = false, bool ignore_radius = false) const;
|
f32 getDispDistance(bool get_diameter = false, bool ignore_radius = false) const;
|
||||||
|
|
||||||
f32 getTraverseDist(const ActorData* data, bool get_diameter, u32 unused,
|
f32 getTraverseDist(const ActorData* data, bool get_diameter, u32 unused,
|
||||||
bool ignore_radius) const;
|
bool ignore_radius) const;
|
||||||
f32 getTraverseDistForLOD() const;
|
f32 getTraverseDistForLOD() const;
|
||||||
sead::Vector3f getScale() const;
|
|
||||||
|
|
||||||
const char* getUnitConfigName() const;
|
const char* getUnitConfigName() const;
|
||||||
const char* getUnitConfigNameFromByaml() const;
|
const char* getUnitConfigNameFromByaml() const;
|
||||||
|
void getUniqueName(const char** out) const;
|
||||||
|
|
||||||
Object* findPlacementLODLinkObject(const PlacementActors* unused) const;
|
Object* findPlacementLODLinkObject(const PlacementActors* unused) const;
|
||||||
Object* findPlacementLODLinkObject() const;
|
Object* findPlacementLODLinkObject() const;
|
||||||
|
@ -118,26 +152,28 @@ public:
|
||||||
const char* getHashIdStringDebug() const;
|
const char* getHashIdStringDebug() const;
|
||||||
const char* getHashIdStringDebug_0() const;
|
const char* getHashIdStringDebug_0() const;
|
||||||
|
|
||||||
|
bool x_18() const;
|
||||||
|
bool x_20() const;
|
||||||
|
s32 x_22() const;
|
||||||
|
|
||||||
|
bool hasGenGroup() const;
|
||||||
|
void spawnGenGroupActorsIfNeeded(Object* obj);
|
||||||
|
|
||||||
void* getRails() const;
|
void* getRails() const;
|
||||||
void* getRails_0() const;
|
void* getRails_0() const;
|
||||||
|
bool setupTargetLinks(Object* src, ObjectLink* link, sead::Heap* heap);
|
||||||
bool allocLinkData(sead::Heap* heap);
|
bool allocLinkData(sead::Heap* heap);
|
||||||
bool hasGenGroup() const;
|
|
||||||
void incrementLinkNum();
|
void incrementLinkNum();
|
||||||
void decrementLinkNum();
|
void decrementLinkNum();
|
||||||
|
bool checkCreateOrDeleteLinkObjRevival() const;
|
||||||
|
|
||||||
sead::Vector3f getRotate() const;
|
bool shouldSkipSpawn() const;
|
||||||
void getTraversePosAndLoadDistance(sead::Vector3f* traverse_pos, f32* load_dist) const;
|
bool shouldSkipSpawn_(bool x) const;
|
||||||
void getUniqueName(const char** out) const;
|
|
||||||
void setTranslate(const sead::Vector3f& translate);
|
|
||||||
|
|
||||||
// TODO:
|
// TODO:
|
||||||
void initData(MubinIter* iter, u8 idx, u32 actor_data_idx, ActorData* data);
|
|
||||||
void initRevivalGameDataFlagAndMiscFlags(ActorData* data, bool zero);
|
void initRevivalGameDataFlagAndMiscFlags(ActorData* data, bool zero);
|
||||||
act::BaseProc* getActor_0(bool a1) const;
|
|
||||||
LinkTag* x_10(bool a1) const;
|
|
||||||
f32 getLoadDistance(bool get_diameter) const;
|
f32 getLoadDistance(bool get_diameter) const;
|
||||||
Object* findSrcLODLinkObject() const;
|
Object* findSrcLODLinkObject() const;
|
||||||
bool isRevivalGameDataFlagOn() const;
|
|
||||||
|
|
||||||
const auto& getFlags0() const { return mFlags0; }
|
const auto& getFlags0() const { return mFlags0; }
|
||||||
const auto& getFlags() const { return mFlags; }
|
const auto& getFlags() const { return mFlags; }
|
||||||
|
@ -159,7 +195,7 @@ public:
|
||||||
act::BaseProc* getProc() const { return mProc; }
|
act::BaseProc* getProc() const { return mProc; }
|
||||||
ObjectLinkData* getLinkData() const { return mLinkData; }
|
ObjectLinkData* getLinkData() const { return mLinkData; }
|
||||||
|
|
||||||
u32 getRevivalGameDataFlagHash() const { return mRevivalGameDataFlagHash; }
|
gdt::FlagHandle getRevivalGameDataFlagHash() const { return mRevivalGameDataFlagHash; }
|
||||||
u32 getHashId() const { return mHashId; }
|
u32 getHashId() const { return mHashId; }
|
||||||
|
|
||||||
const sead::Vector3f& getTranslate() const { return mTranslate; }
|
const sead::Vector3f& getTranslate() const { return mTranslate; }
|
||||||
|
@ -182,7 +218,7 @@ private:
|
||||||
MubinIter mMubinIter;
|
MubinIter mMubinIter;
|
||||||
act::BaseProc* mProc = nullptr;
|
act::BaseProc* mProc = nullptr;
|
||||||
ObjectLinkData* mLinkData = nullptr;
|
ObjectLinkData* mLinkData = nullptr;
|
||||||
u32 mRevivalGameDataFlagHash = 0xffffffff;
|
gdt::FlagHandle mRevivalGameDataFlagHash = gdt::InvalidHandle;
|
||||||
void* _50 = nullptr;
|
void* _50 = nullptr;
|
||||||
u32 mHashId = 0;
|
u32 mHashId = 0;
|
||||||
sead::Vector3f mTranslate;
|
sead::Vector3f mTranslate;
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
#include "KingSystem/Map/mapObjectGenGroup.h"
|
|
@ -0,0 +1,7 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace ksys::map {
|
||||||
|
|
||||||
|
class GenGroup {};
|
||||||
|
|
||||||
|
} // namespace ksys::map
|
|
@ -1,15 +1,131 @@
|
||||||
#include "KingSystem/Map/mapObjectLink.h"
|
#include "KingSystem/Map/mapObjectLink.h"
|
||||||
|
#include <container/seadBuffer.h>
|
||||||
|
#include "KingSystem/ActorSystem/actActorConstDataAccess.h"
|
||||||
#include "KingSystem/Map/mapObject.h"
|
#include "KingSystem/Map/mapObject.h"
|
||||||
|
#include "KingSystem/Map/mapObjectGenGroup.h"
|
||||||
|
|
||||||
namespace ksys::map {
|
namespace ksys::map {
|
||||||
|
|
||||||
ObjectLinkData::ObjectLinkData() = default;
|
struct MapLinkDefinition {
|
||||||
|
const char* name;
|
||||||
|
const char* desc;
|
||||||
|
MapLinkDefType type;
|
||||||
|
};
|
||||||
|
|
||||||
act::BaseProc* ObjectLink::getObjectProc() const {
|
static constexpr u32 sNumTypes = 42;
|
||||||
|
static constexpr sead::SafeArray<MapLinkDefinition, sNumTypes> sMapLinkDefinitions{{
|
||||||
|
{"-AxisX", "マイナスX軸シグナル", MapLinkDefType::NAxisX},
|
||||||
|
{"-AxisY", "マイナスY軸シグナル", MapLinkDefType::NAxisY},
|
||||||
|
{"-AxisZ", "マイナスZ軸シグナル", MapLinkDefType::NAxisZ},
|
||||||
|
{"AreaCol", "エリア(センサ)指定", MapLinkDefType::AreaCol},
|
||||||
|
{"AxisX", "X軸シグナル", MapLinkDefType::AxisX},
|
||||||
|
{"AxisY", "Y軸シグナル", MapLinkDefType::AxisY},
|
||||||
|
{"AxisZ", "Z軸シグナル", MapLinkDefType::AxisZ},
|
||||||
|
{"BAndSCs", "ボール&ソケットCS", MapLinkDefType::BAndSCs},
|
||||||
|
{"BAndSLimitAngYCs", "Y角速度制限付ボール&ソケットCS", MapLinkDefType::BAndSLimitAngYCs},
|
||||||
|
{"BasicSig", "基本シグナル", MapLinkDefType::BasicSig},
|
||||||
|
{"BasicSigOnOnly", "オンのみ基本シグナル", MapLinkDefType::BasicSigOnOnly},
|
||||||
|
{"ChangeAtnSig", "アテンション変更時シグナル", MapLinkDefType::ChangeAtnSig},
|
||||||
|
{"CogWheelCs", "歯車CS", MapLinkDefType::CogWheelCs},
|
||||||
|
{"CopyWaitRevival", "配置自動セーブ継承", MapLinkDefType::CopyWaitRevival},
|
||||||
|
{"Create", "生成", MapLinkDefType::Create},
|
||||||
|
{"DeadUp", "死んだらオン", MapLinkDefType::DeadUp},
|
||||||
|
{"DemoMember", "デモ参加", MapLinkDefType::DemoMember},
|
||||||
|
{"FixedCs", "固定CS", MapLinkDefType::FixedCs},
|
||||||
|
{"ForSale", "売り物", MapLinkDefType::ForSale},
|
||||||
|
{"ForbidAttention", "アテンションタイプ変更", MapLinkDefType::ForbidAttention},
|
||||||
|
{"Freeze", "凍結", MapLinkDefType::Freeze},
|
||||||
|
{"GimmickSuccess", "ネタ成功シグナル", MapLinkDefType::GimmickSuccess},
|
||||||
|
{"HingeCs", "ヒンジCS", MapLinkDefType::HingeCs},
|
||||||
|
{"LifeZero", "ライフ0", MapLinkDefType::LifeZero},
|
||||||
|
{"LimitHingeCs", "制限付ヒンジCS", MapLinkDefType::LimitHingeCs},
|
||||||
|
{"ModelBind", "モデルバインド", MapLinkDefType::ModelBind},
|
||||||
|
{"MtxCopyCreate", "位置継承生成", MapLinkDefType::MtxCopyCreate},
|
||||||
|
{"OffWaitRevival", "配置自動セーブオフ", MapLinkDefType::OffWaitRevival},
|
||||||
|
{"PhysSystemGroup", "物理システムグループ", MapLinkDefType::PhysSystemGroup},
|
||||||
|
{"PlacementLOD", "配置LOD", MapLinkDefType::PlacementLOD},
|
||||||
|
{"PulleyCs", "滑車CS", MapLinkDefType::PulleyCs},
|
||||||
|
{"RackAndPinionCs", "ラック&ピニオンCS", MapLinkDefType::RackAndPinionCs},
|
||||||
|
{"Recreate", "再生成", MapLinkDefType::Recreate},
|
||||||
|
{"Reference", "参照", MapLinkDefType::Reference},
|
||||||
|
{"Remains", "遺物シグナル", MapLinkDefType::Remains},
|
||||||
|
{"SensorBind", "センサバインド", MapLinkDefType::SensorBlind},
|
||||||
|
{"SliderCs", "スライダーCS", MapLinkDefType::SliderCs},
|
||||||
|
{"Stable", "安定", MapLinkDefType::Stable},
|
||||||
|
{"StackLink", "スタック", MapLinkDefType::StackLink},
|
||||||
|
{"SyncLink", "生成グループ", MapLinkDefType::SyncLink},
|
||||||
|
{"VelocityControl", "速度制御シグナル", MapLinkDefType::VelocityControl},
|
||||||
|
}};
|
||||||
|
|
||||||
|
const char* ObjectLink::getDescription() const {
|
||||||
|
return getDescriptionForType(type);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* ObjectLink::getDescriptionForType(MapLinkDefType t) {
|
||||||
|
const char* desc = "不定"; // invalid
|
||||||
|
|
||||||
|
for (int i = 0; i < sMapLinkDefinitions.size(); ++i) {
|
||||||
|
if (sMapLinkDefinitions[i].type == t) {
|
||||||
|
desc = sMapLinkDefinitions[i].desc;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
MapLinkDefType ObjectLink::getTypeForName(const sead::SafeString& name) {
|
||||||
|
sead::Buffer<const MapLinkDefinition> buf{sMapLinkDefinitions.size(),
|
||||||
|
sMapLinkDefinitions.getBufferPtr()};
|
||||||
|
|
||||||
|
s32 idx = buf.binarySearchC(
|
||||||
|
[&](const MapLinkDefinition& item) { return sead::SafeString(item.name).compare(name); });
|
||||||
|
|
||||||
|
if (idx == -1)
|
||||||
|
return MapLinkDefType::Invalid;
|
||||||
|
return buf[idx].type;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ObjectLink::sub_7100D4E310(MapLinkDefType t) {
|
||||||
|
switch (t) {
|
||||||
|
case MapLinkDefType::Create:
|
||||||
|
case MapLinkDefType::Delete:
|
||||||
|
case MapLinkDefType::MtxCopyCreate:
|
||||||
|
case MapLinkDefType::Freeze:
|
||||||
|
case MapLinkDefType::ForbidAttention:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
case MapLinkDefType::BasicSig:
|
||||||
|
case MapLinkDefType::AxisX:
|
||||||
|
case MapLinkDefType::AxisY:
|
||||||
|
case MapLinkDefType::AxisZ:
|
||||||
|
case MapLinkDefType::NAxisX:
|
||||||
|
case MapLinkDefType::NAxisY:
|
||||||
|
case MapLinkDefType::NAxisZ:
|
||||||
|
case MapLinkDefType::GimmickSuccess:
|
||||||
|
case MapLinkDefType::VelocityControl:
|
||||||
|
case MapLinkDefType::BasicSigOnOnly:
|
||||||
|
case MapLinkDefType::Remains:
|
||||||
|
case MapLinkDefType::DeadUp:
|
||||||
|
case MapLinkDefType::LifeZero:
|
||||||
|
case MapLinkDefType::Stable:
|
||||||
|
case MapLinkDefType::ChangeAtnSig:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ObjectLink::isPlacementLODOrForSaleLink(MapLinkDefType t) {
|
||||||
|
return t == MapLinkDefType::PlacementLOD || t == MapLinkDefType::ForSale;
|
||||||
|
}
|
||||||
|
|
||||||
|
act::Actor* ObjectLink::getObjectActor() const {
|
||||||
if (other_obj == nullptr)
|
if (other_obj == nullptr)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
return other_obj->getActor_0(false);
|
return other_obj->tryGetActor(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ObjectLink::getObjectProcWithAccessor(act::ActorLinkConstDataAccess& accessor) const {
|
bool ObjectLink::getObjectProcWithAccessor(act::ActorLinkConstDataAccess& accessor) const {
|
||||||
|
@ -19,4 +135,97 @@ bool ObjectLink::getObjectProcWithAccessor(act::ActorLinkConstDataAccess& access
|
||||||
return other_obj->getActorWithAccessor(accessor);
|
return other_obj->getActorWithAccessor(accessor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ObjectLinkData::ObjectLinkData() = default;
|
||||||
|
|
||||||
|
void ObjectLinkData::deleteArrays() {
|
||||||
|
if (mRail) {
|
||||||
|
delete mRail;
|
||||||
|
mRail = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
mLinksOther.links.freeBuffer();
|
||||||
|
mLinksCs.links.freeBuffer();
|
||||||
|
mObjects.freeBuffer();
|
||||||
|
mLinksToSelf.links.freeBuffer();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ObjectLinkData::allocLinksToSelf(s32 num_links, sead::Heap* heap) {
|
||||||
|
if (num_links >= 1) {
|
||||||
|
mLinksToSelf.links.tryAllocBuffer(num_links, heap);
|
||||||
|
if (!mLinksToSelf.links.isBufferReady())
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ObjectLink* ObjectLinkData::findLinkWithType(MapLinkDefType t) {
|
||||||
|
return findLinkWithType_0(t);
|
||||||
|
}
|
||||||
|
|
||||||
|
ObjectLink* ObjectLinkData::findLinkWithType_0(MapLinkDefType t) {
|
||||||
|
switch (t) {
|
||||||
|
case MapLinkDefType::FixedCs:
|
||||||
|
case MapLinkDefType::HingeCs:
|
||||||
|
case MapLinkDefType::LimitHingeCs:
|
||||||
|
case MapLinkDefType::SliderCs:
|
||||||
|
case MapLinkDefType::PulleyCs:
|
||||||
|
case MapLinkDefType::BAndSCs:
|
||||||
|
case MapLinkDefType::BAndSLimitAngYCs:
|
||||||
|
case MapLinkDefType::CogWheelCs:
|
||||||
|
case MapLinkDefType::RackAndPinionCs:
|
||||||
|
return mLinksCs.findLinkWithType(t);
|
||||||
|
default:
|
||||||
|
return mLinksOther.findLinkWithType(t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ObjectLinkData::setGenGroup(GenGroup* group) {
|
||||||
|
if (mGenGroup == nullptr)
|
||||||
|
mGenGroup = group;
|
||||||
|
}
|
||||||
|
|
||||||
|
// NON_MATCHING
|
||||||
|
bool ObjectLinkArray::checkLink(MapLinkDefType t, bool b) {
|
||||||
|
bool x_exists;
|
||||||
|
ObjectLink* link = nullptr;
|
||||||
|
|
||||||
|
if (t != MapLinkDefType::BasicSig) {
|
||||||
|
x_exists = false;
|
||||||
|
} else {
|
||||||
|
link = findLinkWithType(MapLinkDefType::BasicSigOnOnly);
|
||||||
|
x_exists = link != nullptr;
|
||||||
|
|
||||||
|
if (link != nullptr)
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
link = findLinkWithType(t);
|
||||||
|
|
||||||
|
if (link == nullptr)
|
||||||
|
return false;
|
||||||
|
if (link->type == MapLinkDefType::VelocityControl)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
done:
|
||||||
|
act::ActorConstDataAccess acc{};
|
||||||
|
|
||||||
|
if (link->other_obj != nullptr)
|
||||||
|
link->other_obj->getActorWithAccessor(acc);
|
||||||
|
else
|
||||||
|
acc.acquire(nullptr);
|
||||||
|
return acc.checkLinkTagActivated(b, x_exists);
|
||||||
|
}
|
||||||
|
|
||||||
|
ObjectLink* ObjectLinkArray::findLinkWithType(MapLinkDefType type) {
|
||||||
|
return findLinkWithType_0(type);
|
||||||
|
}
|
||||||
|
|
||||||
|
ObjectLink* ObjectLinkArray::findLinkWithType_0(MapLinkDefType type) {
|
||||||
|
for (int i = 0; i < links.size(); ++i) {
|
||||||
|
if (links[i].type == type)
|
||||||
|
return &links[i];
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ksys::map
|
} // namespace ksys::map
|
||||||
|
|
|
@ -1,17 +1,20 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <basis/seadTypes.h>
|
#include <basis/seadTypes.h>
|
||||||
|
#include <container/seadBuffer.h>
|
||||||
#include "KingSystem/Map/mapMubinIter.h"
|
#include "KingSystem/Map/mapMubinIter.h"
|
||||||
#include "KingSystem/Utils/Types.h"
|
#include "KingSystem/Utils/Types.h"
|
||||||
|
|
||||||
namespace ksys::act {
|
namespace ksys::act {
|
||||||
|
class Actor;
|
||||||
class ActorLinkConstDataAccess;
|
class ActorLinkConstDataAccess;
|
||||||
class BaseProc;
|
|
||||||
} // namespace ksys::act
|
} // namespace ksys::act
|
||||||
|
|
||||||
namespace ksys::map {
|
namespace ksys::map {
|
||||||
|
|
||||||
|
class GenGroup;
|
||||||
class Object;
|
class Object;
|
||||||
|
class Rail;
|
||||||
|
|
||||||
enum class MapLinkDefType {
|
enum class MapLinkDefType {
|
||||||
BasicSig = 0,
|
BasicSig = 0,
|
||||||
|
@ -60,19 +63,28 @@ enum class MapLinkDefType {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ObjectLink {
|
struct ObjectLink {
|
||||||
act::BaseProc* getObjectProc() const;
|
~ObjectLink() {}
|
||||||
|
act::Actor* getObjectActor() const;
|
||||||
bool getObjectProcWithAccessor(act::ActorLinkConstDataAccess& accessor) const;
|
bool getObjectProcWithAccessor(act::ActorLinkConstDataAccess& accessor) const;
|
||||||
|
const char* getDescription() const;
|
||||||
|
static const char* getDescriptionForType(MapLinkDefType t);
|
||||||
|
static MapLinkDefType getTypeForName(const sead::SafeString& name);
|
||||||
|
static bool sub_7100D4E310(MapLinkDefType t);
|
||||||
|
static bool isPlacementLODOrForSaleLink(MapLinkDefType t);
|
||||||
|
|
||||||
Object* other_obj;
|
Object* other_obj = nullptr;
|
||||||
u32 type;
|
MapLinkDefType type = MapLinkDefType::Invalid;
|
||||||
MubinIter iter;
|
MubinIter iter{};
|
||||||
};
|
};
|
||||||
KSYS_CHECK_SIZE_NX150(ObjectLink, 0x20);
|
KSYS_CHECK_SIZE_NX150(ObjectLink, 0x20);
|
||||||
|
|
||||||
struct ObjectLinkArray {
|
struct ObjectLinkArray {
|
||||||
ObjectLink* findLinkWithType(MapLinkDefType link_type);
|
bool checkLink(MapLinkDefType t, bool b);
|
||||||
u32 num_links = 0;
|
|
||||||
ObjectLink* links = nullptr;
|
ObjectLink* findLinkWithType(MapLinkDefType type);
|
||||||
|
ObjectLink* findLinkWithType_0(MapLinkDefType type);
|
||||||
|
|
||||||
|
sead::Buffer<ObjectLink> links;
|
||||||
};
|
};
|
||||||
KSYS_CHECK_SIZE_NX150(ObjectLinkArray, 0x10);
|
KSYS_CHECK_SIZE_NX150(ObjectLinkArray, 0x10);
|
||||||
|
|
||||||
|
@ -80,13 +92,30 @@ class ObjectLinkData {
|
||||||
public:
|
public:
|
||||||
ObjectLinkData();
|
ObjectLinkData();
|
||||||
|
|
||||||
|
void deleteArrays();
|
||||||
void release(Object* obj, bool a1);
|
void release(Object* obj, bool a1);
|
||||||
|
bool allocLinksToSelf(s32 num_links, sead::Heap* heap);
|
||||||
|
|
||||||
|
bool sub_7100D4EC40(Object* src, ObjectLink* link, Object* dest);
|
||||||
|
void sub_7100D4FB78(Object* obj);
|
||||||
|
bool checkCreateLinkObjRevival() const;
|
||||||
|
bool checkDeleteLinkObjRevival() const;
|
||||||
|
|
||||||
|
ObjectLink* findLinkWithType(MapLinkDefType t);
|
||||||
|
ObjectLink* findLinkWithType_0(MapLinkDefType t);
|
||||||
|
|
||||||
|
void setGenGroup(GenGroup* group);
|
||||||
|
|
||||||
|
void x_1(act::Actor* actor, Object* obj);
|
||||||
|
|
||||||
|
bool checkCreateOrDeleteLinkObjRevival() const {
|
||||||
|
return checkDeleteLinkObjRevival() || checkCreateLinkObjRevival();
|
||||||
|
}
|
||||||
|
|
||||||
Object* mCreateLinksSrcObj = nullptr;
|
Object* mCreateLinksSrcObj = nullptr;
|
||||||
Object* mDeleteLinksSrcObj = nullptr;
|
Object* mDeleteLinksSrcObj = nullptr;
|
||||||
u32 mNumLinksReference = 0;
|
|
||||||
|
|
||||||
void* mLinksReference = nullptr;
|
sead::Buffer<Object*> mObjects;
|
||||||
ObjectLinkArray mLinksOther{};
|
ObjectLinkArray mLinksOther{};
|
||||||
ObjectLinkArray mLinksCs{};
|
ObjectLinkArray mLinksCs{};
|
||||||
ObjectLinkArray mLinksToSelf{};
|
ObjectLinkArray mLinksToSelf{};
|
||||||
|
@ -97,8 +126,8 @@ public:
|
||||||
bool mNoAutoDemoMember = false;
|
bool mNoAutoDemoMember = false;
|
||||||
bool field_57 = false;
|
bool field_57 = false;
|
||||||
|
|
||||||
void* mGenGroup = nullptr;
|
GenGroup* mGenGroup = nullptr;
|
||||||
void* mRails = nullptr;
|
Rail* mRail = nullptr;
|
||||||
};
|
};
|
||||||
KSYS_CHECK_SIZE_NX150(ObjectLinkData, 0x68);
|
KSYS_CHECK_SIZE_NX150(ObjectLinkData, 0x68);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
#include "KingSystem/Map/mapPlacementActors.h"
|
|
@ -0,0 +1,126 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <container/seadSafeArray.h>
|
||||||
|
#include <prim/seadSafeString.h>
|
||||||
|
#include <prim/seadTypedBitFlag.h>
|
||||||
|
#include <prim/seadTypedLongBitFlag.h>
|
||||||
|
#include <thread/seadAtomic.h>
|
||||||
|
#include "KingSystem/Utils/Types.h"
|
||||||
|
|
||||||
|
namespace ksys::map {
|
||||||
|
|
||||||
|
class Object;
|
||||||
|
|
||||||
|
// TODO: rename
|
||||||
|
enum class ActorFlag8 {
|
||||||
|
MapPassive = 0x1,
|
||||||
|
EnemyOrNpcOrActiveOrAreaOrAirWall = 0x2,
|
||||||
|
UndispCutOrPreActorXLinkOrChemical = 0x4,
|
||||||
|
_8 = 0x8,
|
||||||
|
CanGetPouch = 0x10,
|
||||||
|
HasCreateOrDeleteLink = 0x20,
|
||||||
|
DragonDropItemTarget = 0x40,
|
||||||
|
TreeOrBush = 0x80,
|
||||||
|
};
|
||||||
|
|
||||||
|
class ActorData {
|
||||||
|
public:
|
||||||
|
enum class Flag {
|
||||||
|
MapPassive = 0,
|
||||||
|
_1 = 1,
|
||||||
|
_2 = 2,
|
||||||
|
_3 = 3,
|
||||||
|
_4 = 4,
|
||||||
|
_5 = 5,
|
||||||
|
_6 = 6,
|
||||||
|
_7 = 7,
|
||||||
|
MapConstActive = 8,
|
||||||
|
TraverseDist200 = 9,
|
||||||
|
TraverseDist400 = 10,
|
||||||
|
TraverseDist800 = 11,
|
||||||
|
TraverseDistReset = 12,
|
||||||
|
TraverseDist2000 = 13,
|
||||||
|
TraverseDist4000 = 14,
|
||||||
|
_15 = 15,
|
||||||
|
_16 = 16,
|
||||||
|
RevivalEnable = 17,
|
||||||
|
RevivalForUsed = 18,
|
||||||
|
RevivalForDrop = 19,
|
||||||
|
RevivalRandom = 20,
|
||||||
|
RevivalBloodyMoon = 21,
|
||||||
|
RevivalUnderGodTimeOrNoneForUsed = 22,
|
||||||
|
EnableRemainsScene = 23,
|
||||||
|
_24 = 24,
|
||||||
|
EnemyOrNpc_DisableFlashback = 25,
|
||||||
|
_26 = 26,
|
||||||
|
LimitYDiff = 27,
|
||||||
|
IsGrassCut = 28,
|
||||||
|
HasFar = 29,
|
||||||
|
Fairy = 30,
|
||||||
|
UnderGodForest = 31,
|
||||||
|
|
||||||
|
EnemyOrNpc = 32,
|
||||||
|
MapConstPassive = 33,
|
||||||
|
RandomCreateNotRain = 34,
|
||||||
|
_35 = 35,
|
||||||
|
MessageDialogViewBoard = 36,
|
||||||
|
_37 = 37,
|
||||||
|
NpcOrNonGanonAndNonGuardianEnemy = 38,
|
||||||
|
IgnoreBoundingAtAreaCulling = 39,
|
||||||
|
_40 = 40,
|
||||||
|
EnemyHuge = 41,
|
||||||
|
Enemy = 42,
|
||||||
|
_43 = 43,
|
||||||
|
EnemyLookOrGrassCutTagOrFirePillarOrDgnWater = 44,
|
||||||
|
_45 = 45,
|
||||||
|
MapPassiveOrFlag1 = 46,
|
||||||
|
_47 = 47,
|
||||||
|
_48 = 48,
|
||||||
|
SheikSensorTargetDeadOrAlive = 49,
|
||||||
|
Dragon = 50,
|
||||||
|
TreeOrBush = 51,
|
||||||
|
GuardianC = 52,
|
||||||
|
_53 = 53,
|
||||||
|
HasStopTimerFlag = 54,
|
||||||
|
AllRadarOrZukanActor = 55,
|
||||||
|
NoCreateForStackLink = 56,
|
||||||
|
OnLowTree = 57,
|
||||||
|
_58 = 58,
|
||||||
|
_59 = 59,
|
||||||
|
_60 = 60,
|
||||||
|
_61 = 61,
|
||||||
|
_62 = 62,
|
||||||
|
_63 = 63,
|
||||||
|
};
|
||||||
|
|
||||||
|
sead::TypedLongBitFlag<64, Flag, sead::Atomic<u32>> mFlags;
|
||||||
|
sead::TypedBitFlag<ActorFlag8, u8> mActorFlags8;
|
||||||
|
u8 TEMP[0x13F];
|
||||||
|
sead::FixedSafeString<64> mActorName;
|
||||||
|
};
|
||||||
|
KSYS_CHECK_SIZE_NX150(ActorData, 0x1A0);
|
||||||
|
|
||||||
|
// FIXME: incomplete
|
||||||
|
class PlacementStruct1 {
|
||||||
|
public:
|
||||||
|
sead::BitFlag16 mFlags;
|
||||||
|
bool mIsOneHitChallengeActive;
|
||||||
|
};
|
||||||
|
|
||||||
|
class PlacementActors {
|
||||||
|
public:
|
||||||
|
u32 getNumStaticObjs() const;
|
||||||
|
map::Object* getStaticObj_2(s32 idx) const;
|
||||||
|
bool sub_7100D524B4() const;
|
||||||
|
void x_9();
|
||||||
|
|
||||||
|
u8 _0[0xe0 - 0x0];
|
||||||
|
PlacementStruct1* mStruct1;
|
||||||
|
u8 _e8[0x538 - 0xe8];
|
||||||
|
sead::SafeArray<ActorData, 6000> mActorData;
|
||||||
|
// u8 _261b38[0x2a80d0 - 0x261b38];
|
||||||
|
u32 mActorDataMapSize;
|
||||||
|
};
|
||||||
|
// KSYS_CHECK_SIZE_NX150(PlacementActors, 0x2A80D0);
|
||||||
|
|
||||||
|
} // namespace ksys::map
|
|
@ -1,7 +1,133 @@
|
||||||
#include "KingSystem/Map/mapPlacementMgr.h"
|
#include "KingSystem/Map/mapPlacementMgr.h"
|
||||||
|
#include <thread/seadThreadUtil.h>
|
||||||
|
#include "KingSystem/ActorSystem/actActorCreator.h"
|
||||||
|
#include "KingSystem/ActorSystem/actClusteredRenderer.h"
|
||||||
|
#include "KingSystem/ActorSystem/actInfoData.h"
|
||||||
|
#include "KingSystem/ActorSystem/actInstParamPack.h"
|
||||||
|
#include "KingSystem/Map/mapObject.h"
|
||||||
|
#include "KingSystem/Map/mapPlacementActors.h"
|
||||||
|
#include "KingSystem/Map/mapPlacementTree.h"
|
||||||
|
#include "KingSystem/System/VFR.h"
|
||||||
|
|
||||||
namespace ksys::map {
|
namespace ksys::map {
|
||||||
|
|
||||||
SEAD_SINGLETON_DISPOSER_IMPL(PlacementMgr)
|
SEAD_SINGLETON_DISPOSER_IMPL(PlacementMgr)
|
||||||
|
|
||||||
|
PlacementMgr::PlacementMgr() : mThreadParams(this, &PlacementMgr::threadFn) {}
|
||||||
|
|
||||||
|
PlacementMgr::~PlacementMgr() {
|
||||||
|
mThreadHeap->destroy();
|
||||||
|
mDynamicHeap->destroy();
|
||||||
|
mVillagerHeap->destroy();
|
||||||
|
mTraverseResultHeap->destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlacementMgr::releaseTree() {
|
||||||
|
if (mPlacementTree != nullptr)
|
||||||
|
delete mPlacementTree;
|
||||||
|
mPlacementTree = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
// NON_MATCHING
|
||||||
|
void PlacementMgr::x_3() {
|
||||||
|
auto ac = act::ActorCreator::instance();
|
||||||
|
const auto loc = sead::makeScopedLock(ac->getCS());
|
||||||
|
if (mNumStaticObjs < mPlacementActors->getNumStaticObjs()) {
|
||||||
|
auto list = ac->getActorList();
|
||||||
|
for (act::Actor& node : list) {
|
||||||
|
if (node.getMapObject() == mPlacementActors->getStaticObj_2(mNumStaticObjs)) {
|
||||||
|
node.deleteLater(act::BaseProc::DeleteReason::_0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlacementMgr::reset7F0() {
|
||||||
|
_7f0 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// NON_MATCHING
|
||||||
|
void PlacementMgr::initClusteredRenderer() {
|
||||||
|
if (mThread != nullptr && mClusteredRenderer == nullptr)
|
||||||
|
return;
|
||||||
|
if (mThreadHeap == nullptr)
|
||||||
|
return;
|
||||||
|
|
||||||
|
mFlags.reset(MgrFlag::_40000);
|
||||||
|
mThread = new (mThreadHeap)
|
||||||
|
sead::DelegateThread("PlacementMgr", &mThreadParams, mThreadHeap,
|
||||||
|
sead::ThreadUtil::ConvertPrioritySeadToPlatform(0x14),
|
||||||
|
sead::MessageQueue::BlockType::Blocking, 0x7fffffff, 0x100000, 0x20);
|
||||||
|
mRequestedMsg = 0;
|
||||||
|
sead::CoreIdMask mask{sead::CoreId::cSub4};
|
||||||
|
mThread->setAffinity(mask);
|
||||||
|
mThread->start();
|
||||||
|
mFlags.reset(MgrFlag::_2);
|
||||||
|
|
||||||
|
if (mClusteredRenderer != nullptr) {
|
||||||
|
mClusteredRenderer->startThread();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlacementMgr::auto0() {
|
||||||
|
if (mThread == nullptr)
|
||||||
|
return;
|
||||||
|
mFlags.set(MgrFlag::_2);
|
||||||
|
_278 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlacementMgr::printDebugInfo() {
|
||||||
|
if (!sFlags.isOn(MgrStaticFlags::debug))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Actor info:%d (loaded:%d) Instance:%d
|
||||||
|
sead::FormatFixedSafeString<128> s1("アクタ情報:%d(ロード済み:%d) インスタンス:%d",
|
||||||
|
mPlacementActors->mActorDataMapSize, mLoadedActorCount,
|
||||||
|
mPlacementActors->getNumStaticObjs());
|
||||||
|
// Traverse result pre-actor:%d actor:%d
|
||||||
|
sead::FormatFixedSafeString<128> s2("トラバース結果 pre-actor:%d actor:%d",
|
||||||
|
mTraverseResults[mTraverseResultIdx].pre_actors.size(),
|
||||||
|
mTraverseResults[mTraverseResultIdx].actors.size());
|
||||||
|
// Memory preActor:%dk info:%dk result:%dk mass:%dk clustered:%d
|
||||||
|
sead::FormatFixedSafeString<128> s3(
|
||||||
|
"メモリ preActor:%dk info:%dk result:%dk mass:%dk clustered:%dk", 40468, 2437, 87,
|
||||||
|
mMassMemoryUsage / 1024, mClusteredMemoryUsage / 1024);
|
||||||
|
// Dynamic heap remaining:%dk
|
||||||
|
sead::FormatFixedSafeString<128> s4("動的ヒープ残り:%dk",
|
||||||
|
int(mDynamicHeap->getFreeSize()) / 1024);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlacementMgr::incrementCounter() {
|
||||||
|
_278++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlacementMgr::x() {
|
||||||
|
if (mFlags.isOn(MgrFlag::_2))
|
||||||
|
return;
|
||||||
|
|
||||||
|
mPlacementActors->x_9();
|
||||||
|
mIntTime++;
|
||||||
|
|
||||||
|
f32 last_time = mTime;
|
||||||
|
auto* vfr = VFR::instance();
|
||||||
|
mTime += vfr->getDeltaTime();
|
||||||
|
mTimeUpdated = s32(last_time) != s32(mTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlacementMgr::auto5() {
|
||||||
|
mFlags.set(MgrFlag::_1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlacementMgr::auto16() {
|
||||||
|
mFlags.set(MgrFlag::_100000);
|
||||||
|
mFlags.set(MgrFlag::_200000);
|
||||||
|
mFlags.set(MgrFlag::_400000);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PlacementMgr::someFlagCheck() const {
|
||||||
|
if (mFlags.isOn(MgrFlag::_80000))
|
||||||
|
return true;
|
||||||
|
return mFlags.isOn(MgrFlag::_100000);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ksys::map
|
} // namespace ksys::map
|
||||||
|
|
|
@ -1,131 +1,149 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <container/seadSafeArray.h>
|
#include <container/seadObjArray.h>
|
||||||
#include <heap/seadDisposer.h>
|
#include <heap/seadDisposer.h>
|
||||||
#include <prim/seadSafeString.h>
|
#include <heap/seadExpHeap.h>
|
||||||
#include <prim/seadTypedBitFlag.h>
|
#include <thread/seadDelegateThread.h>
|
||||||
#include <prim/seadTypedLongBitFlag.h>
|
#include "KingSystem/ActorSystem/actActor.h"
|
||||||
#include <thread/seadAtomic.h>
|
|
||||||
#include "KingSystem/Utils/Types.h"
|
namespace ksys::act {
|
||||||
|
class ClusteredRenderer;
|
||||||
|
class InstParamPack;
|
||||||
|
} // namespace ksys::act
|
||||||
|
|
||||||
namespace ksys::map {
|
namespace ksys::map {
|
||||||
|
|
||||||
// TODO: rename
|
class Object;
|
||||||
enum class ActorFlag8 {
|
class PlacementTree;
|
||||||
EnemyOrNpcOrActiveOrAreaOrAirWall = 0x2,
|
class PlacementActors;
|
||||||
MapPassiveOrFlag1 = 0x4,
|
|
||||||
};
|
|
||||||
|
|
||||||
class ActorData {
|
|
||||||
public:
|
|
||||||
enum class Flag {
|
|
||||||
MapPassive = 0,
|
|
||||||
_1 = 1,
|
|
||||||
_2 = 2,
|
|
||||||
_3 = 3,
|
|
||||||
_4 = 4,
|
|
||||||
_5 = 5,
|
|
||||||
_6 = 6,
|
|
||||||
_7 = 7,
|
|
||||||
MapConstActive = 8,
|
|
||||||
TraverseDist200 = 9,
|
|
||||||
TraverseDist400 = 10,
|
|
||||||
TraverseDist800 = 11,
|
|
||||||
TraverseDistReset = 12,
|
|
||||||
TraverseDist2000 = 13,
|
|
||||||
TraverseDist4000 = 14,
|
|
||||||
_15 = 15,
|
|
||||||
_16 = 16,
|
|
||||||
RevivalEnable = 17,
|
|
||||||
RevivalForUsed = 18,
|
|
||||||
RevivalForDrop = 19,
|
|
||||||
RevivalRandom = 20,
|
|
||||||
RevivalBloodyMoon = 21,
|
|
||||||
RevivalUnderGodTimeOrNoneForUsed = 22,
|
|
||||||
EnableRemainsScene = 23,
|
|
||||||
_24 = 24,
|
|
||||||
EnemyOrNpc_DisableFlashback = 25,
|
|
||||||
_26 = 26,
|
|
||||||
LimitYDiff = 27,
|
|
||||||
IsGrassCut = 28,
|
|
||||||
HasFar = 29,
|
|
||||||
Fairy = 30,
|
|
||||||
UnderGodForest = 31,
|
|
||||||
|
|
||||||
EnemyOrNpc = 32,
|
|
||||||
MapConstPassive = 33,
|
|
||||||
RandomCreateNotRain = 34,
|
|
||||||
_35 = 35,
|
|
||||||
MessageDialogViewBoard = 36,
|
|
||||||
_37 = 37,
|
|
||||||
NpcOrNonGanonAndNonGuardianEnemy = 38,
|
|
||||||
IgnoreBoundingAtAreaCulling = 39,
|
|
||||||
_40 = 40,
|
|
||||||
EnemyHuge = 41,
|
|
||||||
Enemy = 42,
|
|
||||||
_43 = 43,
|
|
||||||
EnemyLookOrGrassCutTagOrFirePillarOrDgnWater = 44,
|
|
||||||
_45 = 45,
|
|
||||||
MapPassiveOrFlag1 = 46,
|
|
||||||
_47 = 47,
|
|
||||||
_48 = 48,
|
|
||||||
SheikSensorTargetDeadOrAlive = 49,
|
|
||||||
Dragon = 50,
|
|
||||||
TreeOrBush = 51,
|
|
||||||
GuardianC = 52,
|
|
||||||
_53 = 53,
|
|
||||||
HasStopTimerFlag = 54,
|
|
||||||
AllRadarOrZukanActor = 55,
|
|
||||||
NoCreateForStackLink = 56,
|
|
||||||
OnLowTree = 57,
|
|
||||||
_58 = 58,
|
|
||||||
_59 = 59,
|
|
||||||
_60 = 60,
|
|
||||||
_61 = 61,
|
|
||||||
_62 = 62,
|
|
||||||
_63 = 63,
|
|
||||||
};
|
|
||||||
|
|
||||||
sead::TypedLongBitFlag<64, Flag, sead::Atomic<u32>> mFlags;
|
|
||||||
sead::TypedBitFlag<ActorFlag8, u8> mActorFlags8;
|
|
||||||
u8 TEMP[0x13F];
|
|
||||||
sead::FixedSafeString<64> mActorName;
|
|
||||||
};
|
|
||||||
KSYS_CHECK_SIZE_NX150(ActorData, 0x1A0);
|
|
||||||
|
|
||||||
// FIXME: move this to another header and rename
|
|
||||||
// FIXME: incomplete
|
|
||||||
class PlacementStruct1 {
|
|
||||||
public:
|
|
||||||
sead::BitFlag16 mFlags;
|
|
||||||
bool mIsOneHitChallengeActive;
|
|
||||||
};
|
|
||||||
|
|
||||||
class PlacementActors {
|
|
||||||
public:
|
|
||||||
u8 _0[0xe0 - 0x0];
|
|
||||||
PlacementStruct1* mStruct1;
|
|
||||||
u8 _e8[0x538 - 0xe8];
|
|
||||||
sead::SafeArray<ActorData, 6000> mActorData;
|
|
||||||
u8 _261b38[0x2a80d0 - 0x261b38];
|
|
||||||
};
|
|
||||||
KSYS_CHECK_SIZE_NX150(PlacementActors, 0x2A80D0);
|
|
||||||
|
|
||||||
class PlacementMgr {
|
class PlacementMgr {
|
||||||
SEAD_SINGLETON_DISPOSER(PlacementMgr)
|
SEAD_SINGLETON_DISPOSER(PlacementMgr)
|
||||||
PlacementMgr();
|
PlacementMgr();
|
||||||
virtual ~PlacementMgr();
|
virtual ~PlacementMgr();
|
||||||
|
|
||||||
|
struct TraverseResults {
|
||||||
|
sead::PtrArray<act::Actor> pre_actors;
|
||||||
|
sead::PtrArray<act::Actor> actors;
|
||||||
|
sead::PtrArray<u32> _20;
|
||||||
|
sead::PtrArray<u32> _30;
|
||||||
|
sead::PtrArray<u32> _40;
|
||||||
|
sead::PtrArray<u32> _50;
|
||||||
|
sead::PtrArray<u32> dragon_item_drop_targets;
|
||||||
|
sead::PtrArray<u32> _70;
|
||||||
|
};
|
||||||
|
KSYS_CHECK_SIZE_NX150(TraverseResults, 0x80);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
void releaseTree();
|
||||||
|
void x_3();
|
||||||
|
void reset7F0();
|
||||||
|
void initClusteredRenderer();
|
||||||
|
void auto0();
|
||||||
|
bool auto1();
|
||||||
|
void x_0(sead::Vector3f* pos, act::InstParamPack* pack);
|
||||||
|
void printDebugInfo();
|
||||||
|
void loadModel(Object* obj);
|
||||||
|
void incrementCounter();
|
||||||
|
void x();
|
||||||
|
void auto5();
|
||||||
|
void auto16();
|
||||||
|
bool someFlagCheck() const;
|
||||||
|
|
||||||
|
void threadFn(sead::Thread* thread, sead::MessageQueue::Element msg);
|
||||||
|
|
||||||
enum class MgrFlag {
|
enum class MgrFlag {
|
||||||
|
_1 = 0x1,
|
||||||
|
_2 = 0x2,
|
||||||
|
_20 = 0x20,
|
||||||
|
_40000 = 0x40000,
|
||||||
|
_80000 = 0x80000,
|
||||||
|
_100000 = 0x100000,
|
||||||
|
_200000 = 0x200000,
|
||||||
|
_400000 = 0x400000,
|
||||||
_1000000 = 0x1000000,
|
_1000000 = 0x1000000,
|
||||||
};
|
};
|
||||||
|
|
||||||
u8 TEMP1[0x1C8];
|
enum class MgrStaticFlags {
|
||||||
|
debug = 0x1,
|
||||||
|
};
|
||||||
|
|
||||||
|
static sead::TypedBitFlag<MgrStaticFlags, u32> sFlags;
|
||||||
|
|
||||||
|
u32 _28;
|
||||||
|
u32 _2c = 0;
|
||||||
|
u32 _30 = 0;
|
||||||
|
|
||||||
|
u8 TEMP[0x108];
|
||||||
|
sead::Delegate2<PlacementMgr, sead::Thread*, sead::MessageQueue::Element> mThreadParams;
|
||||||
|
sead::DelegateThread* mThread;
|
||||||
|
u32 mTraverseResultIdx;
|
||||||
|
u16 mRequestedMsg = 0;
|
||||||
|
|
||||||
|
sead::Vector3f mCameraPos{};
|
||||||
|
sead::Vector3f mPlayerPos{};
|
||||||
|
sead::Vector3f mPrevPlayerPos{};
|
||||||
|
sead::ExpHeap* mDynamicHeap;
|
||||||
|
sead::ExpHeap* mThreadHeap;
|
||||||
|
sead::ExpHeap* mVillagerHeap;
|
||||||
|
sead::ExpHeap* mTraverseResultHeap;
|
||||||
|
void* mActorCreator;
|
||||||
|
u32 mLoadedActorCount;
|
||||||
|
void* mTeraSystem;
|
||||||
|
s32 mIntTime;
|
||||||
|
f32 mTime;
|
||||||
|
bool mTimeUpdated;
|
||||||
|
|
||||||
|
s32 mMassMemoryUsage;
|
||||||
|
s32 mClusteredMemoryUsage;
|
||||||
|
void* mDebugHeap;
|
||||||
PlacementActors* mPlacementActors;
|
PlacementActors* mPlacementActors;
|
||||||
u8 TEMP2[0x48C];
|
|
||||||
|
void* mVillagerManager;
|
||||||
|
|
||||||
|
u32 mNumStaticObjs;
|
||||||
|
u32 mActorDataMapSize;
|
||||||
|
u8 TEMP2[0x70];
|
||||||
|
|
||||||
|
u32 _278;
|
||||||
|
|
||||||
|
u32 mPreActorNumDone;
|
||||||
|
u32 mLoadActorNumTotal;
|
||||||
|
sead::Vector3f mPrevCameraPos{};
|
||||||
|
f32 mDeltaCameraDistance;
|
||||||
|
sead::FixedSafeString<256> mStr1;
|
||||||
|
sead::FixedSafeString<256> mStr2;
|
||||||
|
sead::FixedSafeString<256> mStr3;
|
||||||
|
sead::CriticalSection mCS{};
|
||||||
|
|
||||||
|
u64 mStartTick;
|
||||||
|
u8 TEMP3[0x5c];
|
||||||
|
|
||||||
sead::TypedBitFlag<MgrFlag, sead::Atomic<u32>> mFlags;
|
sead::TypedBitFlag<MgrFlag, sead::Atomic<u32>> mFlags;
|
||||||
u8 TEMP3[0x190];
|
bool mThreadStarted = false;
|
||||||
|
bool _689 = false;
|
||||||
|
bool _68a = false;
|
||||||
|
u32 _68c;
|
||||||
|
u32 _690;
|
||||||
|
u32 mMessage = 0;
|
||||||
|
u32 mJobType = 0;
|
||||||
|
TraverseResults mTraverseResults[2];
|
||||||
|
PlacementTree* mPlacementTree = nullptr;
|
||||||
|
u32 _7a8;
|
||||||
|
void* mMassRenderer = nullptr;
|
||||||
|
act::ClusteredRenderer* mClusteredRenderer = nullptr;
|
||||||
|
void* mPlacementNavi = nullptr;
|
||||||
|
u32 mMassRendererReqCount = 0;
|
||||||
|
u32 mMassRendererStatus = 0;
|
||||||
|
|
||||||
|
// fix these
|
||||||
|
sead::DelegateFunc mInvoker{};
|
||||||
|
u8 TEMP4[0x10];
|
||||||
|
|
||||||
|
s32 _7f0 = -1;
|
||||||
|
|
||||||
|
sead::DelegateFunc mInvoker2{};
|
||||||
|
u8 TEMP5[0x10];
|
||||||
};
|
};
|
||||||
KSYS_CHECK_SIZE_NX150(PlacementMgr, 0x818);
|
KSYS_CHECK_SIZE_NX150(PlacementMgr, 0x818);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
#include "KingSystem/Map/mapPlacementTree.h"
|
||||||
|
|
||||||
|
namespace ksys::map {
|
||||||
|
|
||||||
|
PlacementTree::PlacementTree() = default;
|
||||||
|
|
||||||
|
PlacementTree::~PlacementTree() {
|
||||||
|
mBuffer.freeBuffer();
|
||||||
|
mObjects.freeBuffer();
|
||||||
|
delete[] _28;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ksys::map
|
|
@ -0,0 +1,39 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <container/seadBuffer.h>
|
||||||
|
#include <container/seadObjArray.h>
|
||||||
|
#include <limits>
|
||||||
|
#include <thread/seadReadWriteLock.h>
|
||||||
|
|
||||||
|
using F32Limits = std::numeric_limits<f32>;
|
||||||
|
|
||||||
|
namespace ksys::map {
|
||||||
|
|
||||||
|
// FIXME
|
||||||
|
class PlacementTree {
|
||||||
|
struct TreeObject {
|
||||||
|
u32 _0;
|
||||||
|
u32 _4;
|
||||||
|
u32 _8;
|
||||||
|
f32 _c;
|
||||||
|
f32 _10;
|
||||||
|
f32 _14;
|
||||||
|
};
|
||||||
|
|
||||||
|
public:
|
||||||
|
PlacementTree();
|
||||||
|
~PlacementTree();
|
||||||
|
|
||||||
|
sead::Buffer<TreeObject> mBuffer{};
|
||||||
|
sead::Buffer<u32*> mObjects{};
|
||||||
|
void* _20{};
|
||||||
|
void* _28{};
|
||||||
|
u32 _30{};
|
||||||
|
f32 _34 = F32Limits::max();
|
||||||
|
f32 _38 = F32Limits::max();
|
||||||
|
f32 _3c = F32Limits::max();
|
||||||
|
f32 _40 = F32Limits::max();
|
||||||
|
sead::ReadWriteLock mLock{};
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ksys::map
|
|
@ -0,0 +1 @@
|
||||||
|
#include "KingSystem/Map/mapRail.h"
|
|
@ -0,0 +1,7 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace ksys::map {
|
||||||
|
|
||||||
|
class Rail {};
|
||||||
|
|
||||||
|
} // namespace ksys::map
|
|
@ -0,0 +1,7 @@
|
||||||
|
#include "KingSystem/Map/mapStagePreActorCache.h"
|
||||||
|
|
||||||
|
namespace ksys::map {
|
||||||
|
|
||||||
|
SEAD_SINGLETON_DISPOSER_IMPL(StagePreActorCache)
|
||||||
|
|
||||||
|
} // namespace ksys::map
|
|
@ -0,0 +1,24 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <heap/seadDisposer.h>
|
||||||
|
#include <math/seadVector.h>
|
||||||
|
|
||||||
|
namespace ksys::gfx {
|
||||||
|
class ForestRenderer;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace ksys::map {
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
class StagePreActorCache {
|
||||||
|
SEAD_SINGLETON_DISPOSER(StagePreActorCache)
|
||||||
|
StagePreActorCache();
|
||||||
|
|
||||||
|
public:
|
||||||
|
auto* getForestRenderer() { return mForestRenderer; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
gfx::ForestRenderer* mForestRenderer;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ksys::map
|
Loading…
Reference in New Issue