Drennthew

Oracles Child Corruption Glitch Research

Sep 11th, 2024
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.52 KB | None | 0 0
  1. =======================================
  2. Overview
  3. =======================================
  4.  
  5. Interaction $ac reads value 3 from [wChildPersonality] to decide on his second
  6. personality. This is invalid so some arbitrary value gets written to [wChildPersonality].
  7. Based on that, it spawns a shit ton of interactions.
  8.  
  9. Note: in Seasons (maybe Ages), gasha plants on right side of house can prevent the last
  10. 2 interactions from loading?
  11.  
  12.  
  13. SOFTLOCKS:
  14.  
  15. Many seem to be caused by returning several levels up. If it could return exactly one
  16. level up instead, we could bypass the remainder of the interactions.
  17.  
  18. RESULT:
  19.  
  20. All investigations of crashes have reached dead ends. If we could set [wChildStatus] to
  21. 0 in ages, we could get some pretty useful effects. Overflow would do it, but that would
  22. need more ways to increase it. The only way I can think of is if we can somehow call
  23. "setGlobalFlag" or "clearGlobalFlag" with indices that are far too high, to corrupt the
  24. child's data.
  25.  
  26. =======================================
  27. Ages US: [wChildStatus] = $01, [wChildPersonality] = $af
  28. =======================================
  29.  
  30. ==========
  31. Left half
  32. ==========
  33.  
  34. Read from: $0e03
  35.  
  36. Spawn:
  37. 3: $ccb7 (crash, eventually)
  38. 4: $044f
  39. 5: $8187
  40. 6: $5810 (crash)
  41. 7: $902a (crash)
  42. 8: $e092
  43. 9: $2100
  44. a: $c471
  45. b: $cb7d
  46. c: $c0c4
  47. d: $cb3f
  48. e: $c52a
  49. f: $e08d
  50.  
  51. Object $ccb7: jumps to rom at 0b:421e, then $0068 (sometimes), then returns.
  52. The second jump depends on the value of 'c' at the time of the call to
  53. "updateInteractions". This is sometimes dependent on the keys held last
  54. frame, and sometimes dependent on Link's update code. Holding up prevents
  55. a crash for the first second or so.
  56. Seems impossible to prevent the following interactions from executing for
  57. very long. Eventually "c" gets set to a value based on link's movement...
  58. Object $5810: jumps to $cd26; area-related variables. No way to influence them.
  59.  
  60. ===========
  61. Right half
  62. ===========
  63.  
  64. Read from: $092b
  65.  
  66. Spawns:
  67. 3: $0620
  68. 4: $0520
  69. 5: $02f0
  70. 6: $08fa
  71. 7: $0fca (crash)
  72. 8: $10e0
  73. 9: $3ee0 (crash; can be made into a softlock)
  74. a: $7e3d
  75. b: $2847 (crash)
  76. c: $08e0
  77. d: $20ee
  78. e: $97ea (softlock)
  79. f: $1640
  80.  
  81. Object $0fca: jumps to $e8c9; past room flags. Seems hopeless since there will be tons of
  82. STOP opcodes here.
  83. Object $3ee0: state 0: jumps somewhere but doesn't crash.
  84. state 1: jumps to $8acd. Inaccessible vram. Jumps to 9:5b2c for a few rounds
  85. until vram becomes accessible. Once accessible, contents matter.
  86. This can be turned into a partial softlock instead of a crash by
  87. loading map contents here.
  88.  
  89.  
  90. =======================================
  91. Ages JP: [wChildStatus] = $01, [wChildPersonality] = $af
  92. =======================================
  93.  
  94. Spawns are identical to Ages US.
  95.  
  96. Code issues are also the same.
  97.  
  98. =======================================
  99. Ages EU: [wChildStatus] = $01, [wChildPersonality] = $af
  100. =======================================
  101.  
  102. ===========
  103. Left half
  104. ===========
  105.  
  106. Read from: $0e03
  107.  
  108. Spawn:
  109. 3: $2aea
  110. 4: $b7c4
  111. 5: $3ea4
  112. 6: $fa00 (softlock)
  113. 7: $202a
  114. 8: $36e3 (crash)
  115. 9: $e08a
  116. a: $b728
  117. b: $4ffa
  118. c: $8787 (crash)
  119. d: $1009
  120. e: $2ae0
  121. f: $922a (crash)
  122.  
  123. $fa00: Jumps to $ffff -> $0411 -> rst $38. Nothing to be done.
  124.  
  125. ===========
  126. Right half
  127. ===========
  128.  
  129. Read from: $092b
  130.  
  131. Spawn:
  132. 3: $9222 (crash)
  133. 4: $3110 (sometimes resets?)
  134. 5: $3e01
  135. 6: $3331
  136. 7: $c509
  137. 8: $0620
  138. 9: $0520
  139. a: $02f0
  140. b: $08fa
  141. c: $0fca (crash)
  142. d: $10e0
  143. e: $3ee0 (crash)
  144. f: $7e3d
  145.  
  146.  
  147. $9222: jumps to cd10. Nothing to be done.
  148. $3110: one time only, jumps to 0xbcd. Does something sketchy here.
  149.  
  150.  
  151.  
  152. =======================================
  153. Seasons US: [wChildStatus] = $01, [wChildPersonality] = $af
  154. =======================================
  155.  
  156. ==========
  157. Left half
  158. ==========
  159.  
  160. Read from: $0e03
  161.  
  162. Spawn:
  163. 3: $21c0
  164. 4: $0fcb
  165. 5: $14c5
  166. 6: $2ae0
  167. 7: $666f (softlock)
  168. 8: $e12c
  169. 9: $ecf0 (crash)
  170. a: $300c
  171. b: $e06f
  172. c: $fea0 (crash)
  173. d: $e097
  174. e: $c9e5
  175. f: $cdb7
  176.  
  177. $666f: jumps directly to an rst $38. Nothing to be done.
  178. $ec: jumps to $fc0e, then to oam, eventually. May be manageable.
  179. $fe: jumps to $f597. At the mercy of loaded objects; hits an rst $38, then... chaotic.
  180.  
  181. ==========
  182. Right half
  183. ==========
  184.  
  185. Read from: $092b
  186.  
  187. (Note: first 2 slots occupied by pipin's plants?)
  188.  
  189. Spawn:
  190.  
  191. 5: $3d28
  192. 6: $47f0
  193. 7: $e09c
  194. 8: $ee3e (crash)
  195. 9: $ea22 (softlock)
  196. a: $40af
  197. b: $9ec4
  198. c: $c411
  199. d: $062a
  200. e: $20fa
  201. f: $36ff
  202.  
  203. Impossible to prevent crash on object $ee; jumps to $f027, in the middle of some
  204. uncontrollable link object variables. Hits corrupted stop at $f030.
  205.  
  206. =======================================
  207. Seasons JP: [wChildStatus] = $01, [wChildPersonality] = $af
  208. =======================================
  209.  
  210. Spawns are identical to Seasons US. Code problems are also the same.
  211.  
  212.  
  213.  
  214. =======================================
  215. Seasons EU: [wChildStatus] = $01, [wChildPersonality] = $af
  216. =======================================
  217.  
  218. ==========
  219. Left half
  220. ==========
  221.  
  222. Read from: $0e03
  223.  
  224. Spawn:
  225. 3: $8187
  226. 4: $4810
  227. 5: $902a (crash)
  228. 6: $e092
  229. 7: $2100
  230. 8: $c45d
  231. 9: $cb7d (crash)
  232. a: $c0c4
  233. b: $cb3f
  234. c: $c52a
  235. d: $e08d
  236. e: $6fcd (crash)
  237. f: $2cc1
  238.  
  239. $902a: state 0: loads an invalid script at $0625 (which doesn't run), then jumps to $3e0d;
  240. corrupts room layout, somehow causes game to hang.
  241. If it somehow does reach state 1, it hard-crashes.
  242.  
  243. ==========
  244. Right half
  245. ==========
  246.  
  247. Read from: $092b
  248.  
  249. Spawn:
  250. 5: $f0b7 (crash?)
  251. 6: $fa81 (crash?)
  252. 7: $ca69
  253. 8: $e09d
  254. 9: $e0e0
  255. a: $3d28
  256. b: $47f0
  257. c: $e09c
  258. d: $ee3e (crash?)
  259. e: $ea22 (crash?)
  260. f: $40af
  261.  
  262. $f0b7: jumps to 0a3e. Stack gets messed up.
Add Comment
Please, Sign In to add comment