Advertisement
Zoinkity

PKMN MORT

May 27th, 2016
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.71 KB | None | 0 0
  1. 80045780
  2. S2 = S0[25D2] # 2
  3. if S0[25D0]:
  4. v = call 80056AD0(S0+25A0, 0, 0)
  5. if v>= 0:
  6. if not @S0+25C4:
  7. S0[2598:259A] = S0[159C:159E]
  8. S0[259A:259C] = S0[159E:15A0]
  9. S0+259C = @S0+15A0 & 0xFFFFFF
  10. S0+25BC = 0x60
  11. S0+25C4 |= 0x400
  12. S0[259C:259E] = min(0, S0[259C:259E] - 0x100)
  13. S0[25D0] = 0
  14. # 80045820: S3 = 1
  15. if not S0[25D0] and S0[25D1] in (1, 2, 3):
  16. v = @S0+25C4 - @S0+25C0
  17. if v < 0xC01:
  18. v = 0x400
  19. if @S0+25C4 and @S0+259C < 0x101:
  20. v = @S0+259C << 2
  21. if v > 0:
  22. offset = @S0+25C4 & 0xFF8
  23. S0[25D0] = 1 # S3
  24. call @S0+190(@S0+194 + @S0+25C4, S0+1598+offset, v, S0+25A0)
  25. # 800458BC: S3 = 1
  26. S1 = @S0+25CC
  27. v = @S0+25CC - @S0+25C8
  28. if v < 0x960:
  29. if S0[25D1] == 1 or S0[2598:259A] > 0:
  30. if abs(@S0+25C4 - @S0+25C0) >= 0x25:
  31. # 8004590C
  32. while S2 > 0:
  33. v = S1 // 0xA00
  34. v >>= 2
  35. offset <<= 3
  36. call 80045FF0(S0, S0+198+offset)
  37. S0+25CC += 0xA0
  38. S0+25C0 = (@S0+25BC >> 3) & ~3
  39. S0[2598:259A] -= 1
  40. S1 = @S0+25CC
  41. S2 -= 1
  42. v = @S0+25CC - @S0+25C8
  43. if not v < 0x960:
  44. break
  45. if S0[25D1] != 1: # S3
  46. if S0[2598:259A] <= 0:
  47. break
  48. # 80045988
  49. if (@S0+25C4 - @S0+25C0) < 0x25:
  50. break
  51. # 800459A8
  52. if S0[25D1] == 1: # S3
  53. if not v:
  54. S0[25D1] = 2
  55. return
  56. 800459E0
  57.  
  58. 80045A80
  59. accepts: A0=p->object, A1, A2, A3=p->target
  60. v = (A1[0:2] - 0x20) << 10
  61. v *= 0x3333
  62. offset = S0[188:18A] << 4
  63. v += 0x4000
  64. S0+168+offset[0:2] = (v >> 0xF) << 1
  65. # 80045AD4
  66. v = (A1[2:4] - 0x20) << 10
  67. v *= 0x3333
  68. v += 0x4000
  69. S0+168+offset[2:4] = (v >> 0xF) << 1
  70. # 80045AF8
  71. v = (A1[4:6] - 0x10) << 10
  72. v *= 0x3333
  73. v += -0x332F000 # FCCD1000
  74. S0+168+offset[4:6] = (v >> 0xF) << 1
  75. # 80045B1C
  76. v = (A1[6:8] - 0x10) << 10
  77. v *= 0x3333
  78. v += 0x4003C00
  79. S0+168+offset[6:8] = (v >> 0xF) << 1
  80. # 80045B48
  81. v = (A1[8:A] - 8) << 10
  82. v *= 0x4B17
  83. v += -0x36E4E4 # FFC91B1C
  84. S0+168+offset[8:A] = (v >> 0xF) << 1
  85. # 80045B78
  86. v = (A1[A:C] - 8) << 10
  87. v *= 0x4444
  88. v += 0x3BBF800
  89. S0+168+offset[A:C] = (v >> 0xF) << 1
  90. # 80045BB8
  91. v = (A1[C:E] - 4) << 10
  92. v *= 0x7ADE
  93. v += 0x147936C
  94. S0+168+offset[C:E] = (v >> 0xF) << 1
  95. # 80045C00
  96. v = (A1[E:10] - 4) << 10
  97. v *= 0x740C
  98. v += 0x40D6B40
  99. S0+168+offset[E:10] = (v >> 0xF) << 1
  100. call 80048904(S0, A2, A3)
  101. S0[188:18A] ^= 1
  102. 80045C78
  103. accepts: A0=p->object, A1, A2, A3, SP+10, SP+14, SP+18, SP+1C=p->target
  104. for i in range(4):
  105. # buf = SP+44
  106. call 80048590(SP+14[0:2], SP+10[0:2], SP+18, buf)
  107. call 80048684(A2[0:2], A3[0:2], buf)
  108. A2 += 2
  109. A3 += 2
  110. SP+10 += 2
  111. SP+14 += 2
  112. SP+18 += 0x1A
  113. # 80045D10
  114. call 80045A80(A0, A1, A0, SP+1C)
  115. 80045D60
  116.  
  117. 80045FF0 mutates the contents of that table
  118. accepts: A0=p->object, A1=p->target
  119. S0 = p->object
  120. entry = @S0+25BC
  121. offset = (entry >> 5) << 2 # upper ten bits
  122. bitlen = 32 - (entry & 0x1F)
  123. v = @S0+1598+offset
  124. v >>= bitlen
  125. if not S0[18A:18C] and not S0[18C:18E]:
  126. if bitlen < 2:
  127. entry += 32
  128. mask = (1 << bitlen) - 1
  129. o = (entry >> 5) << 2
  130. value = v & mask
  131. v = @S0+1598+o
  132. if bitlen != 1: # A0
  133. mask = (1 << (1 - bitlen)) - 1
  134. value |= (v & mask) << bitlen
  135. v >>= 1 - bitlen # A0
  136. bitlen += 0x1F
  137. else:
  138. value = v & 1
  139. v >>= 1
  140. bitlen -= 1
  141. # 800460B0
  142. if value:
  143. if bitlen < 5:
  144. mask = (1 << bitlen) - 1
  145. entry += 32
  146. o = (entry >> 5) << 2
  147. S0[18C:18E] = v & mask
  148. v = @S0+1598+o
  149. if bitlen != 4: # A1
  150. mask = (1 << (4 - bitlen)) - 1
  151. S0[18C:18A] |= (v & mask) << bitlen
  152. v >>= 4 - bitlen # A1
  153. bitlen += 0x1C
  154. else:
  155. S0[18C:18E] = v & 0xF
  156. v >>= 4
  157. bitlen -= 4
  158. # 8004613C
  159. S0[18C:18A] += 1
  160. else:
  161. # 8004614C
  162. if bitlen < 8:
  163. mask = (1 << bitlen) - 1
  164. entry += 32
  165. o = (entry >> 5) << 2
  166. S0[18A:18C] = v & mask
  167. v = @S0+1598+o
  168. if bitlen != 7: # A1
  169. mask = (1 << (7 - bitlen)) - 1
  170. S0[18A:18C] |= (v & mask) << bitlen
  171. v >>= 7 - bitlen # A1
  172. bitlen += 0x19
  173. else:
  174. S0[18A:18C] = v & 0x7F
  175. v >>= 7
  176. bitlen -= 7
  177. # 800461C8
  178. S0[18A:18C] += 1
  179. # 800461D4
  180. if S0[18C:18E]:
  181. call 80057FD0(A1, 0x140) # initialize A1 bytes at A0
  182. S0[18C:18E] -= 1
  183. else:
  184. A2 = SP+E0
  185. if bitlen < 7:
  186. mask = (1 << bitlen) - 1
  187. entry += 32
  188. o = (entry >> 5) & 0x3FF
  189. o <<= 2
  190. SP+E8[0:2] = v & mask
  191. v = @S0+1598+o
  192. if bitlen != 6: # A1
  193. mask = (1 << (6 - bitlen)) - 1
  194. SP+E8[0:2] |= (v & mask) << bitlen
  195. v >>= 6 - bitlen # A1
  196. bitlen += 0x1A
  197. else:
  198. SP+E8[0:2] = v & 0x3F
  199. v >>= 7
  200. bitlen -= 7
  201. # 80046298
  202. A3 = SP+D0
  203. if bitlen < 7:
  204. mask = (1 << bitlen) - 1
  205. entry += 32
  206. o = (entry >> 5) & 0x3FF
  207. o <<= 2
  208. SP+E8[2:4] = v & mask
  209. v = @S0+1598+o
  210. if bitlen != 6: # A1
  211. mask = (1 << (6 - bitlen)) - 1
  212. SP+E8[2:4] |= (v & mask) << bitlen
  213. v >>= 6 - bitlen # A1
  214. bitlen += 0x1A
  215. else:
  216. SP+E8[2:4] = v & 0x3F
  217. v >>= 7
  218. bitlen -= 7
  219. # 80046318
  220. T1 = SP+D8
  221. if bitlen < 6:
  222. mask = (1 << bitlen) - 1
  223. entry += 32
  224. o = (entry >> 5) & 0x3FF
  225. o <<= 2
  226. SP+E8[4:6] = v & mask
  227. v = @S0+1598+o
  228. if bitlen != 5: # A1
  229. mask = (1 << (5 - bitlen)) - 1
  230. SP+E8[4:6] |= (v & mask) << bitlen
  231. v >>= 5 - bitlen # A1
  232. bitlen += 0x1B
  233. else:
  234. SP+E8[4:6] = v & 0x1F
  235. v >>= 5
  236. bitlen -= 5
  237. # 800463A0
  238. T2 = SP+C8
  239. if bitlen < 6:
  240. mask = (1 << bitlen) - 1
  241. entry += 32
  242. o = (entry >> 5) & 0x3FF
  243. o <<= 2
  244. SP+E8[6:8] = v & mask
  245. v = @S0+1598+o
  246. if bitlen != 5: # A1
  247. mask = (1 << (5 - bitlen)) - 1
  248. SP+E8[6:8] |= (v & mask) << bitlen
  249. v >>= 5 - bitlen # A1
  250. bitlen += 0x1B
  251. else:
  252. SP+E8[6:8] = v & 0x1F
  253. v >>= 5
  254. bitlen -= 5
  255. # 80046420
  256. A0 = SP+60
  257. if bitlen < 5:
  258. mask = (1 << bitlen) - 1
  259. entry += 32
  260. o = (entry >> 5) & 0x3FF
  261. o <<= 2
  262. SP+E8[8:A] = v & mask
  263. v = @S0+1598+o
  264. if bitlen != 4: # A1
  265. mask = (1 << (4 - bitlen)) - 1
  266. SP+E8[8:A] |= (v & mask) << bitlen
  267. v >>= 4 - bitlen # A1
  268. bitlen += 0x1C
  269. else:
  270. SP+E8[8:A] = v & 0xF
  271. v >>= 4
  272. bitlen -= 4
  273. # 800464A0
  274. RA = SP+C8
  275. if bitlen < 5:
  276. mask = (1 << bitlen) - 1
  277. entry += 32
  278. o = (entry >> 5) & 0x3FF
  279. o <<= 2
  280. SP+E8[A:C] = v & mask
  281. v = @S0+1598+o
  282. if bitlen != 4: # A1
  283. mask = (1 << (4 - bitlen)) - 1
  284. SP+E8[A:C] |= (v & mask) << bitlen
  285. v >>= 4 - bitlen # A1
  286. bitlen += 0x1C
  287. else:
  288. SP+E8[A:C] = v & 0xF
  289. v >>= 4
  290. bitlen -= 4
  291. # 80046520
  292. T3 = 2
  293. if bitlen < 4:
  294. mask = (1 << bitlen) - 1
  295. entry += 32
  296. o = (entry >> 5) & 0x3FF
  297. o <<= 2
  298. SP+E8[C:E] = v & mask
  299. v = @S0+1598+o
  300. if bitlen != 3: # A1
  301. mask = (1 << (3 - bitlen)) - 1
  302. SP+E8[C:E] |= (v & mask) << bitlen
  303. v >>= 3 - bitlen # A1
  304. bitlen += 0x1D
  305. else:
  306. SP+E8[C:E] = v & 0x7
  307. v >>= 3
  308. bitlen -= 3
  309. # 800465A8
  310. if bitlen < 4:
  311. mask = (1 << bitlen) - 1
  312. entry += 32
  313. o = (entry >> 5) & 0x3FF
  314. o <<= 2
  315. SP+E8[E:10] = v & mask
  316. v = @S0+1598+o
  317. if bitlen != 3: # A1
  318. mask = (1 << (3 - bitlen)) - 1
  319. SP+E8[E:10] |= (v & mask) << bitlen
  320. v >>= 3 - bitlen # A1
  321. bitlen += 0x1D
  322. else:
  323. SP+E8[E:10] = v & 0x7
  324. v >>= 3
  325. bitlen -= 3
  326. while A0 < RA:
  327. # 80046624
  328. if bitlen < 8:
  329. mask = (1 << bitlen) - 1
  330. entry += 32
  331. o = (entry >> 5) & 0x3FF
  332. o <<= 2
  333. A2[0:2] = v & mask
  334. v = @S0+1598+o
  335. if bitlen != 7: # A1
  336. mask = (1 << (7 - bitlen)) - 1
  337. A2[0:2] |= (v & mask) << bitlen
  338. v >>= 7 - bitlen # A1
  339. bitlen += 0x19
  340. else:
  341. A2[0:2] = v & 0x7F
  342. v >>= 7
  343. bitlen -= 7
  344. # 800466A0
  345. A2 += 2
  346. if bitlen < 3:
  347. mask = (1 << bitlen) - 1
  348. entry += 32
  349. o = (entry >> 5) & 0x3FF
  350. o <<= 2
  351. A3[0:2] = v & mask
  352. v = @S0+1598+o
  353. if bitlen != 2: # A1
  354. mask = (1 << (2 - bitlen)) - 1
  355. A3[0:2] |= (v & mask) << bitlen
  356. v >>= 2 - bitlen # A1
  357. bitlen += 0x1E
  358. else:
  359. A3[0:2] = v & 3
  360. v >>= 2
  361. bitlen -= 2
  362. # 80046720
  363. A3 += 2
  364. if bitlen < 3:
  365. mask = (1 << bitlen) - 1
  366. entry += 32
  367. o = (entry >> 5) & 0x3FF
  368. o <<= 2
  369. T1[0:2] = v & mask
  370. v = @S0+1598+o
  371. if bitlen != 2: # A1
  372. mask = (1 << (2 - bitlen)) - 1
  373. T1[0:2] |= (v & mask) << bitlen
  374. v >>= 2 - bitlen # A1
  375. bitlen += 0x1E
  376. else:
  377. T1[0:2] = v & 3
  378. v >>= 2
  379. bitlen -= 2
  380. # 800467A0
  381. if bitlen < 7:
  382. mask = (1 << bitlen) - 1
  383. entry += 32
  384. o = (entry >> 5) & 0x3FF
  385. o <<= 2
  386. T2[0:2] = v & mask
  387. v = @S0+1598+o
  388. if bitlen != 6: # A1
  389. mask = (1 << (6 - bitlen)) - 1
  390. T2[0:2] |= (v & mask) << bitlen
  391. v >>= 6 - bitlen # A1
  392. bitlen += 0x19
  393. else:
  394. T2[0:2] = v & 0x3F
  395. v >>= 6
  396. bitlen -= 6
  397. # 80046820
  398. if bitlen < 4:
  399. mask = (1 << bitlen) - 1
  400. entry += 32
  401. o = (entry >> 5) & 0x3FF
  402. o <<= 2
  403. A0[0:2] = v & mask
  404. v = @S0+1598+o
  405. if bitlen != 3: # A1
  406. mask = (1 << (3 - bitlen)) - 1
  407. A0[0:2] |= (v & mask) << bitlen
  408. v >>= 3 - bitlen # A1
  409. bitlen += 0x19
  410. else:
  411. A0[0:2] = v & 7
  412. v >>= 3
  413. bitlen -= 3
  414. # 8004689C
  415. if bitlen < 4:
  416. mask = (1 << bitlen) - 1
  417. entry += 32
  418. o = (entry >> 5) & 0x3FF
  419. o <<= 2
  420. A0[2:4] = v & mask
  421. v = @S0+1598+o
  422. if bitlen != 3: # A1
  423. mask = (1 << (3 - bitlen)) - 1
  424. A0[2:4] |= (v & mask) << bitlen
  425. v >>= 3 - bitlen # A1
  426. bitlen += 0x19
  427. else:
  428. A0[2:4] = v & 7
  429. v >>= 3
  430. bitlen -= 3
  431. # 80046918
  432. if bitlen < 4:
  433. mask = (1 << bitlen) - 1
  434. entry += 32
  435. o = (entry >> 5) & 0x3FF
  436. o <<= 2
  437. A0[4:6] = v & mask
  438. v = @S0+1598+o
  439. if bitlen != 3: # A1
  440. mask = (1 << (3 - bitlen)) - 1
  441. A0[4:6] |= (v & mask) << bitlen
  442. v >>= 3 - bitlen # A1
  443. bitlen += 0x19
  444. else:
  445. A0[4:6] = v & 7
  446. v >>= 3
  447. bitlen -= 3
  448. # 80046994
  449. if bitlen < 4:
  450. mask = (1 << bitlen) - 1
  451. entry += 32
  452. o = (entry >> 5) & 0x3FF
  453. o <<= 2
  454. A0[6:8] = v & mask
  455. v = @S0+1598+o
  456. if bitlen != 3: # A1
  457. mask = (1 << (3 - bitlen)) - 1
  458. A0[6:8] |= (v & mask) << bitlen
  459. v >>= 3 - bitlen # A1
  460. bitlen += 0x19
  461. else:
  462. A0[6:8] = v & 7
  463. v >>= 3
  464. bitlen -= 3
  465. # 80046A10
  466. if bitlen < 4:
  467. mask = (1 << bitlen) - 1
  468. entry += 32
  469. o = (entry >> 5) & 0x3FF
  470. o <<= 2
  471. A0[8:A] = v & mask
  472. v = @S0+1598+o
  473. if bitlen != 3: # A1
  474. mask = (1 << (3 - bitlen)) - 1
  475. A0[8:A] |= (v & mask) << bitlen
  476. v >>= 3 - bitlen # A1
  477. bitlen += 0x19
  478. else:
  479. A0[8:A] = v & 7
  480. v >>= 3
  481. bitlen -= 3
  482. # 80046A8C
  483. if bitlen < 4:
  484. mask = (1 << bitlen) - 1
  485. entry += 32
  486. o = (entry >> 5) & 0x3FF
  487. o <<= 2
  488. A0[A:C] = v & mask
  489. v = @S0+1598+o
  490. if bitlen != 3: # A1
  491. mask = (1 << (3 - bitlen)) - 1
  492. A0[A:C] |= (v & mask) << bitlen
  493. v >>= 3 - bitlen # A1
  494. bitlen += 0x19
  495. else:
  496. A0[A:C] = v & 7
  497. v >>= 3
  498. bitlen -= 3
  499. # 80046B08
  500. if bitlen < 4:
  501. mask = (1 << bitlen) - 1
  502. entry += 32
  503. o = (entry >> 5) & 0x3FF
  504. o <<= 2
  505. A0[C:E] = v & mask
  506. v = @S0+1598+o
  507. if bitlen != 3: # A1
  508. mask = (1 << (3 - bitlen)) - 1
  509. A0[C:E] |= (v & mask) << bitlen
  510. v >>= 3 - bitlen # A1
  511. bitlen += 0x19
  512. else:
  513. A0[C:E] = v & 7
  514. v >>= 3
  515. bitlen -= 3
  516. # 80046B84
  517. if bitlen < 4:
  518. mask = (1 << bitlen) - 1
  519. entry += 32
  520. o = (entry >> 5) & 0x3FF
  521. o <<= 2
  522. A0[E:10] = v & mask
  523. v = @S0+1598+o
  524. if bitlen != 3: # A1
  525. mask = (1 << (3 - bitlen)) - 1
  526. A0[E:10] |= (v & mask) << bitlen
  527. v >>= 3 - bitlen # A1
  528. bitlen += 0x19
  529. else:
  530. A0[E:10] = v & 7
  531. v >>= 3
  532. bitlen -= 3
  533. # 80046C00
  534. if bitlen < 4:
  535. mask = (1 << bitlen) - 1
  536. entry += 32
  537. o = (entry >> 5) & 0x3FF
  538. o <<= 2
  539. A0[10:12] = v & mask
  540. v = @S0+1598+o
  541. if bitlen != 3: # A1
  542. mask = (1 << (3 - bitlen)) - 1
  543. A0[10:12] |= (v & mask) << bitlen
  544. v >>= 3 - bitlen # A1
  545. bitlen += 0x19
  546. else:
  547. A0[10:12] = v & 7
  548. v >>= 3
  549. bitlen -= 3
  550. # 80046C7C
  551. if bitlen < 4:
  552. mask = (1 << bitlen) - 1
  553. entry += 32
  554. o = (entry >> 5) & 0x3FF
  555. o <<= 2
  556. A0[12:14] = v & mask
  557. v = @S0+1598+o
  558. if bitlen != 3: # A1
  559. mask = (1 << (3 - bitlen)) - 1
  560. A0[12:14] |= (v & mask) << bitlen
  561. v >>= 3 - bitlen # A1
  562. bitlen += 0x19
  563. else:
  564. A0[12:14] = v & 7
  565. v >>= 3
  566. bitlen -= 3
  567. # 80046CF8
  568. if bitlen < 4:
  569. mask = (1 << bitlen) - 1
  570. entry += 32
  571. o = (entry >> 5) & 0x3FF
  572. o <<= 2
  573. A0[14:16] = v & mask
  574. v = @S0+1598+o
  575. if bitlen != 3: # A1
  576. mask = (1 << (3 - bitlen)) - 1
  577. A0[14:16] |= (v & mask) << bitlen
  578. v >>= 3 - bitlen # A1
  579. bitlen += 0x19
  580. else:
  581. A0[14:16] = v & 7
  582. v >>= 3
  583. bitlen -= 3
  584. # 80046D74
  585. if bitlen < 4:
  586. mask = (1 << bitlen) - 1
  587. entry += 32
  588. o = (entry >> 5) & 0x3FF
  589. o <<= 2
  590. A0[16:18] = v & mask
  591. v = @S0+1598+o
  592. if bitlen != 3: # A1
  593. mask = (1 << (3 - bitlen)) - 1
  594. A0[16:18] |= (v & mask) << bitlen
  595. v >>= 3 - bitlen # A1
  596. bitlen += 0x19
  597. else:
  598. A0[16:18] = v & 7
  599. v >>= 3
  600. bitlen -= 3
  601. # 80046DF0
  602. if bitlen < 4:
  603. mask = (1 << bitlen) - 1
  604. entry += 32
  605. o = (entry >> 5) & 0x3FF
  606. o <<= 2
  607. A0[18:1A] = v & mask
  608. v = @S0+1598+o
  609. if bitlen != 3: # A1
  610. mask = (1 << (3 - bitlen)) - 1
  611. A0[18:1A] |= (v & mask) << bitlen
  612. v >>= 3 - bitlen # A1
  613. bitlen += 0x19
  614. else:
  615. A0[18:1A] = v & 7
  616. v >>= 3
  617. bitlen -= 3
  618. # 80046E6C
  619. A0 += 0x1A
  620. T2 += 2
  621. # 80046E78
  622. S0+18A -= 1
  623. call 80045C78(S0, SP+E8, SP+E0, SP+D0, SP+D8, SP+C8, SP+60, @SP+FC)
  624. # 80046EC8: update entry for new position + length
  625. entry &= ~0x1F
  626. S0+25BC = entry + 32 - bitlength
  627. 80046EF0
  628.  
  629. 80048740 child function of 80048904
  630. accepts: T1=p->in, T0=p->out, T3=count
  631. # A3,T6,T7,T8,T9 are all multipliers rolled over from parent.
  632. for i in range(T3):
  633. m = (T9 << 16) >> 16
  634. t = T1[0:2]
  635. T1 += 2
  636. v = (S7 * m + 0x4000) >> 0xF
  637. t -= v
  638. m = T9 >> 16
  639. v = (S6 * m + 0x4000) >> 0xF
  640. t -= v
  641. v = (t * m + 0x4000) >> 0xF
  642. S7 = S6 + v
  643. m = (T8 << 16) >> 16
  644. v = (S5 * m + 0x4000) >> 0xF
  645. t -= v
  646. v = (t * m + 0x4000) >> 0xF
  647. S6 = S5 + v
  648. m = T8 >> 16
  649. v = (S6 * m + 0x4000) >> 0xF
  650. t -= v
  651. v = (t * m + 0x4000) >> 0xF
  652. S5 = S4 + v
  653. m = (T7 << 16) >> 16
  654. v = (S3 * m + 0x4000) >> 0xF
  655. t -= v
  656. v = (t * m + 0x4000) >> 0xF
  657. S4 = S3 + v
  658. m = T7 >> 16
  659. v = (S2 * m + 0x4000) >> 0xF
  660. t -= v
  661. v = (t * m + 0x4000) >> 0xF
  662. S3 = S2 + v
  663. m = (T6 << 16) >> 16
  664. v = (S1 * m + 0x4000) >> 0xF
  665. t -= v
  666. v = (t * m + 0x4000) >> 0xF
  667. S2 = S1 + v
  668. m = T6 >> 16
  669. v = (S0 * m + 0x4000) >> 0xF
  670. t -= v
  671. v = (t * m + 0x4000) >> 0xF
  672. S1 = S0 + v
  673. # 800488A4
  674. S0 = t
  675. v = (A3 * 0x6E14 + 0x4000) >> 0xF
  676. t -= v
  677. A3 = t
  678. t <<= 1
  679. v = (t >> 0xF) + 1
  680. v >>= 1
  681. if v > 0:
  682. t = 0x7FFF
  683. elif v < 1:
  684. t = -0x8000
  685. t &= ~7
  686. T0[0:2] = t
  687. T0 += 2
  688. 80048904
  689. accepts: A0=p->object, A1=p->input, A2=p->target
  690. S0, S1, S2, S3, S4, S5, S6, S7 = A0[140:160:4]
  691. A3 = A0[164:166]
  692. func = 80048AFC
  693. call 80048A58() # generate multipliers
  694. call 80048740(T1=A1+0, T0=A2+0, T3=0xC)
  695. func = 80048B14
  696. call 80048A58() # generate multipliers
  697. call 80048740(T1=A1+1A, T0=A2+1A, T3=0xD)
  698. func = 80048B24
  699. call 80048A58() # generate multipliers
  700. call 80048740(T1=A1+36, T0=A2+36, T3=0xC)
  701. func = 80048B3C
  702. call 80048A58() # generate multipliers
  703. call 80048740(T1=A1+50, T0=A2+50, T3=0x77)
  704. A0[140:160:4] = S0, S1, S2, S3, S4, S5, S6, S7
  705. A0[164:166] = A3
  706. 80048A58 child function of 80048904, setting multipliers
  707. T0, T1 = (A0+178, A0+168) if A0[188:18A] else (A0+168, A0+178)
  708. call func(T2=T0[0:2], T4=T1[0:2])
  709. T6 = T2 << 16
  710. call func(T2=T0[2:4], T4=T1[2:4])
  711. T6 |= T2
  712. call func(T2=T0[4:6], T4=T1[4:6])
  713. T7 = T2 << 16
  714. call func(T2=T0[6:8], T4=T1[6:8])
  715. T7 |= T2
  716. call func(T2=T0[8:A], T4=T1[8:A])
  717. T8 = T2 << 16
  718. call func(T2=T0[8:A], T4=T1[8:A])
  719. T8 |= T2
  720. call func(T2=T0[A:C], T4=T1[A:C])
  721. T9 = T2 << 16
  722. call func(T2=T0[A:C], T4=T1[A:C])
  723. T9 |= T2
  724. 80048AFC function called by 80048A58
  725. T2 >>= 2
  726. T4 >>= 1
  727. T2 += T4
  728. T4 >>= 1
  729. T2 += T4
  730. call 80048B3C()
  731. 80048B14
  732. T2 >>= 1
  733. T4 >>= 1
  734. T2 += T4
  735. call 80048B3C()
  736. 80048B24
  737. T2 >>= 1
  738. T4 >>= 2
  739. T2 += T4
  740. T2 >>= 1
  741. T2 += T4
  742. call 80048B3C()
  743. 80048B3C
  744. T4 = 0
  745. if T2 < 0:
  746. T2 = -T2
  747. T4 = 1
  748. v = T2 - 0x2B33
  749. if v >= 0:
  750. v = (T2 << 1) - 0x4E66
  751. if v >= 0:
  752. v = (T2 >> 2) + 0x6600
  753. else:
  754. v = T2 + 0x6600
  755. T2 = v if (v - 0x7FFF) > 0 else 0x7FFF
  756. if T4:
  757. T2 = -T2
  758. T2 &= 0xFFFF
  759. 80048B90
  760.  
  761. 80057FD0 initialize A1 bytes at A0
  762. accepts: A0=p->target, A1=length
  763. 80058070 unconditional return
  764. 80058078 unconditional return
  765. 80058080
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement