[BotW] Fixes for object draw distance

I also updated the extended memory pack using what Exzap gave me, which might resolve in less issues with blood moons.
This commit is contained in:
Crementif 2021-01-19 02:32:10 +01:00
parent fc6da20f6b
commit 93bf050b4b
No known key found for this signature in database
GPG Key ID: 453870E0401C94C0
3 changed files with 109 additions and 51 deletions

View File

@ -6,41 +6,38 @@ moduleMatches = 0x6267BFD0
actorMultiplier:
.float $actor
_replaceDrawDistanceActorInvoke:
lis r12, actorMultiplier@ha
lfs f13, actorMultiplier@l(r12)
fmuls f1, f1, f13
lwz r12, 0x3B0(r29)
_setActorDrawDistanceMultiplier:
lis r9, actorMultiplier@ha
lfs f9, actorMultiplier@l(r9)
stfs f9, 0x13BC(r28)
blr
0x037A617C = bla _replaceDrawDistanceActorInvoke
0x03857F58 = nop ; Force the draw distance used for load balancing normally to be enabled
0x03857F5C = bla _setActorDrawDistanceMultiplier
_replaceDrawDistanceActorKeepAlive_1:
lis r4, actorMultiplier@ha
lfs f6, actorMultiplier@l(r4)
fmuls f1, f1, f6
lwz r4, 0x4FC(r31)
blr
0x0379E6B8 = bla _replaceDrawDistanceActorKeepAlive_1
_replaceDrawDistanceActorKeepAlive_2:
lis r23, actorMultiplier@ha
lfs f9, actorMultiplier@l(r23)
fmuls f1, f1, f9
lfs f9, 0x280(r31)
blr
0x0379E63C = bla _replaceDrawDistanceActorKeepAlive_2
objectMultiplier:
.float $object
_replaceObjectDrawDistance:
lis r9, objectMultiplier@ha
lfs f11, objectMultiplier@l(r9)
fmuls f1, f1, f11
lwz r0, 0xC(r1)
objectDivider:
.float 1.0 - ($object - 1.0)
_setObjectDrawDistance:
lis r12, objectMultiplier@ha
lfs f0, objectMultiplier@l(r12)
; Doesn't catch objects that don't have their traverseRadiusXZ set, so those default to 0
blr
0x03137F04 = bla _replaceObjectDrawDistance
0x03137ECC = nop
0x03137ED0 = bla _setObjectDrawDistance
_setObjectDrawDistanceDivider:
fmuls f13, f1, f1
lis r8, objectDivider@ha
lfs f1, objectDivider@l(r8)
fmuls f13, f13, f1
blr
0x0313A60C = bla _setObjectDrawDistanceDivider
0x0313A678 = bla _setObjectDrawDistanceDivider

View File

@ -48,33 +48,33 @@ $actor = 2
[Preset]
name = Potato (0.2x)
category = Trees, Bushes, Landscape And Other Objects (Experimental)
category = Trees, Bushes, Landscape And Other Objects
$object = 0.2
[Preset]
name = Very Low (0.5x)
category = Trees, Bushes, Landscape And Other Objects (Experimental)
category = Trees, Bushes, Landscape And Other Objects
$object = 0.5
[Preset]
name = Low (0.75x)
category = Trees, Bushes, Landscape And Other Objects (Experimental)
category = Trees, Bushes, Landscape And Other Objects
$object = 0.75
[Preset]
name = Medium (1x)
category = Trees, Bushes, Landscape And Other Objects (Experimental)
category = Trees, Bushes, Landscape And Other Objects
default = 1
$object = 1.0
[Preset]
name = High (1.25x)
category = Trees, Bushes, Landscape And Other Objects (Experimental)
category = Trees, Bushes, Landscape And Other Objects
$object = 1.25
[Preset]
name = Ultra (1.5x, requires Extended Memory pack!)
category = Trees, Bushes, Landscape And Other Objects (Experimental)
category = Trees, Bushes, Landscape And Other Objects
$object = 1.5

View File

@ -5,9 +5,11 @@ moduleMatches = 0x6267BFD0
0x02C5E660 = lis r9, 0x8B60 ; add 0x50000000 to main gameheap which by default has a fixed size of 0x3B600000. Can't make it larger due to overlay arena being in the way
SaveAreaHeapSize = 8 * 1024 * 1024 ; 8MiB (default is 2312KiB)
SaveAreaHeapSize = 8 * 1024 * 1024 ; 8MiB (default is 2312KiB)
TriggerParamHeapSize = 8 * 1024 * 1024 ; 8MiB (default is around 2616KiB)
HavokMainHeapSize = 80 * 1024 * 1024 ; 80MiB (default is 30MiB)
HavokMainHeapSize = 80 * 1024 * 1024 ; 80MiB (default is 30MiB)
PhysicsTempLowHeapSize = 512 * 1024; 512KiB (default is 128KiB)
PhysicsSystemHeapSize = 512 * 1024; 512KiB (default is 128KiB)
; GameDataHeap
0x032015E0 = lis r3, (SaveAreaHeapSize@ha + TriggerParamHeapSize@ha)
@ -19,35 +21,94 @@ HavokMainHeapSize = 80 * 1024 * 1024 ; 80MiB (default is 30MiB)
; GameDataHeap -> TriggerParam
; Uses the remaining allocatable size of GameDataHeap
; HavokMainHeap
; Physics Memory System -> HavokMainHeap
0x037FD6A4 = lis r6, HavokMainHeapSize@ha
; Physics Memory System -> PhysicsTempDefault
; Physics Memory System -> PhysicsTempLow
0x037fd758 = lis r3, PhysicsTempLowHeapSize@ha
; Physics Memory System -> PhysicsSystem
0x037fd6d4 = lis r3, PhysicsSystemHeapSize@ha
; Terrain Scene
0x02C5A208 = lis r3, 0x400 #lis r3, 0x140
; KingSystem -> ForestRenderer
0x0338cdbc = lis r3,0x80 # lis r3,0x30
; KingSystem -> ForestRenderer -> ForestRenderer - WorkHeap
0x033C9D80 = lis r3, 0x20 # lis r3, 0xC
; Overlay arena
0x030AA5F4 = lis r7, 0x4000 ; expand overlay arena root heap size to 0x40000000 (1GiB) from default 0x1C000000 (448MiB). Can't make it larger due to forground bucket memory being in the way (starts at 0xE0000000)
; Extra size for overlay arena from rules.txt is 0x24000000 (576MiB)
; Overlay arena -> FixedHeap
; FixedHeap seems to store terrain renderer among other things
0x034ED614 = lis r3, 0x0C20 + 0x1000 ; add 256MiB
; Overlay arena -> MoveableMemoryHeap
; For resource textures?
0x034ED66C = lis r3, 0x0FD0 + 0x1000 ; add 256MiB
; Increase the size of the resource heap for small resources. When using mods like e.g. draw distance this would likely be the reason why it would spawn panic moons.
_increaseResourceSmallHeap:
lwz r10, 0x70(r24)
addis r10, r10, 0x500
stw r10, 0x70(r24)
blr
; Overlay arena -> FixedHeap -> GameDataWork
0x034ed55c = lis r3, 0x40 + 0x20;
0x037EAADC = bla _increaseResourceSmallHeap
; Overlay arena -> FixedHeap -> TexArcWork
0x034eced8 = lis r3, 0x200 + 0x200 ; add 32MiB
; Overlay arena -> FixedHeap -> Audio(OverlayArena)
0x034ed1e4 = lis r6, 0x1a0 + 0x200 ; add 32MiB
; Overlay arena -> FixedHeap -> TexArcWork
0x034ECED8 = lis r3, 0x200 + 0x400 ; add 64MiB
; 'Main' (unsure what this is responsible for)
0x0340F31C = li r7, 0x87 + 0x20 ; add 32MiB (register stores size in MiB)
0x0340f320 = nop
0x0340f324 = nop
0x0340f328 = nop
0x0340f32C = nop
; MovableMemory
;0x0340F334 = li r9, 0xFB + 0x180 ; add 384MiB -> Too much
0x0340F334 = li r9, 0xFB + 0x100 ; add 256MiB
0x0340f338 = nop
0x0340f33C = nop
; ForResourceS
0x0340f3f4 = lis r0,0x940 + 0x1000 ; add 256MiB
; ForResourceL
; 0340F370 addis r26, r26, 0x20
; size seems to have extra space added dynamically based on unknown parameters?
; ends up as 0x10f00000
0x340F370 = lis r26, 0x2200 ; add around 288MiB
; PlacementMgr heap
0x037c0f30 = li r28,0x5a + 0x40 ; in MiB
; Increase the size of the resource heap for small resources. When using mods like e.g. draw distance this would likely be the reason why it would spawn panic moons.
;;_increaseResourceSmallHeap:
;;lwz r10, 0x70(r24)
;;addis r10, r10, 0x500
;;stw r10, 0x70(r24)
;;blr
;;0x037EAADC = bla _increaseResourceSmallHeap
; Increase the size of the resource heap for large resources. When using mods like e.g. draw distance this would likely be the reason why it would spawn panic moons.
_increaseResourceLargeHeap:
lwz r11, 0x6C(r24)
addis r11, r11, 0x500
stw r11, 0x6C(r24)
blr
;;_increaseResourceLargeHeap:
;;lwz r11, 0x6C(r24)
;;addis r11, r11, 0x500
;;stw r11, 0x6C(r24)
;;blr
0x037EAB84 = bla _increaseResourceLargeHeap
;;0x037EAB84 = bla _increaseResourceLargeHeap
; Some notes on potential further heaps