DO_N-$lw(bj{ux7KtZA{zy4IC_r!zePvnXCI@m4#Nru(}Sb
zlHAkJ*akdX$-s4OC&Ui8+W=_;1l@=Pz_=(RNz60(O|>Ajb{Ro0g|rA~Wq1i@{kQh?
z2LCDA6qnAu^hw-IK9myUZAIDOTqU2zh36?@vez6gdo`=%BkC%48d~9U=iAzG2_2W)
z7^^wYmq71A!-2zooAz_10o;xU^*
zzJzsr0?qBdu5SV6IJ6Vl@D;9q@FP-%#D2e%cpSR*qw4O-)ZbPS;Rs3m>pgnQwpLQ^
z0F}|9?$K1=qj$;|cm5@N0%Ysi$DOuZL&(VNL$!jw=us>kyF*gqVClmCKc)S;h;iVos`R)Xn9fr
ze}ncXRY=G0QiS~}KAI-ji;a%Z#*2&W>Ui2^AIOK(CHpwz{V3M*yku9SaL21?P;x;^
z`)z2=>it0%Lk%9UTnh#dA;{Z%LJbc*<)Tf=-y8N}A1aB`la{B9O#B~oL~BJ?#Ojb#
zN7b)Eizw4Yd6muNODU3u;)PAkEcv6@=JG11pvL=Pni<+uU%swQH$&9oW9olAvUy=A
zeM~LUqG(}lH#MYA&luY!#kVuUt|mkAr6US3yx#G^|{)%&7m?QdWN~yR2TF6WTWmfzStZHq|+D`D8laaG-K4U!)+2s)4h&tzKQ+lknt37B@ulEE)YFZBejLOpjd<_js
zAIU$aSJLezXr@nS*yeV|@{o_LyLgbYS-lz#tOsUnD{{c&m*90L+k?{SRYr<lW!N|`pp;Czbn-TpW)9aN^XS#gJYGeg
zWv)cq)IV#b$sK_bi<=TPLgYX?9m}dn68U+})d!k+l}I@2D7spfyh)94uJPYbpuyRn
zi=y^0JFWJlfwdG)x2qf)FyxlV)i~sh2|KqUEX6p=)nIjE{6=W3#W)Y+jiIp~<8BzQ
z4~=DvMJu&7G`3(IkMWw&INtTPRmS+mJ3-pr$C|h-G(XOWs$=kUOJ)t$g`OWlg
zpOyS+D$iMhUhh~=MFo50m38`Cvqb;#QzV_
zaUp(&50w+QgA~l|o7?%)FUhG{xY%7aYa#1;`IqFl=Tt7KT8us?w7z7HyK0%6F`Dn}
zRc?kJad>3D%SF$G+aCHWJU7&?Zh-GCs6ZaMq0NN#fjM4f5Y~Ex=Atm?$DV$e8;7nS
zJksM&mOoH6q;@1&*2#Gw9L8mj}arpV459
z-s&J)89BKTmA~AlO>R7eb0ct2S|Y-+kxNJt)Oi)B@|TjnF`fK9-ZEbX!anQ-EGRb8BMCFa{90?zle-v&XTq{w5#By
z;gQH+J-noKHmVwy?+Zr`qpiUW*7^0xUbSbL7hS3cFSf{Mud);Ra96!whpKu4RrT86
zD%w#OcNAvoEI3@I22>YGFY_|4!AtP}!?I3>RO7>#buQtD@+e;!OSoJt%gV%po~C<0R4g?9fu4%N+GuXlKdd
zs!Cc^TtK^vGs3Rn2a?Al>AzfQT&7l+!+H_Fo(LV%Pfha6Y%0Ft*^X0WDv9IcD5GRL
z|AbyC$ueYLX6(7j>Z*Jy$+wlC*0PqIP+>Dd=d4g+ivZmlw1~lQ(7iy5ywwUGF@{Zl
z$KAK$%!#pYelKJ+wu`6h>LY
zdKtH1+c^LM&eF7DEv9`46(jWS2OJH&h%$ydr12MM%<%KP7iBzA`;;@JU~hKT%9+R9
zn|*1`fZ3Uk%;RP5oEI-m&qwB^(0l^slWsI$f8r)b_tV_*@m%*?sPY)`X;-YO_#>}IhI{uYy_G?8MxP6z!Jt@
zz0kaI?B~2&=~cu%;<>tV!SpJ;E-zl7XUYfg=jc!6S-PmJ!N@u~UOvihIdJf-=Qr^oS8mT%Eq0xrVF+wq)9*e}L{QH)(ZISb;?5^bX-8sZ=kV|=6HOtP8*67UtD
zDaDx8;qHuPbdt%KLC36Q{bD|KCXR_Fs|jMv(A|5Z&@oD4Vle96|3JH+>u!HvQB|kv
z)TvXaPSv^WJIc=<;e!~HJpzo3`8Px|zlE_INi!KcAhEvR`_0=29iL~mv9@y(^G9fy
z|6^b?@Ganxt`^13b|~X*%s&HoEbvTrSSbb8GTG-ewpzy8UEbxt>2ZBxq
z{X57MfDG^f#+aDj1Kb|U{NIK#KV!MRyQ&((fo}s(#+V!PBQZY~^GnUle-Zi@&8*bF
zE8_o7ILRE?<~Ai5PKm9s0~KB8>lv$s+tX`Suor;GEn8YEBDSWTo|Ce9EA5n0`ETey
zBuB_m#8pi5Mbg*OAluskwjEf@)_U1C+4CvIYwQL&AUR7Vnj$`xUeu(9j17dSteyU-
z`J4}<25n-L7K%YmoSdsk(V6>B(5G7Im^MMWZKV!vtaQ^#KWYHH+^*E#t6bV`@VzoIT(hVB5S=;)x%&SfeLO64bLcF?Y%8Y}Cr
zZKpdy*?bG71sCyhstQizWz-a$&x`5bgB`qxmg}SFMsN&&k_`GH9#19u9B#pA4$q~3
z(-%p%Bd9~4E%_rT#4tMOas=ysp`E6HJOdJed(Ds{bw|)K!yq0-R}8DAZSC}Q$VPsF
zl#mKOn@U0xc^%CQE#_lre`pSZaWOQ5&m?Y4<%yJLbZ|ROH0JOT^dkOh=%6vf@RNo4
ztq6V)Rhg_oJr>rzshxf_rogdyQzE}YC8h!V3z}uJ$DD`I2-VIQM_<{&y3>Pe{jk#oxiDJU+g)&w#yLTx(wA>fO*c*pb)vv<=g(2SDF8eM)
zE==i=U1nelTYGH`Z4Yy3UbQf)2pgcB?Q|^s
zWu8Ez%sGZpST+_$r_n0&WImcsnC;pkct##`Jl!)dlJ1*np=B-ql6owOTu-(LhjhzK
zLnE>!8JQW8PSKIhx}M8fUD`us-Viq1bI{zsk?Q&uMUP70&6a&U?PV`B%Rbx)zYgx2
zS2>hmn%L*FLh@
zQu%xuWy?swWL%)bii&%U`Bu(kjTu)na7t@!>3kBsYs-I(XIib^E=n&4rY
z1BU~8Gw2l166lSf6G3Z0uLJD_E%X~fza@C=W&-dCtlj7q)vZY>0&T#7CqOpDDf^-j
zIVrBeyZEl^e+uKG{^TC0uo|+U7~VHf;EQG~HqA`0MGewdKrfu(4Cj=_7#1w8U9pU@
zMr2u3f)r+^`%x)T#n5;bUaSdNYrn7BQ`FWG10>G()2Qe~{x(%b=Vz_qElN5Hl}j&s
z~L*LMapSLeBKq@qjqxamZ+b;(FbSwI>D=}AZ>bCQ>_%_yl(
z;D*j%xQ%S^7+~$!Vm1nv7JO~Mk{D;^y-H0$b`AAg3V0FB+^AC3A8OBU_MWGbm{h)x
z7R1cu6X@d@d#M)D%0wk*&ITpS+3C}xM`%GCfuqqYqG3s#x-Oh`XJ&J@=aPs_pkDxQ
z;97FTrWqXJtS#EsqLk6JSbO}!pH=@)wJnO4?NV;d5NDL@i)1WB&vq*B(uUZ{X@$@j
ziGIZpCzt+^XH#{HvJe^tVvMWZrfsSB9W+@&e;Yo+2lKyLbFTo@T0Msg*@+2Wz0
zXGi;-zKN=BW=E7`^io2xlyrxVCybUN@6df9?HwBJ_=WZRUbXu?BGHM++y#7-$%!1v
zmXA!h)o$6h4>xzh9EWm%K5`W4LSejshC6fkeJXV3^B!8@tdIu(OsAcbkV2M$#iqG|
ziC->vC}U{$z{ikay9Z7;jl}q3$$_KUrd+1pf%(#eUdkR6Whld{^~m^KdVJ774c{31
z*NvpY#L4kibmG%S=8t3zxJ4(GaPT6NbVk{Cf%YaAN$cC`^Tc$^Q8CRW`_5w3o0#x>
zvLspKQH}pc{m*^$DWya!dpJ9#_^2eQGHq-BJkO>OhvI~1tN!8ke!!mjJ^J0HlMl__
zKp!R9`7u(GQgw$gK9?-XcFTc)Mm4V163}rpDmjP0PTP|Qn4;mX3v0yyZ^g)~VT%LW
zLD0@KQhLf3$zY^oDZjM!g!XTmZ^PT5zSC!X32~yV)ISS_uTr!5Ju(gU^AD+a@MJhK
zHq8O^?2Lx(=wd9-W25D1_KDTGn2h_NHFx@Q**-;7rX#(o|4woLco@b-RXT(*q06Cb
zz?i67Z()qPo4h(!?klJLY5A5y;gU=Ct>5TSSdHwvOI>My;8$9=r`tJiraxskq=a7j
zBx9Tg_lgE&=JDM$F>^IvOs6teTlR&Zvf`XX6%h5mf~I9vNP8~PJ6W+(W-Oh_Ixe9?
zZOl%oQw^-Gy3(O=EXHt2#AO?Rdtkw|SK*f6jjkqJF8Fl;UJE`C{3`)o4?Y5XU4S=(
z7d?A*fR6+p4gS{wKH9b4CK|`eUX^lkZ1GD1*B9I!(*1pv6XG-AnLVl=XABRex@v4SWGQFVF@qfX)xJflomf1lqtSpbJsvkN>3l
zwQkwh?m~HSH!2rUsI;t6@rKoVIUcuq&?o1#^fgKm$oC;HG~oS(HPPl~c!aW;D1>3A
z{ugl;6wt@|`ryOzModnD><(VeqDMX~TMStZUeXB$M!|W7MPsUJtDao;Le`VZ7R;T8
z=jh61tCm);%&uLwqGnz-`ikg{qWP8quPw!!9Po0fmKNnDPfJ2j24HhvX%4Tdd5@oI4+|+4-{4u-`mOvI47&Btbi#g9@Y6uyWKHX8UpQGvUGE!dYk5;=;BFP_!RmDM#z3*Nj<8KZM3X6H8al4%~T
zbK5Dsv;Nea99l8tNy{OdLvf*PeOUn2TvGl{mxfeoMDcqpe_-9aSWKL*2B)>hF}1JB
zhk|YaEv}0m^zT56>!bs{AGFYyK&Ju3hsEh1RsVZ>=07}EIM=8g0lf~gN1J^2Ed&Dk
zFChTs4%zqhEj89Z4U^A9StLJRB!)LJc|G`jbUh!X1<4~MwYOFKhh!EGqzgNSwp)EUa7+sJEKQzw7J_94IARI;yDrQ6zA69
z71crSl$9j6jQpxcckQn#BKdZ~vqvk+YZ!a9qHM+(cQvA-%
zWL{F>23x`hPAJdVcIg)k+eLZxLRA!)%qAjy_1hckXNTevl^sjJSlliiD2$J!)i1Ur`
zssHPNbp_@oKvxb%i<#7aPJ2N!^A4pNf#7(2+)>qzXW@*cwWr9Znbj1;+SbF=qvp55
z)JiP*@cZqP?^OSA=xz@}j!x+}zXkOFXI^T}8u>S#eoxnTke*r~0?xK5YVj0OxiOnf5Gb4V*ZQ`<9D{i&qos_a~z_j(r!Ry-{Ob=o)VS+jX97b6+J9>XW!$$8IS*upwp|W4?dvMUC#xj>sa^6S=8)G=M(9KD>2y?
zu%k0QC7x?;}WGc9TYOY
zgU=vkd|hl0RuiraW}n+QtG5njr)_D-3jcTXn+Z{|%0pr)AdZ3fpWn5S3Yigw_X|_YzQ`4fD
zTO3LO?VkFtQG+`e+k|``2AsSAu#&OXj@C);<2<73y6TTdzAvd-S}FS9n;jJU#0b8Y
z%Ad&4Wn5Q7Womk2u3>mJXLr9~YzFl_@d|ghu9`lbkDGacvFMBFk#jk7J;#~&7ntCM
zqTtsr=S;<~zP^7<^inbQ;Mdn%J6gla|Ds74_8DUrK4q*OAb!G59Kb2;U!;LgFQf^x
zA{V+h!w0}jz%zh3fNH?=fW?3sKrP?}z#4$Old-n}?*UE%&I7d;_=(Fg9ZuKqg=$
WU<{xPFryhu9;TZ!i|OLi=l&ZJ;dN2~
diff --git a/!TheEsc/c/CTheEscape b/!TheEsc/c/CTheEscape
index 4f9704c..f8222ef 100644
--- a/!TheEsc/c/CTheEscape
+++ b/!TheEsc/c/CTheEscape
@@ -5,7 +5,7 @@
#include "Sound.h"
#include "Graphics.h"
-#define SKIP_INTRO
+//#define SKIP_INTRO
//#define SKIP_MISSION1
//#define SKIP_MISSION2
@@ -52,9 +52,10 @@ void exitfunc () {
free(fontbuffer);
free(tilebuffer);
- inreg.r[0] = 4;
- inreg.r[1] = 0;
- _kernel_swi (DataVox_Unset, &inreg, &outreg);
+ sound_pcm_unset(5);
+ sound_pcm_unset(6);
+ sound_pcm_unset(7);
+ sound_pcm_unset(8);
}
int main(int argc, char *argv[])
@@ -65,6 +66,11 @@ int main(int argc, char *argv[])
atexit(exitfunc);
sound_on();
+ sound_voices(8);
+ sound_set_voice(5,"DataVox-Voice");
+ sound_set_voice(6,"DataVox-Voice");
+ sound_set_voice(7,"DataVox-Voice");
+ sound_set_voice(8,"DataVox-Voice");
// Set initial display mode
display_mode(DISPLAY_MODE);
diff --git a/!TheEsc/c/Intro b/!TheEsc/c/Intro
index f36eb05..100df2b 100644
--- a/!TheEsc/c/Intro
+++ b/!TheEsc/c/Intro
@@ -7,7 +7,6 @@ void intro()
{
int currentstart = 0;
int introframe = 0;
- sound_voices(4);
sound_set_voice(1,"WaveSynth-Beep");
sound_set_voice(2,"WaveSynth-Beep");
diff --git a/!TheEsc/c/Mission1 b/!TheEsc/c/Mission1
index d234ba6..b95a444 100644
--- a/!TheEsc/c/Mission1
+++ b/!TheEsc/c/Mission1
@@ -22,6 +22,8 @@ char *sprites[] = {"player_ship","durno_ship","ship_trgt","durno_ship2","ship2_t
char hudbuffer[63];
+unsigned char lastnpcchannel = PCMCHANNEL_NPC1;
+
struct EntityLocation_s {
short signed int X,Y;
};
@@ -146,12 +148,14 @@ void game_spawn_projectile(int id, int Px, int Py, int Vx, int Vy, enum sprite_e
Projectiles[id].nextframe = tick + 10;
Projectiles[id].damage = damage;
Projectiles[id].collidable = 1;
- // Play it
- inreg.r[0] = 4;
- inreg.r[1] = -15;
- inreg.r[2] = 1;
- inreg.r[3] = 1;
- _kernel_swi (Sound_Control, &inreg, &outreg);
+
+ // Alternate between channels
+ if(lastnpcchannel == PCMCHANNEL_NPC1)
+ lastnpcchannel = PCMCHANNEL_NPC2;
+ else
+ lastnpcchannel = PCMCHANNEL_NPC1;
+
+ sound_pcm_playsample(lastnpcchannel,PCMSAMPLE_DURNOTORPEDO);
}
}
@@ -195,6 +199,7 @@ void game_draw_player()
NPCS[Player.targetleft].location.X + ((NPCS[Player.targetleft].hitbox_bl.X + NPCS[Player.targetleft].hitbox_tr.X)/2) - 1,
NPCS[Player.targetleft].location.Y + NPCS[Player.targetleft].hitbox_bl.Y
);
+ sound_pcm_playsample_ifidle(PCMCHANNEL_PLAYER,PCMSAMPLE_PHASER);
}
if((Player.firingright) && (Player.targetright >= 0))
@@ -219,6 +224,7 @@ void game_draw_player()
NPCS[Player.targetright].location.X + ((NPCS[Player.targetright].hitbox_bl.X + NPCS[Player.targetright].hitbox_tr.X)/2) - 1,
NPCS[Player.targetright].location.Y + NPCS[Player.targetright].hitbox_bl.Y
);
+ sound_pcm_playsample_ifidle(PCMCHANNEL_PLAYER,PCMSAMPLE_PHASER);
}
if(debugs[dbweapons])
@@ -502,9 +508,7 @@ void game_tick_npcs()
NPCS[i].collidable = 0;
NPCS[i].sprite = explode_start;
NPCS[i].explodenextframe = tick + 4;
- sound_play(1,-5,0,100);
- sound_play(3,-15,0,1000);
- sound_play(2,-10,1,100);
+ sound_pcm_playsample(PCMCHANNEL_AMBIENT,PCMSAMPLE_SHIPEXPLODE);
}
}
}
@@ -792,38 +796,14 @@ void game_tick_input()
void game_setup_audio()
{
- sound_voices(4);
-
sound_set_voice(1,"WaveSynth-Beep");
sound_set_voice(2,"Percussion-Noise");
sound_set_voice(3,"Percussion-Soft");
- sound_set_voice(4,"DataVox-Voice");
- sound_pcm_loadsample("sounds.torpedo");
-
-
- inreg.r[0] = 4;
- inreg.r[1] = (int) audiobuffer;
- inreg.r[2] = (int) audiobuffer + 20000;
- _kernel_swi (DataVox_SetMemory, &inreg, &outreg);
-
- // Unsigned 8-bit PCM
- inreg.r[0] = 4;
- inreg.r[1] = 1;
- _kernel_swi (DataVox_Type, &inreg, &outreg);
-
- // Not timed
- inreg.r[0] = 4;
- inreg.r[1] = 0;
- _kernel_swi (DataVox_Timed, &inreg, &outreg);
-
- // Bitrate
- inreg.r[0] = 4;
- inreg.r[1] = 4000; // I was expecting this to be 125 to 8KHz but.... No idea
- _kernel_swi (DataVox_Pitch, &inreg, &outreg);
-
+ sound_pcm_loadsample(PCMSAMPLE_DURNOTORPEDO,"sounds.torpedo");
+ sound_pcm_loadsample(PCMSAMPLE_PHASER,"sounds.phaser");
+ sound_pcm_loadsample(PCMSAMPLE_SHIPEXPLODE,"sounds.shpexp");
}
-
void game_draw_hud()
{
draw_sprite("lcars",4,DISPLAY_Y-164);
@@ -873,7 +853,6 @@ void game1_death()
{
int currentstart = 0;
int introframe = 0;
- sound_voices(4);
sound_set_voice(1,"WaveSynth-Beep");
sound_set_voice(2,"WaveSynth-Beep");
@@ -926,9 +905,7 @@ void game_tick_npcs_scatter()
NPCS[i].collidable = 0;
NPCS[i].sprite = explode_start;
NPCS[i].explodenextframe = tick + 4;
- sound_play(1,-5,0,100);
- sound_play(3,-15,0,1000);
- sound_play(2,-10,1,100);
+ sound_pcm_playsample_ifidle(PCMCHANNEL_AMBIENT,PCMSAMPLE_SHIPEXPLODE);
}
}
}
diff --git a/!TheEsc/c/Mission2 b/!TheEsc/c/Mission2
index 295fd5a..1830057 100644
--- a/!TheEsc/c/Mission2
+++ b/!TheEsc/c/Mission2
@@ -165,8 +165,6 @@ void game2_death()
int currentstart = 0;
int introframe = 0;
- sound_voices(4);
-
sound_set_voice(1,"WaveSynth-Beep");
sound_set_voice(2,"WaveSynth-Beep");
sound_set_voice(3,"WaveSynth-Beep");
diff --git a/!TheEsc/c/Sound b/!TheEsc/c/Sound
index ae79070..72d8ea1 100644
--- a/!TheEsc/c/Sound
+++ b/!TheEsc/c/Sound
@@ -13,7 +13,7 @@ int composition_startcent = -1;
struct CompositionElement composition[COMPOSITION_MAX];
-unsigned char audiobuffer[20000];
+struct pcmsample_s pcmsamples[PCMSAMPLE_MAX];
char *notes[] = {"AX","A#","BX","CX","C#","DX","D#","EX","FX","F#","GX","G#"};
@@ -28,7 +28,7 @@ void sound_composition_load(char* filename)
int length;
// Attempt to get file info
- inreg.r[0] = 13;
+ inreg.r[0] = 5;
inreg.r[1] = (int) filename;
_kernel_swi(OS_File,&inreg,&outreg);
@@ -38,8 +38,8 @@ void sound_composition_load(char* filename)
if(length > sizeof(composition))
{
screen_nobuffer();
- printf("Composition exceeds %d bytes (%d bytes)",sizeof(composition),length);
- exit(0);
+ while(1)
+ printf("Composition exceeds %d bytes (%d bytes)\n",sizeof(composition),length);
}
// Attempt to get file info
@@ -198,12 +198,55 @@ int sound_composition_incomplete()
return 1;
}
-void sound_pcm_loadsample(char* filename)
+void sound_pcm_unset(enum pcmchannel_e channel)
+{
+ inreg.r[0] = channel;
+ inreg.r[1] = 0;
+ _kernel_swi (DataVox_Unset, &inreg, &outreg);
+}
+
+void sound_pcm_playsample(enum pcmchannel_e channel, enum pcmsample_e sample)
+{
+ inreg.r[0] = channel;
+ inreg.r[1] = pcmsamples[sample].data;
+ inreg.r[2] = pcmsamples[sample].data + pcmsamples[sample].length;
+ _kernel_swi (DataVox_SetMemory, &inreg, &outreg);
+
+ // Unsigned 8-bit PCM
+ inreg.r[0] = channel;
+ inreg.r[1] = 1;
+ _kernel_swi (DataVox_Type, &inreg, &outreg);
+
+ // Not timed
+ inreg.r[0] = channel;
+ inreg.r[1] = 0;
+ _kernel_swi (DataVox_Timed, &inreg, &outreg);
+
+ // Bitrate
+ inreg.r[0] = channel;
+ inreg.r[1] = 4000; // I was expecting this to be 125 to 8KHz but.... No idea
+ _kernel_swi (DataVox_Pitch, &inreg, &outreg);
+
+ // Play it
+ inreg.r[0] = channel;
+ inreg.r[1] = -15;
+ inreg.r[2] = 1;
+ inreg.r[3] = 1;
+ _kernel_swi (Sound_Control, &inreg, &outreg);
+}
+
+void sound_pcm_playsample_ifidle(enum pcmchannel_e channel, enum pcmsample_e sample)
+{
+ inreg.r[0] = channel;
+ _kernel_swi (DataVox_ReadAddress, &inreg, &outreg);
+ if(!outreg.r[1])
+ sound_pcm_playsample(channel, sample);
+}
+
+void sound_pcm_loadsample(enum pcmsample_e sample, char* filename)
{
int length;
- memset(audiobuffer,0x00,20000);
-
// Attempt to get file info
inreg.r[0] = 5;
inreg.r[1] = (int) filename;
@@ -212,21 +255,21 @@ void sound_pcm_loadsample(char* filename)
// Length will be in R4 if it exists
length = outreg.r[4];
- if(length > sizeof(audiobuffer))
+ if(length > 100000)
{
screen_nobuffer();
while (1)
- printf("Sample exceeds %d bytes (%d bytes) object type is %d\n",sizeof(audiobuffer),length,outreg.r[0]);
+ printf("Sample exceeds %d bytes (%d bytes) object type is %d\n",100000,length,outreg.r[0]);
}
+ pcmsamples[sample].length = length;
+ pcmsamples[sample].data = malloc(length);
+
// Attempt to get file info
inreg.r[0] = 16;
inreg.r[1] = (int) filename;
- inreg.r[2] = (int) audiobuffer;
+ inreg.r[2] = (int) pcmsamples[sample].data;
inreg.r[3] = 0;
_kernel_swi(OS_File,&inreg,&outreg);
-
- // Fill remainder of array with final byte
- memset(audiobuffer + length,audiobuffer[length-1],sizeof(audiobuffer)-length);
}
diff --git a/!TheEsc/h/Sound b/!TheEsc/h/Sound
index e628a44..ad139c6 100644
--- a/!TheEsc/h/Sound
+++ b/!TheEsc/h/Sound
@@ -37,6 +37,15 @@
#define DataVox_AdjustMemory 0x443A2
#define DataVox_SetInternalPitch 0x443A3
+enum pcmchannel_e{
+ PCMCHANNEL_UI = 5,
+ PCMCHANNEL_PLAYER = 5,
+ PCMCHANNEL_NPC1 = 6,
+ PCMCHANNEL_NPC2 = 7,
+ PCMCHANNEL_AMBIENT = 8
+ };
+enum pcmsample_e{PCMSAMPLE_DURNOTORPEDO, PCMSAMPLE_PHASER, PCMSAMPLE_SHIPEXPLODE, PCMSAMPLE_MAX};
+
struct CompositionElement {
signed short int Start;
unsigned char Note;
@@ -46,4 +55,9 @@ struct CompositionElement {
unsigned short int Length;
};
-extern unsigned char audiobuffer[20000];
+struct pcmsample_s {
+ int data;
+ unsigned int length;
+};
+
+extern struct pcmsample_s pcmsamples[PCMSAMPLE_MAX];
diff --git a/!TheEsc/sounds/phaser b/!TheEsc/sounds/phaser
new file mode 100644
index 0000000..1c18b1d
--- /dev/null
+++ b/!TheEsc/sounds/phaser
@@ -0,0 +1 @@
+€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~~~~~~~~~~}}~~€€€~~~~~~€€€€€€‚€€€€€~~~~~~~~~~€€€}~}~~~€€€€‚‚‚€€~~~~~€€€‚‚}}}|~‚€‚~{~}€€€~€~}}~€€€€‚‚‚€~€~~~|€~€€€~||~}~€}{||~€„…‚…ƒ~€€€‚‚€~€}}}}|}z{||||}€‚€‚€€~€ƒ„…„‚}~}~€€€€‚„„…‚~~}ywuvuy|~ƒƒƒ€‚„ƒƒ€~€}}|zyz}~ƒ‡†‰‡‰†ƒ‚}~{zywz{|‚ƒ„…„‚€}yyyz{|~‚~}‚‚‚„‚~{{{~„ƒ‚ƒ„}}ƒ~{xy|}„„„ƒ|{{}}||}~~€€‚„†„~€‚}|~}|||z}}„ƒ~€{}€‚€{y|}~€„…„ƒ€€…†‚€~|xzz{yy{{‚‡ˆ‡†ˆ„}{zzz{vtw}€……‚‚‚†ƒ}xwyz€‡…ˆ‡‡€~|vuwyƒ‹ƒ…yztx{ttv}‰ˆ†‚Œ†Š~yzz|t{xyw~}„ކˆ’‰ovijjsvow}…‰™”—Ž˜†ƒrnchxr{v~t†ŠŽ†Š‹ˆ’‡y}yztsjlrxs{Œ…”Œ‰†…‚rx}o€~xtvs{{‚|†‰Œ—}„€~uynmq„|Ž~„‰Š}‡{ˆ‚„‚ltrjwt…~€„„ƒˆŽ†„xsqe{}†zv~o|„Š‚†…‘ˆ‹”}…x{smiiqrŒx†ŠŠ‹Œ’x|‹suzw}m‚b~x}ƒ~Š–„ƒ„ƒwqpjwts}o…™‹†wƒ‘ƒ|x‚}xhtsv†…‰Ž’’Œ}Œ€qn^q}…Œ’„…‰x‘}„ˆ{†z{mvhlwƒuŽutƒŠ‹‹‡iƒk‰ŒŠy~v‰‰yŠz‚”€tz{ƒ‰qpwvjo†rvˆƒxƒ{€v…vaz‚wjq€„„~‰~‚{s}ŠŠ†rdf~oqƒ„}t„…|svyˆ•€few‹usrmu‚“vyž‡uˆ‡ƒ„z€{t}…{|Š|ƒŠ…‹ˆŠuv”•saq ‘lpo‘Œœƒl¢¤˜†y“{ypP…Œx†›”Žƒ…Xokw^l_S’zo€{t¤‡m}Rƒ«—c]Pq•™g…§‹•dclŠ‚wŽXo‚ƒ{\wwxŠl\bI”uq~]lxq†‚tk{—ˆYiƒ›}r‚¥¥{wˆ}‹wy¸~ˆ—yhy¨—gNy’¤žUvrЦ‚txjoˆ˜`ov‚¯Šr…•r‡[’Y~Í{Ž”]ºw€SPn°a‰½B¦¨K‡;šƒ\•a¦|Z¡‰hH…bjMy_sª<{‰s]nƒ›e“bb•žW™eEµ¡kŽ¥Th¬ru½nJ“\˜ xb”rе™]Ѝv‰ªˆLruh{œauk‹²Hpšgr{savs[ˆ•n[”°Ÿu„¤ƒrt‰yŽtCŽ“h„¨pjt`˜ƒultoyÁ\DcuºX\U˜bºtGš€‡Œ\ª•d³|нy™ g—…n¼t^{Oƒ‘z¢ªe——`µ}<…mnƒ2Ž>k wŒ¤h‚vwŒu{jwilˆ‹—–b†³r•’l—zM–œYž”kwf‘XpmbŠuŸnfv”›@\‹vzpŸ’fŠŒš™Žˆˆƒšš“‡y‡Œvs€‰qv‹ƒ†‘…ju}ˆ†hcgWq‹ob]}š†˜y›‡zˆkp„l|th†z“l‹…†˜vuxƒ›w{‡‘ƒj`…•lkˆ‡œ…c„Ž…ˆhh‚}wqe‘‰…rq‰–‘rlŠ„‚wb^“Œrm†”|r›Œi„uyœmyd™zŠƒŒ®€„Šru‚krmZ`z…‰{a{“£Šjx……u]gŒ{`~‹Žmw™Œ‰ub’˜|}¤˜u…Œ}}VZ†…xyy‘£Ÿ}vˆx–UF`}j]bw’©”vm“˜‘~iyƒ‘zdppŒ{r›œ¦cq¡•…mf|s‰xKVg†©‡…ylš¢€uf|••‡lkzxxcd•“˜{}}mtƒ‰…Š‚f‹}n†x‡‘z†’„l—›`^hˆlT‡š‘t¥¡…“mv‡c’l]y‹dvox™„}¡ppŒ{gXzr‡‰€y…Œ¦ŒŒŽŽ®vdwszaO{“ƒ‚j¢†{¡—€–yŒ‹Xi^byu{t€‡‰s]qj——އŽdŒxx›w˜ˆy†v’ˆŒŸrŽw{~Szio”u‚u_ƒxxp‰¬Št\‚~`JoŒ“~i†£žp{‰˜¦ƒ|re”‰“uU‘™š›MŽ–t¢B}¥„˜@W•sŽEUœq²]H²{j9v‡Z•¦Žq]‹x¤jC–ƒ¦¬I˜¿ŠÍb`—_–‚4u„y£YY~~›¡dn’¢Ž\Xam£q^piš¢sl|t¿”X¤b³Pvfœqf„x……‘µxošv§|L„d‰€Rxw©—b€e§©XuP~°lgkf«•wW³’¥z4†rŽNoz–®r{{l¥‚uydŠˆ‡|m˜•Žqf›”–„PX{†‘€Mn‡—»Sqs™¹i_Xx¢x„n_¯l€ªY©]§dvV–f¨oƒ™f}b—‡bn†°as~p¥ˆbƒ‚«–bŒk€•I‚ˆTœi_¯^t¢P”œ[u¥xl‡^l†|‘–swŒ™œ€[f¤žvnc¥jYoŒmj‚§pZ~q•–rr|—{yzlŸ›y…lŒb|pn©•ƒŒlx€uwnŒ’’€‚t|cƒƒc‘ywŽfl—a‹TŸuU¡g~¦eŒ˜o’€mƒtˆ…z„eŸx¦vYi‹¬Rzd«sj‡Q‘šq£uh•i f…vL‘Š„«tcxpˆeƒ|w™žˆq]{‚ŒŽ_ˆkƒgM²‰i|O޾Šsfr“’`Pˆ•¶B}˜†±f=ž‹©nk°‘zf\nª…cˆoŸ¤Ac‡Ì„j‚‚T[˜¦zmY_±¤€om»±{tzc¡t1rmÊa‰c—¯XaqkƤcl\‘y\Rd‰˜nˆZ}ªO|˜i¯ž\meŠ–u{c~šx|h|¦„j‹ˆ‹»}>wujƒPSФšxlm’ig}i°Ÿa„o–Q]e^§¢‹•v¨¶‰ƒVX™š}hTv˜¦’Mbˆ‘ÅfrЉ›‰@Zof“•†—šŒfp€‹œzc‰•}`s“Š“|p¤irYsšxopj’{pŒwttmc‹j‘–uºq]cV‡¤€j[k’•|\aª]pvywgTfzsuvsqwˆ‹Ÿ—†€lxngog~z•Ž~Ÿ{cƒxwœ¡„v–s_x[‘‹m›u Žs€b^ˆŠŒˆd‚s_r‹’‘vu––œ‚\z–w„–wŒ’›tkŽcf’q{ŽŒ§“Zg’{|cd}‘vbjxx ¤€™‘yxˆujvs‡sspn}›‡jzŒ§ŽjtœšcDf“†}ltƒv]}¦yy‡„bGSjƒ‰tpy—£’ql‘Œ‹~z€Zq_o‰v—r¥Ÿu¤vuŸ‡{{s‹y‡eŠUmg«u„{“ަ~k[U‚‰’xcmp‹ ƒu“†™njƒwpUr˜“Œ…q“u†T€‡_•Yypw‘}’y€•}r{{{to€l ~]‹oމi†–~pm{y‹€UpŠ|¤Œcm‹œ~‰yc§›zxTq§—vmRpž “€y‹—„kZj…‡|tˆ~w©ogb•†‰ƒ^“z…ožrt’eЉžiŠ”‰}kj„ƒo‰m”‘pžS~‘Y±t€zL†j|lesh¡›‚–vsŽ{u~{uuty€˜~‚……¬{v…pŸ©ykn™“ySDxާ”flm™™ŠYoxƒ_jOW‡xž£h†vt¤ƒe W{—LŽƒZ¦~«e¤”vºrˆƒd—^q‚W‰„t‚|twf†Ž`ˆlNfh…Z‰|v“p‹Œo•‚~§€u‰mx{i„y‡¬”—¤’‹{uˆ”{z†‹‡Žrvˆ€“„vn~uM‹xR˜fLt…O†TO©oxŒb}wvnKu£†˜˜lˆ•‡‹oT•’ºr{™U˜–b¼†€ºNˆ”C´ykÁb”•>’kU¤g‘Lƒz€‡mŠ|Œ©†‰\aƒs¢{hˆc˜°yhI§Š’QyyK–{y ^€‹o’ˆg^my¥nj{Mq…^‹]ˆ…w—ˆxkRoˆ¾¬”VŒj¦ge¥~ž°y‡Tw’d®™€³l^‰emsg‡‰ƒ€‹tn^€p||—•oie]€—q‘‹kœ‚]„Yvc‹ot±€‡Ž_ˆsu”Y{™k•…MŒ}n½•rœkr˜nin~—o‡ƒl†zŽ[™‘\©‚Pªpi§b‰¥a€Šc›™„slx‡oŒ…npw€‡…s‘ze¢‡gŸSl§O„•T†‰|¤…rŸ›‚tjNo^‡Wq¤œškwƒœuqlmQ‡=§e³pp»v…y[{ŒyœŒŸqT`^•ye‘…zª}ƒ¬ca³{†žM’œ\ŽaT¢a{§‚£ u’£’ughQi~a‰^ž„]«g²v‰»k}va‡aXQO’…«toq— bˆX‡tH€iJ‘‡‡|¢x€•x‡bw€[§‰O±lfºr“µfˆYŽtx’‰†„‚”„Žr\œ|^€ˆvœŠY}™y|‰pw‹vi~bv‡_‰sq“Œˆ{{wmm‡_ˆ‘[t…r}†nŒumˆŠqˆ©‰ŒH’Že«ˆkjdˆ¢qŸƒsÍd‘tsŸan~{ˆqhm†–‹‹—~˜‘f“ŒV…Up™Va_s™|ƒ’~¯•qŽue›k\ˆH{ŒU}dpœˆšª_†UP‹of—}P’uz´“Šƒœ¨rXQŽui‹mœ…†£ˆ€¨hx›~‡TQƒWƒ™uˆ£šƒ¢suŒgq„o›jH™g}•e¨Ž~f‹Š‚yJ]qŒzq¦{^{©€•WXš{ocO¢‹k‡–†§pZ‚‚hwƒV”¬h„ƒ]{c‹{z…r†„lz‰t{Š›bw¯~{wMt}aœ’v—b†—u“{wЇ‡’O£Lƒhb·”Œs§zdiVŸ„zV¢n§Œg nŽ[zvt zw…†~Snˆuw”–xc{€—`zˆ‡“kƒy…•gtcl‰†rrž¢yS‡‚yCxˆg™bp›iwmr‘„rj–vt„Zw k{ycŸyƒ¡k¬‰u¹pŽ^–l„[œz‚ªiœ±€‹|qŽ‘roŒzzj\‚jj–‡œ“l|~†sh‚j‘…X˜w}ˆv”¨•o“taˆldŒp‡v‘Œq‡…¦zi„\\‰oŽnzzj¹qL‡fs©p^oiWN¦“grw„y©xaz‡|žŽXŽ…`šii‰žŒO‹hr§L“z¹Š†•VƒoN‚iqŽ‘‚uys„„t…Žˆq`m‚Š€„—¯rz“V‹‹auЉt¢†ˆ–t~‰ƒu}p––oktzŽmsŽƒœ‰c‡‘…jwz†ŠkZztxw]q—’…p~ {t€j¡ƒ[‚Sž¥J†evˤv…„ ”|Wc˜wcE¦§v…8a—…‡`_…¥yugX ‹D“LtÁf¡i€±r–ZŽ„z‚lŒ™œxuœ”ˆ¤[t‚x]{v„>s³n‰}Lœœ™Gn]ŠiM“ŒƒœhušŠ|qd™˜Ÿ§Ÿ¬¯~z~w~Šc`‘›ž„€_’‹hkoФž^`Zp|][Miš‰Š‡Y«|“`c‚’|X}„|{[~x”v˜qpmr‚f†rrvq‰–ˆrqp©dJ“{†Hc’nF© ‹”Owšo–sX¶…§d‚l`‘|`p_¢¬y—hŽÃ†…bd»wYg:„®{‰[[Ç‘•™E—¬Ž±Y@†aƒŽ7j†ƒÂŠe‘xº®HmisÁ…Vlc£‘OkVi»q–z«¯noav vw€b‚¦kyPx–‹s{€š”¢|W†”|ŽkK•…{vWkŽƒ•px®š™‚]p’‚†Em•xŒu[z¨•ˆŒ{z£€£|X—dSœgJ«Iˆ¥KvhÆn€žX•…m]`¾e1Ž“s°{GŠž°Ubr–‰Ouvœ‘r`a…‚}qe |~’iª‡u’ˆSdmyŸ‰vl‚žµ~|w{¦ŠyCnw’›dMi ~‰X[¢¥ ”dJ{k’Fb–nŠ˜q˜cžx²›\‹t€‹bHš}œzt™ƒeq½y\Œ3n²Q‡‹Wœ¶v£†Q¯Žtkk‚ybuVv¤oˆŠ•‰ˆ¨•w~^]“qala®š~pj›—Švq¹›UqOc¦iQ‰k„´rz~j£~X‰iwš_x‰]«vfha‘jh}¢ªuNv¡¦¥YY“}[jƒž§ou„¦˜~’s|“z[|‡o™qx˜€…lŠxƒztž‡tmQ{‚Œepƒ—Ÿ”QnŠq·„E€{œnko‘Ššq[Ž™ll‡“jxs_¬‚dq\s˜se}bu™„‘xU}bvŽI\xv ªuW–Zf«‰hw«–rj°ž£}p¸¥rƒmq¬…v‡„ƒ¡“f—jj˜c…js¡i°™PŠ{b‹sJcy„³¦vbˆ›ksY<›trtd¡£UŒQF¹Uo^rª™Ru‚bž¢fhr|¥fx’x“Š‹qs𝀓ub•sw[Q‚Ï£q‡‚¡cE‰u UH‘˜´xk„¡‚rY|‹©pR”}zšxj„‘–€vˆ‰e`}kršguto“„v‚X|—‚œzYa‘yŽ~dz„“‘~jwŸfœŠ›w]yžŒpoS}´––y\`…‡¦„_Œ^~¢}ux]9”q§p`¢˜ŽzWv thq}~„{…¡“†œ[‚‰„…zts”y[~ˆ€´€b{“‡vj’gh~`—W’¡m˜}N–}ŠRx‘žOZˆh„u€„Ãky¤V™«[{jw‘rŒcg¦„–“uv¯ oše]“agT£d—V®{‚™Xƒe}X’|Qš€†I•ZŠÆl†}„Ž£™gZyi{vˆŽ…_ŽŽw•y‹vƒnw†AŒ‘cŒ]m“c{mo©w…n`‰•koxƒ›{ozr†£“d{lŽÄuŒZev“fs¬rmŸbsxSŽ_š|IÍ“tªrw‹a[bj \r·Zžo¸‘z•i}‰Y b¬Zi‡Zžxl—s’Ì|‹‚Z¦scKh•^•‚Xu›¯n¤“]lZ’{g‰lk~\˜œVª³qŠƒnyux\` oi¨mq‘z‚Žfy’u•qpy•zi˜su¬g¢¤f©ƒ‚šT‚‡7’‹V•‡ey’›tk³jCœ~`›Š;l©{dv‰}k•xY ‘rª¥b™‘U—|m˜qŠˆY±|N£hq¤|“W”†}²]MŽ{Šˆ`pr{™€Š†vvˆ–Šˆau}{…{]|Œˆ~‡okvpjz|mŠ´{•Q††nZd™e»@u³p¤žlVvª_u TlÉ|j•Wtmš]}›iz¥vucaXv–j’²Šovz\˜‰AtŸ‘™ww“‡ …‹j|oresrw‰{u¬š‘h™qxšEYh‡re£v}”s‡˜s˜¨†vŠˆŽ v…gbri~‚°|y›k……ˆmGˆpWo\{s€wxf`®fm”6pˆ|‡^u‡o~“~ šXŒœ|“`a…Šwbrˆœmu›f“³`Š«xxaf~z•nx¡€‚•t€˜ƒ}iqƒœc˜•R«‚Y™[Yzz{‡r{µ}‚›O†…k}^|zx|q¦oš±‚}{j£†ƒR[¹{€©c‚ž‘ºmh‹Qs‹nj‡Št‰}{„‘_‘—j|…™oƒB¨¥W‚{’’pq“•ksq‡’P]YT…eYn\}^i„Vp‡C]eZwl~od’„y–…{}~«{vª‡„š§š®€Ššž}Q{¡˜…Uyœ”‹ic›£–}frikjt~„zŸ¨ƒ‘–mvŒ€‚yu–“`¦uc—zz«†M|¡{gr‹nm›~k’˜p‹ƒx¨‹Q[_£}…„dŒ½}z‘\Y[ˆ¥‡~}ktš~lb]…k vSj‰oˆuWµ’z‚Vz¡t‚‰Ltl˜q›©ch•¤ƒPgosÀ‡KŒ~‚xƒ³rgŽNr˜{ld~¦¯}~_~~hy¼jl€r±vop‚˜³ii™xj‹w]vtiŒs©±‹Vc‚oŽ~GYœ¨–XO˜ŽZ“…`Èžo™Iy¼V={~mv_}¡sr£ˆs‹hq¥~hm…Œ‰~c{moª€nžŽ˜™~…•xbƒo_¤‘l|i‚|f‰‡ˆ‹”vu«‹?Zpdw…lzw±ŽGƒ¹œ\ˆ{¢‡aŒ_Žnmh¶ukÁo| ^“eo‹¦†”RN™aqk;‹„t§do…cˆ€eyWŠ’a‰vnr|¼‘oÁ ’޵‹„Uf—_¨¬7‚«˜ÀS_ ]thXi”Xv|qƒT‚›Sƒnm{€[‡–ƒ’aœož—Wu´}„w`}g…ކx˜?œV˜c_°gjŸ…n£|e¡†e‡Z‚˜jqžmŸ‹rƒ¤zx’`ˆuj‘šuzš}nˆpw™oŒUp€€oWt{z¦‰Š|^ –y†Wl£yar^Œ|eƒ˜¤’„ƒrŸ‘Mz``’W]Œ‚£|R‘‰“Ž]~šœ¨Zi©ŠŸŸaƒ‰¥qw’“žo‰˜Ajy\¡f¤xŠ’~f Q‡‘‚¨_l†€•ki•‚wdm£‡y«ž[|kV˜~ya6¤©z’puº}z–Z|qg‰gz…I{g Š[£§…Ÿƒj™’[e|„…lha…¥bht¿‚€Ž¨s>wl}QXz–¡zmt•°€xk¬ž_Tvx‚˜fo|ÆvJyt£¹]i¦gV‘O˜ˆ@ƒx”ƒ^‡•ƒm}’”tsŠtz`Sˆ~…s“ ‹›oj—„Š…jƒ“|WK‚o†“b˜—•¥ot†pxzYmg]x•o˜‡€˜…wšcƒIdv ”{{~uª„hxc±›`fj–fVއ—¼ŒvpTz…mj‘Œ¨ª`yt¦ggnrŽqj’›–vK{¤‘~f„{kp^v‘te‡|¦ƒB‹‘y¨nfš{†xvz‰“w¨u„yj°ŒNn„hˆuJ‹v‡I}´l£ƒ0†W|Diœ}\[¦¬ryšŠÝ“WŽxœ—vZ€£‰y|¡‡nQ™‹’’:{u‚a^n’vBnny{iˆa¡q}’’¢syšh{lbœ’‰‚}„¬¬‹xZ‰’—onv—€R~dfžh kŠ|Jw›a‰~T«–bz\p —zoŽ™’ƒgI}™…šW“©}‚s]¡•xŒhzp¢qO—{s‘jœˆq|{mˆ~nŒ~kw‡…ˆŽ”p…¨LvUžŒbs…’~jv|‰š‹oŽ…}œfeq[|}yvj‰‘n—©q’]–Ž‚|Z€€“er‚{”…ptu¢²‰pZ‡¦€|xi„Ÿ€[j‘€•”T`¤©…€‚“‹–†cp”ˆl†n{¨‹l€p„™jvŒŠ—˜l}ˆrmef|Œkv„‡…|y|†‹u€„U‡•~vWgm”a\“ˆ‰x‰g…”Pd‚k‘[xŠŠŽiT™ÀpU‰p•£;[“„¬‡`—”{”“Zl’w³W™w|cm©œŒ„x€®|q}G¤–j‹uy¤zijs†‚|v‹|k‰}ƒ¡auŽ‚ŠrssŽ‚gu‰€£‘ewv~›mjta‘a‰…eœ™Œopr•¬[actŸŠc„}‰¸lf…{Ž—Z]{‘¬ŽuVz†ƒ…Ov”œ§d\wt£p`”m°°f^a‰ŠŠsOœŒƒ¿fU‹¯ŠT†y›¦YfPƒ§to‡tŠÂu[ŠŠ…oZt‹ŠŽzO‹tƒ¶An«‰®ŒF€a”ZmQ ²tycm£’s‚†™‡ƒ€`Šz…›_YŠtuS_ˆƒœj„”†o`{wƒ‚l†ƒŒ„i”ˆž—ws|‰yn|~ƒŠƒ_`s‡št]«‡€dgu}¨~khŠŸ…QYj•‚yc¢«™Xxrp”hz‘—yuf}o]Ž•‰‘fjs€eL•‡€µgz¤w zcŒ‹enj{kz¢“‹a}v‹l{xˆ}]`s†Ž~o†›˜{…xzvs~pvf‰k_’{—–›™˜s\ycKwq\›„t‰©ˆwpu–Ÿdpm›iZŽh~Šj‡«‡}‡xžƒ†gŒ…wy|„whss‚||~šˆƒ„}‹l~hfƒjaax›cŒ”¦–„‡’ŠjUr}Žyn~o’“¡l^²–šSKtvzrRqƒ‡‡ƒ}„ „oqrƒ…ƒnry`v……©Œ‡™„¤kr’|unq|pvo~z‡‡‹Œoh}v…[„ŽM{d‘v‚Ž›†‚—a‘’k˜qY”vx£`s™tªR‡{¢yz‰urfgrhmznީЕw|¤_leˆ[ŠŒ`{Š…Ž{}ƒv–|’nŒp‹‚jag¢‡u˜|}—e|–ywyqŒ›ˆŽˆq‰…z„k}ri‘yw‡l‰˜‹ƒy˜ŠW^uY„c€€`…›{‹~y†™”}qlz~‰yw™~rœ’€‘pvž¦ š}^vv’pmƒb•ŒuŸ€i\n‰utaXyo‘lsŠuŽ–zzf|y…žttŒ{‡špt‚u”¾qs‰q‰—}hu•o’wY{xi›”lvX]”›Šc_”Š›mdƒyz•†{~mj”–™€€f‡“žos†u’w‚R€š}£…Hov|–mx~{¢€jŒo‡vv“ya‹Œm‚~ƒ‘•}q“|‚ vcp{yw}j¬˜mU‰’ecvˆ¢wŒ‡h“mss‚˜Œ}{Ÿ•utoz{bwu˜}ˆ]†’xoo“€œ”cqy}‹aKpp“½q{|¸ˆlsZ{ŠvmŽl…jyo£sŠ–¨NpSS–uZƒŽr“‘†‡uƒ’tg|†~šjƒby…ƒ‚…™xxn~u†£uŒ€j|btm|~£h‰}y’ƒhqzo–„j‡^uŸl”›c¡|i»ujG‰”qryŽ~»jO–\ž‹Bƒ‘š©S]~msmsb˜‚g¢‰”žr‚g}µ{wwer ‘vvm“‰‚pm—£ktŸz¨ŠXoˆ™kSr†®xQ‡‰’p`‹‹‘tqš„ŽxNŠ€–vi–†xƒXk}f{Šw•™xˆo†^€\_‰“štxwt±{pŠT©nu]o®xjav©¤ˆduy“uVnŒ›tSs‚¡ƒe…Š›Œks†¨šmUo«Ÿz_Pˆžv”‰Y—™z—z{onŽ‘qdh‡›€ƒ}?nŸq˜ƒ{ƒ‡Mx¤aˆŽi‘{pe„cT`ž¡“z„‰¥uO~|…Vm•„›fJ€—œš_WxŒ”~vm‘ŠNxŸŽ˜f\Šš™^`v•š|eˆ†Œ¦zbU}Ž“•ZOy†©‰|h^”w€™Š‹†„`ˆ‰F„ˆ^¤…xi€u|œ„by—šUf¬zIbO‰³€q\‹Ã’jip¶wRwš‘…WKo‡šSu ›‚j›¬ƒ‡n`“rrxZƒ‡…yr˜“t}ŽŠ¦Ž}‚T‡zl~Nu‘…ªŒu s}¤X}™^“‰lƒ†jmˆ}•Wyv´€~—‡šv_vmzwMv¨”{tYr›™q|“Õ†fwj||M9j€“¥ll¦¬©•Yt§jawjfa†’ˆ’m€Ž«}v|f•}i~emuo—ŠZƒˆ°˜˜otzŠtwdR˜…–‰Ž‡d‹€†¢p\Š„›aUm”‚c_yŸŸfhqi™‡Z`l§¸©kTŠ›u5[£Š““Kм¤}R—zˆ–KvŒ€–`wˆhžpd²j^}g:«„Y‘WžÅhzS¦„d_}’z|l|‘ˆž•‡ªhT`“Ëcf…ažYjQiž‹†x~y…›Š‡{injw–|aob€°r~ih¢±˜{lnr‚\m•q’œtž‘npj¨‹~bk‡¨|W|—mdz‚“zeˆŽkwiZŒŸ~mv¦^dk’§†fx¹ˆsjV£…ˆ`|ky„™ŠKj˜’¥wMq‡‹–nbpux}šua™iH—ƒr’mq|}p…|n|yމqqVi²’f…i„¿‰^|…«i|ƒY€Cfy¤“s}l“§{nž‘ªla}V‘yQ€u©qwšœŽˆ“‡†Šyuul€zts•|ŽzŠœ‰“ƒiuo`‰[y‡m›}lœk‹¦a‚ŠlzY€ŽVl††‹yc†±˜~gm„szwctoz¡Šf•¡…œNUyuU‰„b…§§tnXpÓŠWbN¤vb`|–“‘pr‡£¥jLM~œZ`s’¼ªbjvx¯„u{`Ÿªk‰wZ‡›‡}Œl©lw|€¼´Špkƒnnaa‡n› l–‘pŽoˆqŽ}lm}Xq„\—¨p’~U®œmyx‡‚sO…p›szpa{V²k•h}‡bs‹Hj•hˆˆ†›xvxi n‹rRˆwpl|›™q|Ž£…ns~¡yrrS|œyyˆ–žšwav‡Ÿœnesƒ¯vKb_°tješžeW‰‡¶£Ctzi½g;{x‰¢ˆPpq»w€…k¥’^zud–hW¤ƒSžZŠƒ]³žu—z}€m†r^nXtªŸ~„š…—V¦”Zivi|e€w‹™|˜—q’‡z‰€kb‚]uxk£lz£p‘…_§‡—}dluoyq@qŽ¥mœ—…£ˆxojƒx{]dƒq…¡€\™–zZ •isl_r™k|}g—§ƒi‡~všŠr|}‰xGw‚Š|`‚Ÿ™\oun°f„\ª»Tˆt\ªu\|o©Ž€x~‡—s‚‡c–‹b}g]dsˆ{Š˜’‰™mxqt‡p_iwv†…ˆŠš{}y|hƒ„d‘z}·scšr–Œg„”’y[l——o`k{›lg¡~ƒ¢mœ¤n‰ˆwnpu}›|ui‘{iŸ„f©†… oZˆvpz}r€‰•VYzƒ°–@b…“—PT{ŒŽ‘So˜uyB|”—rUrƒq|Upž† ›ˆ{wŠ‹©fSyf¥‹xŒ‰š”‹zo†š mis¤¦v‹“”f‰sºse†c”‚j\†¤†xy| šP_pO ›mfnV{¥yXi‹¥”aYndsol@vŒ‚œmLˆ‚›¢Ti‘r‰nU||~~‹…Œ”V§v™h›Ÿw¦XxcZ«œs¨¡‰¯•Z“Žmƒ…‹™rivo|~Ž˜œ uqo_œ‘orR€³xleN—©go’p™›Mmfk›„{f…€~u†ušb€t@‘d¨]lh{„`‘†ožŠ†]u‰Š’fqˆ~±\”…‚¡r oƒ_˜™zh€¢ƒjjy©Œizlr„frŠ“—q`y{hjmt|ˆ–ryœvnxoŒ«ƒ_mvv¬[b²kpšyjpŠ~‡ ˜vstƒˆX|x‘ign‡l–€n”ƒˆŸk]…spqŠ£„sq…†„„rtŽ’“~uŒr–¤nƒ{wˆ‰tl›¢ ™h‚—l„Q‚†kŒj˜‡‹lˆrhx†Œew‹nkpKq‘kw|{z€…fwb]‰eƒbu…nˆtfif‡¨tlh¥ªYeˆ—‡_o¡‡ˆ‹Imœy–¥s‚—†…`¢³zœa“†w”ue–ž›§z{™·¡€rYˆ¤Œyfdž–|s|…hug«|a–cu‡czŽqljb~{ipx~~sysŒcr‰ow‚d{kwww„ƒ‚Œ‡€j~uvsaˆ‰ˆ“tr†’‰y|ƒŠŽ‚yuyˆ{~„“Ž”‚|vs‰|„‰yŠŒ}†sz”‚ŽrŽ…‰hfw†„k{ˆŒ…tx}…xrv€w~{r}zx{r|‚nqyq„‰xzˆƒtz{€w|~}…y†ŒˆŠ†…†‚‚wt‡†~‡~„ƒŠ†|„ˆ€Š|xxszzuy€€~…„~ƒŠŠ‡‡ˆƒ„xxx|~{}„†ˆ††‹„€|~}xtrtrqnovwuz|}€zy}~zuwx{zxyxy~~…‡ˆ‹‹‰‰Œ‹Šƒ{zzz~~{‡‡‡‰ƒ~‚‚ƒ~€~~~zzzwx……ƒ††‹‰‚ƒƒ{{}‚|ƒ……ƒ‚…ƒ„„{|€yyyuxxw|~}€}‚€||x{~{|zx}}xyz{€‚ƒ~}|€€€‚„€ƒ}€ƒ€€€€€‚€‚€‚~|~~}~~€‚€~~€}|}~~€€~€€~~}|}}~€€€€~~~~~~~~€‚~}}}}~€€€€~~~~€€~€~€€~~~~~~€€€€~~~~~€€€€€~~€~~€~~€€€€€~~€€€€€€~~~~€€€€€€€€€€€~~~€€€€€€~~~€€€€€~€€€€€€€€€€€€€€€€€€€€€€€€
\ No newline at end of file
diff --git a/!TheEsc/sounds/shpexp b/!TheEsc/sounds/shpexp
new file mode 100644
index 0000000..405aa99
--- /dev/null
+++ b/!TheEsc/sounds/shpexp
@@ -0,0 +1 @@
+€€€€€€€€€€€~€€~}}|||}~}~‡ž–‚womow‰ˆ‚xrmllkqvy‹”–˜™œ–Œ‰Švonqtuwibdinsvwqrƒˆ–—¨¬¥–‘Œ‡Š‰Šuopw}{jTXW``bhksŠ“„ˆž™–‡ŽŽ}u¢sƒœuu—†h]‰”\……]^u„˜}Sžˆc`Nr™™f|ž‘Rl“lT°z—›œj¡†cgx“‰wzUzhXx«§¢x„¡m`}]k8wqq_”·]u«”a•nv„¦|€ˆ\¦‡arˆŒ™‘ŒtmWirgŠ¢šv€”£tox^j_…œ¤’ƒ¨ˆw”’nm€WaxhNKClnqk‹±¸´®ª«ª›Ž~shiiotow}sqodeotvxs‘‰ œ¡¦¦£ª¦ˆ\KLJORRQP[u‘«¾ÆÂ¶£~ohZVNLw™¥£››¥«žˆebgtvupiaZSKJKTZkiŠ´µºÅÍäݬ¯¨ƒ~~ti]PD;=ADNewk›œ¸Ú·™µ·œ’Šms^KDITdoh€ŠŠ“™›—’Ї|qk…ismopw‡‘“‘‘Ž‘“–›š™”ŒwoeZME<@4OQ•vš–¶Á½§¾zUfz˜moƒwt^a‡ofd~ »ÌÏ·˜ybKQXPkŒ›Š„{~†–‹rYHBRI\o?ž¥¯µÁú¬“mbW[^mz{¢®¸Ä qb`fjoqndVKDCHU]rª¸Â¹Íס„‚Œ”—‘ƒo^QJGGOaxž©¨£§œ‘‰…xlYPA[cE`ay£¶Ð¿©°…\z©¨•ŽŠŒ‹‡~rdYQOPU[ft‚“£¢§¸¬Œ|…ˆƒ|xfYGFfV>Hj—¯»ºÄ®ž}\w~›”}‚•Ÿ¨¥¥˜ƒpcRF;?J^ruƒ–£—s}jaz•sGd“”™Š}”¬«š¡yt‹{€Ÿ¬³¡™œ…^A"CO^}{€ƒ†…‘ƒqz…Œxqtnuˆ~y…žµÆÍËÀŒu–‡~T6bigpx}}~woJFL@>On‹¢³¼¾³£žŠ…•q_x™–†€œ™ƒr|mhc[i•ŠŠy{yokqoyƒ‚kXHIK_gI€¥®ª¦¤¥¡¢˜ºË—ª¡¤Ÿž£ˆyS9$(Gb{‰’“ˆytNNt„u{{sZy£€™¢¬²µ®Ÿ¤¢‹}lg]enšŽ„†ˆƒ|v^C65BUi{†Ž“—œ¡§¬®®ª¦›”…„k]b_]MIGJKeœ£°´¥¦³ºœgŒ–~s]LSG=HgŒŸ¯³©’eVPDKXvŠ¢ª¶¬¸˜ƒ™„‹x|oh[jt‰Š†ˆ‚ywuwuu ¡¢™“•”ˆ€vk`UJB;4DP6Dh~™¯ÁÌÎÊÁµ¨”ދІˆjYltn]YSPX`l|‰ªª˜ŠŠˆŠ†€uiWDJZ`d\j‘¢®ºÀÀ¶¬Ÿ‘‚wpgdfkv‡– ¤¡›‘„xld]ZZ]^^\YW]__hr|†”Ÿ¬¹ÅÍÎÎÇÀ°¤˜‘…YDEKSY\ZUJB=?H\Uz«¸Á½´©¢–°©š¥š”¤žƒthfimpwd\|a<`wƒ‰tgaŒ|‘œ¡—Ž„…‚‚„‹“š ¡ ¡˜†ymOIA6.04\€}„Œ”𢧱·ÁÀƼª—…Š‹‘wFBFJXzކdXcWsu‚wu†€~z|}…‹™‚²›š¾¨š£¤^y„¦zPel„U\hTPT`dcp{„¿©‹Œƒ ¸À°–nUXZgO€¡£Ÿ€€~Œ«ª|ƒfWUtu|yu‹‚˜xs‡—ƒŠ|˜¡ šœ™†}VF9MD5@\}•°£ ¬®“œxR]’ˆe{¥¡š{xcdfju‚•£¬®¬¢•Š„„vWirj^OEAGSdj…†}u|†—Ÿª¬¦£’–h†i€”‘zeh\kpilw€…ŒŽŠˆˆ‘œ¥¦£ž‡…i[`eULA1MFUn†‰Ž“‰ƒ……›³°°ÇÏÎúª›Š|pjcd\PF:407:BMZjxˆ•£¬¸ÀÉÊÉÁ¸³‡‚ZNW2./:I[gu€›ªµ¾ÂÁ¼¯¬¶–ZY_dspyxlbXTNhzxz…‡”¹¹®š…ƒycPosopaxv€“‘•‚tvyswŽ•z‚ƒ‡Šrpj’„‚—…—žŒ¤®‘„‡–“{kW>/+,8J\}˜Ž ¨¨¦”‰€yvv{„Ž™£©«©¤œŠj[SLKJDAJUe}–¦¯¯®¤œ„wodjpZfUZh~œ¤¨¤¡—’ŒŠ‡ˆŠ‹˜š™˜™hc{hE,(Qeq~{rw„qdlŠ–Ÿ¸‡¢…ž±›³œ™y‚nx~˜—™qaVF;+WQKY0Jh… ¹‡’¤µº´°žŠ{kkfjs‰¬œš©µª˜‘…‡€ypfe9IiEI[wwyeMq•£¡˜“”“„uss{”•½˜œ£¡Ÿ•kL,@_jomeYifhipŒ «¸¹À±ª™\]gtrNJFb¬‚ƒ~”’Œg‘–Q`‡‚Žt_Œš’zhPHKm™‘¦¡Žost|‘”‰Šˆl€ruftŒ˜—¥ŸœŸ“‘weqt}Œ`8Qs‹~unf_]_hqˆ“›œ¤’˜•Œ‰ƒ‡‡{sporx€†Ž•šžš•Œ†{€}vsnqnoqwxywsnhb]YTSP]SYb†‘…™“—¯ÐÑÔ¸´µ¥Ÿ””ŽŠŠ…ƒ|txbMhMfm90>NHjLCf†Ž‰’–¢¢£š“–Ž‹£™™¼ºž§«žš¢›‚]G0/8+>;W{£«›¤£ž›ž¥¤šhOKNZdr{„‰Ž‘„–‚‰‡‘§‘”››ŽubWUUWZ]^_a`behnu€†z›´¥³Ä½¨£žœŸ¢¡›“sfK8O67%2b†™hŒ“‚„‘–ž””‹~okgmr‚Œ£¯°œ¤—®–oxv€€p_NUcx•ª¶¤‹mYFD:j‚eo…šŸ¸¢yZLbnflw‡“¢¥ž™ˆŠ…Œ”–r_zŽ“‘‰|sjgimu“˜—}s€Ÿ«‘k`ml\NCdlmt}†ŽŒ’‡|xfa]_g|®¸ÄÉËàФ—†€qJ=0;LXOb‹„}loh…“Š—Ÿ¦¥¢_FAEFSg~‹š¯·±©ž—ŠŒ‘‹ƒ{vronnqtw‚„‰ˆ‘¥™’š˜”„phaSMJGGDEEILQhƒ€nj|µÔÜÙ̾®£—ŒŽ•™Ÿž—Їn\Q@QbXOGFIVf{‹˜Ÿ¡›¡£dxs]iU„›–“rc†±ÈÀ°¡–ŠƒysmqnYg|}˜†_Lswnu—™j‘žjsŒpane]Z†©±®Ÿ‚v‡Ÿ•‹“‰Šq`J?HWbs‚Œ›±®˜˜œœš…ueVK@DUSYjŒ«¸º°¦¢¡¤¦¦¡šˆu^HQD;7Oip…Š›˜‹}w{_{ˆ„ˆmy“–„yp{‘¡Ÿ œœ—˜’œŸ”¦¨¡|ywql\[7*7,OJD08ƒ“£Ñ¦¤°¢œŠŠ‡ž¬®¦¤™–•xtƒŒ~ehS8K.5ZZp|‰“—Ÿ¨¯Æ¼‡tsnknin^Yqrnnpxˆ’’’Šƒzrieeorx„›”¢¢š§³Åº½²§ž|fRA630:9ZVGwy’oTƒ•¬´”˜‹ˆxn`nÀÍÍéŽs_QHJP_iˆ|£³˜„¢—gQ\Wq]iut{pin{‡•ž¥§¦ –Ž„|pxnGallqŒ‹‹ƒ€xxsvwˆ”¥¢«Ž‡Ž‡Œu^F@2;]w†—¥¥¬¨xr~MO`y”sm{ž¤Žžœœ¢¡¥dpŽ…{unnlyvs’””‡}ƒ}xsbY\^AAZF[‚‰{z«¾ÊÊÓù²©·tmXW[WVPSKgu[s„™¢¢‡ˆˆ‰‚}tlgnopt}‹‘²µ©žŽyqe[TOTN5a•‚‘¦›‘‘ˆ~“—Œ–ž˜‹ubSMPSaiƒ›º¶¶Ö³œ‘›ŽŒ}lH/SOG7E|p‚Œž¨ªœ‰k€a.rR•Š”¼œ„|{“—›°¹³¡jRypXTt`^ze‡…‚Ž•›¤–‰Ÿ£z?XfroLAPbs‹„†ua‚vvŠ‹Š}wƒ™¬¼ÄÑÔ©™—Ž|hnr\JF@DFRvs}š—›š•Œ„‚kjqjppt€{Ž¢« ¢ ž›’’eUE<;+ /=n¨¼¦³ÄÎÑͽ¬fNC;f{‘}«œ¡›Œˆs{yg’pc‚[\G37]ˆš’~ž•‘ •ŒzmXelda€©¯¶²³¬¤’€i[DR[OƒqnŒ¢±·µ«º¡~w~qcVUmnbK0Le𕢑‘t’©…v™‡k}uh‰xe†‚~‰‚ˆˆ› §¬§¤•„s_XCB86HzroŽ˜£“w‡¤Šž«™–‘ˆ†…‡“‘†ˆhj^`iGd´®¬°±±›†Ž‡‘”– ›¢ž¡‰†^lzumncI=Gr“¨¯«™ƒ†kXYA‡Ž˜—‡}ކ“s‹xu‡euqxu‚‚ytu||ts„†‡€{z}ƒš¥°¶®…kƒƒzSAu|yhbZSs¢q¢£l[s|›„nplrqws„Žx…Ž‚ ¥ ¨~‚¢–‡zuxƒ‘™ ›‹‡‘wrsh^Xkd~l`\jdsy‚ƒ‚~rnvsrntvt‰‘‰„‡–«°µ¶¶¶³¦œŸ’‰’|‚ŽsstoZJ@:9@GOV`aiws\Qjy˜x„v{“®½åÒÌ౨¥››s~lv€Ž”qV]E0;4-@9Qj|Ž –›€†•}mr•¨¤ž¡Ž‰“žŸ©±®¥Š‡ŠxdkTC@>4@Pi{“z§|„žzpoƒ¤¾Î²ŽŠ‘Œ‡–nrƒžxˆtiec\X]KVEkˆ—‘”¢¤š„zobh|z…•““¡±ÉØÓ‘z……yeDF>HKBUKYet}‰“¢½´¤‹‹‡|§’wr€‰‘~fN@DI^ov›§¬¬ª«¨«–•Š€X^hBLawxkqluuxއ•®«±®ªšyi[^^GTTemu„“’§ŠmjcSTpª¼Â¾³šŒwouwvi{}š’y𠩍“v[D8;H\m}ƒ‡˜xhxlb_yާ¨¦ž™ŒŽŠ†…„†„{‚}wka^bouzy}z„†¢¯«¶¯« ŽrYD7(