| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691 |
- //-----------------------------------------------------------------------------
- // BomberRun by George Allan
- //-----------------------------------------------------------------------------
- global score = 0;
- global height = 23;
- global gframe = 0;
- global detec = table();
- global killStars = 0;
- global playerx = 0;
- global playery = 0;
- global fireCnt = 0;
- global fireMax = 3;
- global clearExplo = 0;
- //-----------------------------------------------------------------------------
- //-----------------------------------------------------------------------------
- global sync = function() {
- time = TICK();
- wait = (1./30.) - time;
- if(wait > 0) {
- sleep(wait);
- }
- TICK();
- global gframe = gframe + 1;
- };
- //-----------------------------------------------------------------------------
- //-----------------------------------------------------------------------------
- global star = function() {
- global detec;
- global killStars;
- frame = 0;
- while (1) {
- x = randint(1,79);
- y = randint(2,height);
-
- // On top of a building ?
- if (y < detec[x]-1) {
- // Print Star for a while
- t = randint(50,100);
- for (i=0;i<t;i=i+1) {
- // Choose a twinkle color
- if (randint(0,2) == 0) {
- CATTRIB(CA.F_RED|CA.F_BLUE|CA.F_GREEN | CA.B_BLUE);
- }
- else {
- CATTRIB(CA.F_RED|CA.F_GREEN | CA.B_BLUE);
- }
- // Pop !
- if (i>t-2) {
- XYTEXT(x,y,",");
- }
- else {
- XYTEXT(x,y,".");
- }
- // Sync to the master frame
- while (frame == gframe) {
- yield();
- if (killStars) {
- exit();
- }
- }
- frame = gframe;
- }
-
- // Clear Star
- CATTRIB(CA.F_BLUE | CA.B_BLUE);
- XYTEXT(x,y," ");
- }
- yield();
- if (killStars) {
- exit();
- }
- }
- };
- //-----------------------------------------------------------------------------
- //-----------------------------------------------------------------------------
- global particle = function(x, y) {
- global detec;
- global clearExplo;
- pcoltab = table(CA.F_RED|CA.F_INTENSITY, CA.F_RED|CA.F_GREEN|CA.F_INTENSITY, CA.F_RED|CA.F_GREEN|CA.F_BLUE|CA.F_INTENSITY);
- pfrtab = table(".", "+", "*");
- xmom = randfloat(-1.0,1.0);
- // ymom = randfloat(-0.2,-2.0);
- ymom = randfloat(-2.0,-0.2);
- xpos = x.Float();
- ypos = y.Float();
- frame = -1;
- time = randint(10,40);
- from = time;
-
- frint = randint(0,3);
- while (1) {
- if (y < detec[x]) {
- CATTRIB(CA.F_BLUE | CA.B_BLUE);
- XYTEXT(x,y," ");
- }
- xpos = xpos + xmom;
- ypos = ypos + ymom;
- ymom = ymom + 0.15f;
- x = xpos.Int();
- y = ypos.Int();
- // On Screen
- if ( y >= height || y < 0 || x < 0 || x > 79) {
- exit();
- }
- // Out of Time ?
- time = time - 1;
- if (time < 0 || clearExplo) {
- exit();
- }
- if (y < detec[x]) {
- fr = (time*3) / from;
- CATTRIB(pcoltab[fr] | CA.B_BLUE);
- XYTEXT(x,y,pfrtab[frint]);
- }
- // Sync to the master frame
- while (frame == gframe) {
- yield();
- }
- frame = gframe;
- }
- };
- //-----------------------------------------------------------------------------
- //-----------------------------------------------------------------------------
- global explode = function(x, y) {
- global particle;
- for (i=0;i<10;i=i+1) {
- thread(particle, x, y);
- }
- };
- //-----------------------------------------------------------------------------
- //-----------------------------------------------------------------------------
- global bullet = function() {
- global detec;
- global playerx;
- global playery;
- global score;
- global gframe;
- global fireCnt;
- global score;
- global explode;
- firex = playerx;
- firey = playery+1;
- fireHTG = 4;
- frame = gframe;
-
- score = score - 10;
- while (1) {
- // Detection
- if (firey > height-1 || fireHTG <= 0) {
- fireCnt = fireCnt - 1;
- exit();
- }
- else {
- // If okay - display
- CATTRIB(CA.F_RED|CA.F_GREEN|CA.F_BLUE|CA.F_INTENSITY | CA.B_BLUE);
- XYTEXT(firex,firey,"\31");
- }
- // Sync to the master frame
- while (frame == gframe) {
- yield();
- }
- frame = gframe;
- // Clear Bullet
- CATTRIB(CA.F_BLUE | CA.B_BLUE);
- XYTEXT(firex,firey," ");
- firey = firey + 1;
- first = 0;
- // Detection
- if (detec[firex] < firey) {
- score = score + 10;
- detec[firex] = firey;
- fireHTG = fireHTG - 1;
- // Boom !
- explode(firex,firey);
- }
- }
- };
- //-----------------------------------------------------------------------------
- //-----------------------------------------------------------------------------
- game = function() {
- global detec;
- global killStars;
- global star;
- global bullet;
- global playerx;
- global playery;
- global fireCnt;
- global fireMax;
- global score;
- global explode;
- killStars = 0;
- allgone = 0;
- for (i=0;i<30;i=i+1) {
- thread(star);
- }
- CATTRIB(CA.F_BLUE | CA.B_BLUE);
- CLS();
- coltab = table(CA.B_GREEN|CA.B_RED, CA.B_BLUE|CA.B_RED, CA.B_BLUE|CA.B_GREEN, CA.B_GREEN);
- coltabfore = table(CA.F_GREEN|CA.F_RED, CA.F_BLUE|CA.F_RED, CA.F_BLUE|CA.F_GREEN, CA.F_GREEN);
- btypes = table("\254", "\58", "\124");
- ttypes = table("\191", "\194", "\218");
- // Clear Collision
- for (i=0;i<=150;i=i+1) {
- detec[i] = height;
- }
- // Buildings
- for (x=0;x<80;x=x+1) {
- // Calc Height
- rand = 10;
- if (x < 30) {
- rand = x / 3;
- }
- if (x > 50) {
- rand = (80-x) / 3;
- }
- if (x < 10) {
- rand = 0;
- }
- if (x > 70) {
- rand = 0;
- }
- rand = randint(0,rand);
- if (rand > 1) {
- // Detection
- detec[x] = height-rand;
- // Random Building Color
- col = randint(0,4);
- // Random Top
- if (randint(0,10) < 2) {
- CATTRIB(coltabfore[col] | CA.B_BLUE);
- ttype = randint(0,3);
- XYTEXT(x,height-rand-1,ttypes[ttype]);
- }
- // The Main Building
- btype = randint(0,3);
- CATTRIB(coltab[col] | CA.F_BLACK);
- for (y=height-rand;y<height;y=y+1) {
- if (randint(0,5) < 2) {
- CATTRIB(coltab[col] | CA.F_RED | CA.F_GREEN | CA.F_INTENSITY);
- XYTEXT(x,y,btypes[btype]);
- CATTRIB(coltab[col] | CA.F_BLACK);
- }
- else {
- XYTEXT(x,y,btypes[btype]);
- }
- }
- }
- }
- CATTRIB(CA.F_GREEN | CA.B_BLACK);
- for (x=0;x<80;x=x+1) {
- XYTEXT(x,height,"\178");
- }
- playerx = 2;
- playery = 3;
- anim = 0;
- playermove = 0;
- fireOkay = 0;
- landingtimer = 0;
- while(!ISPRESSED('Q')) {
- // Flattened already ?
- allgone = 1;
- for (i=0;i<80;i=i+1) {
- if (detec[i] != height) {
- allgone = 0;
- }
- }
- // Add Loads of stars
- if (ISPRESSED('S')) {
- for (i=0;i<30;i=i+1) {
- thread(star);
- }
- }
- // Score
- CATTRIB(CA.F_BLUE | CA.F_GREEN | CA.F_INTENSITY | CA.B_BLUE);
- XY(35,1);
- print("Score ", score);
- // Show Memeory Usage
- if (ISPRESSED('M')) {
- XY(1,2);
- print("Memory ", sysGetMemoryUsage());
- }
- if (ISPRESSED(' ')) {
- if (fireCnt < fireMax && (fireOkay || fireMax == 50)) {
- thread(bullet);
- fireCnt = fireCnt + 1;
- }
- fireOkay = 0;
- }
- else {
- fireOkay = 1;
- }
- // Clear Player
- CATTRIB(CA.F_BLUE | CA.B_BLUE);
- XYTEXT(playerx-2,playery," ");
- // Auto Pilot landing
- if (allgone && playery < height-1) {
- landingtimer = landingtimer + 1;
- if (landingtimer > 10) {
- landingtimer = 0;
- playery = playery + 1;
- }
- }
- // Move and reposition if reach the side of the screen
- playerx = playerx+1;
- if (playerx > 79) {
- playerx = 2;
- playery = playery + 1;
- }
-
- // Not too low
- if (playery > height-1) {
- playery = height-1;
- }
- // Print at new position
- CATTRIB(CA.F_RED|CA.F_GREEN|CA.F_BLUE|CA.F_INTENSITY | CA.B_BLUE);
- XYTEXT(playerx-2,playery,"\200");
- XYTEXT(playerx-1,playery,"\205");
- XYTEXT(playerx,playery,"\254");
- // Landed !!!
- if (playerx == 60 && playery == height-1) {
- for (i=0;i<60;i=i+1) {
- sync();
- }
- // Completion bonus - based on fireMax
- if (score != 50) {
- score = score + (6-fireMax) * 1000;
- }
- niceone();
- return;
- }
- // Hit a building (ignores arieals)
- if (detec[playerx+1] <= playery) {
- sync();
- y0 = playery;
- y1 = playery;
- y2 = playery;
- x = playerx;
-
- // Dramatic Pause !
- for (i=0;i<20;i=i+1) {
- XYTEXT(x-2,y0,"\200");
- XYTEXT(x-1,y1,"\205");
- XYTEXT(x-0,y2,"\254");
- sync();
- }
- done = 0;
- while (!done) {
- done = 1;
- // Clear
- CATTRIB(CA.F_BLUE | CA.B_BLUE);
- XYTEXT(x-2,y0," ");
- XYTEXT(x-1,y1," ");
- XYTEXT(x-0,y2," ");
- // Move
- if (y0 < detec[x-2]-1) {
- y0 = y0 + 1;
- done = 0;
- }
- if (y1 < detec[x-1]-1) {
- y1 = y1 + 1;
- done = 0;
- }
- if (y2 < detec[x-0]-1) {
- y2 = y2 + 1;
- done = 0;
- }
- // Print
- CATTRIB(CA.F_RED|CA.F_GREEN|CA.F_BLUE|CA.F_INTENSITY | CA.B_BLUE);
- XYTEXT(x-2,y0,"\200");
- XYTEXT(x-1,y1,"\205");
- XYTEXT(x-0,y2,"\254");
- sync();
- }
-
- for (i=0;i<60;i=i+1) {
- XYTEXT(x-2,y0,"\200");
- XYTEXT(x-1,y1,"\205");
- XYTEXT(x-0,y2,"\254");
- sync();
- }
- gameover();
- return;
- }
- else {
- if (anim == 1) {
- XYTEXT(playerx+1,playery,"\217");
- anim = 0;
- }
- else {
- XYTEXT(playerx+1,playery,"\191");
- anim = 1;
- }
- }
-
- // Next Frame
- sync();
- }
- };
- //-----------------------------------------------------------------------------
- //-----------------------------------------------------------------------------
- titlescreen = function() {
- global killStars = 1;
- global fireMax = 0;
- global score = 0;
- global detec;
- global clearExplo = 0;
-
- for (i=0;i<81;i=i+1) {
- detec[i] = height;
- }
- CATTRIB(0);
- CLS();
- CATTRIB(CA.F_RED);
- CURSOR(0,0);
- maxtab = 12;
- tabindex = 0;
- tctab = table( CA.F_RED|CA.F_BLUE|CA.F_GREEN | CA.F_INTENSITY,
- CA.F_GREEN | CA.F_INTENSITY | CA.F_INTENSITY,
- CA.F_BLUE,
- CA.F_GREEN | CA.F_INTENSITY,
- CA.F_RED|CA.F_GREEN | CA.F_INTENSITY,
- CA.F_RED|CA.F_BLUE|CA.F_GREEN | CA.F_INTENSITY,
- CA.F_BLUE | CA.F_INTENSITY,
- CA.F_BLUE | CA.F_INTENSITY,
- CA.F_RED|CA.F_BLUE|CA.F_GREEN,
- CA.F_BLUE,
- CA.F_BLUE | CA.F_INTENSITY,
- CA.F_RED|CA.F_GREEN | CA.F_INTENSITY );
- maxtab2 = 8;
- tabindex2 = 0;
- tctab2 = table( CA.F_RED|CA.F_BLUE|CA.F_GREEN | CA.F_INTENSITY,
- CA.F_RED|CA.F_BLUE|CA.F_GREEN | CA.F_INTENSITY,
- CA.F_RED|CA.F_BLUE|CA.F_GREEN | CA.F_INTENSITY,
- CA.F_RED|CA.F_GREEN | CA.F_INTENSITY,
- CA.F_RED | CA.F_INTENSITY,
- CA.F_RED,
- CA.F_RED | CA.F_INTENSITY,
- CA.F_RED|CA.F_GREEN | CA.F_INTENSITY );
- // Flush Keyboard !?
- ISPRESSED(' ');
- ISPRESSED(' ');
- ISPRESSED(' ');
- while(!fireMax) {
- // Start in which mode
- if (ISPRESSED('1')) { fireMax = 1; }
- if (ISPRESSED('2')) { fireMax = 2; }
- if (ISPRESSED('3')) { fireMax = 3; }
- if (ISPRESSED('4')) { fireMax = 4; }
- if (ISPRESSED('5')) { fireMax = 5; }
- if (ISPRESSED(' ')) { fireMax = 3; }
- if (ISPRESSED('C')) { fireMax = 50; }
- if (ISPRESSED(27)) { threadKillAll(true); } // Kill all threads when ESC is pressed
- // Title Color
- tabindex = tabindex + 1;
- if (tabindex >= maxtab) {
- tabindex = 0;
- }
- CATTRIB(tctab[tabindex]);
- CLS();
- XYTEXT(4,2,` ________ ______ ________ `);
- XYTEXT(4,3,` ___ __ )____________ ______ /________________ __ \___ ________ `);
- XYTEXT(4,4,` __ __ | __ \_ __ ``__ \_ __ \ _ \_ ___/_ /_/ / / / /_ __ \ `);
- XYTEXT(4,5,` _ /_/ // /_/ / / / / / / /_/ / __/ / _ _, _// /_/ /_ / / / `);
- XYTEXT(4,6,` /_____/ \____//_/ /_/ /_//_.___/\___//_/ /_/ |_| \__,_/ /_/ /_/ `);
- // Text Color
- tabindex2 = tabindex2 + 1;
- if (tabindex2 >= maxtab2) {
- tabindex2 = 0;
- }
- CATTRIB(tctab2[tabindex2]);
- XYTEXT(12,8, " Written in GameMonkey by Happy ");
- XYTEXT(12,11, " Flatten the city by dropping bombs (spacebar)");
- XYTEXT(12,12, " Destory all buildings to land saftley");
- XYTEXT(12,13, " Score 10 points for each builing piece destoryed");
- XYTEXT(12,14, " Loose 10 points for each bomb dropped");
- XYTEXT(12,15, " Landing bonus is based on difficulty setting");
- XYTEXT(12,18, " Press 'Space' to play at standard level");
- XYTEXT(12,19, " Press 1-5 to choose difficulty (number of bombs)");
- XYTEXT(12,20, "Press 'C' to play the cheat version (hold the spacebar!)");
- XYTEXT(12,21, " Press 'Q' to to quit during play");
- XYTEXT(12,22, " Press ESC to exit game now");
- x = randint(2,78);
- y = randint(2,height-2);
- explode(x,y);
- sync();
- }
-
- clearExplo = 1;
- sync();
- sync();
- clearExplo = 0;
- };
- //-----------------------------------------------------------------------------
- //-----------------------------------------------------------------------------
- global niceone = function() {
- global killStars = 0;
- global detec;
- global score;
- global clearExplo = 0;
- global fireMax;
- for (i=0;i<500;i=i+1) {
- thread(star);
- }
- for (i=0;i<200;i=i+1) {
- CATTRIB(CA.F_RED|CA.F_GREEN|CA.F_BLUE|CA.F_INTENSITY|CA.B_BLUE);
- CLS();
- XYTEXT(1,7,` .__ __. __ ______ _______ ______ .__ __. _______ __ __ __ `);
- XYTEXT(1,8,` | \ | || | / | ____| / __ \ | \ | || ____| | || || | `);
- XYTEXT(1,9,` | \| || || ,----' |__ | | | || \| || |__ | || || | `);
- XYTEXT(1,10,` | . `` || || | | __| | | | || . `` || __| | || || | `);
- XYTEXT(1,11,` | |\ || || ``----. |____ | ``--' || |\ || |____ |__||__||__| `);
- XYTEXT(1,12,` |__| \__||__| \______|_______| \______/ |__| \__||_______| (__)(__)(__) `);
- XY(1,15);
- if (score < 0) {
- print(" You score is to crap too mention !");
- }
- else if (score < 1500) {
- print(" Your score is a average", score);
- }
- else if (score < 3000) {
- print(" Your score is a respectable", score);
- }
- else {
- print(" Your score is an awesome", score);
- }
- if (fireMax == 50) {
- XY(1,17);
- print(" --- Now try again without cheating ;) ---");
- }
- x = randint(2,78);
- y = randint(2,height-2);
- explode(x,y);
- sync();
- }
- };
- //-----------------------------------------------------------------------------
- //-----------------------------------------------------------------------------
- global gameover = function() {
- global killStars = 1;
- global detec;
- global score;
- global clearExplo = 1;
-
- CATTRIB(CA.F_RED|CA.F_INTENSITY);
- for (i=height+15;i>-15;i=i-1) {
- CLS();
- y = i;
- if (y >= 0 && y <= height) { XYTEXT(8,y,` _______ ___ .___ ___. _______ `); }
- y = y + 1;
- if (y >= 0 && y <= height) { XYTEXT(8,y,` / _____| / \ | \/ || ____| `); }
- y = y + 1;
- if (y >= 0 && y <= height) { XYTEXT(8,y,` | | __ / ^ \ | \ / || |__ `); }
- y = y + 1;
- if (y >= 0 && y <= height) { XYTEXT(8,y,` | | |_ | / /_\ \ | |\/| || __| `); }
- y = y + 1;
- if (y >= 0 && y <= height) { XYTEXT(8,y,` | |__| | / _____ \ | | | || |____ `); }
- y = y + 1;
- if (y >= 0 && y <= height) { XYTEXT(8,y,` \______|/__/ _\__\|__|__|__||_______| `); }
- y = y + 1;
- if (y >= 0 && y <= height) { XYTEXT(8,y,` / __ \ \ \ / /| ____| _ \ `); }
- y = y + 1;
- if (y >= 0 && y <= height) { XYTEXT(8,y,` | | | | \ \/ / | |__ | |_) | `); }
- y = y + 1;
- if (y >= 0 && y <= height) { XYTEXT(8,y,` | | | | \ / | __| | / `); }
- y = y + 1;
- if (y >= 0 && y <= height) { XYTEXT(8,y,` | ``--' | \ / | |____| |\ \----. `); }
- y = y + 1;
- if (y >= 0 && y <= height) { XYTEXT(8,y,` \______/ \__/ |_______| _| ``._____| `); }
- y = y + 1;
- sync();
- }
- };
- //-----------------------------------------------------------------------------
- // and finaly - the main loop !
- //-----------------------------------------------------------------------------
- while (1) {
- titlescreen();
- game();
- }
- //-----------------------------------------------------------------------------
- //-----------------------------------------------------------------------------
|