From 92949b63a9ccf5e96864d648f7d534e903c7d79c Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sun, 3 Oct 2021 14:40:26 -0400 Subject: [PATCH] v0.3.0 --- Makefile | 11 +- data/maps/SlateportCity/scripts.inc | 31 ++ graphics/rhh_copyright/credits.pal | 259 ++++++++++++++ graphics/rhh_copyright/powered_by.bin | Bin 0 -> 2048 bytes graphics/rhh_copyright/powered_by.png | Bin 0 -> 336 bytes graphics/rhh_copyright/rhh_credits.bin | Bin 0 -> 2048 bytes graphics/rhh_copyright/rhh_credits.png | Bin 0 -> 1793 bytes graphics/rhh_copyright/sprites/dizzy_egg.png | Bin 0 -> 1085 bytes graphics/rhh_copyright/sprites/porygon.png | Bin 0 -> 1423 bytes graphics/rhh_copyright/sprites/shiny.pal | 19 ++ graphics/title_screen/rayquaza.bin | Bin 2048 -> 2048 bytes graphics/title_screen/rayquaza.png | Bin 1730 -> 2755 bytes graphics/title_screen/rayquaza_old.bin | Bin 0 -> 2048 bytes graphics/title_screen/rayquaza_old.png | Bin 0 -> 1730 bytes include/global.h | 6 +- include/main.h | 2 +- include/rhh_copyright.h | 11 + include/sound.h | 4 + include/speedchoice.h | 24 +- ld_script.txt | 2 + src/battle_controller_player.c | 3 +- src/battle_main.c | 2 +- src/battle_util.c | 4 +- src/debug.c | 10 +- src/event_object_movement.c | 2 +- src/field_control_avatar.c | 4 +- src/intro.c | 57 +++- src/item_use.c | 3 +- src/load_save.c | 67 +++- src/m4a.c | 42 ++- src/main.c | 2 - src/main_menu.c | 5 + src/overworld.c | 22 +- src/rhh_copyright.c | 341 +++++++++++++++++++ src/sound.c | 14 +- src/speedchoice.c | 71 +++- src/start_menu.c | 4 +- src/trainer_see.c | 2 +- sym_ewram.txt | 2 + 39 files changed, 972 insertions(+), 54 deletions(-) create mode 100644 graphics/rhh_copyright/credits.pal create mode 100644 graphics/rhh_copyright/powered_by.bin create mode 100644 graphics/rhh_copyright/powered_by.png create mode 100644 graphics/rhh_copyright/rhh_credits.bin create mode 100644 graphics/rhh_copyright/rhh_credits.png create mode 100644 graphics/rhh_copyright/sprites/dizzy_egg.png create mode 100644 graphics/rhh_copyright/sprites/porygon.png create mode 100644 graphics/rhh_copyright/sprites/shiny.pal create mode 100644 graphics/title_screen/rayquaza_old.bin create mode 100644 graphics/title_screen/rayquaza_old.png create mode 100644 include/rhh_copyright.h create mode 100644 src/rhh_copyright.c diff --git a/Makefile b/Makefile index d835ba5e54..d09a59b67f 100644 --- a/Makefile +++ b/Makefile @@ -36,7 +36,6 @@ GAME_CODE := SPDX MAKER_CODE := 01 REVISION := 0 MODERN ?= 0 -DEBUG ?= 0 SHELL := /bin/bash -o pipefail @@ -78,7 +77,7 @@ OBJ_DIR := build/modern LIBPATH := -L "$(dir $(shell $(CC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(CC) -mthumb -print-file-name=libc.a))" endif -CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) -DDEBUG=$(DEBUG) +CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) ifeq ($(MODERN),0) CPPFLAGS += -I tools/agbcc/include -I tools/agbcc endif @@ -116,7 +115,7 @@ MAKEFLAGS += --no-print-directory # Secondary expansion is required for dependency variables in object rules. .SECONDEXPANSION: -.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS) berry_fix libagbsyscall modern debugging debugging_modern +.PHONY: all rom clean compare tidy tools mostlyclean clean-tools $(TOOLDIRS) berry_fix libagbsyscall modern infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) @@ -267,12 +266,6 @@ ifeq ($(DINFO),1) override CFLAGS += -g endif -# Debug menu -ifeq ($(DDEBUGGING),1) -override ASFLAGS += --defsym DEBUGGING=1 -override CPPFLAGS += -D DEBUGGING=1 -endif - $(C_BUILDDIR)/%.o : $(C_SUBDIR)/%.c $$(c_dep) @$(CPP) $(CPPFLAGS) $< -o $(C_BUILDDIR)/$*.i @$(PREPROC) $(C_BUILDDIR)/$*.i charmap.txt | $(CC1) $(CFLAGS) -o $(C_BUILDDIR)/$*.s diff --git a/data/maps/SlateportCity/scripts.inc b/data/maps/SlateportCity/scripts.inc index 7d218948b5..426c8af3b0 100644 --- a/data/maps/SlateportCity/scripts.inc +++ b/data/maps/SlateportCity/scripts.inc @@ -604,6 +604,37 @@ SlateportCity_Pokemart_Speedchoice: @ 81DD1F0 .2byte ITEM_ROSE_INCENSE .2byte ITEM_LUCK_INCENSE .2byte ITEM_PURE_INCENSE + .2byte ITEM_UP_GRADE + .2byte ITEM_DUBIOUS_DISC + .2byte ITEM_DRAGON_SCALE + .2byte ITEM_DEEP_SEA_TOOTH + .2byte ITEM_DEEP_SEA_SCALE + .2byte ITEM_METAL_COAT + .2byte ITEM_KINGS_ROCK + .2byte ITEM_ELECTIRIZER + .2byte ITEM_MAGMARIZER + .2byte ITEM_OVAL_STONE + .2byte ITEM_PROTECTOR + .2byte ITEM_RAZOR_CLAW + .2byte ITEM_RAZOR_FANG + .2byte ITEM_REAPER_CLOTH + .2byte ITEM_PRISM_SCALE + .2byte ITEM_SACHET + .2byte ITEM_WHIPPED_DREAM + @ These are not implemented upstream yet. + @.2byte ITEM_CHIPPED_POT + @.2byte ITEM_CRACKED_POT + @.2byte ITEM_GALARICA_CUFF + @.2byte ITEM_GALARICA_WREATH + @.2byte ITEM_SWEET_APPLE + @.2byte ITEM_TART_APPLE + @.2byte ITEM_STRAWBERRY_SWEET + @.2byte ITEM_LOVE_SWEET + @.2byte ITEM_BERRY_SWEET + @.2byte ITEM_CLOVER_SWEET + @.2byte ITEM_FLOWER_SWEET + @.2byte ITEM_STAR_SWEET + @.2byte ITEM_RIBBON_SWEET .2byte ITEM_NONE release end diff --git a/graphics/rhh_copyright/credits.pal b/graphics/rhh_copyright/credits.pal new file mode 100644 index 0000000000..cdff46971b --- /dev/null +++ b/graphics/rhh_copyright/credits.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +198 231 214 +255 255 255 +222 222 222 +222 222 214 +198 198 198 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +247 247 247 +231 231 231 +222 222 222 +222 222 214 +214 214 214 +198 198 198 +181 181 181 +165 165 165 +148 148 148 +132 132 132 +115 115 115 +99 99 99 +82 82 82 +66 66 66 +49 49 49 +33 33 33 +16 16 16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/rhh_copyright/powered_by.bin b/graphics/rhh_copyright/powered_by.bin new file mode 100644 index 0000000000000000000000000000000000000000..13187db91138588bc182c956dbcc52c7b8619df6 GIT binary patch literal 2048 zcmZQzARjO?Fp{qssB>`YXJTMxU}0coU}InhVh*4?IT^SZxUu+jaJnChLvaX=x_>yP WUmTH*MR+v+K_M^-M?+xbh5!HwhXL>a literal 0 HcmV?d00001 diff --git a/graphics/rhh_copyright/powered_by.png b/graphics/rhh_copyright/powered_by.png new file mode 100644 index 0000000000000000000000000000000000000000..b422f6e568b80accc444bed5e8a737323d80791e GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^2|&!j!VDz82tKy~QtTz3zOL*~S=gB6xTTXDn}I^& zC9V-A!TD(=<%vb94DLQIKw}ijQi~Lf^-Ky|mplX+QBvUN4wNwlvKhP@H06O5OS+@4 zBLl<6e(pbstU$g&fKQ0)vFF$R|Nnmv1g;%Bb_}E(FL0f%cLS(^G0EHA<^NLlPe*~A z5>FS$kcv4=yAN_Y8}c}BZsL!7;H++N^MIU!@0R~sQ!mwX+19MMaCpHJQ-j`vhqu(X zB&JCpFNkA2c#+-yho;4w?o$Upc7HDZ5@`%ea2>C~X*ci(~>!{F)a=d#Wzp$P!&LvYFf literal 0 HcmV?d00001 diff --git a/graphics/rhh_copyright/rhh_credits.bin b/graphics/rhh_copyright/rhh_credits.bin new file mode 100644 index 0000000000000000000000000000000000000000..09760e3e7f5b6c7cfe92bd4b9709416a8093fe6e GIT binary patch literal 2048 zcmeIu*HV;06h+}r7=q*+BuLIkmK-E23~2x{pn#HtzW)_nQ$R6Kzy<&5>aISu_P$v} z^STYZktSVChD=$qy_F;PnUXyD3KS|*tVC%bWzQ((Dpaac?VTF6>eN5*_ZpJFMopTv zXw{}&ht8CKmu@|JebA@hfWfE!kl|!<#7CpXjEDY&NmD8PX*0=v)|^k~Em%z9ELpZ< z)n{L<1-72TzNd`E_n!4!ckJ-=MI!H2C^Bv8Z_mB6id3J zuOkD)#(wTUiL49^%nSiOA+E=sU;F?6|2+`6cI?R?4Wx1F z)~!pIE}b%EN=r*iadB~Sa&k~mkdu>>p`oFoqN0F+03lOH(s)~$<|JPrh_nrIO9)0m-k)#=>r$KN>Xw;g<@_E^cZY3KQ+Pa0M)i`W&ayU}EC z_ZD7m+2YA|e-md!gYSr47C8S6H^4nQ%aFYyN)M50PtLW+?L7HD{)<&1q2mb6wNujC(Fmt(NJu zgBdd!)h|rg=V|o1=DwPO@dK8Ui3b)<%w@_oV+|1d{wcY$VV!V<>R!(W^TZQhcTdol z+u$d_)aN+SA!iz=&vu_>%un85(PKLBz>>-K{nhm7it7!uO`GPt+&c{+k`Eh3?F0#t$w9kRA1xIkyqWPe1NGjZqhg9*}j_( zhpRuhljz-Bc=?wpTeGV2Qx6uceY{M0Q|3xc7Rr64&et$OS#9OdZ5%zT_ZPNCMj6O_ zFcRg@j@8I)Y(BBt=L`em<>UulwvV@J$-GUfQ>b6ss&P|`Ma_MINl?^8sn)gbi-Wgb zd{dIVC1th0Z)<~FIK!&BWzYRyFQ%$!BnHtDjr>bq027C`orRf+};Pn7|Pd%>@)n+e?&2HSNr+s0;`>;D{Uim zreEgDn0NkC^~KYIbvjM=yZ_kM+-sVkq25$~)apZEMeQ!NpVN0Qnqit-VX40P(6-v2 z%>ki8>xviNS-D?_Wx3NsoBiKb^Pk+>Vfe=~k?mnq(P4L2+1=at{qjUzdk<~A@%OQc ztc#^8OKr=t&RvF@N?Bc=nm>b^B`15wh;$g#iWF<;+`b@I+*;qOnB-oWxsI8=$;`fW s#i@Qlj$3~;7{7Wl?GWQ*vY&Lo{!@z0t!JN~W`Huer>mdKI;Vst06fCsW&i*H literal 0 HcmV?d00001 diff --git a/graphics/rhh_copyright/sprites/dizzy_egg.png b/graphics/rhh_copyright/sprites/dizzy_egg.png new file mode 100644 index 0000000000000000000000000000000000000000..cd03ffc152edbf7cad5e516d947b6ba70028f2fa GIT binary patch literal 1085 zcmV-D1j74?P)^i>gQq|9UaTM`v!0}p4ryf8KC3bpiFycTx@Z+~Yi0fCXphJ?_M3{XU)N_<;aY z`tvr3)9OlK1R>H+XD9qUMtNF*%v4E(td}9f^uJ;0fL+RZdIP=6Q~;wt*&Q_o zV1mvI&PIpO+-#)}+*<~JP1pRPmjb$Lu8oWIyIG6x^-Q#{t0Cc_|Q6+RDu3|nT`#uJs^_l)Gz_z)~t<~z)9`9;zn~-;FLT(}qk+oab2?=14x8?y+9ox96 zaLFVOt^=*>E{^~mJ|meof|bWsDTuG<+h9@<_dWhJhXqzakMU$LU=pk|*$zPr8Qi36P{(AKs*ooz@51iI3nl zeX##sA20o5rToLTe$GEWZXYe$hmm0#w2v(TAGQw*`pG^XLF;3ZhXYg}Xdey`ee6*m z8?BGBz$Mv3F!nf$^(WPf0P=0NFUz;ObKWjLBk=P00000NkvXXu0mjf Dk!;cK literal 0 HcmV?d00001 diff --git a/graphics/rhh_copyright/sprites/porygon.png b/graphics/rhh_copyright/sprites/porygon.png new file mode 100644 index 0000000000000000000000000000000000000000..020198df673f62c41868f8591cb0c0afefaed2a4 GIT binary patch literal 1423 zcmV;A1#tR_P)43#3!JsfdYXvD9z3Y+DjSU zTb`sj5RV45#E8rj&qlzdmq%;yjkd9O(p$V1*0RaSm3y*^H*UAz>AmnI93HX>q zZ%lhHWR-HpA_0FMnBEu2v`RVf&my+@e{q{~@|n$Db;>z_`4-VoTK&D~vV%*UZ!pQM z?iuus^91M1&zE-lU7chK=aW;yo`W0$!c45jqOH#nc&lB@)6f);I zKB;@sMU5IYYCL#=s~tKCFWvb<2aJ}jz}TXT31p9!fPk?B0fVklbifF09moc~qef$g z*=v*yp$Q3OKeQAW)o-qNv&k`{7y;zt*}NiPz-T9C$SD%dr~<}M!j!-YWbSPPMk-?C z8rX0EBe>EDBsD{hP6yr>y_2%XUrCu7x1j^Z#dF>tLj-{cV7ePf{PsNjj!j1KFh8}K zZy~#k!Dm$*<<@u*K)z5A(oWxt+}yh zgSKYRpH=G#%9`!zY6XK>>ITELpYYd`TEX0i zP%D@lP%D@kHEKL`Jd9!=&D~w>f4HaEZ~kwJeam=vi+yV2epBrKd%&&4ZLx19+%5Jg ziQCr~2#MR*7wm)plE>!t1%e=@$e4b8fh45jg7Xel>;oYa6Ch0OcY!yWosRkI^4dX& z-Yg69{~H$jQIt!X0Qmq3F-d@HKmd^=`uzozSDEcil^X)cD@T9`P(E;M7<`w!hD*M> d#wRQ={sB@%CTxEQK7s%M002ovPDHLkV1nt{jMV@D literal 0 HcmV?d00001 diff --git a/graphics/rhh_copyright/sprites/shiny.pal b/graphics/rhh_copyright/sprites/shiny.pal new file mode 100644 index 0000000000..1950f6e0ba --- /dev/null +++ b/graphics/rhh_copyright/sprites/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +199 225 209 +248 248 248 +197 197 197 +139 213 238 +89 189 230 +7 172 213 +7 131 164 +7 89 114 +246 213 246 +238 172 238 +255 97 207 +197 56 165 +123 40 88 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/title_screen/rayquaza.bin b/graphics/title_screen/rayquaza.bin index b112237a3d115893e432a3854c811becffcc4274..d2bcc4eb293031ba9d021fb3cc2b2a40b672d894 100644 GIT binary patch literal 2048 zcmeH{Wpvb65XBc32(lq;+}#tRZK=C!>ZR`9g;H;UQcc}mfyl*dM2@5lZe;Cl|_AmZ8%=8)JeO_mSkus`8&j^Id+;%JWX{ewA{<2arZ zIFXY$nNv8G(>OhL#u*Hb;Y>fD#o3(0xtz!OT;Tg73}Gk{E@YU+2p4fNm&DvbF7;~> zF5_~p;7Z#K)2l2F)gc=3{lghy`;oS;wiRI%*Kn3!9`5Bn?&kp>wCY1V%p*K%>@gm<*zDim!f3`Y zmT|N&o(W8}Jc-FX!IM12(>%koOx8)-!bF{*<1LTVu{uUa8}sg;!c?Z2CyMFJ;5nY> z1zzMOUgi~EYX z#^-#&mwaW4uVdQJlpnma~F3+M#VFE0vCRZPOLH-1Jd6RpZNasXzZJI;`HwYSyrpb;j4T zfsOXdDiJ#U8AeD(|Cuj^8MfOJwNaxKk+la@GHL&kZ#glg3?30 z-#||Zx?U0|0qHG$q_6aoki<)WNss~J%^#LTNs?qqkyHswnxtFIkW9&vY{`)vm+i7# zrps_)Nq1=$Q(cNnc1bSLc+?*@N3P^azU8nKNTC!-v6M(cN2!#$gtih_?225WD=s~GMUT-#OFc~@5k`&yXXJTy>k~Yk38R4X6(d2>L0*AR=gFz zAOEO-9RH|)jA)wLYt3j*i#n<`dG#+)o7S|UE$wJe2jb`$QLUYg^t;fNZgi)IF&%pT z(m#(!ANm@rAN?7?KrsKZwIY4sqD@ zIKol0QbaK&lxj~Yl@ckIBJq+z-tx}2!u=DJQ^84NoZ__Gvyv*Rq%zEOdR*jElpo|W zSGdYGu5*K%rhc0{R8t*g!+jpq;Xg!p#ABZDlxIA*@8bn8-Lur3{uQrz6Y}*x{O1pD Xz_Ma}qMv^qf7{nH#QX-D|7XTectY=K diff --git a/graphics/title_screen/rayquaza.png b/graphics/title_screen/rayquaza.png index f52f559e25cb54f7f997abf913d21a684ec57f53..a7ad9deeed1ae915ffcc6c08888d9e6e8a1acc1d 100644 GIT binary patch delta 2710 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 Xz_Ma}qMv^qf7{nH#QX-D|7XTectY=K literal 0 HcmV?d00001 diff --git a/graphics/title_screen/rayquaza_old.png b/graphics/title_screen/rayquaza_old.png new file mode 100644 index 0000000000000000000000000000000000000000..f52f559e25cb54f7f997abf913d21a684ec57f53 GIT binary patch literal 1730 zcmV;z20i(SP)3h$dr)-u4n3&>mbfKLlh4GQp`{}Lc7j+|ElOeot_D1cOd*|zmw z04TuLkAzczq(bZk0epQV6o5|;2va}gp9Dx##QujL8$k4H;=GDY zBcLO|%>Y=)S^z#z06KV75qlzzR8R?s%TSn@eF<0!K+yJ0tm+tmaS&1i+ye-&X3Qh+ zH+Zk&O31y(E71D5|+&fhy;}oHxU-l`}%xAEB%fa zC=2ZXP$o4T{oq{#rVjCJgH;A?g7|Gu?Ia(xLHz`l#{7? z0$5fFfzD)1DF?jh%5qq-w3KmC-)pco_U0`azJKE(j6I#`S+rIGXfsxj7@PZDo6$I12AEVfat(S0ZQO7z5@UefV1#w36BDBR{OEg zZQo-G65&C>)mZxs01CqWfGK}Q6Nv!-vONfhgg6S%0^0uzxJn=X3HB7A<+<>8u&)5c zbIC_I8}CtY2*7;sSFoo6NKk-Te$D_{a*6=72LWv=YXH|Hz*GRVz5*`64geQ>kL65# z_#;>Zyr4CEfR`70ucgTT43-p#2nQH1nS#{*?@mEY)|3kB+9}ZXBLL4;Jz&{R0jd4w z!vn;cC4K4ePGyW_ycUIk51WtQa6pRF-6qV^Wz$0!50LtZItHW_kB6}U5E4!REA6lt zFlGRD7kuEb;mNK8)cm<7r#4a}0mfPYfT4qD%Nam+$=fcVt`%^g0OUI$0Y)7KV+6zV z6Ax%0eTfJFo&;ztaKAfau@9i9Lr66AY9h8BPE7%2nPi}j+71^YiBGWT~BcrV&mu<4LvDSk)gfX1HN*jTWMSJICI zH0=8HO$x?17Epx^XZt0G0Fv*HAYGdopz#1;K(nNe+JfK#^**4Eb!8{Kx=!E>v@-(7 zr35r`hLra6Nx~Fz0J)C<7#9{0ofva-teUc0BH%hf5iss4SYj$e?}n=-iCDE0@sCN3 z=o15=_N2rn=UB;`BgW2Xa5g{&{#lrny7%$12_OjnQ7*{%t=syjzkG)z?~@{0Kfnm z52!t0I{=Ipz)O;hj_<<(02Bana5GX?T8OF9wno%aj(d^6s8v!E71KPU)aZYZd z0krsH(xm840|?Ma803JdebugHoldEffects[battlerId] != 0 && gBattleMons[battlerId].item) + if ((CheckSpeedchoiceOption(DEBUG_MENUS, DEBUG_MENUS_ON) == TRUE) && gBattleStruct->debugHoldEffects[battlerId] != 0 && gBattleMons[battlerId].item) return gBattleStruct->debugHoldEffects[battlerId]; else if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY) return gEnigmaBerries[battlerId].holdEffect; @@ -8271,7 +8271,7 @@ bool32 CanMegaEvolve(u8 battlerId) // Check if there is an entry in the evolution table for regular Mega Evolution. if (GetMegaEvolutionSpecies(species, itemId) != SPECIES_NONE) { - if ((gDebugSystemEnabled == TRUE) && gBattleStruct->debugHoldEffects[battlerId]) + if ((CheckSpeedchoiceOption(DEBUG_MENUS, DEBUG_MENUS_ON) == TRUE) && gBattleStruct->debugHoldEffects[battlerId]) holdEffect = gBattleStruct->debugHoldEffects[battlerId]; else if (itemId == ITEM_ENIGMA_BERRY) holdEffect = gEnigmaBerries[battlerId].holdEffect; diff --git a/src/debug.c b/src/debug.c index 1e43f4448c..61b1017607 100644 --- a/src/debug.c +++ b/src/debug.c @@ -54,7 +54,8 @@ // ================================= // GLOBAL ON/OFF FOR DEBUGGING // ================================= -EWRAM_DATA int gDebugSystemEnabled = 0; +// DEPRECATED +//EWRAM_DATA int gDebugSystemEnabled = FALSE; // ================================= @@ -2807,6 +2808,9 @@ static void DebugAction_Sound_MUS(u8 taskId) gTasks[taskId].data[4] = 0; //Digit Selected gTasks[taskId].data[5] = gTasks[taskId].data[3]; //Last song played (for stopping) } + +extern int gShuffleMusic; + static void DebugAction_Sound_MUS_SelectId(u8 taskId) { if (gMain.newKeys & DPAD_ANY) @@ -2843,9 +2847,13 @@ static void DebugAction_Sound_MUS_SelectId(u8 taskId) if (gMain.newKeys & A_BUTTON) { + int setShuffleMusicBack = gShuffleMusic == TRUE; + gShuffleMusic = FALSE; m4aSongNumStop(gTasks[taskId].data[5]); gTasks[taskId].data[5] = gTasks[taskId].data[3]; m4aSongNumStart(gTasks[taskId].data[3]); + if(setShuffleMusicBack) + gShuffleMusic = TRUE; } else if (gMain.newKeys & B_BUTTON) { diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 55f8831bcc..e2f612cfde 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -5503,7 +5503,7 @@ u8 GetCollisionAtCoords(struct ObjectEvent *objectEvent, s16 x, s16 y, u32 dir) { u8 direction = dir; - if((gDebugSystemEnabled == TRUE) && FlagGet(FLAG_SYS_NO_COLLISION)) + if((CheckSpeedchoiceOption(DEBUG_MENUS, DEBUG_MENUS_ON) == TRUE) && FlagGet(FLAG_SYS_NO_COLLISION)) return COLLISION_NONE; if (IsCoordOutsideObjectEventMovementRange(objectEvent, x, y)) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 0013621d15..5cf1de345e 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -248,7 +248,7 @@ int ProcessPlayerFieldInput(struct FieldInput *input) if (input->pressedSelectButton && UseRegisteredKeyItemOnField() == TRUE) return TRUE; - if (gDebugSystemEnabled == TRUE) { + if (CheckSpeedchoiceOption(DEBUG_MENUS, DEBUG_MENUS_ON) == TRUE) { if (input->input_field_1_2) { PlaySE(SE_WIN_OPEN); @@ -737,7 +737,7 @@ void RestartWildEncounterImmunitySteps(void) static bool8 CheckStandardWildEncounter(u16 metatileBehavior) { - if ((gDebugSystemEnabled == TRUE) && FlagGet(FLAG_SYS_NO_ENCOUNTER)) //DEBUG + if ((CheckSpeedchoiceOption(DEBUG_MENUS, DEBUG_MENUS_ON) == TRUE) && FlagGet(FLAG_SYS_NO_ENCOUNTER)) //DEBUG return FALSE;// if (sWildEncounterImmunitySteps < 4) diff --git a/src/intro.c b/src/intro.c index 5aae1bc462..4a644395eb 100644 --- a/src/intro.c +++ b/src/intro.c @@ -27,6 +27,7 @@ #include "constants/battle_anim.h" #include "done_button.h" #include "boot_error_screen.h" +#include "rhh_copyright.h" /* The intro is grouped into the following scenes @@ -1026,6 +1027,16 @@ static const struct SpritePalette sSpritePalette_RayquazaOrb[] = {}, }; +static void VBlankCB_PretIntro(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + ScanlineEffect_InitHBlankDmaTransfer(); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); +} static void VBlankCB_Intro(void) { @@ -1101,21 +1112,63 @@ static u8 SetUpCopyrightScreen(void) SetSerialCallback(SerialCB_CopyrightScreen); GameCubeMultiBoot_Init(&gMultibootProgramStruct); default: + if(gMain.state > 155) + RunTasks(); UpdatePaletteFade(); gMain.state++; GameCubeMultiBoot_Main(&gMultibootProgramStruct); break; + + // --------------------------- + // pret intro starts here + // --------------------------- + case 139: + RhhIntro_InitCopyrightBgs(); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_WHITEALPHA); + SetVBlankCallback(VBlankCB_PretIntro); + gMain.state++; + break; case 140: + if (UpdatePaletteFade()) + break; + RhhIntro_LoadCopyrightBgGraphics(); + //BeginNormalPaletteFade(0x00000001, 0, 0x10, 0, RGB_BLACK); + UpdatePaletteFade(); + GameCubeMultiBoot_Main(&gMultibootProgramStruct); + gMain.state++; + break; + + case 141: + RhhIntro_LoadCopyrightSpriteGraphics(); + RhhIntro_CreateCopyRightSprites(); + UpdatePaletteFade(); + GameCubeMultiBoot_Main(&gMultibootProgramStruct); + gMain.state++; + break; + + case 155: + RhhIntro_ShowRhhCredits(); + UpdatePaletteFade(); + GameCubeMultiBoot_Main(&gMultibootProgramStruct); + gMain.state++; + break; + + case 363: GameCubeMultiBoot_Main(&gMultibootProgramStruct); if (gMultibootProgramStruct.gcmb_field_2 != 1) { - BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); + BeginNormalPaletteFade(0xFFFFFFFF, 3, 0, 0x10, RGB_BLACK); gMain.state++; } break; - case 141: + case 364: if (UpdatePaletteFade()) break; + RhhIntro_DestroyRhhCreditSprites(); + gMain.state++; + break; + + case 365: if (gWhichErrorMessage != FATAL_OKAY) SetMainCallback2(CB2_BootErrorScreen); else diff --git a/src/item_use.c b/src/item_use.c index 488c1ffe16..1d66e5f934 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -45,6 +45,7 @@ #include "debug.h" #include "done_button.h" #include "day_night.h" +#include "speedchoice.h" static void SetUpItemUseCallback(u8 taskId); static void FieldCB_UseItemOnField(void); @@ -1033,7 +1034,7 @@ u32 CanThrowBall(void) void ItemUseInBattle_PokeBall(u8 taskId) { - if ((gDebugSystemEnabled == TRUE) && FlagGet(FLAG_SYS_NO_CATCHING)) { + if ((CheckSpeedchoiceOption(DEBUG_MENUS, DEBUG_MENUS_ON) == TRUE) && FlagGet(FLAG_SYS_NO_CATCHING)) { static const u8 sText_BallsCannotBeUsed[] = _("Poké Balls cannot be used\nright now!\p"); DisplayItemMessage(taskId, 1, sText_BallsCannotBeUsed, BagMenu_InitListsMenu); } diff --git a/src/load_save.c b/src/load_save.c index af8e51d4d0..eb386e0747 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -14,6 +14,8 @@ #include "decoration_inventory.h" #include "agb_flash.h" #include "done_button.h" +#include "sound.h" +#include "speedchoice.h" static void ApplyNewEncryptionKeyToAllEncryptedData(u32 encryptionKey); @@ -76,7 +78,9 @@ void SetSaveBlocksPointers(u16 offset) { struct SaveBlock1** sav1_LocalVar = &gSaveBlock1Ptr; - offset = (offset + Random()) & (SAVEBLOCK_MOVE_RANGE - 4); + // SPEEDCHOICE CHANGE: Disable the random Save Block DMAing crap. + //offset = (offset + Random()) & (SAVEBLOCK_MOVE_RANGE - 4); + offset = 0; gSaveBlock2Ptr = (void*)(&gSaveblock2) + offset; *sav1_LocalVar = (void*)(&gSaveblock1) + offset; @@ -182,6 +186,8 @@ void LoadPlayerParty(void) gPlayerParty[i] = gSaveBlock1Ptr->playerParty[i]; } +extern int gShuffleMusic; + void SaveObjectEvents(void) { int i; @@ -190,12 +196,69 @@ void SaveObjectEvents(void) gSaveBlock1Ptr->objectEvents[i] = gObjectEvents[i]; } +#include "constants/songs.h" + +extern u32 gRandomizerCheckValue; + +extern int IsInFanfares(u16 songNum); + +extern EWRAM_DATA u16 gShuffledMusic[(END_MUS - START_MUS + 1) - SFANFARES_COUNT][2]; +extern EWRAM_DATA u16 gShuffledFanfares[SFANFARES_COUNT][2]; + +struct Fanfare +{ + u16 songNum; + u16 duration; +}; + +extern const struct Fanfare sFanfares[]; + void LoadObjectEvents(void) { - int i; + int i, j; for (i = 0; i < OBJECT_EVENTS_COUNT; i++) gObjectEvents[i] = gSaveBlock1Ptr->objectEvents[i]; + + // do the shuffling here if enabled. TODO: Add Shuffle Music option and check CheckSpeedchoiceOption() here. + if(CheckSpeedchoiceOption(SHUFFLE_MUSIC, SHUFFLE_MUSIC_ON) == TRUE) { + SeedRng((u16)gRandomizerCheckValue); + // initialize the gShuffledMusic array to shuffle. + for(i = 0, j = 0; i < (END_MUS - START_MUS); i++) { + // only add it to the array if its not in sFanfares. + if(!IsInFanfares(START_MUS + i)) { + gShuffledMusic[j][0] = START_MUS + i; + gShuffledMusic[j++][1] = START_MUS + i; + } + } + gShuffledMusic[j][0] = MUS_VS_WILD_NIGHT; + gShuffledMusic[j][1] = MUS_VS_WILD_NIGHT; + // initialize gShuffledFanfares too. + for(i = 0; i < SFANFARES_COUNT; i++) { + gShuffledFanfares[i][0] = sFanfares[i].songNum; + gShuffledFanfares[i][1] = sFanfares[i].songNum; + } + // shuffle tha array(s) now. Add 1 for VS wild night. + + // do the first shuffle for gShuffledMusic. + for(i = 0; i < (END_MUS - START_MUS + 1) - SFANFARES_COUNT; i++) { + int j = Random() % (((END_MUS - START_MUS) + 1) - SFANFARES_COUNT); // pick a random element to swap with on the [1] element. + + // perform the swap. + int swap = gShuffledMusic[j][1]; + gShuffledMusic[j][1] = gShuffledMusic[i][1]; + gShuffledMusic[i][1] = swap; + } + // now for gShuffledFanfares. + for(i = 0; i < SFANFARES_COUNT; i++) { + int j = Random() % SFANFARES_COUNT; + + // perform the swap. + int swap = gShuffledFanfares[j][1]; + gShuffledFanfares[j][1] = gShuffledFanfares[i][1]; + gShuffledFanfares[i][1] = swap; + } + } } void SaveSerializedGame(void) diff --git a/src/m4a.c b/src/m4a.c index 7d7193334f..bcd77e83f4 100644 --- a/src/m4a.c +++ b/src/m4a.c @@ -1,5 +1,7 @@ #include #include "gba/m4a_internal.h" +#include "sound.h" +#include "speedchoice.h" extern const u8 gCgb3Vol[]; @@ -104,14 +106,44 @@ void m4aSoundMain(void) SoundMain(); } +#include "constants/songs.h" +#include "random.h" + +EWRAM_DATA int gShuffleMusic = FALSE; +EWRAM_DATA u16 gShuffledMusic[(END_MUS - START_MUS + 1) - SFANFARES_COUNT][2] = {0}; +EWRAM_DATA u16 gShuffledFanfares[SFANFARES_COUNT][2] = {0}; // 18 is the number of set entries in sFanfares + void m4aSongNumStart(u16 n) { - const struct MusicPlayer *mplayTable = gMPlayTable; - const struct Song *songTable = gSongTable; - const struct Song *song = &songTable[n]; - const struct MusicPlayer *mplay = &mplayTable[song->ms]; + // do the rando thing. + if(gShuffleMusic == TRUE && ((n >= START_MUS && n <= END_MUS) || n == MUS_VS_WILD_NIGHT) && CheckSpeedchoiceOption(SHUFFLE_MUSIC, SHUFFLE_MUSIC_ON) == TRUE) { + int i; + // first check gShuffleMusic. + for(i = 0; i < (END_MUS - START_MUS + 1) - SFANFARES_COUNT; i++) { + if(gShuffledMusic[i][0] == n) { + n = gShuffledMusic[i][1]; + goto FOUND; + } + } + // then check gShuffledFanfares. + for(i = 0; i < SFANFARES_COUNT; i++) { + if(gShuffledFanfares[i][0] == n) { + n = gShuffledFanfares[i][1]; + goto FOUND; + } + } + n = MUS_NONE; // no match found. +FOUND:; // meh. I cant think of a better way to get out of this. + } + { + // blah, doing it like this. + const struct MusicPlayer *mplayTable = gMPlayTable; + const struct Song *songTable = gSongTable; + const struct Song *song = &songTable[n]; + const struct MusicPlayer *mplay = &mplayTable[song->ms]; - MPlayStart(mplay->info, song->header); + MPlayStart(mplay->info, song->header); + } } void m4aSongNumStartOrChange(u16 n) diff --git a/src/main.c b/src/main.c index 7cac1f3067..6c2a710c22 100644 --- a/src/main.c +++ b/src/main.c @@ -129,8 +129,6 @@ void AgbMain() InitHeap(gHeap, HEAP_SIZE); gSoftResetDisabled = FALSE; - - gDebugSystemEnabled = DEBUG; if (gFlashMemoryPresent == FALSE) gWhichErrorMessage = FATAL_NO_FLASH; diff --git a/src/main_menu.c b/src/main_menu.c index bbbb7fd317..60ae06af92 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -38,6 +38,7 @@ #include "window.h" #include "mystery_gift.h" #include "done_button.h" +#include "speedchoice.h" /* * Main menu state machine @@ -937,6 +938,8 @@ static void Task_HandleMainMenuInput(u8 taskId) extern void Task_InitSpeedchoiceMenu(u8); +extern int gShuffleMusic; + static void Task_HandleMainMenuAPressed(u8 taskId) { bool8 wirelessAdapterConnected; @@ -1070,6 +1073,8 @@ static void Task_HandleMainMenuAPressed(u8 taskId) gPlttBufferFaded[0] = RGB_BLACK; SetMainCallback2(CB2_ContinueSavedGame); TryIncrementButtonStat(DB_RELOAD_COUNT); + if(CheckSpeedchoiceOption(SHUFFLE_MUSIC, SHUFFLE_MUSIC_ON) == TRUE) + gShuffleMusic = TRUE; DestroyTask(taskId); break; case ACTION_OPTION: diff --git a/src/overworld.c b/src/overworld.c index 46ca2c1fac..81f6c55a8f 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -108,11 +108,11 @@ static void CB2_LoadMap2(void); static void VBlankCB_Field(void); static void SpriteCB_LinkPlayer(struct Sprite *sprite); void ChooseAmbientCrySpecies(void); -static void DoMapLoadLoop(u8 *state); -static bool32 LoadMapInStepsLocal(u8 *state, bool32); -static bool32 LoadMapInStepsLink(u8 *state); -static bool32 ReturnToFieldLocal(u8 *state); -static bool32 ReturnToFieldLink(u8 *state); +static void DoMapLoadLoop(u16 *state); +static bool32 LoadMapInStepsLocal(u16 *state, bool32); +static bool32 LoadMapInStepsLink(u16 *state); +static bool32 ReturnToFieldLocal(u16 *state); +static bool32 ReturnToFieldLink(u16 *state); static void InitObjectEventsLink(void); static void InitObjectEventsLocal(void); static void InitOverworldGraphicsRegisters(void); @@ -1665,7 +1665,7 @@ void CB2_NewGame(void) void CB2_WhiteOut(void) { - u8 state; + u16 state; if (++gMain.state >= 120) { @@ -1927,7 +1927,7 @@ static void InitCurrentFlashLevelScanlineEffect(void) } } -static bool32 LoadMapInStepsLink(u8 *state) +static bool32 LoadMapInStepsLink(u16 *state) { switch (*state) { @@ -2006,7 +2006,7 @@ static bool32 LoadMapInStepsLink(u8 *state) return FALSE; } -static bool32 LoadMapInStepsLocal(u8 *state, bool32 a2) +static bool32 LoadMapInStepsLocal(u16 *state, bool32 a2) { switch (*state) { @@ -2078,7 +2078,7 @@ static bool32 LoadMapInStepsLocal(u8 *state, bool32 a2) return FALSE; } -static bool32 ReturnToFieldLocal(u8 *state) +static bool32 ReturnToFieldLocal(u16 *state) { switch (*state) { @@ -2109,7 +2109,7 @@ static bool32 ReturnToFieldLocal(u8 *state) return FALSE; } -static bool32 ReturnToFieldLink(u8 *state) +static bool32 ReturnToFieldLink(u16 *state) { switch (*state) { @@ -2186,7 +2186,7 @@ static bool32 ReturnToFieldLink(u8 *state) return FALSE; } -static void DoMapLoadLoop(u8 *state) +static void DoMapLoadLoop(u16 *state) { while (!LoadMapInStepsLocal(state, FALSE)); } diff --git a/src/rhh_copyright.c b/src/rhh_copyright.c new file mode 100644 index 0000000000..23b36c68e0 --- /dev/null +++ b/src/rhh_copyright.c @@ -0,0 +1,341 @@ +#include "global.h" +#include "bg.h" +#include "clear_save_data_menu.h" +#include "decompress.h" +#include "palette.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" +#include "gpu_regs.h" +#include "trig.h" +#include "rhh_copyright.h" +#include "constants/rgb.h" +#include "constants/songs.h" + +static const u32 sBgTiles_PoweredBy[] = INCBIN_U32("graphics/rhh_copyright/powered_by.4bpp.lz"); +static const u32 sBgTiles_RhhCredits[] = INCBIN_U32("graphics/rhh_copyright/rhh_credits.8bpp.lz"); +static const u32 sBgMap_PoweredBy[] = INCBIN_U32("graphics/rhh_copyright/powered_by.bin.lz"); +static const u32 sBgMap_RhhCredits[] = INCBIN_U32("graphics/rhh_copyright/rhh_credits.bin.lz"); +static const u32 sBgPal_Credits[] = INCBIN_U32("graphics/rhh_copyright/credits.gbapal.lz"); +static const u32 sSpriteTiles_DizzyEgg[] = INCBIN_U32("graphics/rhh_copyright/sprites/dizzy_egg.4bpp.lz"); +static const u32 sSpriteTiles_Porygon[] = INCBIN_U32("graphics/rhh_copyright/sprites/porygon.4bpp.lz"); +static const u16 sSpritePal_DizzyEgg[] = INCBIN_U16("graphics/rhh_copyright/sprites/dizzy_egg.gbapal"); +static const u16 sSpritePal_Porygon[] = INCBIN_U16("graphics/rhh_copyright/sprites/porygon.gbapal"); +static const u16 sSpritePal_PorygonShiny[] = INCBIN_U16("graphics/rhh_copyright/sprites/shiny.gbapal"); + + +#define TAG_DIZZY 20000 +#define TAG_PORYGON 20001 + +#define PAL_TAG_DIZZY 20000 +#define PAL_TAG_PORYGON 20001 + +#define DIZZY_POS_X 300 +#define DIZZY_POS_Y 138 +#define DIZZY_COLLISION_POS_X 172 +#define PORY_POS_X -32 +#define PORY_POS_Y 115 +#define PORYGON_COLLISION_POS_X 140 +#define PORYGON_WAIT_TIME 99 + +#define DIZZY_ANIM_SPEED 4 +#define DIZZY_STARS_SPEED 12 + +static void SpriteCallbacK_DizzyWalking(struct Sprite* sprite); +static void SpriteCallback_PorygonFlying(struct Sprite* sprite); + +static const union AnimCmd sAnimCmd_DizzyWalking[] = { + ANIMCMD_FRAME(32, DIZZY_ANIM_SPEED), + ANIMCMD_FRAME(16, DIZZY_ANIM_SPEED), + ANIMCMD_FRAME(0, DIZZY_ANIM_SPEED), + ANIMCMD_FRAME(16, DIZZY_ANIM_SPEED), + ANIMCMD_FRAME(32, DIZZY_ANIM_SPEED), + ANIMCMD_FRAME(48, DIZZY_ANIM_SPEED), + ANIMCMD_FRAME(64, DIZZY_ANIM_SPEED), + ANIMCMD_FRAME(48, DIZZY_ANIM_SPEED), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sAnimCmd_DizzyisDizzy[] = { + ANIMCMD_FRAME(80, DIZZY_STARS_SPEED), + ANIMCMD_FRAME(96, DIZZY_STARS_SPEED), + ANIMCMD_FRAME(112, DIZZY_STARS_SPEED), + ANIMCMD_FRAME(96, DIZZY_STARS_SPEED), + ANIMCMD_JUMP(0), +}; + +enum {ANIM_DIZZY_WALKING, ANIM_DIZZY_DIZZY}; + +static const union AnimCmd *const sAnimCmdTable_DizzyEgg[] = { + [ANIM_DIZZY_WALKING] = sAnimCmd_DizzyWalking, + [ANIM_DIZZY_DIZZY] = sAnimCmd_DizzyisDizzy, +}; + +static const union AnimCmd sAnimCmd_PorygonIdle[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sAnimCmd_PorygonHitted[] = { + ANIMCMD_FRAME(64, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sAnimCmd_PorygonGoUp[] = { + ANIMCMD_FRAME(64, 20), + ANIMCMD_FRAME(128, 10), + ANIMCMD_END, +}; + +enum {ANIM_PORY_IDLE, ANIM_PORY_HIT, ANIM_PORY_GO_UP}; + +static const union AnimCmd *const sAnimCmdTable_Porygon[] = { + [ANIM_PORY_IDLE] = sAnimCmd_PorygonIdle, + [ANIM_PORY_HIT] = sAnimCmd_PorygonHitted, + [ANIM_PORY_GO_UP] = sAnimCmd_PorygonGoUp, +}; + +static const union AffineAnimCmd sAffineAnimCmd_PorygonScale[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const sAffineAnimCmdTable_Porygon[] = { + sAffineAnimCmd_PorygonScale, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_DizzyEgg = { + .data = sSpriteTiles_DizzyEgg, + .size = 0x1000, + .tag = TAG_DIZZY, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Porygon = { + .data = sSpriteTiles_Porygon, + .size = 0x2800, + .tag = PAL_TAG_PORYGON, +}; + +static const struct SpritePalette sSpritePalette_DizzyEgg = { + .data = sSpritePal_DizzyEgg, + .tag = PAL_TAG_DIZZY, +}; + +static const struct SpritePalette sSpritePalette_Porygon = { + .data = sSpritePal_Porygon, + .tag = PAL_TAG_PORYGON, +}; + +static const struct OamData sOamData_DizzyEgg = { + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .priority = 0, +}; + +static const struct OamData sOamData_Porygon = { + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_DizzyEgg = { + .tileTag = TAG_DIZZY, + .paletteTag = PAL_TAG_DIZZY, + .oam = &sOamData_DizzyEgg, + .anims = sAnimCmdTable_DizzyEgg, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbacK_DizzyWalking, +}; + +static const struct SpriteTemplate sSpriteTemplate_Porygon = { + .tileTag = TAG_PORYGON, + .paletteTag = PAL_TAG_PORYGON, + .oam = &sOamData_Porygon, + .anims = sAnimCmdTable_Porygon, + .images = NULL, + .affineAnims = sAffineAnimCmdTable_Porygon, + .callback = SpriteCallback_PorygonFlying, +}; + +enum {BG_0, BG_1, BG_2, BG_3}; + +static const struct BgTemplate sBgTemplates_RhhCopyrightScreen[] = { + [BG_0] = { + .bg = BG_0, + .charBaseIndex = 3, + .mapBaseIndex = 24, + .screenSize = 2, + .paletteMode = 0, + .priority = 0, + .baseTile = 0, + }, + [BG_1] = { + .bg = BG_1, + .charBaseIndex = 3, + .mapBaseIndex = 24, + .screenSize = 2, + .paletteMode = 0, + .priority = 0, + .baseTile = 0, + }, + [BG_2] = { + .bg = BG_2, + .charBaseIndex = 1, + .mapBaseIndex = 20, + .screenSize = 2, + .paletteMode = 1, + .priority = 0, + .baseTile = 0, + }, + [BG_3] = { + .bg = BG_3, + .charBaseIndex = 0, + .mapBaseIndex = 22, + .screenSize = 2, + .paletteMode = 0, + .priority = 0, + .baseTile = 0, + }, +}; + +static EWRAM_DATA u8 sDizzyId = 0; +static EWRAM_DATA u8 sPoryId = 0; + +static void Task_ShowRhhCredits(u8 taskId); + +void RhhIntro_InitCopyrightBgs() +{ + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, sBgTemplates_RhhCopyrightScreen, ARRAY_COUNT(sBgTemplates_RhhCopyrightScreen)); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_EFFECT_DARKEN); + SetGpuReg(REG_OFFSET_BLDY, 0x1F); + HideBg(0); + HideBg(1); + HideBg(2); + ShowBg(3); +} + +void RhhIntro_LoadCopyrightBgGraphics() +{ + LZ77UnCompVram(sBgTiles_PoweredBy, (void*) BG_CHAR_ADDR(sBgTemplates_RhhCopyrightScreen[BG_3].charBaseIndex)); + LZ77UnCompVram(sBgMap_PoweredBy, (u16*) BG_SCREEN_ADDR(sBgTemplates_RhhCopyrightScreen[BG_3].mapBaseIndex)); + LZ77UnCompVram(sBgTiles_RhhCredits, (void*) BG_CHAR_ADDR(sBgTemplates_RhhCopyrightScreen[BG_2].charBaseIndex)); + LZ77UnCompVram(sBgMap_RhhCredits, (u16*) BG_SCREEN_ADDR(sBgTemplates_RhhCopyrightScreen[BG_2].mapBaseIndex)); + LoadCompressedPalette(sBgPal_Credits, 0x00, 0x60); +} + +void RhhIntro_LoadCopyrightSpriteGraphics() +{ + LoadCompressedSpriteSheet(&sSpriteSheet_DizzyEgg); + LoadCompressedSpriteSheet(&sSpriteSheet_Porygon); + LoadSpritePalette(&sSpritePalette_DizzyEgg); + LoadSpritePalette(&sSpritePalette_Porygon); +} + +void RhhIntro_CreateCopyRightSprites() +{ + sDizzyId = CreateSprite(&sSpriteTemplate_DizzyEgg, 0, DIZZY_POS_Y, 0); + gSprites[sDizzyId].pos2.x = DIZZY_POS_X; + + sPoryId = CreateSprite(&sSpriteTemplate_Porygon, 0, PORY_POS_Y, 0); + gSprites[sPoryId].pos2.x = PORY_POS_X; +} + +void RhhIntro_ShowRhhCredits() +{ + ShowBg(2); + CreateTask(Task_ShowRhhCredits, 0); +} + +static void Task_ShowRhhCredits(u8 taskId) +{ + if (GetGpuReg(REG_OFFSET_BLDY) != 0) + { + SetGpuReg(REG_OFFSET_BLDY, GetGpuReg(REG_OFFSET_BLDY) - 1); + } + else + { + SetGpuReg(REG_OFFSET_BLDCNT, 0); + DestroyTask(taskId); + } +} + +#define sTimer data[0] +static void SpriteCallbacK_DizzyWalking(struct Sprite* sprite) +{ + sprite->pos2.x--; + + if (sprite->pos2.x <= DIZZY_COLLISION_POS_X) + { + StartSpriteAnim(sprite, ANIM_DIZZY_DIZZY); + sprite->callback = SpriteCallbackDummy; + } + + if (sprite->sTimer % 16 == 0 && sprite->sTimer / 16 > 2) + PlaySE(SE_BIKE_HOP); + + sprite->sTimer++; +} + + +static void SpriteCallback_PorygonHit(struct Sprite* sprite) +{ + sprite->pos2.x-=2; + sprite ->pos2.y = Sin2(180 + sprite->sTimer * 4) / 128; + + if (sprite->sTimer >= 48) + { + StartSpriteAnim(sprite, ANIM_PORY_GO_UP); + sprite->callback = SpriteCallbackDummy; + } + + + if (sprite->sTimer % 8 == 0) + { + if (sprite->sTimer % 16 == 0) + LoadPalette(sSpritePal_PorygonShiny, 0x10 * (16 + sprite->oam.paletteNum), 0x20); + else + LoadPalette(sSpritePal_Porygon, 0x10 * (16 + sprite->oam.paletteNum), 0x20); + } + + sprite->sTimer++; +} + +static void SpriteCallback_PorygonFlying(struct Sprite* sprite) +{ + if (sprite->sTimer >= PORYGON_WAIT_TIME) + { + sprite->pos2.x += 6; + + if (sprite->sTimer % 32 >= 16) + sprite->pos2.y--; + else + sprite->pos2.y++; + + if (sprite->pos2.x >= PORYGON_COLLISION_POS_X) + { + StartSpriteAnim(sprite, ANIM_PORY_HIT); + sprite->callback = SpriteCallback_PorygonHit; + sprite->sTimer = 0; + PlaySE(SE_M_DOUBLE_SLAP); + } + } + sprite->sTimer++; +} +#undef sTimer + +void RhhIntro_DestroyRhhCreditSprites() +{ + DestroySpriteAndFreeResources(&gSprites[sDizzyId]); + DestroySpriteAndFreeResources(&gSprites[sPoryId]); +} diff --git a/src/sound.c b/src/sound.c index 5d34f0eb42..daff5d82bb 100644 --- a/src/sound.c +++ b/src/sound.c @@ -40,7 +40,7 @@ static void CreateFanfareTask(void); static void Task_DuckBGMForPokemonCry(u8 taskId); static void RestoreBGMVolumeAfterPokemonCry(void); -static const struct Fanfare sFanfares[] = { +const struct Fanfare sFanfares[] = { [FANFARE_LEVEL_UP] = { MUS_LEVEL_UP, 80 }, [FANFARE_OBTAIN_ITEM] = { MUS_OBTAIN_ITEM, 160 }, [FANFARE_EVOLVED] = { MUS_EVOLVED, 220 }, @@ -59,10 +59,22 @@ static const struct Fanfare sFanfares[] = { [FANFARE_OBTAIN_B_POINTS] = { MUS_OBTAIN_B_POINTS, 313 }, [FANFARE_OBTAIN_SYMBOL] = { MUS_OBTAIN_SYMBOL, 318 }, [FANFARE_REGISTER_MATCH_CALL] = { MUS_REGISTER_MATCH_CALL, 135 }, + [FANFARE_RG_HEAL] = { MUS_RG_HEAL, 170 }, + [FANFARE_CABLE_CAR] = { MUS_CABLE_CAR, 170 }, }; #define CRY_VOLUME 120 // was 125 in R/S +int IsInFanfares(u16 songNum) { + int i; + + for(i = 0; i < ARRAY_COUNT(sFanfares); i++) { + if (sFanfares[i].songNum == songNum) + return TRUE; + } + return FALSE; +} + void InitMapMusic(void) { gDisableMusic = FALSE; diff --git a/src/speedchoice.c b/src/speedchoice.c index bc3a70f4e9..43e41768ac 100644 --- a/src/speedchoice.c +++ b/src/speedchoice.c @@ -103,7 +103,7 @@ const u8 gSystemText_TerminatorS[] = _("{COLOR RED}$"); /* SPEEDCHOICE MENU TEXT (Header Text) */ /* ----------------------------------------------- */ const u8 gSpeedchoiceTextHeader[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}EX SPEEDCHOICE MENU"); -const u8 gSpeedchoiceCurrentVersion[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}v0.2.7"); +const u8 gSpeedchoiceCurrentVersion[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}v0.3.0"); /* ----------------------------------------------- */ /* SPEEDCHOICE MENU TEXT (Option Choices) */ @@ -169,6 +169,8 @@ const u8 gSpeedchoiceOptionFastEggHatch[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN} const u8 gSpeedchoiceOptionGen7XItems[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}GEN 7 X ITEMS"); const u8 gSpeedchoiceOptionEvoEveryLv[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}EVO EVERY LV"); const u8 gSpeedchoiceOptionInverseBattles[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}INVERSE BATTLES"); +const u8 gSpeedchoiceOptionShuffleMusic[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}SHUFFLE MUSIC"); +const u8 gSpeedchoiceOptionDebug[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}DEBUG MENUS"); // CONSTANT OPTIONS const u8 gSpeedchoiceOptionPage[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}PAGE"); @@ -210,6 +212,8 @@ const u8 gSpeedchoiceTooltipFastEggHatch[] = _("Makes eggs hatch quickly."); const u8 gSpeedchoiceTooltipGen7XItems[] = _("Stat boost +2 instead of +1."); const u8 gSpeedchoiceTooltipEvoEveryLv[] = _("{PKMN} evolve into a random\nbut set species every lv."); const u8 gSpeedchoiceTooltipInverseBattles[] = _("Inverse battles mechanic is\nenabled.\pSwitches type effectiveness."); +const u8 gSpeedchoiceTooltipShuffleMusic[] = _("Randomly shuffles music and \nfanfares between others."); +const u8 gSpeedchoiceTooltipDebug[] = _("Enables the debug menus for\ntroubleshooting.\pR+Start in the field for the\nField Debug menu.\pSelect in battle for the Battle\nDebug Menu."); // START GAME const u8 gSpeedchoiceStartGameText[] = _("CV: {STR_VAR_1}\nStart the game?"); @@ -263,7 +267,9 @@ static const u8 gPresetVanilla[CURRENT_OPTIONS_NUM] = { FAST_CATCH_OFF, // FAST_CATCH EARLY_BIKE_NO, // EARLY_BIKE EVO_EV_OFF, // EVO_EVERY_LEVEL - INV_BATTLES_OFF // INVERSE_BATTLES + INV_BATTLES_OFF, // INVERSE_BATTLES + SHUFFLE_MUSIC_OFF, // SHUFFLE_MUSIC + DEBUG_MENUS_OFF // DEBUG_MENUS }; static const u8 gPresetBingo[CURRENT_OPTIONS_NUM] = { @@ -281,7 +287,9 @@ static const u8 gPresetBingo[CURRENT_OPTIONS_NUM] = { FAST_CATCH_OFF, // FAST_CATCH GEN_7_X_ITEMS_ON, // GEN_7_X_ITEMS EVO_EV_OFF, // EVO_EVERY_LEVEL - INV_BATTLES_OFF // INVERSE_BATTLES + INV_BATTLES_OFF, // INVERSE_BATTLES + SHUFFLE_MUSIC_OFF, // SHUFFLE_MUSIC + DEBUG_MENUS_OFF // DEBUG_MENUS }; static const u8 gPresetCEA[CURRENT_OPTIONS_NUM] = { @@ -299,7 +307,9 @@ static const u8 gPresetCEA[CURRENT_OPTIONS_NUM] = { FAST_CATCH_ON, // FAST_CATCH GEN_7_X_ITEMS_ON, // GEN_7_X_ITEMS EVO_EV_OFF, // EVO_EVERY_LEVEL - INV_BATTLES_OFF // INVERSE_BATTLES + INV_BATTLES_OFF, // INVERSE_BATTLES + SHUFFLE_MUSIC_OFF, // SHUFFLE_MUSIC + DEBUG_MENUS_OFF // DEBUG_MENUS }; static const u8 gPresetRace[CURRENT_OPTIONS_NUM] = { @@ -317,7 +327,9 @@ static const u8 gPresetRace[CURRENT_OPTIONS_NUM] = { FAST_CATCH_OFF, // FAST_CATCH GEN_7_X_ITEMS_ON, // GEN_7_X_ITEMS EVO_EV_OFF, // EVO_EVERY_LEVEL - INV_BATTLES_OFF // INVERSE_BATTLES + INV_BATTLES_OFF, // INVERSE_BATTLES + SHUFFLE_MUSIC_OFF, // SHUFFLE_MUSIC + DEBUG_MENUS_OFF // DEBUG_MENUS }; static const u8 gPresetMeme[CURRENT_OPTIONS_NUM] = { @@ -335,7 +347,9 @@ static const u8 gPresetMeme[CURRENT_OPTIONS_NUM] = { FAST_CATCH_OFF, // FAST_CATCH GEN_7_X_ITEMS_OFF, // GEN_7_X_ITEMS EVO_EV_ON, // EVO_EVERY_LEVEL - INV_BATTLES_ON // INVERSE_BATTLES + INV_BATTLES_ON, // INVERSE_BATTLES + SHUFFLE_MUSIC_ON, // SHUFFLE_MUSIC + DEBUG_MENUS_ON // DEBUG_MENUS }; /* @@ -648,6 +662,28 @@ const struct SpeedchoiceOption SpeedchoiceOptions[CURRENT_OPTIONS_NUM + 1] = // /* Option Usable */ TRUE }, // ---------------------------------- + // SHUFFLE_MUSIC OPTION + // ---------------------------------- + { + /* Option Count */ 2, + /* Option Type */ NORMAL, + /* Option Preset */ gSpeedchoiceOptionShuffleMusic, + /* Option Text */ OptionChoiceConfigOnOff, + /* Option Tooltip */ gSpeedchoiceTooltipShuffleMusic, + /* Option Usable */ TRUE + }, + // ---------------------------------- + // DEBUG_MENUS OPTION + // ---------------------------------- + { + /* Option Count */ 2, + /* Option Type */ NORMAL, + /* Option Preset */ gSpeedchoiceOptionDebug, + /* Option Text */ OptionChoiceConfigOnOff, + /* Option Tooltip */ gSpeedchoiceTooltipDebug, + /* Option Usable */ TRUE + }, + // ---------------------------------- // PAGE STATIC OPTION // ---------------------------------- { @@ -721,6 +757,8 @@ void SetOptionChoicesAndConfigFromPreset(const u8 *preset) gSaveBlock2Ptr->speedchoiceConfig.gen7XItems = preset[GEN_7_X_ITEMS]; gSaveBlock2Ptr->speedchoiceConfig.evoEveryLevel = preset[EVO_EVERY_LEVEL]; gSaveBlock2Ptr->speedchoiceConfig.inverseBattles = preset[INVERSE_BATTLES]; + gSaveBlock2Ptr->speedchoiceConfig.shuffleMusic = preset[SHUFFLE_MUSIC]; + gSaveBlock2Ptr->speedchoiceConfig.debugMenus = preset[DEBUG_MENUS]; } /* @@ -759,6 +797,10 @@ bool8 CheckSpeedchoiceOption(u8 option, u8 selection) return gSaveBlock2Ptr->speedchoiceConfig.evoEveryLevel == selection; case INVERSE_BATTLES: return gSaveBlock2Ptr->speedchoiceConfig.inverseBattles == selection; + case SHUFFLE_MUSIC: + return gSaveBlock2Ptr->speedchoiceConfig.shuffleMusic == selection; + case DEBUG_MENUS: + return gSaveBlock2Ptr->speedchoiceConfig.debugMenus == selection; default: return FALSE; } @@ -1298,6 +1340,8 @@ static void SaveSpeedchoiceOptions(u8 taskId) gSaveBlock2Ptr->speedchoiceConfig.gen7XItems = gLocalSpeedchoiceConfig.optionConfig[GEN_7_X_ITEMS]; gSaveBlock2Ptr->speedchoiceConfig.evoEveryLevel = gLocalSpeedchoiceConfig.optionConfig[EVO_EVERY_LEVEL]; gSaveBlock2Ptr->speedchoiceConfig.inverseBattles = gLocalSpeedchoiceConfig.optionConfig[INVERSE_BATTLES]; + gSaveBlock2Ptr->speedchoiceConfig.shuffleMusic = gLocalSpeedchoiceConfig.optionConfig[SHUFFLE_MUSIC]; + gSaveBlock2Ptr->speedchoiceConfig.debugMenus = gLocalSpeedchoiceConfig.optionConfig[DEBUG_MENUS]; // write the playername. for (i = 0; i < PLAYER_NAME_LENGTH; i++) { @@ -1366,6 +1410,8 @@ static void Task_SpeedchoiceMenuFadeOut(u8 taskId) } } +extern int gShuffleMusic; + /* * Prompt the Yes/No menu choice to determine if the run/race is started. */ @@ -1380,6 +1426,19 @@ static void Task_AskToStartGame(u8 taskId) SaveSpeedchoiceOptions(taskId); BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); gTasks[taskId].func = Task_SpeedchoiceMenuFadeOut; + if(CheckSpeedchoiceOption(SHUFFLE_MUSIC, SHUFFLE_MUSIC_ON) == TRUE) + gShuffleMusic = TRUE; + // start the timers here! + gSaveBlock1Ptr->doneButtonStats.frameCount = 0; + gSaveBlock1Ptr->doneButtonStats.owFrameCount = 0; + gSaveBlock1Ptr->doneButtonStats.battleFrameCount = 0; + gSaveBlock1Ptr->doneButtonStats.menuFrameCount = 0; + gSaveBlock1Ptr->doneButtonStats.introsFrameCount = 0; + gFrameTimers.frameCount = 0; + gFrameTimers.owFrameCount = 0; + gFrameTimers.battleFrameCount = 0; + gFrameTimers.menuFrameCount = 0; + gFrameTimers.introsFrameCount = 0; break; case 1: // NO case -1: // B button diff --git a/src/start_menu.c b/src/start_menu.c index 33528a79d2..e250d3efbf 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -251,7 +251,7 @@ static bool8 SaveSuccesTimer(void); static bool8 SaveErrorTimer(void); static void InitBattlePyramidRetire(void); static void VBlankCB_LinkBattleSave(void); -static bool32 InitSaveWindowAfterLinkBattle(u8 *par1); +static bool32 InitSaveWindowAfterLinkBattle(u16 *par1); static void CB2_SaveAfterLinkBattle(void); static void ShowSaveInfoWindow(void); static void RemoveSaveInfoWindow(void); @@ -1303,7 +1303,7 @@ static void VBlankCB_LinkBattleSave(void) TransferPlttBuffer(); } -static bool32 InitSaveWindowAfterLinkBattle(u8 *state) +static bool32 InitSaveWindowAfterLinkBattle(u16 *state) { switch (*state) { diff --git a/src/trainer_see.c b/src/trainer_see.c index 6a0cb70bfb..faf9b8797c 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -328,7 +328,7 @@ bool8 CheckForTrainersWantingBattle(void) { u8 i; - if ((gDebugSystemEnabled == TRUE) && FlagGet(FLAG_SYS_NO_TRAINER_SEE)) + if ((CheckSpeedchoiceOption(DEBUG_MENUS, DEBUG_MENUS_ON) == TRUE) && FlagGet(FLAG_SYS_NO_TRAINER_SEE)) return FALSE; gNoOfApproachingTrainers = 0; diff --git a/sym_ewram.txt b/sym_ewram.txt index a077b3c216..2175d08b6a 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -155,3 +155,5 @@ .include "src/title_screen.o" .include "src/boot_error_screen.o" .include "src/debug.o" + .include "src/rhh_copyright.o" + .include "src/m4a.o"