From 41f61b049bbbeade9e337a6d217079d0f6e20a45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miloslav=20=C4=8C=C3=AD=C5=BE?= Date: Sat, 28 Mar 2020 20:48:16 +0100 Subject: [PATCH] Fix element numbers --- assets/img2map.py | 21 ++++++++++++++++++++- assets/levelY.gif | Bin 3128 -> 3228 bytes levels.h | 28 ++++++++++++++-------------- main.c | 13 +++++++++---- 4 files changed, 43 insertions(+), 19 deletions(-) diff --git a/assets/img2map.py b/assets/img2map.py index 6108e8c..ae0b775 100644 --- a/assets/img2map.py +++ b/assets/img2map.py @@ -27,7 +27,26 @@ elementTypes = [ "LOCK0", "LOCK1", "LOCK2", - "BLOCKER" + "BLOCKER", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "MONSTER_SPIDER", + "MONSTER_DESTROYER", + "MONSTER_WARRIOR", + "MONSTER_PLASMABOT", + "MONSTER_ENDER", + "MONSTER_TURRET", + "MONSTER_EXPLODER" ] propertyTypes = [ diff --git a/assets/levelY.gif b/assets/levelY.gif index a136ff73455f836d841b7f59086eec9c812aa069..5ea93b88bcb751518692e59669d12d0ecc60c1a9 100644 GIT binary patch delta 2196 zcmV;F2y6Ga7@QffAq0Q@5Uu=;^XSiSZ)`m)cJbrOM@yf6J>%|7zdtt)A1itD^a1eA zH}=>wpjQJX=*fZ$nx#%P5UO*ZP6IhNRe1evRo*4^-2lKPUwwlhf($lTmO8nlD4}5O zVf9{y8b-rmfFL4x#f>6%^-YPMI0#`iD{7XIg}lM2Sa|?+_~CzCJC>N^SSYGEAwit! zcOid9I`!XJHI~&RgHMX}V1!drDG-quW?9IVU|r%SlVBc5R+PB}2^fB8VyPyZUv(+g z21c~8h?8@T31pcD<*8y1k4h5mm{>6zuJUAdWRSYL+8ou$N46>Fw(ZQ3ZD3+k$zt5!iLtC3qO>E|~$ zUh!nEp(3l+Q_I5m-;DJ=E6%smf@+_&*cz8@hTAGRV1Wb1sbI0y@>*C_z-qanl3;!F ztvH_S%P+j+9^_qK^wztkd>wYE@3;N#D{iZ}T?E)AZ~%W$F-4(*_1}C6r?)V_{yw}N zLN!Tc^2sQttn$hxZ``rR?k1REyd<-HrOi0!EY$}x_w4h>-_)0JR|?_Gmd;4yOkP;> zH7(%2L8CV`(Ic^ZbkbO-yfj!%%l9<6LJy6f(OH*`^47Lq(sg+TLLGL-0(*3HtR`P= z_T5|F`qh8_4fcRwPk>XCY|-3y?|1j%d7HJ!;)}mcv%rL(T=?NwCl1yrUoqae)PYAl z_->O=PC3$+dwPoIs5>68nHfc1_vm;dS)=KwYpy!PB)cvd>{)-{;gSH*Ui;?ib)Gxu zlJj1+@3n@7IRL)Ye*4H1>0X@jNiz?;SW$O8wWxp9BmesN*lYc}-budvyV&6$mOT08 zpR7H7VXD7A+@9Y|_wLun-}3MH>WcloC$QFu&oFiqo&V-XpAB?n0|PYPKtKYkw$#m6 z{PQ18eCIu{M38;Q^Ht$~bu|UXkAoeuhXaGxy}zC3Z^ptM{l0>mAk%EIw+zNs^CBp z*Z>Ju0D~IoXaN@pfeK@6BOdz@!4!Y=fQec>gBN5@LmvXa%B zCa3}*G;s@OoP!4*xViyPKzz&*VhCBFS5(!|z5ypTAL~z0t41mEB%CLt= zbV3#bXn+M)po1Vp0Sgr1K^E-b2vFc687>HeAVxt9Zn#4qVl}I3S6f#6gg}1^b)f!4 zESBL7c6a~@YB&TbbODWVfPe{ckVGqjaSe1xAO~8Q10y~$3uFiY0TVcZ40<30D+GW5 z3V1*UP%r}=6d(d0sDTfj@C7s&00JYh!4I6Ug)^jWjGi z`d7cW;RsCtz+ck+_rPbRP|1HV)|CS1?7j$&@O%}_5(az4!8U`igeAP+0b^Kc8xHYB z$0ij5f0$(&7V&?DBVdh~_{1tpv5NCcVi@a8#xs_0ha22rf0+2kJ!Y_vhfH7|581~& z?s1S~oMR5N*u@yL@R65Hsi#pP! zrZlQAZQ@M7dZTw1w8?)6{cHFJ`)*2ZH069ZmqY?rtOoJJA2_4x3$S_muaW_(Bm%Kxl7#NcYpNQ-)@<`?;Y=a?`+?j?zg`| z0&tKDeBi7uIIs^saAtEG-w02*!ZQkSggczt6>s>&HJWjM*Bzj5_NWPJl$=Q=u2 zzC4$!{MRz~G}C{D{AsQ2eA#l3`AB3vYej=yet)mG-1FY|PS3p48%(^r7teCM33Kuq zJ%vRzA8whS`SCaJJ4jNL3pj5(@Of`K%?)4pi;&**y$k%@2k+uE>s{8Lw(u!e4M(7%M0K4)0cAY zzkd4-_Tv1>N4IJhvGQ0~U(9lLzP3Mb{$8Zt!0T^++(6xYrjsA+^oM@Y$93FSIo@}A z()Vl;w?WINO%C{g5Ey|ENI?R|5=3DW7uXR+A%Pqy5f!l#AGkpwXn{bnfgN~)4naXB W1A-OCf*=fNf+!e+GWZYy0RTI&X+Sst delta 2095 zcmV+~2+;SO8Mqj*Aq0P&zTL6)tk}hmFAuys)9=rXtH(;-wz_Kg)iEwD(D~Hx^KHc* zSnA|rpnig#hgEt33W(V^fZdnhehK-d>A@apIIB$C1EuP zYQ~?10G3$DiDiA`$&D$J)nP6z0_Gl!B+5u5SQ{A8#v(W3IM;uQJ=&$Y7M2LUN1R6~AMC6Y;IsoaxRMJXheMv|!{duXQlUsFMr7^YY@zFA(JYEeb! zmvL!W=74-Y1znvO4*AU$jHZ|;mV{P#nxTN2XxBI5Wa{Xka7s!XrIk)u<2R%}S}LiW z?&)b^QH3fhUH*TVX6i|%vg)}VLf+-oYN(3RI;*d?a);YRfL#Iy0LM}^AXvT1N~<`j z-g;0?QdMj1wb*8>ZMBM)dFrW=;=1jKOzz5(J*{!nU5$B))np@mvQ7hS?X=Tgp9?ksVv}vP*;(Vt zG|O#&ZL)v<)N#vwbd=G>KmNSFt<3?6eux4qnS_GPim zgAcm+rQ0(W9QYrbw9=3pw^o{ls$T1Qcfb7YkALlR%HRN~Kml5hfMUs?{$`iJm7ynq z4g^W|!Xm)~3Jz2Y!e9n3vb+tL(1c#;;QsJ}C;^{zjPL3BB?L1Fld~E!@=(#plD4ee8)(G~x{n0zVxt@m)=vp#--mMeR{BhmqMK z4{spE4RDc*9zRGQd%f zeyG3;e<+18vhj|5q@W9c2*oh4(GGl&01SgLMKQVo4}NGs337OhHDEW;b@@Bk9ja0pW90vh800TbdNiB<&T8t9Nf4zw@_Mtoux$PfSmCU627 z^gsw!2mk>T@PG`UUupY<~G;1 zzMU?c+g;rXr?(mjuXsaOUhaN(y}@nob?1d#g5JVFDXc(>w$uX0~(-W1E&Z8Xj;b5wj|@PZ`Av^_6N8Z2V}dN{nA z<*a8xD_YW;7PSepuZw}~QQLm_$Qvebk~{m^(2lmWr#(Y{19K57BY1x#434n=h)GP5 zEic*2P7ZUF!#ia&Yja*bww8M9Z0BlX_h|zTacuj1);|NS!y6tnq04G$mjxQpxLtHe z8=Yrs@mbQ)q;!5W1W6*q)VO6P*?iLtZwzGU(Kyp%R0ui zwzRFW>1tYkTGG9K^{;;y9qdXEo6yD1^RfG!>>e-M&dt8Di|rBXXv_H7X0|qbu}x)d zyX`1t-nBKYjO7lq*(-uZF8x06u@9W$-7t$rx=8f_qkZ6n7{MmBS&iK^Wk2P)h72YnqzL{HM?BqAo)3|gYH~h zPi|OWyXGmNIdxDE{pA_QGKYzL5d-Cd$53N>(@_>^o);b9I`6uH!0u_W3te0lCVIw= zp7r~F!0T*}uiJl7jxXmeeeY=AIh#H0mAvEF?dWLv+!IZ?!q*&|PpJ0Ld5-bM7wqxU z^n}UzPF=r89q}zcI?+X+_7C*p^oE}?=mTH*5(B)#=sJBbQor5R!~Nne2k@FJe-YW! z-o&;?S@=9}IK(G@*13i?;3diY<~#rS%?C+GY(f<3Q_CkL(9gb1Dju>D?&r??EGdcj ZwNL(#NdNjiAxZbKU;g&H|0Dqc06R}Z7<&K! diff --git a/levels.h b/levels.h index 7641ff0..972b1d1 100644 --- a/levels.h +++ b/levels.h @@ -86,7 +86,7 @@ typedef struct unused because that will be used by the game engine, so the values must be lower than 128. */ -#define SFG_LEVEL_ELEMENT_NONE 255 +#define SFG_LEVEL_ELEMENT_NONE 0 #define SFG_LEVEL_ELEMENT_BARREL 0x01 #define SFG_LEVEL_ELEMENT_HEALTH 0x02 #define SFG_LEVEL_ELEMENT_BULLETS 0x03 @@ -110,24 +110,24 @@ typedef struct #define SFG_LEVEL_ELEMENT_LOCK2 0x12 #define SFG_LEVEL_ELEMENT_BLOCKER 0x13 ///< Invisible wall. -/* - Monsters have lower 4 bits zero and are only distinguished by the 4 upper - bits, as this is convenient for the code. -*/ -#define SFG_LEVEL_ELEMENT_MONSTER_SPIDER 0x00 -#define SFG_LEVEL_ELEMENT_MONSTER_DESTROYER 0x10 -#define SFG_LEVEL_ELEMENT_MONSTER_WARRIOR 0x20 -#define SFG_LEVEL_ELEMENT_MONSTER_PLASMABOT 0x30 -#define SFG_LEVEL_ELEMENT_MONSTER_ENDER 0x40 -#define SFG_LEVEL_ELEMENT_MONSTER_TURRET 0x50 -#define SFG_LEVEL_ELEMENT_MONSTER_EXPLODER 0x60 +#define SFG_LEVEL_ELEMENT_MONSTER_SPIDER 0x20 +#define SFG_LEVEL_ELEMENT_MONSTER_DESTROYER 0x21 +#define SFG_LEVEL_ELEMENT_MONSTER_WARRIOR 0x22 +#define SFG_LEVEL_ELEMENT_MONSTER_PLASMABOT 0x23 +#define SFG_LEVEL_ELEMENT_MONSTER_ENDER 0x24 +#define SFG_LEVEL_ELEMENT_MONSTER_TURRET 0x25 +#define SFG_LEVEL_ELEMENT_MONSTER_EXPLODER 0x26 #define SFG_MONSTERS_TOTAL 7 #define SFG_MONSTER_TYPE_TO_INDEX(monsterType) \ - ((monsterType) >> 4) + ((monsterType) - SFG_LEVEL_ELEMENT_MONSTER_SPIDER) -#define SFG_LEVEL_ELEMENT_TYPE_IS_MOSTER(t) (((t) & 0x0f) == 0) +#define SFG_MONSTER_INDEX_TO_TYPE(monsterIndex) \ + ((monsterIndex) + SFG_LEVEL_ELEMENT_MONSTER_SPIDER) + +#define SFG_LEVEL_ELEMENT_TYPE_IS_MOSTER(t) \ + ((t) >= SFG_LEVEL_ELEMENT_MONSTER_SPIDER) typedef struct { diff --git a/main.c b/main.c index ad5d16d..bfe564b 100755 --- a/main.c +++ b/main.c @@ -188,7 +188,8 @@ typedef struct } SFG_MonsterRecord; #define SFG_MR_STATE(mr) ((mr).stateType & SFG_MONSTER_MASK_STATE) -#define SFG_MR_TYPE(mr) ((mr).stateType & SFG_MONSTER_MASK_TYPE) +#define SFG_MR_TYPE(mr) \ + (SFG_MONSTER_INDEX_TO_TYPE(((mr).stateType & SFG_MONSTER_MASK_TYPE) >> 4)) #define SFG_MONSTER_COORD_TO_RCL_UNITS(c) (c * 256) #define SFG_MONSTER_COORD_TO_SQUARES(c) (c / 4) @@ -1294,7 +1295,9 @@ void SFG_setAndInitLevel(const SFG_Level *level) monster = &(SFG_currentLevel.monsterRecords[SFG_currentLevel.monsterRecordCount]); - monster->stateType = e->type | SFG_MONSTER_STATE_INACTIVE; + monster->stateType = (SFG_MONSTER_TYPE_TO_INDEX(e->type) << 4) + | SFG_MONSTER_STATE_INACTIVE; + monster->health = SFG_GET_MONSTER_MAX_HEALTH(SFG_MONSTER_TYPE_TO_INDEX(e->type)); @@ -2092,7 +2095,7 @@ void SFG_monsterPerformAI(SFG_MonsterRecord *monster) newPos[1] = monster->coords[1]; } - monster->stateType = state | type; + monster->stateType = state | (monsterNumber << 4); monster->coords[0] = newPos[0]; monster->coords[1] = newPos[1];; } @@ -2449,7 +2452,9 @@ void SFG_updateLevel() } else if (monster->health == 0) { - monster->stateType = SFG_MR_TYPE(*monster) | SFG_MONSTER_STATE_DYING; + monster->stateType = (monster->stateType & SFG_MONSTER_MASK_TYPE) | + SFG_MONSTER_STATE_DYING; + SFG_playSoundSafe(2,255); } else if (state != SFG_MONSTER_STATE_INACTIVE)