From 99e3455ef95518c45256eb589a0bb425902f43c3 Mon Sep 17 00:00:00 2001 From: Grind Date: Fri, 1 Jul 2016 19:56:44 -0400 Subject: [PATCH] Possible to reach labyrinth --- inc/ai.h | 9 ++++++++ res/back/bkGard.bmp | Bin 1662 -> 1722 bytes res/back/bkMaze.bmp | Bin 2174 -> 2234 bytes res/face/face13.png | Bin 0 -> 672 bytes res/face/face15.png | Bin 502 -> 507 bytes res/face/face16.png | Bin 507 -> 513 bytes res/face/face26.png | Bin 510 -> 513 bytes res/resources.res | 10 ++++++++- res/sprite/booster.png | Bin 0 -> 545 bytes res/sprite/doctor.png | Bin 0 -> 801 bytes res/sprite/jenka.png | Bin 0 -> 316 bytes res/sprite/skullstep.png | Bin 0 -> 449 bytes res/sprite/toroflower.png | Bin 0 -> 392 bytes res/sprite/torokoboss.png | Bin 0 -> 1543 bytes src/ai/door.c | 9 ++++++-- src/ai/item.c | 24 +++++++++++++++------- src/ai/sand.c | 23 +++++++++++++++++++++ src/ai/weed.c | 4 ++++ src/db/back.c | 6 +++--- src/db/face.c | 2 +- src/db/npc.c | 42 +++++++++++++++++++------------------- src/db/stage.c | 4 ++-- 22 files changed, 96 insertions(+), 37 deletions(-) create mode 100644 res/face/face13.png create mode 100644 res/sprite/booster.png create mode 100644 res/sprite/doctor.png create mode 100644 res/sprite/jenka.png create mode 100644 res/sprite/skullstep.png create mode 100644 res/sprite/toroflower.png create mode 100644 res/sprite/torokoboss.png diff --git a/inc/ai.h b/inc/ai.h index 74a2ab64..4d762cd6 100644 --- a/inc/ai.h +++ b/inc/ai.h @@ -234,6 +234,8 @@ void ai_malco_onState(Entity *e); void ai_malcoBroken_onCreate(Entity *e); void ai_malcoBroken_onState(Entity *e); +void ai_powerc_onCreate(Entity *e); + /* Sand Zone - sand.c */ void ai_omega_onCreate(Entity *e); @@ -244,4 +246,11 @@ void ai_sunstone_onCreate(Entity *e); void ai_sunstone_onUpdate(Entity *e); void ai_sunstone_onState(Entity *e); +void ai_puppy_onCreate(Entity *e); +void ai_puppy_onUpdate(Entity *e); + +void ai_torokoBoss_onCreate(Entity *e); +void ai_torokoBoss_onUpdate(Entity *e); +void ai_torokoBoss_onState(Entity *e); + #endif /* INC_AI_H_ */ diff --git a/res/back/bkGard.bmp b/res/back/bkGard.bmp index 1cec51fc24a1478187a601de9d007f5ceaf733ca..822490e813cf51e41edca135235aa00ae5c93d49 100644 GIT binary patch literal 1722 zcmb7^Jqsr_5Qn2DHX>XQ1Ird-ZDS!=dR%cUJ0*pM_7OBjpKUA zr>@5zfA+PO{*S!+ALU=d?+OyagI~j=x4#YVK6x|TKYcHJ@Z`(z_br4EpMDfR|E7j_ zo{jM158sC`elFp={kIT)`Xl`L*Nf20(waq+#F#9nm~yf?%i5bI=Q*;Tqp>`vt#dR! z5O}oABiT)Swl+bDE7rv7#iO+$<(OL46SochUC${qcXjX@XPh4P2;gRBrRF`ZCnr-E zr8jMlarR@ygWxAy+d7YVEnNDgRWiZq3~?CXzEyHd7SDyteO{`PHcRg5*aWd6oUnH? z;mfgS5VLq3s)J-HQl=K>yv=P=KE!R{!}*;moRO2Pa+<`=E#9t$tUaepoymtc=aY6h z$KGO*t5pjfPLEe`CyF$Aqc+{4$tRCE}|!$2F>pTXR;+b-j2w4Ycm2k%vh1$P@kA7pj7s$%0b3Nr2RHaXzwTn3 literal 1662 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 F{U0vX_$dGY diff --git a/res/face/face13.png b/res/face/face13.png new file mode 100644 index 0000000000000000000000000000000000000000..4e3b93b99b240ae45e924d0990c8b2e6bea3e141 GIT binary patch literal 672 zcmV;R0$=@!P)WNXEmARSS}m!BQn|6QYin=Qv69-t0RR90T^;_}0006j zNkly=ogl5C?F*!eER!Sr8EJLpbyR3QCaeG(l|PKBP|-lv;%#ML2{Idl7^y zcjd-il07&KDnf3-459P2Cl;n zFnbC^IuDg|<@WW(F^uOkRG^iom;H+a)aX&Zt9GvRzTf|_hi}r|xgGMya2-k)ToeB7 z$Nh|l@PPK1%%AdTtE#Nfi@Tw&^m`aPAHuGDtScGiw?}}~Uu!pVy8qL{kf>`VHeBL; z14Cr9Mr18Ni*W9c$s|uiHDD_+viqWD?!@1 zd%%nVec1rr4NoriP?s+tS(1Hs9>37&wPom4JEER1h&Y?^-x0c1xFhEZ4fsJlcTZRg zaFyU8LinB8;?@)Xy^ll!c_vSUD~gS~BRm?KX@G1mQRI$mf1UY6z$8YqX9rhe{gs5LjV8)hDk(0R5;6Z)G=I`&B!GU!?HmVq$P2c&R!mnCV*mI9ZP;xkFv3f=Tuc#ic)lNV>m;VW=Z z#BqZFRjhEXuY<|po`8!rdkK=#>~zpB3hR9v*cA*;&=s{Z7^KOJ0Bx2gf3@gF1_I!` z8jxse1*iryW`i>+fDdS537!|-m&}s>I*=kB_;gfC&_$9hv4@)h9X$3Qdmj!4>@7*p873gl4 z7-t6KGEfnNH~0_W3S$Y#e~`CZ!i)}weUMX0a40Jc#k*>2FfM^{a^=`RgBk3WdKzjp+hU5rz$I4fqER=5i2`WDdn zA!sb4u6qG;IU95*xUtJ1h0m69Il)`Fr!66HJ3Vi;6qX(6^Y*ksSb6(+e_^V?X1m3_ z3Xn?>ikLj{KfpW8C9pu6e{KmYJD!dK<=rDZmzAbs&CfNEi$J~J>0ckZkWy!uA`Fwx zcYS%hTZ;rX(DvVt4@nS+rEHL1CGLd?7Ph>);kpQ}I(q|lXZDebRH7qAYX>1^#`#3mbQ?K Y9~Ne4L0$ykIsgCw07*qoM6N<$f{DAmYXATM diff --git a/res/face/face16.png b/res/face/face16.png index 9f1c2b3a1e1b5d45971e3a005f8b0513b7e69eec..7cada619cc9b01fc9c0067bddd6bc4dd835c63b1 100644 GIT binary patch delta 441 zcmV;q0Y?7&1AzpPDFfU9>X9rhe{gs5LjV8)j7da6R5;6Z)H`m3Fc1ddy~0>>kpe}~ zZGmzY7cNpHQjWC6790ztEw&i>1R)|lnfzn0G5eSb^LfVhAan3rkcM3chxFD_jvY`L zb_3c+21j>tc$A>Uo&YW2od(yKvb2WOSAzXM9A9%e~V0&g6zSB z1oaId<5!_K%?5E&kXgZq>;UtE7@3G?roI3U@+zb-&@KZ@V0DzaU3}Ts8=zw19nfn` z>cho<)a3!OxIz^yxdJN8QxJu(DL2vRya*HTK`@LUGdE5B5Qe5{HsByB!VEBV0x4o> z3_k&0z{O+dQo?|Ajtt|dfBQl!OWJG79$_#WT3gl%8gYAO{U(ovZE{At&(%-S$Uf?1)s9cXMzFQ*mC`=ZV0 zQYo^yaxRs-b_&)VytAH)b*|m%WaH&@-rE(-Q4_lE9Ivxot|#*7E7&b@w)xM1dPwc= jA*Q`&DE~f)E(ZqxJbk+suQn8_00000NkvXXu0mjfD67bj delta 435 zcmV;k0ZjgZ1p5P!DFXli0Ff*$e_!p|D*ylihDk(0R5;6Z)Uj@aFboD@A5zCt&)!cW z?5MBOg|Ss1nIhe2!heX%&1bqBX2n6VkLMz%&z^?|(RRNYo2Vh+p0^SMy z7qDgz05=GaAU7y_WguR#FCq@avQR|4mS98lQ9%$jR|AVIR|BbmqC*R(e+o45V=y+| zk z;s?MRg!DRcD`5qHjtui`fAiw00-ol1{!$1W9CV@9+b}46s~4~KY=Plj!Gb#59jLWO z+XA9}dLN^odX?XFePt}+n3qn~Tcrbk6z0$T`Rv~w+k&wME<4owwa1HpSJi&8#qd_T zU&v$3BN*7S2kNjGXN1#<(&h|ZNB+BLEdbD@?M&PD)EwGZn1J%1B|-aX6z(C#+6?92 d$BuL9$sZPX9rhe{gs5LjV8)j7da6R5;6Z)Uj^EAP@jh|H7Tb(7~!e z%1HAqMDmcapOhhkKMQXiPW(ZoWVfz&2HTjVrwlc(+yOq^4SQUiMtSJAQP|>CgM}*0 z4seW9feW-z;ALErb#4B2%0H>#v_L3NSmio^-vR65NY$jSDxu)*3n26ge^Uja6i^^) z0aJVdo8j4$6^IS=Y3}(Q_{0-OfvKq>F!Ll}8z7dLE!lQelsGX%^zi@)o>_hoblmRX z0nhB1A7Etgu>mTbCw@|I;JXG*kYrU96{=K^V33j!&*Z@E8x$xDo}2>OF25&P>>6nX zhoo>>x3>m3T0l#s7No}VfBtHidnYH^4PZhGdSYEzs()4xv1*3C{4+Vvk_T-8w97cT zuirCE9zT_x`$>O^;C3@|pSLfA!f@3I<9LValM&&z3fioj67+;lpwR18^D&f5Qo%Vd_j!LA6ym5I06H{Jh77nqC?*2_1oF|qJ~AQh g9nK&_fIZ~<4=9Z{*%$z#NB{r;07*qoM6N<$f~{!6rT_o{ diff --git a/res/resources.res b/res/resources.res index 41007ce7..d0473108 100644 --- a/res/resources.res +++ b/res/resources.res @@ -9,6 +9,7 @@ PALETTE PAL_Gunsmith "sprite/gunsmith.png" 3 PALETTE PAL_Plant "sprite/flower.png" 3 PALETTE PAL_Frog "sprite/balfrog1.png" 3 PALETTE PAL_Chaco "sprite/chaco.png" 3 +PALETTE PAL_Jenka "sprite/jenka.png" 3 # ---------------------------------------------------------------------------------------------- # Sprites @@ -98,6 +99,8 @@ SPRITE SPR_TeleLight "sprite/telelight.png" 2 2 0 0 NONE SPRITE SPR_Puppy "sprite/puppy.png" 2 2 0 8 NONE SPRITE SPR_Table "sprite/table.png" 3 2 0 0 NONE SPRITE SPR_ManShot "sprite/manshot.png" 2 3 0 4 NONE +SPRITE SPR_Skullhead "sprite/skullstep.png" 4 3 0 0 NONE + # Use Same Palette as Stage SPRITE SPR_CritHB "sprite/critcave.png" 2 2 0 0 NONE @@ -130,6 +133,11 @@ SPRITE SPR_Crow "sprite/crow.png" 4 4 0 12 NONE SPRITE SPR_Armadl "sprite/armadillo.png" 4 2 0 10 NONE SPRITE SPR_Omega "sprite/omega.png" 10 8 0 0 NONE SPRITE SPR_OmegaLeg "sprite/omegaleg.png" 4 4 0 0 NONE +SPRITE SPR_Booster "sprite/booster.png" 2 2 0 10 NONE +SPRITE SPR_Jenka "sprite/jenka.png" 2 2 0 0 NONE +SPRITE SPR_Doctor "sprite/doctor.png" 3 4 0 12 NONE +SPRITE SPR_ToroBoss "sprite/torokoboss.png" 4 4 0 12 NONE +SPRITE SPR_ToroFlower "sprite/toroflower.png" 2 2 0 8 NONE # Use PAL_Gunsmith SPRITE SPR_Gunsmith "sprite/gunsmith.png" 2 2 0 0 NONE @@ -184,7 +192,7 @@ TILESET TS_Face09 "face/face09.png" 2 TILESET TS_Face10 "face/face10.png" 2 TILESET TS_Face11 "face/face11.png" 2 TILESET TS_Face12 "face/face12.png" 2 - +TILESET TS_Face13 "face/face13.png" 2 TILESET TS_Face14 "face/face14.png" 2 TILESET TS_Face15 "face/face15.png" 2 TILESET TS_Face16 "face/face16.png" 2 diff --git a/res/sprite/booster.png b/res/sprite/booster.png new file mode 100644 index 0000000000000000000000000000000000000000..41d32553c59a950eaa277e9d2f4f5c6aa1a41a86 GIT binary patch literal 545 zcmV++0^a?JP)02PU_s7P9-w0}zyoNM7me00>qjqE#IV)nunpuiObX2oj>cyeu_g0@>@v3npi7P|*RW3f9E z8jIbT&{*uwgvMfbCNvhiGoi8AExFKG?3P?;EOrls#$tCSG#0xvp|QCc?3P?8T$3B( zkaO|G->96_z59|2Zhu-%er`TcTL1Imm&}I=d3Z16f!wyR)rU7Ah!?lkC@_)D0)k-U z9tu3uP*7b2-^&BJ>scG$$U=!(=d8tfCI$JFqMjsK=MCZiV*S(@`9=<^c^Yu5jJ?6 zDPBgBSGo_~aZqrIgt&T-!)R>j9bHe7gwN7Bm#|N5t*t3IeYW+Efc?V*2lc1Oif#`I ziU?@@ha&}dAK!kl45Z)6a_uSt%JSWY{rL3BlmSeatjhAqG0@09EFjkkU@M*gk>mCh z1CN%1{q`gh1D*pBUqyhM0UF7-XKUGte9QKZgGS7)fNOy)$wOaQW6V7PHa9k(1JDoU z3i_d3K|ho$=!bFz{ZOu;AIcT5yP5clK zN}wM~32c-S*eE5iQA%K=l)y$!J~mOHl)y$!J~mOH1{|CDpjTo;{CHzP3G_p`f*L3# zBH*u#k6k1_3KxqHsd#)e;(2_~_in31EovPOjv*d8XehfJb`orM;AJ(C$71 zcoP8oR{H>ifG}eLNCf!E3Yi6xC|Gw!RU`~@9uo`OZgWrPHx77yw17?Aznvc$G|Uq!2Ma^qM(i(emYQ*|Lv~e=O}9ndP|yf!S9tw6u6s$nw>v< z1YA9T%me6$as~ZRuAl}=i7R0AL%D()C?&3e!4KsM`Vs1JbMzxMU&kkaex%>Q71SU_ zB@nC#aFYSQDR2Os0yPEbM}rcf9}Xo#KboQ*B|<-%Gf0GfC|7XW)#U#ssNK{R^h3LH fEkA}vDM7$b)2xg|V;02)00000NkvXXu0mjfi=1c< literal 0 HcmV?d00001 diff --git a/res/sprite/jenka.png b/res/sprite/jenka.png new file mode 100644 index 0000000000000000000000000000000000000000..c511f59ebf253754984fbe24c17784e8dc92b9f7 GIT binary patch literal 316 zcmV-C0mJ@@P)T%~}0000mP)t-s+yLqT z008#@08SDD5IP+-EeN1mN>WNXEmARSS}m!BQn|6QYin=Qv69-t0RR90T^;_}0002T zNklGWkSh9-})?*oiM`aRE9y5A^ ze>^`N-??1u#_g+NF?`38`&ysUm9~zY{pQui*;j0Aq~Iiv$m4|LQ*K_|ynR???Ka>5 O0000YXpJk=)ra(+$`U058&knP02iEHqU`!5@H@M z{_NiSx3>MJU@=_z;bceK0!hh@Cs-EOgJlLLKdM^Bf?mjwxH6a)37oV7h!u)}1-esx zt?R4oQo$1;qen!ss6rpi>PUz_oF(>D>+|T)chO&tpK(d=doF2n-*HKs=Dz3h_4yCE zm=`a@F9`>JQF>{rGV8lES=ddIPAt##I7@~f+AP_o-Z6|bP8 r&M2tBX$CcN!wHn4-1eg*+j>6%xGRVs7i);~00000NkvXXu0mjf$1}?< literal 0 HcmV?d00001 diff --git a/res/sprite/toroflower.png b/res/sprite/toroflower.png new file mode 100644 index 0000000000000000000000000000000000000000..4be0b81a7a1b64e19df6c709401b024dec93a513 GIT binary patch literal 392 zcmV;30eAk1P)U5Jio&1){LlT||+y1c@TYTBI#3ikyLTXbRsUH%Zzl{u%bq1aFdN zH>Mb4-kbSA2>-4qvV`y!C-SEOI3N}LH6mX4j>qu2&IQi~UOPu!PX<78mU7+9%~+nI zh!Vgxs@1!(p3JD7YZPIpf+ebtMyN)F+QCwV4p?XIB1l0>s7ACbTGT;nfKs3;LHSS_ zrW)}c0X0g*4Y>8}omfAaWivWe)*_E64S{4Jmx0v~>#UFP;Q5(ElP;V%gfO$Eg|6X4JEd2SXpU3ciKGWbVVfLIOG%eCSt7zz4w`=2bf2n;7~T_8h{z zf_w47AcD54q_!PLRT_3+Ckd@fqVi|8e(F!vR_YJ6rjIdpyg)~4te}rk7QlZb3PBYG zI`>V;-#8b1Fu+3hD#WcS3G{`*@h+|&#u3g0{lyjbhffdDtCHZy-wT@Z(+Hdko_^*< z`3#&18d{Jsmm_d4Xkfzk#+W{gz?nb?;ukS=2{;$%kalfjjn2SxfexJx-dbzsx>F@V z=ssHP#!Z_xDkv0~zeYi?_U>*D&-86ROdZ{wF)awvkU9c^eVg`y1ao^7#JIP)-;IJB zdm@N&1AQA#fGk+~JZ#Zy+b;i$lbx?8HFvb!j2^?F@i{^a2ok3zI4ALf%Mo*|jB8&|5`IFyN$Y z(N?w!J|G`9w+Cx{-pCh#kBZip4>Xd)fEmVX=CJVb_#DrkCJ{#ma{h!qISkwi1_(H~ zhri)H8_pQJIYN(0%NfoGV^FIut^zZJPN5lNciA{&0x&d}w|WfC9MGJ^?xOo9+r-d} zvAYCNXkL(A@Bn<;qss6A1)xqdKvKCww0{Y}H&bwL89+IE17-!LQQqpUat>m(UD_1` z%$x(uTCVMi(TAB^BjD^c3)lp3Dy4U5noH+5tjZw(;lBn%#&|K$UcbQ2m~NDMs}~^v*GiX3Sd4(ULk0T zk37&EA}a&vIxt}JF98dA1a*9bwAEq51E_9bUV=)|g~G-iXa8z;XX4IA%LDFv43zD& zKuh77UFU553xKx*K&v>tP`pe+o?j@+)+;#(eRiQJWht0oy!#7<=5nZ0rDchOVFh7$ z0{X571Tlvh!1|ael3m7&FWd-2PEj6vMjamWBC0^(OfTo%3nr)S$hN_Qa0=DoGVduF z3&r%H%UcaPyD4sVhlc_AiETqUwTFo{`#13)-)&fH*%Qd|ba)98ShQ+c2mm;30} z^pLWH!8~hkb2))KY@Y$o?zFv0=^Cq0HVObD**ge{bwKanmE;~?zjv5|{}lY+TJXmw zcp8D3!@i{(1aIDPhmP_Dz{@n-JF+8;i|v-!iEg0~m)2dr^e ztKM+_a7-XnC4mrPFDbs5K=>$SAPJ~c7yR#4AO5HMTc#7 zkPVL?ApFe>i`i$y6|f3?){|57Yb1slCV6%lT#sC|dy-z}uTB4DbV8xs)_hK=LAhubPBO zbj~cCn07;wY3 z3y_oZ!U!E)6~n3x({WDi^|VI5O=ioer3X^j3!h{B=c_P8z#p4D^a6l|{U87hPNEZ+ zFe*sUK*!^9AoIL;l002ovPDHLkV1ina)&&3n literal 0 HcmV?d00001 diff --git a/src/ai/door.c b/src/ai/door.c index 8b84129b..52ee34c8 100644 --- a/src/ai/door.c +++ b/src/ai/door.c @@ -7,10 +7,15 @@ #include "tables.h" #include "tsc.h" -// When the door's direction is changed to be facing right it becomes -// transparent. The CNP command does this when Balrog barges into Barr void ai_door_onCreate(Entity *e) { + // When the door's direction is changed to be facing right it becomes transparent if(e->direction) e->spriteAnim = SPRITE_DISABLE; + u16 x = sub_to_block(e->x), y = sub_to_block(e->y); + if(stage_get_block_type(x, y + 1) != 0x41) { // Push down if too high + e->y += block_to_sub(1); + } else if(stage_get_block_type(x, y) == 0x41) { // Push up if too low + e->y -= block_to_sub(1); + } } void ai_door_onUpdate(Entity *e) { diff --git a/src/ai/item.c b/src/ai/item.c index 21f479bc..e9ff8422 100644 --- a/src/ai/item.c +++ b/src/ai/item.c @@ -27,22 +27,32 @@ void ai_energy_onUpdate(Entity *e) { } e->state = STATE_DELETE; } else { - // Bounce when hitting the ground - if(e->grounded) { - e->y_speed = pixel_to_sub(-2); - e->grounded = false; - sound_play(SOUND_EXPBOUNCE, 0); + if(++e->state_time > 15 * 60) { + e->state = STATE_DELETE; + return; + } else if(e->state_time > 12 * 60) { + SPR_SAFEVISIBILITY(e->sprite, (e->state_time & 3) > 1 ? VISIBLE : HIDDEN); } e->y_speed += GRAVITY; e->x_next = e->x + e->x_speed; e->y_next = e->y + e->y_speed; - s16 xsp = e->x_speed; - entity_update_collision(e); // Reverse direction when hitting a wall + s16 xsp = e->x_speed; + if(e->x_speed < 0) { + collide_stage_leftwall(e); + } else { + collide_stage_rightwall(e); + } if(e->x_speed == 0) { e->direction = !e->direction; e->x_speed = -xsp; } + // Bounce when hitting the ground + if(collide_stage_floor(e)) { + e->y_speed = pixel_to_sub(-2); + e->grounded = false; + sound_play(SOUND_EXPBOUNCE, 0); + } e->x = e->x_next; e->y = e->y_next; } diff --git a/src/ai/sand.c b/src/ai/sand.c index b4be24de..b8830d68 100644 --- a/src/ai/sand.c +++ b/src/ai/sand.c @@ -59,3 +59,26 @@ void ai_sunstone_onUpdate(Entity *e) { void ai_sunstone_onState(Entity *e) { } + +void ai_puppy_onCreate(Entity *e) { + e->eflags |= NPC_INTERACTIVE; // Yeah.. +} + +void ai_puppy_onUpdate(Entity *e) { + +} + +void ai_torokoBoss_onCreate(Entity *e) { + e->eflags |= NPC_SHOOTABLE; +} + +void ai_torokoBoss_onUpdate(Entity *e) { + +} + +void ai_torokoBoss_onState(Entity *e) { + if(e->state == STATE_DEFEATED) { + tsc_call_event(e->event); + e->state = STATE_DELETE; + } +} diff --git a/src/ai/weed.c b/src/ai/weed.c index 17cd8adf..e0025dbf 100644 --- a/src/ai/weed.c +++ b/src/ai/weed.c @@ -164,3 +164,7 @@ void ai_malcoBroken_onState(Entity *e) { break; } } + +void ai_powerc_onCreate(Entity *e) { + e->y += pixel_to_sub(8); +} diff --git a/src/db/back.c b/src/db/back.c index fe575417..7d249fb9 100644 --- a/src/db/back.c +++ b/src/db/back.c @@ -7,11 +7,11 @@ const background_info_def background_info[BACKGROUND_COUNT] = { { &BG_Blue, PAL2, 0, 8, 8 }, { &BG_Blue, PAL2, 0, 8, 8 }, { &BG_Fog, PAL2, 1, 16, 4 }, - { &BG_Gard, PAL2, 0, 6, 8 }, + { &BG_Gard, PAL3, 0, 6, 8 }, { &BG_Gray, PAL2, 0, 8, 8 }, { &BG_Green, PAL3, 0, 8, 8 }, - { &BG_Maze, PAL2, 0, 8, 8 }, - { &BG_Maze, PAL2, 0, 8, 8 }, + { &BG_Maze, PAL3, 0, 8, 8 }, + { &BG_Maze, PAL3, 0, 8, 8 }, { &BG_Red, PAL2, 0, 4, 4 }, { &BG_Red, PAL2, 0, 4, 4 }, { &BG_Green, PAL3, 0, 8, 8 }, diff --git a/src/db/face.c b/src/db/face.c index f2ad3339..bf1dc194 100644 --- a/src/db/face.c +++ b/src/db/face.c @@ -15,7 +15,7 @@ const face_info_def face_info[FACE_COUNT] = { { &TS_Face10, PAL3 }, { &TS_Face11, PAL3 }, { &TS_Face12, PAL3 }, - { &TS_Face01, PAL3 }, + { &TS_Face13, PAL3 }, { &TS_Face14, PAL3 }, { &TS_Face15, PAL0 }, { &TS_Face16, PAL0 }, diff --git a/src/db/npc.c b/src/db/npc.c index d0b4ff4a..1b82fb23 100644 --- a/src/db/npc.c +++ b/src/db/npc.c @@ -104,23 +104,23 @@ const npc_info_def npc_info[NPC_COUNT + 8] = { /* 0x030 (48) */ { NULL, PAL0, "Omega Projectile", // TODO NULL, NULL, NULL, NULL }, - { NULL, PAL0, "Skullhead", // TODO + { &SPR_Skullhead, PAL1, "Skullhead", // TODO NULL, NULL, &ai_default_onState, NULL }, - { NULL, PAL0, "Skeleton", // TODO + { &SPR_Skullhead, PAL1, "Skeleton", // TODO NULL, NULL, &ai_default_onState, NULL }, - { NULL, PAL0, "Crow & Skullhead", // TODO + { &SPR_Crow, PAL3, "Crow & Skullhead", // TODO NULL, NULL, &ai_default_onState, NULL }, { &SPR_Robot, PAL3, "Blue Robot (Sitting)", NULL, NULL, NULL, NULL }, { NULL, PAL0, "???", NULL, NULL, NULL, NULL }, - { NULL, PAL0, "Skullstep", + { &SPR_Skullhead, PAL1, "Skullstep", NULL, NULL, &ai_default_onState, NULL }, { &SPR_Kazuma, PAL3, "Kazuma", NULL, NULL, NULL, NULL }, - { &SPR_BtlHB, PAL3, "Brown Beetle", + { &SPR_BtlHB, PAL3, "Brown Beetle", NULL, &ai_beetle_onUpdate, &ai_default_onState, NULL }, - { NULL, PAL0, "Crow", + { &SPR_Crow, PAL3, "Crow", NULL, NULL, &ai_default_onState, NULL }, { &SPR_Basu, PAL3, "Basu", NULL, NULL, &ai_default_onState, NULL }, @@ -211,10 +211,10 @@ const npc_info_def npc_info[NPC_COUNT + 8] = { &ai_fan_onCreate, &ai_fan_onUpdate, NULL, NULL }, { NULL, PAL0, "Grate", NULL, NULL, NULL, NULL }, - { NULL, PAL0, "Power Controls (Screen)", + { NULL, PAL1, "Power Controls (Screen)", NULL, NULL, NULL, NULL }, { &SPR_Wave, PAL1, "Power Controls (Flow)", - &ai_pushdn_onCreate, NULL, NULL, NULL }, + &ai_powerc_onCreate, NULL, NULL, NULL }, { &SPR_ManShot, PAL0, "Mannan Projectile", NULL, &ai_mannanShot_onUpdate, NULL, NULL }, { NULL, PAL0, "Frog", @@ -236,7 +236,7 @@ const npc_info_def npc_info[NPC_COUNT + 8] = { /* 0x070 (112) */ { &SPR_Quotele, PAL0, "Quote Teleporting In", &ai_teleIn_onCreate, &ai_teleIn_onUpdate, NULL, NULL }, - { NULL, PAL0, "Prof. Booster", + { &SPR_Booster, PAL3, "Prof. Booster", NULL, NULL, NULL, NULL }, { &SPR_Press, PAL1, "Press", NULL, NULL, &ai_default_onState, NULL }, @@ -263,7 +263,7 @@ const npc_info_def npc_info[NPC_COUNT + 8] = { { NULL, PAL0, "Hidden Heart/Missile", NULL, &ai_heart_onUpdate, NULL, NULL }, { &SPR_Puppy, PAL1, "Puppy (Runs Away)", - NULL, NULL, NULL, NULL }, + &ai_puppy_onCreate, NULL, NULL, NULL }, { NULL, PAL0, "???", NULL, NULL, NULL, NULL }, /* 0x080 (128) */ @@ -272,27 +272,27 @@ const npc_info_def npc_info[NPC_COUNT + 8] = { { NULL, PAL0, "???", NULL, NULL, NULL, NULL }, { &SPR_Puppy, PAL1, "Puppy (Tail Wag)", - NULL, NULL, NULL, NULL }, + &ai_puppy_onCreate, NULL, NULL, NULL }, { &SPR_Puppy, PAL1, "Puppy (Sleeping)", - NULL, NULL, NULL, NULL }, + &ai_puppy_onCreate, NULL, NULL, NULL }, { &SPR_Puppy, PAL1, "Puppy (Bark)", + &ai_puppy_onCreate, NULL, NULL, NULL }, + { &SPR_Jenka, PAL3, "Jenka", NULL, NULL, NULL, NULL }, - { NULL, PAL0, "Jenka", - NULL, NULL, NULL, NULL }, - { NULL, PAL0, "Armadillo", + { &SPR_Armadl, PAL3, "Armadillo", NULL, NULL, &ai_default_onState, NULL }, { NULL, PAL0, "Skeleton", NULL, NULL, &ai_default_onState, NULL }, { &SPR_Puppy, PAL1, "Puppy (Carried)", - NULL, NULL, NULL, NULL }, + &ai_puppy_onCreate, NULL, NULL, NULL }, { NULL, PAL0, "Large Doorway (Frame)", NULL, NULL, NULL, NULL }, { NULL, PAL0, "Large Doorway (Doors)", NULL, NULL, NULL, NULL }, - { NULL, PAL0, "Doctor (Crowned)", + { &SPR_Doctor, PAL3, "Doctor (Crowned)", NULL, NULL, NULL, NULL }, - { NULL, PAL0, "Frenzied Toroko", - NULL, NULL, &ai_default_onState, NULL }, + { &SPR_ToroBoss, PAL3, "Frenzied Toroko", + &ai_torokoBoss_onCreate, &ai_torokoBoss_onUpdate, &ai_torokoBoss_onState, NULL }, { NULL, PAL0, "???", NULL, NULL, NULL, NULL }, { NULL, PAL0, "Flowercub", @@ -570,8 +570,8 @@ const npc_info_def npc_info[NPC_COUNT + 8] = { NULL, NULL, &ai_default_onState, NULL }, { NULL, PAL0, "Droll", NULL, NULL, &ai_default_onState, NULL }, - { NULL, PAL0, "Puppy (With Item)", - NULL, NULL, &ai_default_onState, NULL }, + { &SPR_Puppy, PAL1, "Puppy (With Item)", + &ai_puppy_onCreate, NULL, &ai_default_onState, NULL }, { NULL, PAL0, "Red Demon", NULL, NULL, &ai_default_onState, NULL }, { NULL, PAL0, "Red Demon Projectile", diff --git a/src/db/stage.c b/src/db/stage.c index ec6f6a3c..57fb3905 100644 --- a/src/db/stage.c +++ b/src/db/stage.c @@ -37,10 +37,10 @@ const stage_info_def stage_info[STAGE_COUNT] = { { PXM_Stream, PXE_Stream, TSC_Stream, &PAL_Regu, 17, 2, "Main Artery" }, /* 0x20 (32) */ { PXM_CurlyS, PXE_CurlyS, TSC_CurlyS, &PAL_Regu, 16, 0, "Small Room" }, - { PXM_Jenka1, PXE_Jenka1, TSC_Jenka1, &PAL_Regu, 2, 0, "Jenka's House" }, + { PXM_Jenka1, PXE_Jenka1, TSC_Jenka1, &PAL_Jenka, 2, 0, "Jenka's House" }, { PXM_Dark, PXE_Dark, TSC_Dark, &PAL_Regu, 18, 0, "Deserted House" }, { PXM_Gard, PXE_Gard, TSC_Gard, &PAL_Regu, 9, 5, "Sand Zone Storehouse" }, - { PXM_Jenka2, PXE_Jenka2, TSC_Jenka2, &PAL_Regu, 2, 0, "Jenka's House" }, + { PXM_Jenka2, PXE_Jenka2, TSC_Jenka2, &PAL_Jenka, 2, 0, "Jenka's House" }, { PXM_SandE, PXE_SandE, TSC_SandE, &PAL_Regu, 18, 7, "Sand Zone" }, { PXM_MazeH, PXE_MazeH, TSC_MazeH, &PAL_Regu, 13, 8, "Labyrinth H" }, { PXM_MazeW, PXE_MazeW, TSC_MazeW, &PAL_Regu, 13, 8, "Labyrinth W" },