From b2f59297cbc89d5f0b9632bf892237d49f107fc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miloslav=20=C4=8C=C3=AD=C5=BE?= Date: Mon, 30 Mar 2020 18:52:54 +0200 Subject: [PATCH] Add monster sound --- assets/levelY.gif | Bin 3228 -> 3348 bytes assets/sfx_monster.raw | 1 + main.c | 34 ++++++++++++++++++++++++-- settings.h | 7 +++++- sounds.h | 54 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 93 insertions(+), 3 deletions(-) create mode 100644 assets/sfx_monster.raw diff --git a/assets/levelY.gif b/assets/levelY.gif index 5ea93b88bcb751518692e59669d12d0ecc60c1a9..37d4df9eff8333f1b5fa796d6da7b89c68b2fdf3 100644 GIT binary patch delta 2564 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 ahYmqLrUQp(!-sHahjg7^>t0RTHsqUa<5 delta 2443 zcmV;633T?98k`xBRVpD97C8W*5EvpK6%Zd53m6nX03iTT0ABzg4hA3q1Rw}v051<5 z7ziK_v45ii7e5FbNU)&6g9sBUT*$DY!-o(fCiF+~lQ{!CfBjIXsne%WY5FTf5vtXz zShHIF0HCYauVBN99ZR+>S%q4o(xf^yt=qRxxtg6zw=P|@aHX<^%h#=3yMP1N#rsxo z)xL)p7YumLq=gy0Ia&Nf5fwwMwQFqnU$KNJbE*iF0+0ms_r!KrX@!im~ z{%idZt^AGi=+AF&Y&|P>@#D)!OP_u{vs&k)C135QUc>Qfv-X-+i0Kg?*eS;u^3^rJne>%COD4}5OVf9{y8b-rmfFL4x z#f>6%^-YPMI0#`iD{7XIg}lM2Sa|?+_~BeTmYCyMD5^LiL7eG#A%8|X_1{=EmenMK zPm1+mgi}%}5Rn*WS;&@PUE(H_U>-cMzpbrlXHy;WSIu# zsb-8}fB6{}pn?+WBbh7?X=Ra%T83nsWkEV9nDznC;#Ds$%BNS3g5{~C>y1k4h5k+H zndPZnxtVHMUxvw@rNmJcYo>8++9;e0>Z+WpRzWALky|S1=QlTA@no){BCFO@%fk5I zjP*S$&bQNoYM-^(8kcQ`+bTI=fdj^=V6oNme_B{nz-qanl3;!FtvH_S%P+j+9^_qK z^wztkd>wYE@3;N#D{iZ}T?E)AZ~#y-MWKTA-+T$Dw=lo{KD-@5HA!Xi$tb6+^2#P} z+_A^*CYWHnB(r>_%{b>Q)dw>7?DNOp)R%Er3gOI_&Pd}-URd%qE#SUEqc=3sBe8sR zf6`c|yfj!%%l9<6LJy6f(OH*`^47Lq(sg+TLLGL-0(*3HtR`P=_T5|F`qlmo_JCkd zfK!uf(cE_LclY6Wo3+T|i@!~?z=WS%_~BS54%R7OG2Xb;fk!;}Zj(<=IntJUdWz<# zJ07r^8AV?A=y)Spqv@z?t~$gdyDk~*e_4Ov;gSH*Ui;?ib)GxulJj1+@3n@7IRL)Y ze*4H1>0X@jNiz?;SW$O8wW!r2|N8jYYyG?4NxuBM*x?_RJo)9HtUY~Us=q$mp5ILO z?$^iP^6&WSiv7MPu-1vsFm@B2|K>-Z4RmD#12o=1Kmx0_)Xi7?^B+xo=RL1Pe~^90 z^Ht$~bu|UXkAoeuhXaGxy}zC3Z^ptMa8V@{xir03sB_ zz(zapK>{!g!W6~m20Zwo0VT*G60bOhHP-O~bXfGF7|p0gH_FkDdbFd~tN;+w5Qt6K zf*IPlKoQoE2vP7t8s)$Me-Yl$h*bPy8s=C)42B>EIw+zNs^CBp*Z>Ju0D~IoXaN@p zfeK@6BOdz@!4&j>iCR2^9P=mv6!KsRS~MdZ@~G%X$4b_+lGU0fr~)4}aSLahgB}i` z0TtX(h)lp@7YFFT4w_(wJNRJ|31Gny#()PzaKaS~fWZ>Vu!l!HeAVxt9Zn#4qVl}I3S6f#6gg^>)p#DTGmf;O{cmN4%I0Pwl z0gZ8hfC+JsL@R=E4RlB#2U?f|BR(+;WC#EO6F7kkdLRTV1b_evct8eFFasPEAOat# zfe)VW1vD4{0wb`&e-E6ng)^jWjGi`d7cW;RsCtz+ck+ z_rPbRP{}aXl>+DNz6g%+d=<NGnQ|M8{A-jnE1y%X0VTkOkf@lf7!=8?s1S~oMR5N*u@yL z@R65Hsi#pP!rZlQAZQ@M7dZTw1 zw8;qlYxoBHZc1)6<$PUiSjTO2YNj&YnhoHZLHoyxmhs>&HJWjM*Bzj5_NWPJl$=Q=u2zC4$!{MRz~G}DFr zX|3&i*>aEhNMt>0MT1>_f3LUP^WOJP&%DzcOuV}n&vLv8bMhKJg+(u!eo}2%yM?Vwm)$GUZmf^>u-PDK;3+%lOOE#hknt=b=+4u-gkP^_iPcjLCdF24)}l& zIT(QtNI?R|5=3DW7uXR+A%Pqy5f!l#AGkpwXn{bnfgN~)4naXB1A-OCf*@#uC>Vn> J_z(dB06SNVuUP;9 diff --git a/assets/sfx_monster.raw b/assets/sfx_monster.raw new file mode 100644 index 0000000..fecf4a2 --- /dev/null +++ b/assets/sfx_monster.raw @@ -0,0 +1 @@ +€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~‚€~€€€€}}‚…„}xy|‚ƒƒƒƒƒyuuy€ˆŠˆ„€~|yx{„…~{}€€„……}tt{„ˆˆ„€{pky‰ˆ€‚‚}ut~Š„vou~‡‰ƒƒƒyusw‚‰Ž†|v|Š‡ynsŒuv‚Š„wrr|†‹ˆ{|€€~}{~‚‚ƒ‚||}€€‚€|{~ƒƒ€~€€}}~ƒ||~|}‚…‡xy~}‚…‡„~zy}~yswˆ•Ž‚}„†vjlw‚Œ‹‹„||{y|‡†|zƒˆ„|xz†‚~‚††„ƒ{xxyz}…Œmj‚Œƒ„ˆ|w}{v~Œˆ€|†ˆ}€zy}z|{‹‹ˆ‚|ztsz…‰ƒ…†zv|‡Ž‚yy~~€†…„}tvzƒ€ƒ€|…ƒ~z{‚…ƒ€}}~||‚€|{}ƒƒyx}††}y~‰Œ‡†~ŠŒ{gf{—©c^vœœZUwŸ²¤~fhmsz„Ž”wlxƒ€‚…~ww~€}ˆ„‚…†‡l^d{’˜•€shn~ŒŽ‰‚rmnw†’‘€uwv|€yv|z}‹‚|x|x|yqzŒ„‚zxtx€‚„„‚}|w{~‚‚}z}€{|†„~||~|‚€~„…€|zy~‚€ƒ‚€|z~€|}„„‚…‡…‚{yy}†‰„zx‰…xoqŽ“|sv~…‚}~ƒ‰€yz„“tt†…|t‡ƒz„Š}{ƒ†}y„„tr…’zvz„‡spy•¥“kgŠzrt‚™–‡tcl‹ €wŒpr•˜iY{•{|‡†~…thƒ˜—|ovxˆ•Šid‹¡…a]€š¢•wkx””ucn€‹’ˆyy€{v’ŸyXl¦|ckwƒ‹‚xŽ›‰b[t‘›ˆvz‡’‹odj}†’’xp~–ž€VQ~¯ŸjMc‹›žšˆo`i{‘„t{sw‰„xw~†|tx|ŠŽŠ|tz~ztyƒ‰‰yt£ÑãÕ¼€L7?GGU~®º¼¿¸¥b8)6Ng†§ÃÊ¿±¤{@!1aŠ°½ÀËÄsK2Yy ÏðäƤ{L+'=Um‘¸ÓÓµŒm[@+5\ˆš«ÆÍÀ®—rD,3DVk’¼àÞ»–oP97:It¡ÄËÊȲ’_1&ERd“ÆßÔ®†jP89E\€¢ÂËÆ·—q\SF9=`‹«ÀÊÄ»™lN<48Af¢ÐÛɳŸ‹nQ4*=e²Âù®™nA0@KUh’ÁÞÝĤ~P/'0Hv«Í†}xuz…Œ}icr’’Œ€{~|}‚Ž†tcey‰‰ƒzx‰„{|‰‰tnyƒˆzn}š¦’xf`iku{ƒŒ›«§•wedotwyz|†‘Švkrz…‰”¡“~cWs‘š„kk€„~†‹}xz~|qu€ˆ†ylfs‹˜–‰wsvˆ€|~zxumtwzˆ•‘‚vox„„zv€†…€}ysry‚……†{ywtv‚‹„~}ƒˆ‚|‚„}wutˆ…ƒts}„„„…{|†Œ‡zx~€}{}„‰‡}y|‚ƒ~wuy…ƒ|pow‚‘˜ž‘~rorw|~}~ƒ‰‚xsy‚…‡‡……‚~€‚…{~}{y{…Œ‹ƒz{}‚‚~{yŠ‰„~|{ywvu|Š’’…~zux|}~‚‡ˆ„~}~|||‚†„€~|}ƒ†zy~~}ƒ†„~~}}ƒƒ€|{}‚~{|ƒ€}„ƒ€}€}|€„‚}}‚|€€€~~€~~~€€€€€€€€€€~€~~€€€€~~€€€€€€€€€€€€€€€€€~€€€ \ No newline at end of file diff --git a/main.c b/main.c index bfe564b..ab03926 100755 --- a/main.c +++ b/main.c @@ -261,6 +261,8 @@ struct uint8_t spriteAnimationFrame; uint8_t explosionSoundPlayed; /**< Prevents playing too many explosion sounds at once */ + uint8_t monsterSoundPlayed; + RCL_RayConstraints rayConstraints; uint8_t keyStates[SFG_KEY_COUNT]; /**< Pressed states of keys, each value stores the number of frames for which the @@ -448,6 +450,13 @@ void SFG_playSoundSafe(uint8_t soundIndex, uint8_t volume) SFG_game.explosionSoundPlayed = 1; } + else if (soundIndex == 5) // monster sound + { + if (!SFG_game.monsterSoundPlayed) + SFG_playSound(soundIndex,volume); + + SFG_game.monsterSoundPlayed = 1; + } else SFG_playSound(soundIndex,volume); } @@ -1717,7 +1726,9 @@ uint8_t SFG_distantSoundVolume(RCL_Unit x, RCL_Unit y, RCL_Unit z) if (distance >= SFG_SFX_MAX_DISTANCE) return 0; - return 255 - (distance * 255) / SFG_SFX_MAX_DISTANCE; + uint32_t result = 255 - (distance * 255) / SFG_SFX_MAX_DISTANCE; + + return (result * result) / 256; } void SFG_createExplosion(RCL_Unit x, RCL_Unit y, RCL_Unit z) @@ -2059,6 +2070,16 @@ void SFG_monsterPerformAI(SFG_MonsterRecord *monster) state == SFG_MONSTER_STATE_GOING_SW) coordAdd[1] = add; + if ((coordAdd[0] != 0 || coordAdd[1] != 0) && SFG_random() < + SFG_MONSTER_SOUND_PROBABILITY) + SFG_playSoundSafe(5, + SFG_distantSoundVolume( + SFG_MONSTER_COORD_TO_RCL_UNITS(monster->coords[0]), + SFG_MONSTER_COORD_TO_RCL_UNITS(monster->coords[1]), + SFG_floorHeightAt( + SFG_MONSTER_COORD_TO_SQUARES(monster->coords[0]), + SFG_MONSTER_COORD_TO_SQUARES(monster->coords[1]))) / 2); + if (add) state = SFG_MONSTER_STATE_IDLE; } @@ -2455,7 +2476,15 @@ void SFG_updateLevel() monster->stateType = (monster->stateType & SFG_MONSTER_MASK_TYPE) | SFG_MONSTER_STATE_DYING; - SFG_playSoundSafe(2,255); + uint8_t volume = SFG_distantSoundVolume( + SFG_MONSTER_COORD_TO_RCL_UNITS(monster->coords[0]), + SFG_MONSTER_COORD_TO_RCL_UNITS(monster->coords[1]), + SFG_floorHeightAt( + SFG_MONSTER_COORD_TO_SQUARES(monster->coords[0]), + SFG_MONSTER_COORD_TO_SQUARES(monster->coords[1]))); + + SFG_playSoundSafe(2,volume); + SFG_playSoundSafe(5,volume); } else if (state != SFG_MONSTER_STATE_INACTIVE) { @@ -3132,6 +3161,7 @@ void SFG_gameStepMenu() void SFG_gameStep() { SFG_game.explosionSoundPlayed = 0; + SFG_game.monsterSoundPlayed = 0; for (uint8_t i = 0; i < SFG_KEY_COUNT; ++i) if (!SFG_keyPressed(i)) diff --git a/settings.h b/settings.h index 2020210..6a78749 100644 --- a/settings.h +++ b/settings.h @@ -194,12 +194,17 @@ */ #define SFG_BLINK_PERIOD 500 +/** + Probability (0 - 255) of how often a monster makes sound during movement. +*/ +#define SFG_MONSTER_SOUND_PROBABILITY 64 + //------ developer/debug settings ------ /** Developer cheat for having infinite ammo in all weapons. */ -#define SFG_INFINITE_AMMO 0 +#define SFG_INFINITE_AMMO 1 /** Developer cheat for immortality. diff --git a/sounds.h b/sounds.h index fcc5f69..46cbc0e 100644 --- a/sounds.h +++ b/sounds.h @@ -301,6 +301,60 @@ SFG_PROGRAM_MEMORY uint8_t SFG_sounds[][SFG_SFX_SIZE] = 136,136,136,136,136,136,136,136,136,136,135,119,119,119,119,119,119,119,119,119, 119,119,119,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136, 136,136,136,136,136 + }, + { // 5, robot/monster sound (beep) +136,120,120,120,136,136,136,136,120,120,135,136,136,136,120,136,136,119,136, +136,120,136,119,120,136,136,136,120,136,119,120,136,135,119,136,135,120,136,119, +119,136,136,119,119,120,136,136,135,119,119,136,136,136,119,119,119,136,119,120, +136,136,135,119,120,136,136,119,103,136,136,120,135,119,120,136,118,119,136,136, +136,119,119,136,136,119,120,135,103,136,136,119,136,135,119,120,136,119,120,135, +119,120,136,135,119,119,135,120,136,135,119,136,136,119,136,119,120,136,135,119, +119,119,136,136,119,120,119,136,136,119,119,119,119,137,136,120,135,102,120,136, +136,119,119,120,135,120,136,119,120,136,119,136,136,135,119,119,119,136,136,134, +104,136,136,119,119,119,136,135,120,136,120,119,119,119,135,136,136,136,119,119, +119,136,136,135,119,136,135,119,120,136,135,119,120,135,136,136,119,136,119,120, +136,135,119,120,135,119,136,135,119,136,136,136,120,119,119,136,119,120,136,135, +120,135,102,121,169,118,87,137,151,85,121,186,118,102,119,136,152,118,120,136, +135,119,120,120,136,136,136,136,101,103,153,152,135,102,120,136,135,102,120,153, +135,119,119,135,119,119,136,135,119,119,119,120,136,135,119,119,136,136,136,119, +119,119,136,119,119,135,120,135,119,119,120,135,120,136,119,119,136,136,135,119, +135,119,136,136,136,136,135,119,120,136,119,120,136,118,119,137,135,119,120,135, +119,136,135,119,120,152,119,136,119,120,135,136,119,136,119,136,135,120,152,119, +120,136,119,119,154,150,103,152,119,120,153,135,102,138,135,136,119,153,101,121, +151,120,135,136,118,137,151,103,120,152,102,138,134,88,154,151,103,153,118,104, +137,135,120,119,153,117,105,167,102,120,136,119,137,134,87,153,135,120,152,102, +103,137,151,119,153,133,87,169,100,104,153,152,102,103,153,135,119,136,119,120, +136,119,119,135,119,120,136,119,119,119,120,136,135,122,222,219,132,51,68,87, +171,187,186,134,50,52,104,172,203,186,116,33,54,139,188,204,151,67,52,87, +155,220,152,136,98,17,73,223,218,136,100,34,53,155,187,188,185,82,18,71, +155,205,203,150,65,19,86,156,238,201,100,50,36,122,205,220,167,66,34,88, +171,204,201,102,84,51,71,155,221,184,118,66,19,107,238,202,152,99,1,72, +172,204,218,116,51,36,104,172,222,183,83,35,87,120,190,234,118,100,34,70, +155,237,170,167,50,52,104,155,221,168,100,51,69,103,190,236,134,82,2,120, +138,223,199,102,82,19,105,204,204,185,82,52,85,106,216,103,153,117,104,134, +104,152,118,103,137,135,136,136,135,102,119,121,151,104,152,84,104,135,154,134, +103,136,119,135,120,135,120,135,136,119,136,118,86,153,118,137,134,137,117,105, +153,136,117,103,136,120,152,119,119,136,135,136,135,104,152,137,136,119,119,120, +119,135,86,156,204,253,150,67,35,87,155,222,200,84,52,51,89,206,236,186, +115,34,69,104,206,220,150,84,67,53,141,254,168,118,50,53,104,188,186,151, +84,68,87,172,220,169,135,66,53,120,154,188,203,116,52,84,71,189,219,169, +116,34,53,122,207,236,167,66,35,86,155,221,184,101,66,53,137,172,204,169, +116,35,69,105,190,219,150,83,51,71,172,204,203,149,49,35,104,172,238,200, +100,51,69,105,205,218,134,83,52,88,172,204,185,117,84,51,104,172,204,185, +100,51,52,106,221,203,152,101,50,54,139,204,186,150,67,68,86,156,221,202, +117,34,52,122,200,135,119,120,136,118,103,137,152,135,119,119,136,152,118,103, +136,135,119,136,135,120,135,118,120,135,103,154,151,102,102,119,136,154,169,118, +102,119,119,120,152,118,119,136,154,151,101,121,152,102,136,120,136,119,119,119, +120,136,118,103,137,152,119,119,136,136,119,119,118,119,120,136,153,135,103,136, +119,136,136,119,119,120,136,136,135,136,119,119,120,136,119,136,135,120,135,119, +120,136,135,136,119,119,136,136,119,136,135,119,136,119,120,136,135,119,136,119, +119,136,135,119,118,120,153,153,151,118,119,119,119,136,135,119,136,136,136,135, +120,136,135,119,119,119,136,136,119,120,135,119,136,136,119,119,119,119,137,152, +135,119,119,119,136,136,119,119,119,136,136,136,119,120,136,119,119,119,136,136, +119,119,119,136,136,136,135,119,136,119,120,136,119,136,135,120,119,136,135,120, +135,119,136,119,136,135,119,136,119,119,120,136,136,119,120,135,136,135,120,135, +119,136,119,136,135,136,119,120,136,120,136,120,136,119,135,119,136,119,136,135, +136,119,120,135,120 } };