From 32d09d59e0c3cd0b417c2fa3cdac061027962162 Mon Sep 17 00:00:00 2001 From: Randy Thiemann Date: Tue, 7 Nov 2023 05:30:03 +0100 Subject: [PATCH] RNG Improvement --- bin/DMGTRIS.GBC | Bin 131072 -> 131072 bytes bin/DMGTRIS.map | 333 +++++++++++++++++++++++---------------------- bin/DMGTRIS.pocket | Bin 131072 -> 131072 bytes bin/DMGTRIS.sym | 233 +++++++++++++++---------------- src/main.asm | 18 ++- src/rng.asm | 35 +++++ 6 files changed, 330 insertions(+), 289 deletions(-) diff --git a/bin/DMGTRIS.GBC b/bin/DMGTRIS.GBC index ed2b3dfbaed53142b7ab203d7620f8071be532c1..bbddfd19fa61d691e1cde6317f238ed8c741149b 100644 GIT binary patch delta 2279 zcma)-4{Q@v9LMk1zZ3@BDJx~N?H+BR8@(H%A_?s1{@|d5ln4kK{tOsV2vH0H5!4No z1Q8tU;yNafIdqx`D_Eomku2Ou+O3a`KSm*AIU*Wth*ZKKDa+M&*LJN@64Kng&-?xB z@7?>pySlm|b#+6IY5*Q1H zbpoZsvi~*xIc;e&!>D8s>%SscpX3R}j$oPYP)c?tOOjZ%f|(N*o0!pNE_Mn}Lmi#q zqD-aC0Iyw00!892$y)BeZ~8)`Csk*Mg=NFW3u4w);Qa@O-_?>qpw(eV?kx?R^>47O z*J{uNf8?2m0L{XU{Fh_I&?-V1wf12qNj#(XcnWcplXgdZYg=O|OZnMkacqnTe_oSa=-(XqG z7;&2*Tk|W@9$D}BOA1FW#&NA(thHA~FG#)7i_(Qn(#7a`sV9o1^U<(`i76Z+1ugx& zep$XFm(*Em8{=%Vqj3C;%<2k zd{p?rz7Zw~_v|ZRl7G>-ZJOfzBCrf#a^D{(_YwEWZ6>)ad3=1DY0AL4dz(tC-YxNH z`(E(tiWWe&jwy}lTI2#|a!lVMYlJt7%ZBM9+7`YbqHEzb!tvrtST8&*K27sOBNXL} zP%a)K6oZdhh2s;fD{wW3UmlI;b9hZL-t5F1Ieef9=OI-{4x?dDwDKhL2yf=FhQ*t$ z*ki@MB7DM$<~yS?vO==FELL=JqMJ*_UW=o*2c2eCsB$*uE^!)kJ@~rowwR#(6}LrR zxZ_+}ZscgU8&MwuH5?l`(LouYhjv#XstzbEv8atO*|fVRGl+IC9GnUb?1pku*3g45 zEl~eJ--AD%rxLMEe?=j>oP?5!}3TbkM65PtC~Qs2$H^DiMA)%vQp_SP6App0=~`&C{Hv$HP(*1t4Q48N>tMX zS!$t^mFS}+Tk`163{Q4%hKs`0pZQ>>&dG_BzkdW-+B}){RS|V{kMADuL4Q`7<}X2> zeV`*ny+{X^=TyI`CE*`2L-F?{{7T}t$;7d$BfB|~xK;<&r)AcXMVHS&o`jJV88*n5NZuVlrpa+kCAQ-qJ|KeDG$0eNGCZ^ z?Si=`4KvQWcqc4`-@HTJ@X`=wT(noZglhwf-0-(%j+u+@k>hIq{kW-=Jlh9k$INTU zzee{y&e8CH4$?^Az#Q18w~@{Kl;vfqBB}I`bNL%ml{AyzBhA8nR{Wy__j+?0!R%c( z56Yq5ySfqby}k3mWRzL)t!iBFmFB@Hi#p*=(iP0R@N!q8Z#%9JWY34Q!;Gm)zbu1% zorV>cc%MB4BNIed14CZj^u*<;D+msC`w8F4;Ji@UUY@~g5*&E58hnMdIdKpG99L2FJL$r4ks zwm}R%MlN0=m+65STOl`7Gsky=dr&i8qM4#V$tQ3GG-l4*zY9j`6rFgbU689-a(2Tg zGAcTlruVLD00%kQbXO2%he;>OVZIzhBU9WTM59xDGl&XOd?$#kDIN$SM~V$0#HKhW zgeIjpFN9u9u`PtAB{?=UjLHI80!W%CmgJ&@8plm0+G|^h>z&c7rHr08NLPH)ReDJc z`YKG02U!U5s>+<@!p5?+GS4+aW!9iFa}NDinX?W-p`y&!YtZU&Qh|i`X7CRgd_99r RSdI4*WljwIbOhiOK)~ delta 2202 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 S39Ip5qRfebpANwI1^)o7lZv$f delta 2202 zcma)-eQXnD9LMk1*L5#!Cv23-SRdQ6ZuGk843e;wZYz$JEJeov4ahb|3;0cB}@?%J+3O2QxaJfG+H zcF)WAxoc}nX=_V4E&=$OmBM1l$)BA|U{q@KF=pWHIZ{M*fri33*T)K&&K*6)X4|cBM))!_S0%#AT>| z04$WMTr**oE+>H;@fN2yI>%L?OXQ^LVlTTot$^jyM}T%7%D5vX9ZQSduIw8U*zeq= zZjnmv6*&V>J^gWku`Y!ljnK}lgB zGlpCBVK6)hOAL4U-$F-lSgKLtR@R`)QztxOx#1@74g4Cx^?I(JU8T!UZ`G?u&GOZG zhHMhOOE=Tlsz=_)8N(gz8AFgfH^_5c{RJs6m^GgePvNw8#oItai?6c5IGzi#atwQGEf*Vuk>v!KEhr;tX71 z!j>XjYs57s+){{hk$BJsrJ_A(J*9bwYfbo~5x=9wb}imfh<6)NfiV~&t0PPM)5uLV zae1bA?3D5X_yYM5 z-d!gWu`O685Zz=#S0a!~aXto7VR9{UD14KkTSTH)=VsF$nmuk}PFPU?79WGF$OWhh z_2KX|O)h=eiq>|4T#y@m)rxk+SiMG=UxWnoBn5nx6i^vm!2Hm+_*^xKJ8DJEU63vo zI%P%g#aNw74}V*$;q> z6m=jOs7pn^syphRvQY33Mg2nJH?hR0L`UYw(Zmfh&`$L+>U6qtA+kq}40qe;>XE^_ z^Q-&}Iy49yASXh;5@_2X%%ns#D+04{ARl{Bj~jwi&IYoTbdMW#c*scD>>f8AV^@O( zmZ&7-ddJE=upCZ1Qf=^j%D6r_%%8{gt`#=8FRAr2!S--O%pZ@a%E{i|Bd3=Br}j-<@r~##i%;%1uIcR`Hjx*@7D_(Ru4}lPhy6{F0`OSNeT5VUIl}k+ z@s33J0|=)hC#NIe(FC4MV1EM14CApE5;!X0`e=#k2{TzjJa{633eTi9D}iK*@mSp? zdLAJc2a(GH*TSukovfMf_JD0tGY+DeLRawza111V#xc4VrppAKIQYGgEm*QXgz2Og zbWkRDtnB~;x!Lrf8)bUQOoYpP!HuTHdDM+&#QC}#&5H9aH`2y=!i@}ZR(KE-=PVC; zCeFDY^jw^E9#j_NP^uSIxYAkRC66u16;Ue6No8jB{#Thby^t>`^VMdw&Kpx8;eAQ`LlR$2VigwS O9YmQWu8X}eXXQV*ly)uv diff --git a/bin/DMGTRIS.sym b/bin/DMGTRIS.sym index 7386223..324f9b0 100644 --- a/bin/DMGTRIS.sym +++ b/bin/DMGTRIS.sym @@ -210,122 +210,123 @@ 00:2394 SFXPlay.getRegister 00:23a8 SFXPlay.savePlayhead 00:23b1 HarvestEntropy -00:23b2 RNGInit -00:2403 RNGInit.complexinit -00:2434 ShiftHistory -00:2451 GetNextHellPiece -00:2456 GetNextTGM1Piece -00:2473 GetNextTGM2Piece -00:2490 GetNextNesPiece -00:249e GetNextTGM3Piece -00:2555 GetNextPiece -00:2563 GetNextPiece.nextpiecejumps -00:2572 Next35Piece -00:257c Next7Piece -00:2586 NextByte -00:25a6 LevelInit -00:25f6 LevelUp -00:261a LevelUp.doit -00:265e LevelUp.checknlevel -00:26ad LevelUp.bellmaybe -00:26bf LevelUp.leveljinglemaybe -00:26cc LevelUp.checkspeedup -00:2708 DoSpeedUp -00:2749 sProgressData -00:2893 ScoreInit -00:28bb IncreaseScore -00:28f3 IncreaseScore.doConvert -00:290b IncreaseScore.carry -00:290d IncreaseScore.postConvert -00:2921 IncreaseScore.preAddDigit -00:2949 IncreaseScore.addDigit -00:295f IncreaseScore.nextDigit -00:2973 InputInit -00:2985 GetInput -00:2985 GetInput.btns -00:2992 GetInput.readA -00:2996 GetInput.setA -00:29a1 GetInput.clearA -00:29a4 GetInput.readB -00:29a8 GetInput.setB -00:29b3 GetInput.clearB -00:29b6 GetInput.readSelect -00:29ba GetInput.setSelect -00:29c5 GetInput.clearSelect -00:29c8 GetInput.readStart -00:29cc GetInput.setStart -00:29d7 GetInput.clearStart -00:29da GetInput.dpad -00:29e7 GetInput.readUp -00:29eb GetInput.setUp -00:29f6 GetInput.clearUp -00:29f9 GetInput.readDown -00:29fd GetInput.setDown -00:2a08 GetInput.clearDown -00:2a0b GetInput.readLeft -00:2a0f GetInput.setLeft -00:2a1a GetInput.clearLeft -00:2a1d GetInput.readRight -00:2a21 GetInput.setRight -00:2a2c GetInput.clearRight -00:2a2f GetInput.priorities -00:2a3a GetInput.zero -00:2a40 RestoreSRAM -00:2a99 InitializeSRAM -00:2af7 SetProgress -00:2b02 SetProgress.loop -00:2b06 SetProgress.correct -00:2b2d SetProgress.wvr_u1 -00:2b39 SetProgress.wvr_u2 -00:2b47 SetProgress.wvr_u3 -00:2b53 SetProgress.wvr_u4 -00:2b61 SetProgress.wvr_u5 -00:2b6d SetProgress.wvr_u6 -00:2b7b SetProgress.wvr_u7 -00:2b87 SetProgress.wvr_u8 -00:2b95 SetProgress.wvr_u9 -00:2ba1 SetProgress.wvr_u10 -00:2ba9 Main -00:2bbe Main.wvr_u1 -00:2bd7 Main.notgbc -00:2c06 Main.wvb_u2 -00:2c11 EventLoop -00:2c27 EventLoop.eventloopjumps -00:2c30 EventLoopPostHandler -00:2c32 EventLoopPostHandler.wvb_u3 -00:2c44 EventLoopPostHandler.vblankjumps -00:2c4d TimeInit -00:2c62 ResetGameTime -00:2c6d CheckTorikan -00:2c84 CheckTorikan.failure -00:2c86 CheckTorikan.success -00:2c89 HandleTimers -00:2cb1 HandleTimers.go -00:2cd5 SwitchToTitle -00:2cdf TitleEventLoopHandler -00:2ce9 TitleVBlankHandler -00:2cf3 DrawOption6 -00:2d43 LoadTitleTiles -00:2d61 LoadGameplayTiles -00:2d77 LoadGameplayTiles.gbc -00:2d86 LoadGameplayTiles.dmg -00:2d95 sFramesToCS -00:2dd1 UnsafeMemCopy -00:2dda SafeMemCopy.wvr_u1 -00:2dda SafeMemCopy -00:2de9 UnsafeMemSet -00:2df1 SafeMemSet -00:2df1 SafeMemSet.wvr_u2 -00:2dff SwitchToGameplay -00:2e09 SwitchToGameplayBig -00:2e13 GamePlayEventLoopHandler -00:2e1d GamePlayBigEventLoopHandler -00:2e27 CopyOAMHandler -00:2e33 ClearOAM -00:2e49 IntrInit -00:2e4d InitializeLCDCInterrupt -00:2e62 OAMDMA -00:2e6c OAMDMAEnd +00:23b7 HarvestEntropy.loop +00:23dc RNGInit +00:242d RNGInit.complexinit +00:245e ShiftHistory +00:247b GetNextHellPiece +00:2480 GetNextTGM1Piece +00:249d GetNextTGM2Piece +00:24ba GetNextNesPiece +00:24c8 GetNextTGM3Piece +00:257f GetNextPiece +00:258d GetNextPiece.nextpiecejumps +00:259c Next35Piece +00:25a6 Next7Piece +00:25b0 NextByte +00:25d0 LevelInit +00:2620 LevelUp +00:2644 LevelUp.doit +00:2688 LevelUp.checknlevel +00:26d7 LevelUp.bellmaybe +00:26e9 LevelUp.leveljinglemaybe +00:26f6 LevelUp.checkspeedup +00:2732 DoSpeedUp +00:2773 sProgressData +00:28bd ScoreInit +00:28e5 IncreaseScore +00:291d IncreaseScore.doConvert +00:2935 IncreaseScore.carry +00:2937 IncreaseScore.postConvert +00:294b IncreaseScore.preAddDigit +00:2973 IncreaseScore.addDigit +00:2989 IncreaseScore.nextDigit +00:299d InputInit +00:29af GetInput +00:29af GetInput.btns +00:29bc GetInput.readA +00:29c0 GetInput.setA +00:29cb GetInput.clearA +00:29ce GetInput.readB +00:29d2 GetInput.setB +00:29dd GetInput.clearB +00:29e0 GetInput.readSelect +00:29e4 GetInput.setSelect +00:29ef GetInput.clearSelect +00:29f2 GetInput.readStart +00:29f6 GetInput.setStart +00:2a01 GetInput.clearStart +00:2a04 GetInput.dpad +00:2a11 GetInput.readUp +00:2a15 GetInput.setUp +00:2a20 GetInput.clearUp +00:2a23 GetInput.readDown +00:2a27 GetInput.setDown +00:2a32 GetInput.clearDown +00:2a35 GetInput.readLeft +00:2a39 GetInput.setLeft +00:2a44 GetInput.clearLeft +00:2a47 GetInput.readRight +00:2a4b GetInput.setRight +00:2a56 GetInput.clearRight +00:2a59 GetInput.priorities +00:2a64 GetInput.zero +00:2a6a RestoreSRAM +00:2ac3 InitializeSRAM +00:2b21 SetProgress +00:2b2c SetProgress.loop +00:2b30 SetProgress.correct +00:2b57 SetProgress.wvr_u1 +00:2b63 SetProgress.wvr_u2 +00:2b71 SetProgress.wvr_u3 +00:2b7d SetProgress.wvr_u4 +00:2b8b SetProgress.wvr_u5 +00:2b97 SetProgress.wvr_u6 +00:2ba5 SetProgress.wvr_u7 +00:2bb1 SetProgress.wvr_u8 +00:2bbf SetProgress.wvr_u9 +00:2bcb SetProgress.wvr_u10 +00:2bd3 Main +00:2bf9 Main.wvr_u1 +00:2c12 Main.notgbc +00:2c33 Main.wvb_u2 +00:2c3e EventLoop +00:2c54 EventLoop.eventloopjumps +00:2c5d EventLoopPostHandler +00:2c5f EventLoopPostHandler.wvb_u3 +00:2c71 EventLoopPostHandler.vblankjumps +00:2c7a TimeInit +00:2c8f ResetGameTime +00:2c9a CheckTorikan +00:2cb1 CheckTorikan.failure +00:2cb3 CheckTorikan.success +00:2cb6 HandleTimers +00:2cde HandleTimers.go +00:2d02 SwitchToTitle +00:2d0c TitleEventLoopHandler +00:2d16 TitleVBlankHandler +00:2d20 DrawOption6 +00:2d70 LoadTitleTiles +00:2d8e LoadGameplayTiles +00:2da4 LoadGameplayTiles.gbc +00:2db3 LoadGameplayTiles.dmg +00:2dc2 sFramesToCS +00:2dfe UnsafeMemCopy +00:2e07 SafeMemCopy.wvr_u1 +00:2e07 SafeMemCopy +00:2e16 UnsafeMemSet +00:2e1e SafeMemSet +00:2e1e SafeMemSet.wvr_u2 +00:2e2c SwitchToGameplay +00:2e36 SwitchToGameplayBig +00:2e40 GamePlayEventLoopHandler +00:2e4a GamePlayBigEventLoopHandler +00:2e54 CopyOAMHandler +00:2e60 ClearOAM +00:2e76 IntrInit +00:2e7a InitializeLCDCInterrupt +00:2e8f OAMDMA +00:2e99 OAMDMAEnd 01:4008 sDMGTSpeedCurve 01:4210 sDMGTSpeedCurveEnd 01:4212 sTGM1SpeedCurve diff --git a/src/main.asm b/src/main.asm index 924db84..f44bd4a 100644 --- a/src/main.asm +++ b/src/main.asm @@ -55,6 +55,17 @@ Main:: ld a, c ld [wInitialC], a + ; Initialize the mapper. + ld a, CART_SRAM_ENABLE + ld [rRAMG], a + xor a, a + ld [rRAMB], a + ld a, BANK_OTHER + ld [rROMB0], a + + ; Harvest entropy + call HarvestEntropy + ; Let the DMG have some fun with the initial screen. call DoDMGEffect @@ -78,13 +89,6 @@ Main:: ldh [rKEY1], a stop .notgbc - ; Initialize the mapper. - ld a, CART_SRAM_ENABLE - ld [rRAMG], a - xor a, a - ld [rRAMB], a - ld a, BANK_OTHER - ld [rROMB0], a ; Clear OAM. call ClearOAM diff --git a/src/rng.asm b/src/rng.asm index 0d6f36f..fb50579 100644 --- a/src/rng.asm +++ b/src/rng.asm @@ -39,6 +39,41 @@ wTGM3WorstDroughtIdx: ds 1 section "RNG Functions", ROM0 HarvestEntropy:: + ld hl, $D000 + ld de, $E000 +.loop + ldh a, [hRNGSeed] + xor a, [hl] + ldh [hRNGSeed], a + xor a, a + ld [hl+], a + + ldh a, [hRNGSeed+1] + xor a, [hl] + ldh [hRNGSeed+1], a + xor a, a + ld [hl+], a + + ldh a, [hRNGSeed+2] + xor a, [hl] + ldh [hRNGSeed+2], a + xor a, a + ld [hl+], a + + ldh a, [hRNGSeed+3] + xor a, [hl] + ldh [hRNGSeed+3], a + xor a, a + ld [hl+], a + + ld a, h + cp a, d + jr nz, .loop + + ld a, l + cp a, e + jr nz, .loop + ret ; Snapshots the initial seed for a game, then initializes the history and piece queue.