From ccaa93430541f0ed0e0f99057a78fd7cf290f54c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 11 Nov 2019 09:33:24 -0500 Subject: [PATCH 1/8] Decump SaveStatToString --- asm/save_menu_util.s | 149 ------------------------------------ baserom.ips | Bin 413412 -> 399180 bytes data/field_effect_helpers.s | 20 +++-- data/unknown_serial_data.s | 2 +- ld_script.txt | 2 +- src/save_menu_util.c | 57 ++++++++++++++ 6 files changed, 72 insertions(+), 158 deletions(-) delete mode 100644 asm/save_menu_util.s create mode 100644 src/save_menu_util.c diff --git a/asm/save_menu_util.s b/asm/save_menu_util.s deleted file mode 100644 index 8ebfc3731..000000000 --- a/asm/save_menu_util.s +++ /dev/null @@ -1,149 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start SaveStatToString -SaveStatToString: @ 80F7FCC - push {r4-r7,lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r2, 24 - lsrs r2, 24 - adds r5, r1, 0 - movs r1, 0xFC - strb r1, [r5] - adds r5, 0x1 - movs r0, 0x1 - strb r0, [r5] - adds r5, 0x1 - strb r2, [r5] - adds r5, 0x1 - strb r1, [r5] - adds r5, 0x1 - movs r0, 0x3 - strb r0, [r5] - adds r5, 0x1 - adds r2, 0x1 - strb r2, [r5] - adds r5, 0x1 - cmp r3, 0x5 - bhi _080F80D8 - lsls r0, r3, 2 - ldr r1, _080F8008 @ =_080F800C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080F8008: .4byte _080F800C - .align 2, 0 -_080F800C: - .4byte _080F8024 - .4byte _080F8034 - .4byte _080F805C - .4byte _080F8098 - .4byte _080F80A8 - .4byte _080F806C -_080F8024: - ldr r0, _080F8030 @ =gSaveBlock2Ptr - ldr r1, [r0] - adds r0, r5, 0 - bl StringCopy - b _080F80D8 - .align 2, 0 -_080F8030: .4byte gSaveBlock2Ptr -_080F8034: - bl IsNationalPokedexEnabled - cmp r0, 0 - beq _080F8044 - movs r0, 0x1 - bl GetNationalPokedexCount - b _080F804A -_080F8044: - movs r0, 0x1 - bl GetKantoPokedexCount -_080F804A: - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r5, 0 - movs r2, 0 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - b _080F80D8 -_080F805C: - ldr r4, _080F8068 @ =gSaveBlock2Ptr - ldr r0, [r4] - ldrh r1, [r0, 0xE] - adds r0, r5, 0 - movs r2, 0 - b _080F8076 - .align 2, 0 -_080F8068: .4byte gSaveBlock2Ptr -_080F806C: - ldr r4, _080F8094 @ =gSaveBlock2Ptr - ldr r0, [r4] - ldrh r1, [r0, 0xE] - adds r0, r5, 0 - movs r2, 0x1 -_080F8076: - movs r3, 0x3 - bl ConvertIntToDecimalStringN - adds r5, r0, 0 - movs r0, 0xF0 - strb r0, [r5] - adds r5, 0x1 - ldr r0, [r4] - ldrb r1, [r0, 0x10] - adds r0, r5, 0 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - b _080F80D8 - .align 2, 0 -_080F8094: .4byte gSaveBlock2Ptr -_080F8098: - ldr r0, _080F80A4 @ =gMapHeader - ldrb r1, [r0, 0x14] - adds r0, r5, 0 - bl sub_80C4DF8 - b _080F80D8 - .align 2, 0 -_080F80A4: .4byte gMapHeader -_080F80A8: - movs r4, 0x82 - lsls r4, 4 - movs r6, 0 - adds r7, r5, 0x1 -_080F80B0: - lsls r0, r4, 16 - lsrs r0, 16 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _080F80C0 - adds r6, 0x1 -_080F80C0: - adds r4, 0x1 - ldr r0, _080F80E0 @ =0x00000827 - cmp r4, r0 - ble _080F80B0 - adds r0, r6, 0 - subs r0, 0x5F - strb r0, [r5] - adds r5, r7, 0 - movs r0, 0xA - strb r0, [r5] - movs r0, 0xFF - strb r0, [r5, 0x1] -_080F80D8: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F80E0: .4byte 0x00000827 - thumb_func_end SaveStatToString - - .align 2, 0 @ Don't pad with nop. diff --git a/baserom.ips b/baserom.ips index 4a40d3337e4029d3d7cc42a8f59b457d8c002953..d4a0a8bc04eebd418bd7c438fdbc5eb06378e4ca 100644 GIT binary patch delta 41 zcmV+^0M`HHof*uo7=VNUgaWh!wC@D%^WoB%lp|O>v#h!iN z(qf1SsSvVNDwQN@QBwH%e1HG^{{Q_RzkAQ?anC*H^?050c%AcF?(^O|REL?rf#oEC z62L8xmajTXqrhGO1cpF?|D7lR0I+w(5eK#j`%oNVvrU!T1pJQ$fCD=(HGGA%H++Rw z2eOa%A&tDxW#NM3&&S)x$HiyG`Nu_Zt>QxC0=SfT2KPvOP+TJS+_uE+1H2Oew2c1m zx{T53$WRgh+T{lVfeJa!vPk%Oga|YeFhBSn(bcz%3fkt!XxnRo_K~PT(wXo$)Q)cY zhO`uw#wFvyEB|#-dmFXb4zNrV2TIu$cXpjX0HnZ97V;Dh04VcF01v#vFr%VRae_Wt znOP=eXcQXL0Ys9d6;6B|h&k|D0FSTz4#b!p^9BK+xlMLrij49-$>TpoD84F`IL&wZ zU2bUS+}DM>;+QJ{1OyT&c@GqWQMyL~0J5?OfI2x8fDLL?13-Hg;^pBKK=nS#CvFme z;&W#}0syf=!?X}VAh9$clOj<;{`(U}H$_m$N3rgkuvDc%oxj*!SAM=f>TSQR*bldn zj=KO3XD8Tc-quDs6QFS%I4E-L6wN}31Lc5l_6Z`vx)1;&;FCbu(*FOh=APnHNpN;b z(OT7Y=PlqK?!QKd;>G&^pAsG^|^9`tzDBn+_-fI$#A(Aw2%ZPd!-xw`Z5}u-nedC_yQQ;FeT> z5hMyM_RlaSCv2E1{o1M2GOQUx-W}P-Ryw+NJ+Q&0!_sNq<0DW5+aZuzL0JQU1eQRW z(l@5d;B@K9)^kC8IYMe0u#3B?9xpD{m&D5?e_OjGtvI~|!z2ls4gT#vF)Pd; zLcHY)o{q@0`X5u`8W3af-8QVfZ}xbhm|*T6P!B-QCpof}p0@X&oY&Pw=SfiF#t`xV zLI5UsnTVUG$BQQcDg+l3BuO4&)mtJ`LCVeHMPaluMfJf07EV;RWQ~j9l)_>PbXZwm z48qyPiDIuIic7WriTZ0i&3#}f66qH^_YCcDU5zYjfrccrKs0rUoAlgQJ0DE~_TPel z6i&N{X`;OheQbRHZeLR`T#SVcKvT_lh90?xgCOo_>w@|+rIULd$=o0XHF!$VVn^?3 z^XG`?7cPk+zy?^`_DR3%DmAiLP1Yf8lI|+TcV*nc3y{o=4rBDU!Tzkv=d$@W= zjBa_RaWR(u7pWr+^%upFBPT}1Yu|NbuEh!Q;#hJ9$E8d(rRPM@^;~sTu_s{QEqL!c z^9Mp0NJ9xslj_6nxjjYTAxMbgS7aH5J@6@5I%#snH)xj?CXg$sJgmoB%8-p3;jxWN zko|x04w;k^WXE5|eBmcQL}rQV4r{E*Rr_cxA+#WZ(1|LDz!cBzFM^}ZU()Ht5=)oj z#sD=$Ch(@a`wh}!M@t-Zn2Yzp%9DUX^e{Zr1pouy;2>EX*_+eD4C7i)35>T5kSjPk zi^C)=1aqL{V8rwxd%#keE#%bS@S)-?SYo>XEV?~wVXrMxN(7WFloI)_6>)nQu>Tsw zDM@#cjRm)YFzMj8gOf~o%-U89D8}R%Ic4F5Vf29j zhKkgo^pYBs{9*WnghUYJcreUs@ZtFpx)=eZUg9-A`k{JU^~j}2H6J7r4hN-7ID%|6 z1)$6tl9GC8)jp@Me6K@gBWE#>RULWfg+%@iOqKrrc|iTFK9Il___FzW3BK-4>N!0} zk_ZUtIKoI?p)#G4Y(YMc9r#`ZNLk|JL7aWKag>BsOdADEF*iop+53N@dHmT94>|{Z zGcOhRy~!4T=BR7nyT3ccRfSgS7pX0E2=RjMJuivb)?a*_D2k6ENFYk%y}bqdz%)oQ zg#f0Dv`J`llGzEINuR42LrD%8uiSyEhY=m1z8nCI^@afmjs;L8Gs58tqMXK?6eOUq z5<8}~jS`?|a{{1H0JtTjzw`x_Ru{h)hVTn2&4|MQR;qI#b%0JFNFkE=Z}B|9R0&~e z$d^B?w8z+7fmFjS!KhdhK1_BQx$fIzR$=suF=1#nVn9fXhVvIT$CX)Nju?eDCePI&P`q} z(kv10lDuL}l7PS@E6Cu(Aon>A4Rr}-{^;-Q=`E2=kv$x$KdBd#JbAvDFGr=wiy+lY zfizz}>D@p3*FkYwDh-Mc$Z=y*Fi}t*=R>ZsgsLbckqS(T^aGACh)?Ehfbl~*hi>dh zA#gxFU?4~YlfY*KdcM%m?-aL_yELJ?D}SU)aSurYSQG_J1>?=PR|Rc@0q{U6U?b^3 za-mD&Kxae9dT$L&43DBHYtomXBeg+~)VNyy_@1wEP(Qu^%vYg+wL$vZriyf??bC<9 z<&&J=fY5QAX#f-?QVf!+qIdgx`(0N`3r4J5WSa@}GdUgrrcNR~FzcU)H6;O>0h9w^ zt_sDvg47GfjL#j1@Bc>)f@A`XE$Xv7H;(Xu7{gn0pdf={5DI^i*U6KN%4Go@0RTO1 zm?l6Mr}vNm&f7VV8U@UMM*+!1C3!&ZJ;!h?ad&oxzDZ95lBds~NG?gmzpYDTUz{w_ zGA4%9pfYKIn7KnZ2F)?ihqvXZbninq7SaWhV(L756+i^smJr&ZCs;Oc#_SB@mhS#$ zh5yWS;3y(4{qq}sCexT4=hy!C<%7*s4Q?Es=RliG)v((h-(U6mI{;zc64iX`VeKIr zK6Us>lm`xx7UYn&Nj*7b!_F?XvGujPE!>macM^AyM^bd(tBcD0Rcg@#b_LkXbtoi-gzM{p?me2THU5?2b4LB_O#VuB)NM8O6tx zv61`GrJU#H6^&^Lo8WR0D2Ygsw86Lt_{5OCR1dSn1d<)z`@6jhKMHli;JaM6?Iui0 z9*m+xvuOyvK%+1h0nHcX3wjHS3K98$snoMMTJiD0I3Vht?|t`tuA79-!{VTY%>7Ty z(^P^p5v_DN!SbfOly7QD{8}hFgPrEfGXj$FDuAi@&N+2Hkj*=aNl;YYiFo}rGX5Ws z4N3-ov%)BcKWz*8LoF&mbpMOJL4DdOuJbAc`0 zTrzPFH?LT?CjP}rreP_jbVXMmP=vVtbavBa!&A85>F2ZYs%as6WY}E^aF95~AFS_; zz_Ss)HxD!?tsuMNp|uGqIlW?C9CEVG3%8jJzBIWU;tinom{{Mz?vl$$D=JX&3XJUj z<4gH)RMWJ7XE_p&DMjwM9$+2P!zV>bL80-IP;WkJFA|nzUdo9gS;WY^OdY=%FAA0x zRP8MZG^4_kU)ro?ndaNMY9U)}7$#-j$iz-x*VFqsOanxLWWa$S zgS*CSMmunl04jjbs>~DnZ&;E_he@{2QX?y?JhnrnIw|- zjbVCmSx6BjNzJ`HTF^)WR%Ff2_$p23I#`h&14&CZ2yF_Xd->}})KZf*$L4Q!Mj|^6 z(fe(whg3k3eDLSk*C@sEcp&-M*VB796Co`C7<4FJdLTk+#z~S}c?tgYpNWsGe$Tci zQv#R*zcS=5#{P{B*&L%|aqC`54-#>)d%Jyh>w@2JJqEX?s~-1T1V|vq~Bo|BQ0gXNv9<= z-xP1v@C39wnEB0n6@~u*XZqY4A!)?_&^TH0;s!QeCkLykn zbB|_`aCzZNe+Q#YZ=HI4nCL?p>uImNIyKfEzxc@CNern5u_;!cboR}ij12uf%bEg| zIS;8;*q_FCuCTv7vSqW(UM;;?fKoUrCP&9l1r%W@TI;%&I2afWdV7;3+x_0|L2t*b zy@EpUuE~gWdwk(8Ym9`Zs^tR#l@n+ee<#+NZ!Z}nEG{kOfBy^a<9vcIfVChl`zn)E zPBq{Qp~H}f6$9z~r<8r_!!dASI8q9PRs;Y(-CH>_?E-?mb1Enfkmk5&u+nqip&>Yx ziY5t7sMUdq<}+lKco+Y^I3Gt50G1EBQ3U)sx|&^V@^f#H z(i~JC3f}=Wp6LxN1BnWU3A9lN5T8ldQ@#e7qQ=*b*~nyEI_6!#6;e(cMAJkob6mdi)Zm7_ZR0soN*0=k9jFn-FHIO17f zBpx(py}-67n3=>&ZvM7^&?<%p70aH4RR*55!XN*A=Zrj!t73L@F=kr*Th$w^PGJTf z9JAW8jx@Hx!w`EoQ+RMB zpt$?lnTRn5G7G2bot&E_+ z;+T(HfYR>x4;`kM@nY(`f+=JHI8H!HEMjGb$tTI{4PjKdW_kmo|^~j z>w*DrkEMAeO~MHVl0-_v697b*_cnaPp?CvsJAz%0Vz_C6XF&(ec`ocFB}7D$9%%8--uHeHdaqt@x3Msp zy6p+05VoaAW_G3WK?=C<{?D^g%a8mdq#>nTWY|se<@X#_7miBhr_*4Sc{2J$$}KXD zlJ>o^il=^vJz*a#sZoeh+D|*eJNO6Dr&VM$&Ze@F}Niy+2%-JTkQaV@V6%frzUwjC6NNPC`Qn{!U zpThYbWO_qJg!me)<+ZnQ-thqd=9JL1$`3yPB&#aE2pgn&4=Isj;*_?bw$Dvh4K&n+hsj(<6f5Dns_;B_g4VYx^XaQ4YtT%^Vl*8XwS*#BVUA|67S~hE!%+m5hD}BY7A|$@>UnEjqlKi!B~ zIo%wm0}okKA!K#UG$`FIwDuGvNpcmlBO%e9weSJ_NnD5G?UM!MEZ>W zY+%UR*hd`ewS|6IuvEX$zG%tOK)c{onNLdIQFCA6V*EML3GNThQCVp{ApT?DH`{e< zafum-O3*)9Bj+8rKCZC;tN_5yTgo);v{cBVBjjU`&w2C_KbhpxD#u$Ne@$(wC!JQ{ zK8oVbmYy+Dc>1UTD)#rZh-dlBh%2;k^1@S_KsVc{%EAe0(~t;*=`U9sJnLq%FxqFp zdV5)3bm3$FX6$9*yXelLDya^RpKvI5>XZdU?X;gQUu)dQ&sL0`zpNn=U{k?)^l!(h zGecJvFfX4j5M0jOtt6bWQT^{zex~)wb^g9g4NJCblW$|r<`yw0AVh<>c&4h*RT!y^ z5L%Kk$y8lQO6A+!nPyGxj+Y5%w1l$>JU_{#CuI^raSlgnC&EUqumY$9Q0_cgF4J!R z37dpGT_vnU^o#*JAMk9))`+|`j$~?;Oujg&$_pQ`8EFrJ2aJn)5K333GP8Ok+Ff&s z^$3HV!BGc?e80WfeahHccYkpfOTK^kjD^id-78vb+lY1bm#gpY*6b;fyrtKC>)G#f z*un| zS@MpX?EN>Ef1j^`CY&srO{c2)&Kg&$i4x-6@s_7-gDzR#IdGZ~7^3h;x8=viW|eK% z_+s|s4XMgBhUWg4&nj+9YuZ%zX%O?F7wnv%C(T~6hxdGVO3}yi`u)s{kSXBC8d<^h z>{vNnzr(hj-Qs#Rs40_fRXtHd{ihA?uauR#^*CyDWeJmeX)iNMZHsqnWPevBlZz!K z=7)qg^CZn3LVspP;|Cij%^<1X5ddG7JiS{mh5 zfZ44tA6Xk)n6-Un8!dMgh9*Mq&%TT>d->$U5>eMEjA%$Y^~g=mSV2^la@u^aNI`jE zl=PLKKe98flp?PM=kRy^HP4C&Eb3Mn364tkRZQg^Z_5dP zc9NT$Re)#t^IO}dIV5Ctx%%8KsCnd9O8G8&XUB0Lt*^Vq8~DS2MV%jgTvDw_E_Am{ znN^P3oxc1jGu1ZktyqKRw?;;h>zlicvtdG30p%Q|j_!upVw&k3gp>uekgJ8az2=P= z=my7_E2C_nQtW7)2C0~?o*^dPlQ37LuWl=1rQ1-a^RiH zR5I~Yxr3-RUP#bCN)M{Y3rfQDR*vRgF1sEt_4KKv))$b}-$$zLe>OJFj&9_r<6x{nK3Q2 zuR{v-90od0jGkiAUs2gC|6DNQVXp8hRU(O{hg(iIm>ddnQs51-+zsvpLc1&GSxj*{ z%V5ejOwYYrN!3`37hqV445NDT270Y#Tf;C*LaH*dzt=)Z!cQ4%^cRl{gxfxygC={! z)pX_`e&U5AIOH4meke(-?Bj*Q%6WsV{TehDxrQEKT#RJj-lfX_B$8?TDM=1Fm}!O0 z5PB<1BE7+6RDcLc5*FZVASkgQOZMw)+yOn*!^pW7aRAB7e#+)3Ke~~4zr-iaT=Arn zq!*Y0gEW{o9E1vDVUr*AlAHNKdMBhy$H=9=fBO@xv4|uZ_6je%BttoK4Ko`+0iFn{ z5abZs-w8hy@Bxl|LxAh@y9Hn@N-Gnxtm;AgCfR<7jS zA&Ezs1)T?+jAZBu6bNT1ATxKd^rT~|UthdUL;BLueU9lykvO}l*B-jYaxXV&%Mk-= zMV(E$pX`x<8n55m-C4(lw2uP=YdRO|v$3s!!tup;j`)kPN0?IAljrI`eXtfWDXzb(r`Z!f!_@%g2-qqeEga(7tbS)smMSmM^A)pi-~P}{iVx#*;Fx2_2J z9D54+DuOo@vEX(z;?43o)H6kW`!idU)ow|GYtwBCSYMgNdw#nhYq=?}4j z+AFX~&FKvG_BJ2m_#dEOg1s43lF*w?59U3R$qccI6c2S4>(33K;-s(py(!?x)3A$- zYcSm`M-{8`Z>SXX^*E*)HaTE^_dZyFZ7DWwRwC^}N~JU~+EE@~5hH-w(T5L@CHPZ7 zoJuRX0!N~irDn(Ahu&sTt8)3Wrep}jNTw>Oj}2j1rfaJ9WlKh@DWQ?T8M$`ft>3=S z7U?fjdqXp8C+j#yz9p@@wpwK!c!#D_Yc=E?j!it=_c}%K+71%q;F<@#TzTFzDd+NZbTFx>>zCpahnV-y=v^kfd=;`Yw{RDNmpUoM7#s z+w2n!z?_R7fD}63;Rw9-HgM#DqXFX4qtTFVUSM)rngkqBc={0l?p5 z-w=qL)VQf(Xbu3N$)||Ks3tyap!I1Vt8sRYX_A-P$J&?g2o3NyG)Hyw8G1Le=T4en z4@d4-cm|x0!#>0(!TWVKMM`NJS!~6t!x0?Zj`2xQ>|M{6T|TWdo-x&)#n{xoSDm*0 zk1EDO+gJ_2UGHYl<2EO<{B{;0uE>3?hf{P|>x&s9MKxlEV8PDDLS%e!4*F6UHnrS; z-{j!w{Wo}zPI5T{IE2d?xx&y_NTd5!WfkS-_bsI(_TEV)Pp{=RSB$fvbwHxw(Q9#`Fq_!K>jqz(q`hlQ21 zqMR=UG#^P$2vNFw1lM|XC_>ZoIaWOTr3-(?Zakz)VXR~o%v(tdQ*l7KSHPde*>WnL z73WZ3kc6->61m`@c=dC3wlJQEUt;QE(?2+A%svg+&oJeE;j=O`P9O$ZGz#zOY27^D z#~5cq;8_ji8)BkFc2@W2J@6Xi_io(JQv8Evzt^4)u`78?ahnmh`z1db4=wQ6ETX5Q zWw;+OV<&u%3ZM8KjGByi_xHoRu`b`FJpiOA*vLS8&J-x1@@YOCMF z`^-?U@(-6;1uIf`%K>9z`TA9A9%Ya%(bsdyVMpMy0?(QD+v1yz@qju9<-j%jej3oWn%DWDLK)}@!N;1CsX0}bNXQ?spVP1sr(;{|Y z5GWxA0VA&>^WH2hruVw-+5&IQ9sBpcERVgiy%DzrU2Ff3w*Oz6+H`@7UP+?tS;co2 z9L|ZKWc!5@+%ec$)z5B7afz32MpASVZ8-o0oNCmE8MVTr#2^rWGl#OCt{T|&b+nr4 z{7LhGlXjLvd7W{FtfW$JzxTCPm(w$=Z5u{iZ!OCdHE1M9o=a@iEvvxAvYO3k%a^a^ zdNdA|$+xXCAEeeY^(tGo47%7McEu9eR-aeTZ)mqNBMR`Z8tv^t=4cD6g!;hd$!Vrt zWkGoPOoZm%THL&)Q$-ciiCATQnStIN3^Zs~{UEODPega#`u0;*w(zoflm={d-T&eT z_Jc~h7{{wyv0ab<8$YsM=41FPyzP2<`{;x0{1gqpOKm+#ga1Zb8Fe?K^{U%r7jF06(>~1ZdR_m!`CrQx^SWQvZc|WJGwBFQnV0u;F-<$0? z^T~GW{G%BcMY4g6NF7qnIONat$gP@TGg;EbYe!EQ z7E;;wQ|tX*_U*Sf_tDl@#A z#c203aLe(ceKdG*a&R=bZALHu1@ZT<`v1yQf9yPmTz}%$=qGZ!irEr!qWZOSH8$I& z^8Q$Onxn8XtlrM#&jIu63^u#<)`!491;)3k9cIFtn*DVrj11B~gj1?$rqaihb$nS* z_l#vugy$d8eA~QX=U8!^os(9Xr583fquu6ombwbNplEPb6?IqC*{I9$*+-`cU9Hse z*3`J4)4vYM-UzwxRjbxqx&F=cRk&Ba<3ONOwQ`NsKYo?DhKpjo|CleG{o?DF*cyWy zYPY}NU+j7@I1patZ$Qkf{_S$WJ>1MQHqR?3+XlBGxjy67=2{mtCNkCQ+Y*rcBz7&` z@C3G6zRK*?lMB>JQ=&V|eJNN|bFBJzThF1f;Mft&^q)ifF5A^!zg0alzE*DCR^&Iy zD0j#=ERg%?tJI);_~L^$^Sx|ycb#hI`taDg1H5PcdaFyD!g4<+zu^PEbzRfXp6j`X zEnaY}(YR54`;#jnug2-gm*(JFt>e*}i!RdIPKW%pKGg2@dU7Xs_vzHEsii;RW=En@ zv{Sv`X2!jmV9gBWmaaRMFpJ)fi#Z~neSbVQF2_yR+*_v6_Dl0Xj<)OLe0HBt+m@!` zbCb06oZ#vmHnOb@!xWXzk>#|rDr%`4;RV+he?N`dOD0TaU;AA7r9G?iKZ7o(ul|~$ zUaEcE-Jw1^S)pM=?>$*EInArlaw6hhTV>i@50?MX)eE>=Kg%cckHnT0(5?~htok-~ zxR|FffopE23Z!9U;6*mO4Tl1-X9zl?qe4ehx>xxB-a-zs;1XJl!v zN2&BrFnQ()4R7=rk!zG)kvS`F{_c0rdfu0(&1D|o7FJx_3X)GJG#8F(=+>l zF4$+JmT}W^R^v2LCt&7th?>7t6JnM7h5A?;Em!6zmw0NwL*QDrYi01y`k55>u_qmw zZLxU;HnknO-u-25kM~FE;WHSfAn|(7hgKpnlx(@h4`8 z<3sfGkV8|Od9C)-qK3*5X!dx5pOfL+Nh7flreST!ZqY;0>vc?GRgS|oKZEd=cqmJ% zxG-?JhNW%h6do{BW#sNvW1ZH?U@{pm)m(-2n(hjz)naVdaWyR>BaO;qhLqi)1+M4) zy*D1S=N*39en7hTupt&*Ipvzmvk*?;RzYlH;Uc(oH6 z*SBAaQN`|BO}(I@8MJWmV5!|$Rf018RqgHP^(U%D%b1mm5`3muy<708;qzZI+48=Z zopIlkHK=xm1p#f-U6?9XhRorLVmZYs>%%z*ZZV0q{(s9ZZswFGm6vJ1@%36IyC_;K%*$EC)LoN!J}+v^YQn@e`%jC6bf zrr?%s;?bng*y=@>*w-0e6YS1P7v!_mL#r1Ur_UO^NG7~koC$f)Umeu^jZd05nD0bf zimOxz+jeH1CDqsxlOw|#YCodx8`g(^s3bB~q|#)h3}0`!Rj{MM4jYTt&Y5_<#8=UZ zX$Hjh^#}(;-4sutibl^^-@17J@Uzl3bBB|Dvg|9)A@1k?)`?cRL@V#LI>KI5JwLkT z>U^V>iCDsF*CB^|d`EB~OoJ>UGrTITe?j=x;- zu`RRvjw9r^<94S~MuIYi)z6N*DqktEwDV(n#yVhx28Y?j%-vrDswc-*y{@_p-Vj`? z&V2pto{f*5ct`~^q{`F5R~41_bAz5=wd9<(l#^qr)9PGz+vTf^M{UJR`H&jli~Dq3 zitf9PR`6FtB3|1a`+4HNrb^yc#dyv7{bU$3@OgVxKreNyGF6;Xae7^!zI@NIVurid zB<$|N3@OWB>>P9RTQ=cV>N6tFsSJZmn|OC(BYE_eht2(}`e>RXu4NV0$Z&pSZDIDV z^w8<^yH81feed5i6N;N*Y-ATOLZ{k1!mFmMf4fFkYj@nsdC|apNvU08@>%0@Sx=(I z3D1@@?7XAFm6+s+8!jr$Vq)xIdiGCfgz|%1mPTFcY_8jq(069N)z<`(;W&Q8B-G{d zap##&?HpbwV`CwOlE1}#;!Kd`1pV2t$fL1dst49TFN&P=kPehuk2+xZC%pCY zg`_->^U)x+Lc6j9?U+K3@rtfI=2%D^B(kPNDyP%YR&qwwQ~pYa6AwGKoVM+JE?_F| zw~Ix^u?dg1>?PaIh@I#$`BznXx@p_>o~rWgX-Pa(?OQsVyV9x|S-MJOJv>ztA6Xw? zlF`lxugIv+jP2VUS?(tz)x2TQ;bdZ?c{^j`*>jgSwog@^Gdi3)Gt6qFb{NMs%&MOV?r4lO$0PPo`&!OHp4(lFc5oaA#TBDo>04;6-R((kSENbW(6D*(W4m_6Y2a zC+sfch@mg_MM&v!w3)SNY^yBv_xweMPyO!dM^)c`NXyeN77=q)I^P+<8C6GOE6W<) zm0a1yW|hoipV}8A_M7IkO_w=qh7+9rGL2-&6E%z;$WLx&nN`^0)7zhWH*1}}|LfvU zuDTqobTN1<7gSrHh5s-9&W^)OPsXzgQlZY%Iq<*14?=$)&~3dY{H!&O&K(b^Fj3NQ z6?@7wIB^-YDL6;Hx?bsMbl)kwV%9sU-S*56wwi)IXk5%`*H`A> z7iWobjShWUU1-?rvZK8!^UT}dw??2}IxA$#oFpH56s@1H>w3N6TYIq5wNc|TE98@B znsaLX_@Pzeh8-c3y*QPa+^Sg9pcp(kdY~P%BdgHd+(VF>RO~_N7`PCw+ zoB$ozfF`l*u#Fk9;`D2|BO~Z%LssnPt*+01xjfIE_+!)+>|AuDB-VJuqi}`YoAk@g z&_z58^njpSODq;tc^g;}QpNC}m|o?uQ8s5{#i%#Mqsqk%=iB7Q|HMR!FhNzt3?;JI zWe^CLTcon!CUC##75PLYA<0xjLc0o%%6K3 zUsdpy(dw?%n-oC8HWEweG2>^64bhHutntTx$cTuliO7b&ZxeOz#{U)flQmR3_(MX- zVRN@9)p_$ZnXQfkPxe_wdFPN!ng%-y)atf{^;Q|TvT;qw%>JPlV%enytzr+h8jtlt z4%WFpRV7UnhP}=C;YsY_>anXQXCI5@bd<@-S7T%t@Wt-+hI6KJ?yJl#EbNQ}x4J^6 zVnENiPH1z*u%azmW3PsXUI<=qTP+iF0kxDSvGGUo;d7zSv=WJh(V?n0=4Gv<^jy(R zM5cCK(iY`_y?8k!9AHw^a>YAys>bh~X#bSNo;y&wl_IkQT(FH|E4$PP?<9>6)@dJo zK{!>-gU!VZ02!~aNOS-&^L8>J4Kdk{aD zxn!4Ua9S&vVVQS4!imdFKSQMoqN_8kEY1~G(f99Z8l|@P(hZj zIVZ>bJ>4qXCgj3B$B4h0+_Cv92hP_Do2UbtohdSJup-Bfeh*bW8JThQChT5nYjuXQ zWhgaiF;$7o$o5KFOuL@REIVd2S{>FGq9WOA(ksxKExEd_yT$8U~{-n~ey@Pn$qp84IINn0PpjF`| z`n7S7b+rgPP$T$zC_C1-fDz0b3^`x$>F`goe$BY{xkzirRt1MAzAbr1ZFbAP&7YVH z#m7s7!%LjPUd>#x<9~M1nb($MhAhvyl*t}GZgh31teIROTN5qTa^zyAhj3!*-ppdW zqJff+;&`@m3PZ`islc%O$?!BkV49g*k=AzHZnS!Wof>YGcR9c#C(%Sm(IJt<;*ip?rYhVX*Jz&Y`uIq=g41NjbjUh5zKf|8=5<| zbfP2F$Tx@KSP*rYYUEgH=Cfd0T|aUcWPeWQwdUGSpKIekU$xj>qk?v5XFv99n)+?$ zoM>UAkjkciICtPdqKtxl6C{K!+x#vhJk+uCWBMB5*T9kVJ0E_DdpPYYSpYJ&Dsrwp zK0czqnwT>D{~=`a{}%sgZE)V94Hcw|af4RFl2LFdC0!)d9fUp+M_@rgg|3`JZxR9l z1NA9pcfpGX@vnhHa~^xXoy7wyD`@dY@7Ukg=T?l1(dj;hdGtpr8VM74{Q{ov*VnKU z4Z{Q%monFt<#!aZgQ@NmyjVCeEV>B>fs{7xil5FW?M~)^o9+;?(g=_RD2)BXCw}+i z!F@r!00dS@rcA=N%8*B(zVPntA0O~>J3!_bZf+UcV^azdKR2w~xC!2Q>C=1mF4VDM z8=S*YZ&|K6IJs0dpWnQOu~+4A0Kpnb33?jBp%ltX4pyg{Bz>I=Ca3}6%OXU7i| z87Ls-x_`aFb&U=~?s9gesRI>fTqQyEbCGloLY4yt1f*2$+m#N02&M2beeRY0kd(CQ zTiKl=xJK^JxW0eIyH?cM>bUK9d~a4F?`(>QT?vNDaX_V%=5;bAt}qu6QFF+&Fwdoq zq*Bat_hkH2L-p-5Um>_;0;$8@_(v;H{2mw>0BMlR+_v1b03{0K-$8KdCsi5Rmir}8 zJg0(p7%Z9O68B;Sb$G9`=gxB&Y6t|_p5YG={jGyWp3cKKGYw4@BnPyT+?(KGtE`}| zTJCU1K56yuKs;QVnM~i@PDy Le#BMeTi5>u5ciQ6 diff --git a/data/field_effect_helpers.s b/data/field_effect_helpers.s index 429df9f61..7ad7b168a 100644 --- a/data/field_effect_helpers.s +++ b/data/field_effect_helpers.s @@ -7,22 +7,28 @@ .align 2 gUnknown_83FECCC:: @ 83FECCC - .byte 0x0c, 0x00, 0x1c, 0x00, 0x2c, 0x00 + .2byte 0x0c, 0x1c, 0x2c gUnknown_83FECD2:: @ 83FECD2 - .incbin "baserom.gba", 0x3FECD2, 0x4 + .byte 0, 1, 2, 3 gUnknown_83FECD6:: @ 83FECD6 - .incbin "baserom.gba", 0x3FECD6, 0xA + .2byte 0x0004, 0x0004, 0x0004, 0x0010 + .align 2 gUnknown_83FECE0:: @ 83FECE0 - .incbin "baserom.gba", 0x3FECE0, 0x8 + .4byte sub_80DBB18 + .4byte sub_80DBB3C + .align 2 gUnknown_83FECE8:: @ 83FECE8 - .incbin "baserom.gba", 0x3FECE8, 0xC + .4byte sub_80DC318 + .4byte sub_80DC348 + .4byte sub_80DC3A8 gUnknown_83FECF4:: @ 83FECF4 - .incbin "baserom.gba", 0x3FECF4, 0x6 + .byte 0, 0, 1, 2, 3 + .align 1 gUnknown_83FECFA:: @ 83FECFA - .incbin "baserom.gba", 0x3FECFA, 0x6 + .2byte 0x0007, 0x000f diff --git a/data/unknown_serial_data.s b/data/unknown_serial_data.s index 57c979340..ec5818604 100644 --- a/data/unknown_serial_data.s +++ b/data/unknown_serial_data.s @@ -1,5 +1,5 @@ .section .rodata gUnknownSerialData_Start:: @ 86FC50C - .incbin "baserom.gba", 0x6FC50C, 0x3760 + .incbin "data/unknown_serial_data.bin" gUnknownSerialData_End:: diff --git a/ld_script.txt b/ld_script.txt index 03fab08a6..dddd60b81 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -222,7 +222,7 @@ SECTIONS { src/fldeff_teleport.o(.text); src/new_menu_helpers.o(.text); asm/box_party_pokemon_dropdown.o(.text); - asm/save_menu_util.o(.text); + src/save_menu_util.o(.text); src/map_preview_screen.o(.text); asm/link_rfu_2.o(.text); asm/link_rfu.o(.text); diff --git a/src/save_menu_util.c b/src/save_menu_util.c new file mode 100644 index 000000000..a4bae2409 --- /dev/null +++ b/src/save_menu_util.c @@ -0,0 +1,57 @@ +#include "global.h" +#include "string_util.h" +#include "text.h" +#include "event_data.h" +#include "pokedex.h" +#include "region_map.h" +#include "constants/flags.h" + +void SaveStatToString(u8 gameStatId, u8 *dest0, u8 color) +{ + int nBadges; + int flagId; + + u8 *dest = dest0; + *dest++ = EXT_CTRL_CODE_BEGIN; + *dest++ = EXT_CTRL_CODE_COLOR; + *dest++ = color; + *dest++ = EXT_CTRL_CODE_BEGIN; + *dest++ = EXT_CTRL_CODE_SHADOW; + *dest++ = color + 1; + switch (gameStatId) + { + case 0: + dest = StringCopy(dest, gSaveBlock2Ptr->playerName); + break; + case 1: + if (IsNationalPokedexEnabled()) + dest = ConvertIntToDecimalStringN(dest, GetNationalPokedexCount(1), STR_CONV_MODE_LEFT_ALIGN, 3); + else + dest = ConvertIntToDecimalStringN(dest, GetKantoPokedexCount(1), STR_CONV_MODE_LEFT_ALIGN, 3); + break; + case 2: + dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3); + *dest++ = CHAR_COLON; + dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); + break; + case 5: + dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeHours, STR_CONV_MODE_RIGHT_ALIGN, 3); + *dest++ = CHAR_COLON; + dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); + break; + case 3: + sub_80C4DF8(dest, gMapHeader.regionMapSectionId); + break; + case 4: + for (flagId = FLAG_BADGE01_GET, nBadges = 0; flagId < FLAG_BADGE01_GET + 8; flagId++) + { + if (FlagGet(flagId)) + nBadges++; + } + *dest++ = nBadges + CHAR_0; + *dest++ = 10; // 'こ' + *dest++ = EOS; + break; + } +} + From 3b365f948215824edb7aa04f136af8f7e34b2381 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 11 Nov 2019 10:14:07 -0500 Subject: [PATCH 2/8] Dism data/fldeff_cut.s --- data/field_map_obj.s | 8 +++++++- data/fldeff_cut.s | 30 +++++++++++++++++++++++++++--- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/data/field_map_obj.s b/data/field_map_obj.s index 9c36b523e..21e2ef41e 100644 --- a/data/field_map_obj.s +++ b/data/field_map_obj.s @@ -531,7 +531,13 @@ gUnknown_8398008:: @ 8398008 gUnknown_8398028:: @ 8398028 .incbin "graphics/map_objects/12.gbapal" - .incbin "baserom.gba", 0x398048, 0x1340 + .incbin "baserom.gba", 0x398048, 0x600 + +gUnknown_8398648:: + .incbin "baserom.gba", 0x398648, 0x40 + +gUnknown_8398688:: + .incbin "baserom.gba", 0x398688, 0xD00 gUnknown_8399388:: @ 8399388 .incbin "baserom.gba", 0x399388, 0x908 diff --git a/data/fldeff_cut.s b/data/fldeff_cut.s index 5436b51e4..ca25b396a 100644 --- a/data/fldeff_cut.s +++ b/data/fldeff_cut.s @@ -7,10 +7,34 @@ .align 2 gUnknown_83D4100:: @ 83D4100 - .incbin "baserom.gba", 0x3D4100, 0x44 + .2byte 0x000d, 0x0001 + .2byte 0x000a, 0x0013 + .2byte 0x000b, 0x000e + .2byte 0x000c, 0x000f + .2byte 0x0352, 0x033e + .2byte 0x0300, 0x0310 + .2byte 0x0301, 0x0311 + .2byte 0x0302, 0x0312 + .2byte 0x0284, 0x0281 + .2byte 0xffff, 0xffff + + .align 2 +gOamData_83D4128:: + .4byte 0x00000000, 0x00001401 + +gAnimCmd_83D4130:: + obj_image_anim_frame 0, 30 + obj_image_anim_jump 0 + +gSpriteAnimTable_83D4138:: + .4byte gAnimCmd_83D4130 + +gUnknown_83D413C:: + obj_frame_tiles gUnknown_8398648, 0x20 gUnknown_83D4144:: - .incbin "baserom.gba", 0x3D4144, 0x8 + obj_pal gUnknown_8398688, 4096 gUnknown_83D414C:: @ 83D414C - .incbin "baserom.gba", 0x3D414C, 0x18 + spr_template 0xFFFF, 4096, gOamData_83D4128, gSpriteAnimTable_83D4138, gUnknown_83D413C, gDummySpriteAffineAnimTable, objc_8097BA8 + From b2c7c8350341dde3a5e654e8496915232f69797c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 11 Nov 2019 10:22:47 -0500 Subject: [PATCH 3/8] Dump fldeff_cut sprite --- data/field_map_obj.s | 6 ++++-- graphics/map_objects/fldeff_cut.png | Bin 0 -> 173 bytes 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 graphics/map_objects/fldeff_cut.png diff --git a/data/field_map_obj.s b/data/field_map_obj.s index 21e2ef41e..e4fe9ceca 100644 --- a/data/field_map_obj.s +++ b/data/field_map_obj.s @@ -534,10 +534,12 @@ gUnknown_8398028:: @ 8398028 .incbin "baserom.gba", 0x398048, 0x600 gUnknown_8398648:: - .incbin "baserom.gba", 0x398648, 0x40 + .incbin "graphics/map_objects/fldeff_cut.4bpp" + .incbin "graphics/map_objects/fldeff_cut.4bpp" gUnknown_8398688:: - .incbin "baserom.gba", 0x398688, 0xD00 + .incbin "graphics/map_objects/fldeff_cut.gbapal" + .incbin "baserom.gba", 0x3986A8, 0xCE0 gUnknown_8399388:: @ 8399388 .incbin "baserom.gba", 0x399388, 0x908 diff --git a/graphics/map_objects/fldeff_cut.png b/graphics/map_objects/fldeff_cut.png new file mode 100644 index 0000000000000000000000000000000000000000..031d04b405b5b58972a8c2033cd7b5f51531c4a0 GIT binary patch literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^93afX3?$7I7w-U41_3@Hu0VRr|DdF^9Gb;ICSkyK z_0W5uD#nr^zhDN3XE)M-9Boe*#}JO0$q5XMX$mO@CI%)620>v)2?=3gY+aI)#s(Ua g(wYVan%ag83?_Qa{H<4N1wl4>y85}Sb4q9e07s4=QUCw| literal 0 HcmV?d00001 From 7c37478f07ae2b4387029f362426e7d36699bc3e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 11 Nov 2019 10:23:48 -0500 Subject: [PATCH 4/8] Bump baserom.ips --- baserom.ips | Bin 399180 -> 398989 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/baserom.ips b/baserom.ips index d4a0a8bc04eebd418bd7c438fdbc5eb06378e4ca..07a82d3b0fe8499ad135c63d46e8c0b5d19a6f5b 100644 GIT binary patch delta 56 zcmX@JPNH|MM8g)wgbpS)hUG~ejBKoyZ7a$-CO7^SZ@<~cxcz1y)7SS*DGco<^~^xb LvfZSfRbmDJbhj0# delta 248 zcmeBOD{*F>M8g)wgbt?KjO9rkjBJx9{AF=AU@%}1W)@~vHd10XFfw8=P&Q^zGFE0% zFj8Uw0sQjcv~}2zPG>A*HfXQwW87ZX$Mp4mJp)4yF9Rb37lSYZHv=C74+B3#5VIXK z1G4}#BeNhg6SEL=3sWQ0e;@$az$gMD-k-<)afnNt?1QfLQ)iDDx%l5uH*8kH1OFlD5 From 012477cc5a5ed989e819642a79b3eb64002fb5ee Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 11 Nov 2019 10:27:23 -0500 Subject: [PATCH 5/8] Split data_8468C98 --- data/berry_crush.s | 120 ++++++++++++++++++++++++ data/{data_8468C98.s => pokemon_jump.s} | 117 ----------------------- ld_script.txt | 3 +- 3 files changed, 122 insertions(+), 118 deletions(-) create mode 100644 data/berry_crush.s rename data/{data_8468C98.s => pokemon_jump.s} (62%) diff --git a/data/berry_crush.s b/data/berry_crush.s new file mode 100644 index 000000000..c17f2c8af --- /dev/null +++ b/data/berry_crush.s @@ -0,0 +1,120 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .section .rodata +gUnknown_846E2E0:: @ 846E2E0 + .incbin "baserom.gba", 0x46E2E0, 0x8 + +gUnknown_846E2E8:: @ 846E2E8 + .incbin "baserom.gba", 0x46E2E8, 0x8 + +gUnknown_846E2F0:: @ 846E2F0 + .incbin "baserom.gba", 0x46E2F0, 0x24 + +gUnknown_846E314:: @ 846E314 + .incbin "baserom.gba", 0x46E314, 0x14 + +gUnknown_846E328:: @ 846E328 + .incbin "baserom.gba", 0x46E328, 0x24 + +gUnknown_846E34C:: @ 846E34C + .incbin "baserom.gba", 0x46E34C, 0x68 + +gUnknown_846E3B4:: @ 846E3B4 + .incbin "baserom.gba", 0x46E3B4, 0x10 + +gUnknown_846E3C4:: @ 846E3C4 + .incbin "baserom.gba", 0x46E3C4, 0x4 + +gUnknown_846E3C8:: @ 846E3C8 + .incbin "baserom.gba", 0x46E3C8, 0x4 + +gUnknown_846E3CC:: @ 846E3CC + .incbin "baserom.gba", 0x46E3CC, 0x4 + +gUnknown_846E3D0:: @ 846E3D0 + .incbin "baserom.gba", 0x46E3D0, 0xC + +gUnknown_846E3DC:: @ 846E3DC + .incbin "baserom.gba", 0x46E3DC, 0x3 + +gUnknown_846E3DF:: @ 846E3DF + .incbin "baserom.gba", 0x46E3DF, 0x3 + +gUnknown_846E3E2:: @ 846E3E2 + .incbin "baserom.gba", 0x46E3E2, 0x3 + +gUnknown_846E3E5:: @ 846E3E5 + .incbin "baserom.gba", 0x46E3E5, 0x6 + +gUnknown_846E3EB:: @ 846E3EB + .incbin "baserom.gba", 0x46E3EB, 0x5 + +gUnknown_846E3F0:: @ 846E3F0 + .incbin "baserom.gba", 0x46E3F0, 0x8 + +gUnknown_846E3F8:: @ 846E3F8 + .incbin "baserom.gba", 0x46E3F8, 0x50 + +gUnknown_846E448:: @ 846E448 + .incbin "baserom.gba", 0x46E448, 0x8 + +gUnknown_846E450:: @ 846E450 + .incbin "baserom.gba", 0x46E450, 0x940 + +gUnknown_846ED90:: @ 846ED90 + .incbin "baserom.gba", 0x46ED90, 0x130 + +gUnknown_846EEC0:: @ 846EEC0 + .incbin "baserom.gba", 0x46EEC0, 0x198 + +gUnknown_846F058:: @ 846F058 + .incbin "baserom.gba", 0x46F058, 0x228 + +gUnknown_846F280:: @ 846F280 + .incbin "baserom.gba", 0x46F280, 0x14 + +gUnknown_846F294:: @ 846F294 + .incbin "baserom.gba", 0x46F294, 0x3C + +gUnknown_846F2D0:: @ 846F2D0 + .incbin "baserom.gba", 0x46F2D0, 0x1 + +gUnknown_846F2D1:: @ 846F2D1 + .incbin "baserom.gba", 0x46F2D1, 0x5 + +gUnknown_846F2D6:: @ 846F2D6 + .incbin "baserom.gba", 0x46F2D6, 0x1 + +gUnknown_846F2D7:: @ 846F2D7 + .incbin "baserom.gba", 0x46F2D7, 0x15 + +gUnknown_846F2EC:: @ 846F2EC + .incbin "baserom.gba", 0x46F2EC, 0xC + +gUnknown_846F2F8:: @ 846F2F8 + .incbin "baserom.gba", 0x46F2F8, 0x28 + +gUnknown_846F320:: @ 846F320 + .incbin "baserom.gba", 0x46F320, 0xF0 + +gUnknown_846F410:: @ 846F410 + .incbin "baserom.gba", 0x46F410, 0x18 + +gUnknown_846F428:: @ 846F428 + .incbin "baserom.gba", 0x46F428, 0x18 + +gUnknown_846F440:: @ 846F440 + .incbin "baserom.gba", 0x46F440, 0x18 + +gUnknown_846F458:: @ 846F458 + .incbin "baserom.gba", 0x46F458, 0x18 + +gUnknown_846F470:: @ 846F470 + .incbin "baserom.gba", 0x46F470, 0x18 + +gUnknown_846F488:: @ 846F488 + .incbin "baserom.gba", 0x46F488, 0x30 + +gUnknown_846F4B8:: @ 846F4B8 + .incbin "baserom.gba", 0x46F4B8, 0x18 diff --git a/data/data_8468C98.s b/data/pokemon_jump.s similarity index 62% rename from data/data_8468C98.s rename to data/pokemon_jump.s index 7ce7c3a02..bddff8c3a 100644 --- a/data/data_8468C98.s +++ b/data/pokemon_jump.s @@ -179,120 +179,3 @@ gUnknown_846E2CC:: @ 846E2CC gUnknown_846E2D4:: @ 846E2D4 .incbin "baserom.gba", 0x46E2D4, 0xC - -gUnknown_846E2E0:: @ 846E2E0 - .incbin "baserom.gba", 0x46E2E0, 0x8 - -gUnknown_846E2E8:: @ 846E2E8 - .incbin "baserom.gba", 0x46E2E8, 0x8 - -gUnknown_846E2F0:: @ 846E2F0 - .incbin "baserom.gba", 0x46E2F0, 0x24 - -gUnknown_846E314:: @ 846E314 - .incbin "baserom.gba", 0x46E314, 0x14 - -gUnknown_846E328:: @ 846E328 - .incbin "baserom.gba", 0x46E328, 0x24 - -gUnknown_846E34C:: @ 846E34C - .incbin "baserom.gba", 0x46E34C, 0x68 - -gUnknown_846E3B4:: @ 846E3B4 - .incbin "baserom.gba", 0x46E3B4, 0x10 - -gUnknown_846E3C4:: @ 846E3C4 - .incbin "baserom.gba", 0x46E3C4, 0x4 - -gUnknown_846E3C8:: @ 846E3C8 - .incbin "baserom.gba", 0x46E3C8, 0x4 - -gUnknown_846E3CC:: @ 846E3CC - .incbin "baserom.gba", 0x46E3CC, 0x4 - -gUnknown_846E3D0:: @ 846E3D0 - .incbin "baserom.gba", 0x46E3D0, 0xC - -gUnknown_846E3DC:: @ 846E3DC - .incbin "baserom.gba", 0x46E3DC, 0x3 - -gUnknown_846E3DF:: @ 846E3DF - .incbin "baserom.gba", 0x46E3DF, 0x3 - -gUnknown_846E3E2:: @ 846E3E2 - .incbin "baserom.gba", 0x46E3E2, 0x3 - -gUnknown_846E3E5:: @ 846E3E5 - .incbin "baserom.gba", 0x46E3E5, 0x6 - -gUnknown_846E3EB:: @ 846E3EB - .incbin "baserom.gba", 0x46E3EB, 0x5 - -gUnknown_846E3F0:: @ 846E3F0 - .incbin "baserom.gba", 0x46E3F0, 0x8 - -gUnknown_846E3F8:: @ 846E3F8 - .incbin "baserom.gba", 0x46E3F8, 0x50 - -gUnknown_846E448:: @ 846E448 - .incbin "baserom.gba", 0x46E448, 0x8 - -gUnknown_846E450:: @ 846E450 - .incbin "baserom.gba", 0x46E450, 0x940 - -gUnknown_846ED90:: @ 846ED90 - .incbin "baserom.gba", 0x46ED90, 0x130 - -gUnknown_846EEC0:: @ 846EEC0 - .incbin "baserom.gba", 0x46EEC0, 0x198 - -gUnknown_846F058:: @ 846F058 - .incbin "baserom.gba", 0x46F058, 0x228 - -gUnknown_846F280:: @ 846F280 - .incbin "baserom.gba", 0x46F280, 0x14 - -gUnknown_846F294:: @ 846F294 - .incbin "baserom.gba", 0x46F294, 0x3C - -gUnknown_846F2D0:: @ 846F2D0 - .incbin "baserom.gba", 0x46F2D0, 0x1 - -gUnknown_846F2D1:: @ 846F2D1 - .incbin "baserom.gba", 0x46F2D1, 0x5 - -gUnknown_846F2D6:: @ 846F2D6 - .incbin "baserom.gba", 0x46F2D6, 0x1 - -gUnknown_846F2D7:: @ 846F2D7 - .incbin "baserom.gba", 0x46F2D7, 0x15 - -gUnknown_846F2EC:: @ 846F2EC - .incbin "baserom.gba", 0x46F2EC, 0xC - -gUnknown_846F2F8:: @ 846F2F8 - .incbin "baserom.gba", 0x46F2F8, 0x28 - -gUnknown_846F320:: @ 846F320 - .incbin "baserom.gba", 0x46F320, 0xF0 - -gUnknown_846F410:: @ 846F410 - .incbin "baserom.gba", 0x46F410, 0x18 - -gUnknown_846F428:: @ 846F428 - .incbin "baserom.gba", 0x46F428, 0x18 - -gUnknown_846F440:: @ 846F440 - .incbin "baserom.gba", 0x46F440, 0x18 - -gUnknown_846F458:: @ 846F458 - .incbin "baserom.gba", 0x46F458, 0x18 - -gUnknown_846F470:: @ 846F470 - .incbin "baserom.gba", 0x46F470, 0x18 - -gUnknown_846F488:: @ 846F488 - .incbin "baserom.gba", 0x46F488, 0x30 - -gUnknown_846F4B8:: @ 846F4B8 - .incbin "baserom.gba", 0x46F4B8, 0x18 diff --git a/ld_script.txt b/ld_script.txt index dddd60b81..c5d5dc431 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -541,7 +541,8 @@ SECTIONS { src/menews_jisan.o(.rodata.str1.4); . = ALIGN(4); src/seagallop.o(.rodata); - data/data_8468C98.o(.rodata); + data/pokemon_jump.o(.rodata); + data/berry_crush.o(.rodata); src/wireless_communication_status_screen.o(.rodata); src/braille_text.o(.rodata); src/text_window_graphics.o(.rodata); From e560b55325cb7329bde2c0f757d9698bf0b7a3af Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 11 Nov 2019 11:09:24 -0500 Subject: [PATCH 6/8] Port mevent scripts to C --- data/data_8466FB8.s | 12 --- data/mevent/script_common.inc | 165 +++++++++++++++-------------- data/mevent/script_ish.inc | 118 +++++++++++---------- include/link_rfu.h | 3 + include/mevent_server.h | 32 ++++++ ld_script.txt | 2 +- src/mevent_client.c | 4 +- src/mevent_scripts.c | 192 ++++++++++++++++++++++++++++++++++ 8 files changed, 383 insertions(+), 145 deletions(-) delete mode 100644 data/data_8466FB8.s create mode 100644 src/mevent_scripts.c diff --git a/data/data_8466FB8.s b/data/data_8466FB8.s deleted file mode 100644 index 9436bc4fd..000000000 --- a/data/data_8466FB8.s +++ /dev/null @@ -1,12 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -gUnknown_84687A0:: - .string "You have collected all STAMPs!\n" - .string "Want to input a CARD as a prize?$" - - .include "data/mevent/script_ish.inc" - .include "data/mevent/script_common.inc" diff --git a/data/mevent/script_common.inc b/data/mevent/script_common.inc index f3ca09e3d..e84a79ad3 100644 --- a/data/mevent/script_common.inc +++ b/data/mevent/script_common.inc @@ -1,87 +1,98 @@ -gMEventSrvScript_UnableToSend:: - .4byte 0x12, 0x10, gMEventClientScript_UnableToRecv @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x0a, NULL @ RETURN (can't send) +const struct mevent_server_cmd gMEventSrvScript_UnableToSend[] = { + SRV_SEND(0x10, gMEventClientScript_UnableToRecv), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x0a) +}; - .4byte 0x12, 0x10, gMEventClientScript_CommError @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x0b, NULL @ RETURN (comm error) + SRV_SEND(0x10, gMEventClientScript_CommError), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x0b) +}; - .4byte 0x12, 0x10, gMEventClientScript_OtherTrainerCanceled @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x09, NULL @ RETURN (other trn canceled) + SRV_SEND(0x10, gMEventClientScript_OtherTrainerCanceled), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x09) +}; -gMEventSrvScript_OtherTrnHasNews:: - .4byte 0x12, 0x10, gMEventClientScript_AlreadyHadNews @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x07, NULL @ RETURN (other trn has news) +const struct mevent_server_cmd gMEventSrvScript_OtherTrnHasNews[] = { + SRV_SEND(0x10, gMEventClientScript_AlreadyHadNews), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x07) +}; -gMEventSrvScript_SentNewsSuccess:: - .4byte 0x12, 0x28, gMEventClientScript_ReceiveNewsAndValidate @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x0e, 0x00, NULL @ SEND_NEWS - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x13, NULL @ RECV - .4byte 0x08, 0x00, NULL @ READWORD - .4byte 0x04, 0x01, gMEventSrvScript_OtherTrnHasNews @ BRANCH_EQ - .4byte 0x12, 0x10, gMEventClientScript_RecvNewsSuccess @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x03, NULL @ RETURN (news sent to) +const struct mevent_server_cmd gMEventSrvScript_SentNewsSuccess[] = { + SRV_SEND(0x28, gMEventClientScript_ReceiveNewsAndValidate), + SRV_WAITSND, + SRV_SEND_NEWS, + SRV_WAITSND, + SRV_RECV(0x13), + SRV_READWORD, + SRV_BRANCHIF(0x01, gMEventSrvScript_OtherTrnHasNews), + SRV_SEND(0x10, gMEventClientScript_RecvNewsSuccess), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x03) +}; -gMEventSrvScript_SendCardSuccess:: - .4byte 0x12, 0x30, gMEventClientScript_ReceiveCardAndReturnSuccess @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x0d, 0x00, NULL @ SEND_CARD - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x0f, 0x00, NULL @ BUFFER_SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x02, NULL @ RETURN (card sent to) +const struct mevent_server_cmd gMEventSrvScript_SendCardSuccess[] = { + SRV_SEND(0x30, gMEventClientScript_ReceiveCardAndReturnSuccess), + SRV_WAITSND, + SRV_SEND_CARD, + SRV_WAITSND, + SRV_BUFFER_SEND, + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x02) +}; -gMEventSrvScript_AskClientToOverwriteCard:: - .4byte 0x12, 0x28, gMEventClientScript_AskWouldLikeToTossCard @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x13, NULL @ RECV - .4byte 0x08, 0x00, NULL @ READWORD - .4byte 0x04, 0x00, gMEventSrvScript_SendCardSuccess @ BRANCH_EQ - .4byte 0x03, 0x00, gMEventSrvScript_OtherTrainerCanceled @ BRANCH +const struct mevent_server_cmd gMEventSrvScript_AskClientToOverwriteCard[] = { + SRV_SEND(0x28, gMEventClientScript_AskWouldLikeToTossCard), + SRV_WAITSND, + SRV_RECV(0x13), + SRV_READWORD, + SRV_BRANCHIF(0x00, gMEventSrvScript_SendCardSuccess), + SRV_BRANCH(gMEventSrvScript_OtherTrainerCanceled) +}; -gMEventSrvScript_OtherTrnHasCard:: - .4byte 0x12, 0x10, gMEventClientScript_AlreadyHadCard @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x05, NULL @ RETURN (other trn has card) +const struct mevent_server_cmd gMEventSrvScript_OtherTrnHasCard[] = { + SRV_SEND(0x10, gMEventClientScript_AlreadyHadCard), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x05) +}; - .4byte 0x12, 0x10, gMEventClientScript_NothingSentOver @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x00, NULL @ RETURN (nothing sent over) + SRV_SEND(0x10, gMEventClientScript_NothingSentOver), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x00) +}; -gMEventSrvScript_SendNews:: @ 8468B6C - .4byte 0x1b, 0x00, NULL @ BUFFER_SAVED_NEWS - .4byte 0x12, 0x20, gMEventClientScript_Send1442CC @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x11, NULL @ RECV - .4byte 0x05, 0x00, NULL @ READ_1442CC - .4byte 0x06, 0x00, NULL @ VALID_1442CC - .4byte 0x04, 0x00, gMEventSrvScript_UnableToSend @ BRANCH_EQ - .4byte 0x03, 0x00, gMEventSrvScript_SentNewsSuccess @ BRANCH +const struct mevent_server_cmd gMEventSrvScript_SendNews[] = { + SRV_BUFFER_NEWS, + SRV_SEND(0x20, gMEventClientScript_Send1442CC), + SRV_WAITSND, + SRV_RECV(0x11), + SRV_READ_1442CC, + SRV_VALID_1442CC, + SRV_BRANCHIF(0x00, gMEventSrvScript_UnableToSend), + SRV_BRANCH(gMEventSrvScript_SentNewsSuccess) +}; -gMEventSrvScript_SendCard:: @ 8468BCC - .4byte 0x1a, 0x00, NULL @ BUFFER_SAVED_CARD - .4byte 0x1c, 0x00, NULL @ RAM_SCRIPT_IF_VALID - .4byte 0x12, 0x20, gMEventClientScript_Send1442CC @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x11, NULL @ RECV - .4byte 0x05, 0x00, NULL @ READ_1442CC - .4byte 0x06, 0x00, NULL @ VALID_1442CC - .4byte 0x04, 0x00, gMEventSrvScript_UnableToSend @ BRANCH_EQ - .4byte 0x07, 0x00, NULL @ CHECK_1442CC_14 - .4byte 0x04, 0x02, gMEventSrvScript_AskClientToOverwriteCard @ BRANCH_EQ - .4byte 0x04, 0x00, gMEventSrvScript_SendCardSuccess @ BRANCH_EQ - .4byte 0x03, 0x00, gMEventSrvScript_OtherTrnHasCard @ BRANCH +const struct mevent_server_cmd gMEventSrvScript_SendCard[] = { + SRV_BUFFER_CARD, + SRV_RAM_SCRIPT_IF_VALID, + SRV_SEND(0x20, gMEventClientScript_Send1442CC), + SRV_WAITSND, + SRV_RECV(0x11), + SRV_READ_1442CC, + SRV_VALID_1442CC, + SRV_BRANCHIF(0x00, gMEventSrvScript_UnableToSend), + SRV_CHECK_1442CC_14, + SRV_BRANCHIF(0x02, gMEventSrvScript_AskClientToOverwriteCard), + SRV_BRANCHIF(0x00, gMEventSrvScript_SendCardSuccess), + SRV_BRANCH(gMEventSrvScript_OtherTrnHasCard) +}; diff --git a/data/mevent/script_ish.inc b/data/mevent/script_ish.inc index ed6b639da..40f6a58cd 100644 --- a/data/mevent/script_ish.inc +++ b/data/mevent/script_ish.inc @@ -1,65 +1,77 @@ -gMEventClientScript_InotialListen:: @ 84687E0 - .4byte 0x02, 0x10 @ RECEIVE ID(0x10) - .4byte 0x04, 0x00 @ JUMP TO RECEIVE BUFFER +const struct mevent_client_cmd gMEventClientScript_InitialListen[] = { // 84687E0 + CLI_RECEIVE(0x10), + CLI_JUMPBUF +}; -gMEventClientScript_Send1442CC:: - .4byte 0x08, 0x00 @ SEND HEADER MAYBE - .4byte 0x03, 0x00 @ WAIT SEND - .4byte 0x02, 0x10 @ RECEIVE ID(0x10) - .4byte 0x04, 0x00 @ JUMP TO RECEIVE BUFFER +const struct mevent_client_cmd gMEventClientScript_Send1442CC[] = { + CLI_SNDHEAD, + CLI_WAITSND, + CLI_RECEIVE(0x10), + CLI_JUMPBUF +}; -gMEventClientScript_UnableToRecv:: @ can't accept card or news - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x0a @ RETURN 0x0a +const struct mevent_client_cmd gMEventClientScript_UnableToRecv[] = { // can't accept card or news + CLI_SENDALL, + CLI_RETURN(0x0a) +}; -gMEventClientScript_CommError:: @ comm error - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x0b @ RETURN 0x0b +const struct mevent_client_cmd gMEventClientScript_CommError[] = { // comm error + CLI_SENDALL, + CLI_RETURN(0x0b) +}; -gMEventClientScript_NothingSentOver:: @ nothing sent - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x00 @ RETURN 0x00 +const struct mevent_client_cmd gMEventClientScript_NothingSentOver[] = { // nothing sent + CLI_SENDALL, + CLI_RETURN(0x00) +}; -gMEventClientScript_ReceiveCardAndReturnSuccess:: @ card success - .4byte 0x02, 0x16 @ RECEIVE ID(0x16) - .4byte 0x0a, 0x00 @ RECEIVE_TO_SAVE_FILE - .4byte 0x02, 0x19 @ RECEIVE ID(0x19) - .4byte 0x11, 0x00 @ RECEIVE_TO_RAM_SCRIPT - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x02 @ RETURN 0x02 +const struct mevent_client_cmd gMEventClientScript_ReceiveCardAndReturnSuccess[] = { // card success + CLI_RECEIVE(0x16), + CLI_RECVSAV, + CLI_RECEIVE(0x19), + CLI_RECVRAM, + CLI_SENDALL, + CLI_RETURN(0x02) +}; -gMEventClientScript_ReceiveNewsAndValidate:: - .4byte 0x02, 0x17 @ RECEIVE ID(0x17) - .4byte 0x09, 0x00 @ VALIDATE NEWS - .4byte 0x03, 0x00 @ WAIT SEND - .4byte 0x02, 0x10 @ RECEIVE ID(0x10) - .4byte 0x04, 0x00 @ JUMP TO RECEIVE BUFFER +const struct mevent_client_cmd gMEventClientScript_ReceiveNewsAndValidate[] = { + CLI_RECEIVE(0x17), + CLI_VLDNEWS, + CLI_WAITSND, + CLI_RECEIVE(0x10), + CLI_JUMPBUF +}; -gMEventClientScript_AlreadyHadNews:: @ already had news - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x07 @ RETURN 0x07 +const struct mevent_client_cmd gMEventClientScript_AlreadyHadNews[] = { // already had news + CLI_SENDALL, + CLI_RETURN(0x07) +}; -gMEventClientScript_RecvNewsSuccess:: @ news success - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x03 @ RETURN 0x03 +const struct mevent_client_cmd gMEventClientScript_RecvNewsSuccess[] = { // news success + CLI_SENDALL, + CLI_RETURN(0x03) +}; -gMEventClientScript_AskWouldLikeToTossCard:: - .4byte 0x0d, 0x00 @ REQUEST PARAMETER - .4byte 0x0e, 0x00 @ SEND PARAMETER - .4byte 0x03, 0x00 @ WAIT SEND - .4byte 0x02, 0x10 @ RECEIVE ID(0x10) - .4byte 0x04, 0x00 @ JUMP TO RECEIVE BUFFER +const struct mevent_client_cmd gMEventClientScript_AskWouldLikeToTossCard[] = { + CLI_REQWORD, + CLI_SNDWORD, + CLI_WAITSND, + CLI_RECEIVE(0x10), + CLI_JUMPBUF +}; -gMEventClientScript_OtherTrainerCanceled:: @ comm canceled - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x09 @ RETURN 0x09 +const struct mevent_client_cmd gMEventClientScript_OtherTrainerCanceled[] = { // comm canceled + CLI_SENDALL, + CLI_RETURN(0x09) +}; -gMEventClientScript_AlreadyHadCard:: @ already had card - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x05 @ RETURN 0x05 +const struct mevent_client_cmd gMEventClientScript_AlreadyHadCard[] = { // already had card + CLI_SENDALL, + CLI_RETURN(0x05) +}; -gMEventClientScript_SuccessFromBuffer:: @ success from buffer - .4byte 0x02, 0x15 @ RECEIVE ID(0x15) - .4byte 0x0c, 0x00 @ READ PACKET AND COMPUTE SOMETHING - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x0d @ RETURN 0x0d +const struct mevent_client_cmd gMEventClientScript_SuccessFromBuffer[] = { // success from buffer + CLI_RECEIVE(0x15), + CLI_RECVBUF, + CLI_SENDALL, + CLI_RETURN(0x0d) diff --git a/include/link_rfu.h b/include/link_rfu.h index 6e6e5f7a3..671488be0 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -43,4 +43,7 @@ void sub_80FBB20(void); bool8 sub_80FA484(bool32 a0); void var_800D_set_xB(void); +#include "mevent_server.h" +extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[]; + #endif //GUARD_LINK_RFU_H diff --git a/include/mevent_server.h b/include/mevent_server.h index ddc00b978..b691e9e1f 100644 --- a/include/mevent_server.h +++ b/include/mevent_server.h @@ -37,6 +37,20 @@ struct mevent_client_cmd u32 parameter; }; +// Client commands +#define CLI_RETURN(x) {.instr = 1, .parameter = x} +#define CLI_RECEIVE(x) {.instr = 2, .parameter = x} +#define CLI_WAITSND {.instr = 3, .parameter = 0} +#define CLI_JUMPBUF {.instr = 4, .parameter = 0} +#define CLI_SNDHEAD {.instr = 8, .parameter = 0} +#define CLI_VLDNEWS {.instr = 9, .parameter = 0} +#define CLI_RECVSAV {.instr = 10, .parameter = 0} +#define CLI_RECVBUF {.instr = 12, .parameter = 0} +#define CLI_REQWORD {.instr = 13, .parameter = 0} +#define CLI_SNDWORD {.instr = 14, .parameter = 0} +#define CLI_RECVRAM {.instr = 17, .parameter = 0} +#define CLI_SENDALL {.instr = 20, .parameter = 0} + struct mevent_client { u32 unk_00; @@ -58,6 +72,24 @@ struct mevent_server_cmd void * parameter; }; +// Server commands +#define SRV_RETURN(x) {.instr = 0, .flag = x} +#define SRV_WAITSND {.instr = 1} +#define SRV_RECV(x) {.instr = 2, .flag = x} +#define SRV_BRANCH(y) {.instr = 3, .parameter = (void *)y} +#define SRV_BRANCHIF(x, y) {.instr = 4, .flag = x, .parameter = (void *)y} +#define SRV_READ_1442CC {.instr = 5} +#define SRV_VALID_1442CC {.instr = 6} +#define SRV_CHECK_1442CC_14 {.instr = 7} +#define SRV_READWORD {.instr = 8} +#define SRV_SEND_CARD {.instr = 13} +#define SRV_SEND_NEWS {.instr = 14} +#define SRV_BUFFER_SEND {.instr = 15} +#define SRV_SEND(x, y) {.instr = 18, .flag = x, .parameter = (void *)y} +#define SRV_BUFFER_CARD {.instr = 26} +#define SRV_BUFFER_NEWS {.instr = 27} +#define SRV_RAM_SCRIPT_IF_VALID {.instr = 28} + struct mevent_srv_common { u32 unk_00; diff --git a/ld_script.txt b/ld_script.txt index c5d5dc431..d40c88c0a 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -536,7 +536,7 @@ SECTIONS { src/mevent_client.o(.rodata); src/mevent_server.o(.rodata); src/mevent_8145654.o(.rodata); - data/data_8466FB8.o(.rodata); + src/mevent_scripts.o(.rodata); src/menews_jisan.o(.rodata); src/menews_jisan.o(.rodata.str1.4); . = ALIGN(4); diff --git a/src/mevent_client.c b/src/mevent_client.c index c2a86afdd..4da0b4bc1 100644 --- a/src/mevent_client.c +++ b/src/mevent_client.c @@ -14,7 +14,7 @@ static void mevent_client_init(struct mevent_client *, u32, u32); static u32 mevent_client_exec(struct mevent_client *); static void mevent_client_free_resources(struct mevent_client *); -extern const struct mevent_client_cmd gMEventClientScript_InotialListen[]; +extern const struct mevent_client_cmd gMEventClientScript_InitialListen[]; void mevent_client_do_init(void) { @@ -89,7 +89,7 @@ static void mevent_client_send_word(struct mevent_client * svr, u32 ident, u32 w static u32 client_mainseq_0(struct mevent_client * svr) { // init - memcpy(svr->cmdBuffer, gMEventClientScript_InotialListen, ME_SEND_BUF_SIZE); + memcpy(svr->cmdBuffer, gMEventClientScript_InitialListen, ME_SEND_BUF_SIZE); svr->cmdidx = 0; svr->mainseqno = 4; svr->flag = 0; diff --git a/src/mevent_scripts.c b/src/mevent_scripts.c new file mode 100644 index 000000000..04d44f603 --- /dev/null +++ b/src/mevent_scripts.c @@ -0,0 +1,192 @@ +#include "global.h" +#include "mevent_server.h" + +extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[]; + +// Unreferenced +const u8 gUnknown_84687A0[] = _("You have collected all STAMPs!\nWant to input a CARD as a prize?"); + +/* CLIENT SCRIPTS */ + +const struct mevent_client_cmd gMEventClientScript_InitialListen[] = { // 84687E0 + CLI_RECEIVE(0x10), + CLI_JUMPBUF +}; + +const struct mevent_client_cmd gMEventClientScript_Send1442CC[] = { + CLI_SNDHEAD, + CLI_WAITSND, + CLI_RECEIVE(0x10), + CLI_JUMPBUF +}; + +const struct mevent_client_cmd gMEventClientScript_UnableToRecv[] = { // can't accept card or news + CLI_SENDALL, + CLI_RETURN(0x0a) +}; + +const struct mevent_client_cmd gMEventClientScript_CommError[] = { // comm error + CLI_SENDALL, + CLI_RETURN(0x0b) +}; + +const struct mevent_client_cmd gMEventClientScript_NothingSentOver[] = { // nothing sent + CLI_SENDALL, + CLI_RETURN(0x00) +}; + +const struct mevent_client_cmd gMEventClientScript_ReceiveCardAndReturnSuccess[] = { // card success + CLI_RECEIVE(0x16), + CLI_RECVSAV, + CLI_RECEIVE(0x19), + CLI_RECVRAM, + CLI_SENDALL, + CLI_RETURN(0x02) +}; + +const struct mevent_client_cmd gMEventClientScript_ReceiveNewsAndValidate[] = { + CLI_RECEIVE(0x17), + CLI_VLDNEWS, + CLI_WAITSND, + CLI_RECEIVE(0x10), + CLI_JUMPBUF +}; + +const struct mevent_client_cmd gMEventClientScript_AlreadyHadNews[] = { // already had news + CLI_SENDALL, + CLI_RETURN(0x07) +}; + +const struct mevent_client_cmd gMEventClientScript_RecvNewsSuccess[] = { // news success + CLI_SENDALL, + CLI_RETURN(0x03) +}; + +const struct mevent_client_cmd gMEventClientScript_AskWouldLikeToTossCard[] = { + CLI_REQWORD, + CLI_SNDWORD, + CLI_WAITSND, + CLI_RECEIVE(0x10), + CLI_JUMPBUF +}; + +const struct mevent_client_cmd gMEventClientScript_OtherTrainerCanceled[] = { // comm canceled + CLI_SENDALL, + CLI_RETURN(0x09) +}; + +const struct mevent_client_cmd gMEventClientScript_AlreadyHadCard[] = { // already had card + CLI_SENDALL, + CLI_RETURN(0x05) +}; + +const struct mevent_client_cmd gMEventClientScript_SuccessFromBuffer[] = { // success from buffer + CLI_RECEIVE(0x15), + CLI_RECVBUF, + CLI_SENDALL, + CLI_RETURN(0x0d) +}; + +/* SERVER SCRIPTS */ + +const struct mevent_server_cmd gMEventSrvScript_UnableToSend[] = { + SRV_SEND(0x10, gMEventClientScript_UnableToRecv), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x0a) +}; + +const struct mevent_server_cmd gUnknown_8468950[] = { + SRV_SEND(0x10, gMEventClientScript_CommError), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x0b) +}; + +const struct mevent_server_cmd gUnknown_8468980[] = { + SRV_SEND(0x10, gMEventClientScript_OtherTrainerCanceled), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x09) +}; + +const struct mevent_server_cmd gMEventSrvScript_OtherTrnHasNews[] = { + SRV_SEND(0x10, gMEventClientScript_AlreadyHadNews), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x07) +}; + +const struct mevent_server_cmd gMEventSrvScript_SentNewsSuccess[] = { + SRV_SEND(0x28, gMEventClientScript_ReceiveNewsAndValidate), + SRV_WAITSND, + SRV_SEND_NEWS, + SRV_WAITSND, + SRV_RECV(0x13), + SRV_READWORD, + SRV_BRANCHIF(0x01, gMEventSrvScript_OtherTrnHasNews), + SRV_SEND(0x10, gMEventClientScript_RecvNewsSuccess), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x03) +}; + +const struct mevent_server_cmd gMEventSrvScript_SendCardSuccess[] = { + SRV_SEND(0x30, gMEventClientScript_ReceiveCardAndReturnSuccess), + SRV_WAITSND, + SRV_SEND_CARD, + SRV_WAITSND, + SRV_BUFFER_SEND, + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x02) +}; + +const struct mevent_server_cmd gMEventSrvScript_AskClientToOverwriteCard[] = { + SRV_SEND(0x28, gMEventClientScript_AskWouldLikeToTossCard), + SRV_WAITSND, + SRV_RECV(0x13), + SRV_READWORD, + SRV_BRANCHIF(0x00, gMEventSrvScript_SendCardSuccess), + SRV_BRANCH(gMEventSrvScript_OtherTrainerCanceled) +}; + +const struct mevent_server_cmd gMEventSrvScript_OtherTrnHasCard[] = { + SRV_SEND(0x10, gMEventClientScript_AlreadyHadCard), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x05) +}; + +const struct mevent_server_cmd gUnknown_8468B3C[] = { + SRV_SEND(0x10, gMEventClientScript_NothingSentOver), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x00) +}; + +const struct mevent_server_cmd gMEventSrvScript_SendNews[] = { + SRV_BUFFER_NEWS, + SRV_SEND(0x20, gMEventClientScript_Send1442CC), + SRV_WAITSND, + SRV_RECV(0x11), + SRV_READ_1442CC, + SRV_VALID_1442CC, + SRV_BRANCHIF(0x00, gMEventSrvScript_UnableToSend), + SRV_BRANCH(gMEventSrvScript_SentNewsSuccess) +}; + +const struct mevent_server_cmd gMEventSrvScript_SendCard[] = { + SRV_BUFFER_CARD, + SRV_RAM_SCRIPT_IF_VALID, + SRV_SEND(0x20, gMEventClientScript_Send1442CC), + SRV_WAITSND, + SRV_RECV(0x11), + SRV_READ_1442CC, + SRV_VALID_1442CC, + SRV_BRANCHIF(0x00, gMEventSrvScript_UnableToSend), + SRV_CHECK_1442CC_14, + SRV_BRANCHIF(0x02, gMEventSrvScript_AskClientToOverwriteCard), + SRV_BRANCHIF(0x00, gMEventSrvScript_SendCardSuccess), + SRV_BRANCH(gMEventSrvScript_OtherTrnHasCard) +}; From 2435995adfa7c8d65f0c0a943388d46dec88d7e0 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 11 Nov 2019 11:36:47 -0500 Subject: [PATCH 7/8] Delete files that are no longer needed --- data/mevent/script_common.inc | 98 ----------------------------------- data/mevent/script_ish.inc | 77 --------------------------- 2 files changed, 175 deletions(-) delete mode 100644 data/mevent/script_common.inc delete mode 100644 data/mevent/script_ish.inc diff --git a/data/mevent/script_common.inc b/data/mevent/script_common.inc deleted file mode 100644 index e84a79ad3..000000000 --- a/data/mevent/script_common.inc +++ /dev/null @@ -1,98 +0,0 @@ -const struct mevent_server_cmd gMEventSrvScript_UnableToSend[] = { - SRV_SEND(0x10, gMEventClientScript_UnableToRecv), - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x0a) -}; - - SRV_SEND(0x10, gMEventClientScript_CommError), - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x0b) -}; - - SRV_SEND(0x10, gMEventClientScript_OtherTrainerCanceled), - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x09) -}; - -const struct mevent_server_cmd gMEventSrvScript_OtherTrnHasNews[] = { - SRV_SEND(0x10, gMEventClientScript_AlreadyHadNews), - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x07) -}; - -const struct mevent_server_cmd gMEventSrvScript_SentNewsSuccess[] = { - SRV_SEND(0x28, gMEventClientScript_ReceiveNewsAndValidate), - SRV_WAITSND, - SRV_SEND_NEWS, - SRV_WAITSND, - SRV_RECV(0x13), - SRV_READWORD, - SRV_BRANCHIF(0x01, gMEventSrvScript_OtherTrnHasNews), - SRV_SEND(0x10, gMEventClientScript_RecvNewsSuccess), - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x03) -}; - -const struct mevent_server_cmd gMEventSrvScript_SendCardSuccess[] = { - SRV_SEND(0x30, gMEventClientScript_ReceiveCardAndReturnSuccess), - SRV_WAITSND, - SRV_SEND_CARD, - SRV_WAITSND, - SRV_BUFFER_SEND, - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x02) -}; - -const struct mevent_server_cmd gMEventSrvScript_AskClientToOverwriteCard[] = { - SRV_SEND(0x28, gMEventClientScript_AskWouldLikeToTossCard), - SRV_WAITSND, - SRV_RECV(0x13), - SRV_READWORD, - SRV_BRANCHIF(0x00, gMEventSrvScript_SendCardSuccess), - SRV_BRANCH(gMEventSrvScript_OtherTrainerCanceled) -}; - -const struct mevent_server_cmd gMEventSrvScript_OtherTrnHasCard[] = { - SRV_SEND(0x10, gMEventClientScript_AlreadyHadCard), - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x05) -}; - - SRV_SEND(0x10, gMEventClientScript_NothingSentOver), - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x00) -}; - -const struct mevent_server_cmd gMEventSrvScript_SendNews[] = { - SRV_BUFFER_NEWS, - SRV_SEND(0x20, gMEventClientScript_Send1442CC), - SRV_WAITSND, - SRV_RECV(0x11), - SRV_READ_1442CC, - SRV_VALID_1442CC, - SRV_BRANCHIF(0x00, gMEventSrvScript_UnableToSend), - SRV_BRANCH(gMEventSrvScript_SentNewsSuccess) -}; - -const struct mevent_server_cmd gMEventSrvScript_SendCard[] = { - SRV_BUFFER_CARD, - SRV_RAM_SCRIPT_IF_VALID, - SRV_SEND(0x20, gMEventClientScript_Send1442CC), - SRV_WAITSND, - SRV_RECV(0x11), - SRV_READ_1442CC, - SRV_VALID_1442CC, - SRV_BRANCHIF(0x00, gMEventSrvScript_UnableToSend), - SRV_CHECK_1442CC_14, - SRV_BRANCHIF(0x02, gMEventSrvScript_AskClientToOverwriteCard), - SRV_BRANCHIF(0x00, gMEventSrvScript_SendCardSuccess), - SRV_BRANCH(gMEventSrvScript_OtherTrnHasCard) -}; diff --git a/data/mevent/script_ish.inc b/data/mevent/script_ish.inc deleted file mode 100644 index 40f6a58cd..000000000 --- a/data/mevent/script_ish.inc +++ /dev/null @@ -1,77 +0,0 @@ -const struct mevent_client_cmd gMEventClientScript_InitialListen[] = { // 84687E0 - CLI_RECEIVE(0x10), - CLI_JUMPBUF -}; - -const struct mevent_client_cmd gMEventClientScript_Send1442CC[] = { - CLI_SNDHEAD, - CLI_WAITSND, - CLI_RECEIVE(0x10), - CLI_JUMPBUF -}; - -const struct mevent_client_cmd gMEventClientScript_UnableToRecv[] = { // can't accept card or news - CLI_SENDALL, - CLI_RETURN(0x0a) -}; - -const struct mevent_client_cmd gMEventClientScript_CommError[] = { // comm error - CLI_SENDALL, - CLI_RETURN(0x0b) -}; - -const struct mevent_client_cmd gMEventClientScript_NothingSentOver[] = { // nothing sent - CLI_SENDALL, - CLI_RETURN(0x00) -}; - -const struct mevent_client_cmd gMEventClientScript_ReceiveCardAndReturnSuccess[] = { // card success - CLI_RECEIVE(0x16), - CLI_RECVSAV, - CLI_RECEIVE(0x19), - CLI_RECVRAM, - CLI_SENDALL, - CLI_RETURN(0x02) -}; - -const struct mevent_client_cmd gMEventClientScript_ReceiveNewsAndValidate[] = { - CLI_RECEIVE(0x17), - CLI_VLDNEWS, - CLI_WAITSND, - CLI_RECEIVE(0x10), - CLI_JUMPBUF -}; - -const struct mevent_client_cmd gMEventClientScript_AlreadyHadNews[] = { // already had news - CLI_SENDALL, - CLI_RETURN(0x07) -}; - -const struct mevent_client_cmd gMEventClientScript_RecvNewsSuccess[] = { // news success - CLI_SENDALL, - CLI_RETURN(0x03) -}; - -const struct mevent_client_cmd gMEventClientScript_AskWouldLikeToTossCard[] = { - CLI_REQWORD, - CLI_SNDWORD, - CLI_WAITSND, - CLI_RECEIVE(0x10), - CLI_JUMPBUF -}; - -const struct mevent_client_cmd gMEventClientScript_OtherTrainerCanceled[] = { // comm canceled - CLI_SENDALL, - CLI_RETURN(0x09) -}; - -const struct mevent_client_cmd gMEventClientScript_AlreadyHadCard[] = { // already had card - CLI_SENDALL, - CLI_RETURN(0x05) -}; - -const struct mevent_client_cmd gMEventClientScript_SuccessFromBuffer[] = { // success from buffer - CLI_RECEIVE(0x15), - CLI_RECVBUF, - CLI_SENDALL, - CLI_RETURN(0x0d) From 36c159f7fa166615c445e33cde8e4f756f116179 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 11 Nov 2019 14:20:02 -0500 Subject: [PATCH 8/8] SAVE_STAT_ enums --- include/save_menu_util.h | 3 ++- src/save_menu_util.c | 13 +++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/include/save_menu_util.h b/include/save_menu_util.h index f2a18a777..7085520b4 100644 --- a/include/save_menu_util.h +++ b/include/save_menu_util.h @@ -7,7 +7,8 @@ enum SaveStat SAVE_STAT_POKEDEX, SAVE_STAT_TIME, SAVE_STAT_LOCATION, - SAVE_STAT_BADGES + SAVE_STAT_BADGES, + SAVE_STAT_TIME_HR_RT_ALIGN }; void SaveStatToString(u8 a0, u8 *a1, u8 a2); diff --git a/src/save_menu_util.c b/src/save_menu_util.c index a4bae2409..195b29b0c 100644 --- a/src/save_menu_util.c +++ b/src/save_menu_util.c @@ -4,6 +4,7 @@ #include "event_data.h" #include "pokedex.h" #include "region_map.h" +#include "save_menu_util.h" #include "constants/flags.h" void SaveStatToString(u8 gameStatId, u8 *dest0, u8 color) @@ -20,29 +21,29 @@ void SaveStatToString(u8 gameStatId, u8 *dest0, u8 color) *dest++ = color + 1; switch (gameStatId) { - case 0: + case SAVE_STAT_NAME: dest = StringCopy(dest, gSaveBlock2Ptr->playerName); break; - case 1: + case SAVE_STAT_POKEDEX: if (IsNationalPokedexEnabled()) dest = ConvertIntToDecimalStringN(dest, GetNationalPokedexCount(1), STR_CONV_MODE_LEFT_ALIGN, 3); else dest = ConvertIntToDecimalStringN(dest, GetKantoPokedexCount(1), STR_CONV_MODE_LEFT_ALIGN, 3); break; - case 2: + case SAVE_STAT_TIME: dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3); *dest++ = CHAR_COLON; dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); break; - case 5: + case SAVE_STAT_TIME_HR_RT_ALIGN: dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeHours, STR_CONV_MODE_RIGHT_ALIGN, 3); *dest++ = CHAR_COLON; dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); break; - case 3: + case SAVE_STAT_LOCATION: sub_80C4DF8(dest, gMapHeader.regionMapSectionId); break; - case 4: + case SAVE_STAT_BADGES: for (flagId = FLAG_BADGE01_GET, nBadges = 0; flagId < FLAG_BADGE01_GET + 8; flagId++) { if (FlagGet(flagId))