From 17f0c4dcda9604246ad318211e47ed33589c76e2 Mon Sep 17 00:00:00 2001 From: stevenhowes <38082088+stevenhowes@users.noreply.github.com> Date: Wed, 31 Mar 2021 21:08:48 +0100 Subject: [PATCH] Mission 1 ending and victory screen --- !TheEsc/!RunImage,ff8 | Bin 17260 -> 19120 bytes !TheEsc/Spr,ff9 | Bin 97696 -> 122276 bytes !TheEsc/c/CTheEscape | 1 + !TheEsc/c/Graphics | 4 + !TheEsc/c/Mission1 | 169 ++++++++++++++++++++++++++++++++++++++---- README.md | 2 + 6 files changed, 163 insertions(+), 13 deletions(-) diff --git a/!TheEsc/!RunImage,ff8 b/!TheEsc/!RunImage,ff8 index ad5df22a7e3b14bb4ed8e7cb4508b5d5ece91bbb..9751b2dfd9660635148e4f9aed036303851dea8f 100644 GIT binary patch delta 6734 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 Sv`h!l3x$M?>>~P^ul@_b8AuEO delta 5156 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 Dawo-8 diff --git a/!TheEsc/Spr,ff9 b/!TheEsc/Spr,ff9 index 54e020a84f05ce3d852906a0005ae2df6bc31009..aa9c7a085d031744c599b38ab416516e659132e9 100644 GIT binary patch delta 2642 zcmeHJL2DC16n--_SvD3-wn;Z8(v*S?g|xJ=_2i+wDg`Z33SLso;>Bp8;$>-r{Q*LG z+xF0dIpp9$4JDQy`X}rU5cD7P?qPj1J9f8_3D#QU!GT%6_ujYP_vS4b()ylg9~-Gf z07%n*_vLl!FvWH^Cht53c=DprSYKOx?mh#!OVwMn#VXORaDY!U-8Y9x-jvDk@o)gE zIRMYN<%RrdOukxijmzK*`CrCJ^X`@U%V}whRr*T(`&-NEzvNHj`h|}FEM?H=|NYbS znHJ!ITgFnoY-{9^ncgE!O`8UNCA=8qEsBe70q-vjO+nj2r-LW; zDe{}_=QpR3)usVgtD|C&q+G#|uB~vD@GOJ9jLU51E9)_=H43;^HDaV3VT;ISL}um^ zT2G7O6AZtPEj;0+q`X~2-R`%E98(U2vmxewhk^{_zGUUkDiJDB&XVk2DB|59-iYM& zLcMtB^)m9^qHIU>c^>IIh*Wy{Mmd|5)dV<*Q-{sk-1ljCh^^%;eU?`kmti7QHs%O`P4D#)XZ2!gb0I;m&4W#V;vN;O(t^x7M_n5*VQ%`!ld8c);*<;#5^d zA{Vdz5B}ajvMf=jzieeZXxrU|&uLx^90!6x>_FZ+;wdm~Y#BF`Aovx*XV;ImS6GJU V1tHw?^9nlvjzhmY+Yl9!_yHp0X`KK7 delta 24 ecmZ3on|;A=RxUdR1_l8jUQ*l0wUvu;S}g!tXa?Q@ diff --git a/!TheEsc/c/CTheEscape b/!TheEsc/c/CTheEscape index 995a552..ccc9519 100644 --- a/!TheEsc/c/CTheEscape +++ b/!TheEsc/c/CTheEscape @@ -66,6 +66,7 @@ int main(int argc, char *argv[]) } lastoutcome = outcome; } + game1_victory(); lastoutcome = 1; diff --git a/!TheEsc/c/Graphics b/!TheEsc/c/Graphics index eafcfe4..e0d1ecf 100644 --- a/!TheEsc/c/Graphics +++ b/!TheEsc/c/Graphics @@ -152,8 +152,12 @@ void draw_spritetext(char* text, int x, int y) case 'i': case 'y': case '.': + case ',': currentx += 6 + 2; break; + case '\'': + currentx += 4 + 2; + break; case 'm': currentx += 14 + 2; break; diff --git a/!TheEsc/c/Mission1 b/!TheEsc/c/Mission1 index cbde188..bb68ba4 100644 --- a/!TheEsc/c/Mission1 +++ b/!TheEsc/c/Mission1 @@ -4,7 +4,7 @@ #define PLAYER_X_SPEED 10 #define MAX_NPCS 5 #define MAX_STARS 10 -#define MAX_PROJECTILES 10 +#define MAX_PROJECTILES 15 //#defene PROFILE(X) lastprofile = clock(); X; printf("\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t%s %i\n", #X, (clock() - lastprofile)) #define PROFILE(X) X @@ -89,8 +89,8 @@ extern int lasttick; enum debugs_e{dbbase,dbhitbox,dbweapons,dbinput,dbperformance,dbnpcs,dbprojectiles,dbmax}; int debugs[dbmax]; -enum colour_e{lcars_black,lcars_violet1,debugpink,stargrey,debuggreen,phaserorange1,phaserorange2}; -int colours[] = {0x11111100,0xc4727200,0xcc00ff00,0x66666600,0x00ff0000,0x0053ff00,0x00d5ff00}; +enum colour_e{lcars_black,lcars_violet1,debugpink,stargrey,debuggreen,phaserorange1,phaserorange2,tractor1,tractor2,tractor3,tractormax}; +int colours[] = {0x11111100,0xc4727200,0xcc00ff00,0x66666600,0x00ff0000,0x0053ff00,0x00d5ff00,0x2e120600,0x1c100a00,0x75250000,0xbf430a00}; void game_spawn_projectile(int id, int Px, int Py, int Vx, int Vy, enum sprite_e spritestart, enum sprite_e spriteend, int damage) { @@ -369,6 +369,8 @@ void game_setup_input() void game_respawn_npc(int id) { + if(Player.remainingdistance <= 120000) + return; NPCS[id].location.X = rand() % DISPLAY_X; NPCS[id].location.Y = DISPLAY_Y + (rand() % (DISPLAY_Y/2)); if((rand() % 10) > 3) @@ -383,7 +385,7 @@ void game_respawn_npc(int id) NPCS[id].idlesprite = durno_ship; NPCS[id].sprite = durno_ship; NPCS[id].velocity.X = 0; - NPCS[id].velocity.Y = (rand() % 3) + 1; + NPCS[id].velocity.Y = (rand() % 6) + 1; NPCS[id].health = 1000; NPCS[id].hitbox_bl.X = 0; NPCS[id].hitbox_bl.Y = 0; @@ -392,14 +394,14 @@ void game_respawn_npc(int id) NPCS[id].collideforce = 1000; NPCS[id].weaponspritestart = photon1; NPCS[id].weaponspriteend = photon2; - NPCS[id].fireinterval = 200; + NPCS[id].fireinterval = 100; NPCS[id].firewidth = 400; break; case littledurno: NPCS[id].idlesprite = durno_ship2; NPCS[id].sprite = durno_ship2; - NPCS[id].velocity.X = (rand() % 1) - 2; - NPCS[id].velocity.Y = (rand() % 2) + 3; + NPCS[id].velocity.X = (rand() % 4) + 2; + NPCS[id].velocity.Y = (rand() % 4) + 2; NPCS[id].health = 300; NPCS[id].hitbox_bl.X = 0; NPCS[id].hitbox_bl.Y = 0; @@ -409,7 +411,7 @@ void game_respawn_npc(int id) NPCS[id].weaponspritestart = plasma1; NPCS[id].weaponspriteend = plasma2; NPCS[id].fireinterval = 80; - NPCS[id].firewidth = 60; + NPCS[id].firewidth = 30; break; }; } @@ -448,6 +450,9 @@ void game_tick_npcs() NPCS[i].velocity.X = 1; else NPCS[i].velocity.X = -1; + + // Make the accelerate if they're close + NPCS[i].location.Y -= (tick - lasttick) * NPCS[i].velocity.Y; } } @@ -724,11 +729,16 @@ void game_tick_input() // Q if(input_readkey(16)) - Player.integrity = 1000; + Player.remainingdistance = 0; // debugs[dbbase] = 1; - if(tick > Player.nextidlesprite) - Player.sprite = Player.idlesprite; + + + // E + if(input_readkey(33)) + { + Player.remainingdistance = 120000; + } // Right arrow if(input_readkey(121)) @@ -796,6 +806,9 @@ void game1_setup() void game_tick_player() { + if(tick > Player.nextidlesprite) + Player.sprite = Player.idlesprite; + Player.remainingdistance -= Player.velocity * (tick - lasttick); if(Player.shields < 100) @@ -884,6 +897,87 @@ void game1_death() } } +void game_tick_npcs_scatter() +{ + int i; + for(i = 0; i < MAX_NPCS; i++) + { + NPCS[i].location.Y -= (tick - lasttick) * NPCS[i].velocity.Y; + if(NPCS[i].velocity.X == 0) + { + if(NPCS[i].location.X > Player.location.X) + NPCS[i].velocity.X = 1; + else + NPCS[i].velocity.X = -1; + } + NPCS[i].location.X += (tick - lasttick) * ((NPCS[i].velocity.X * 3)); + + if(NPCS[i].health <= 0) + { + if(NPCS[i].sprite == NPCS[i].idlesprite) + { + 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); + } + } + } +} + +void game_draw_tractor() +{ + int tractorx; + int colour; + + Player.location.Y += PLAYER_X_SPEED * (tick - lasttick) / 6; + + for(tractorx = 0; tractorx <= (Player.hitbox_tr.X - Player.hitbox_bl.X); tractorx++) + { + colour = tractor1; + colour += rand() % (tractormax - tractor1); + graphics_colour(colours[colour]); + if(tractorx % 2 == 0) + { + draw_line( + (Player.location.X + Player.hitbox_bl.X) + tractorx, + Player.location.Y + (Player.hitbox_tr.Y/2), + DISPLAY_X/2, + DISPLAY_Y + 500 + ); + }else{ + draw_dotted_line( + (Player.location.X + Player.hitbox_bl.X) + tractorx, + Player.location.Y + (Player.hitbox_tr.Y/2), + DISPLAY_X/2, + DISPLAY_Y + 200 + ); + } + } +} + +void game_tick_endingcentre() +{ + if((Player.location.X + Player.hitbox_bl.X + (Player.hitbox_tr.X/2)) < ((DISPLAY_X/2)-50)) + { + Player.location.X += PLAYER_X_SPEED * (tick - lasttick); + Player.sprite = player_shipr; + Player.nextidlesprite = tick + 15; + } + else if((Player.location.X + Player.hitbox_bl.X + (Player.hitbox_tr.X/2)) > ((DISPLAY_X/2)+50)) + { + Player.location.X -= PLAYER_X_SPEED * (tick - lasttick); + Player.sprite = player_shipr; + Player.nextidlesprite = tick + 15; + } + else + { + Player.location.X = (DISPLAY_X/2); + } +} + void game1_briefing() { screen_clear(); @@ -907,6 +1001,37 @@ void game1_briefing() } } +void game1_victory() +{ + screen_clear(); + + draw_spritetext( +"~~~~~~~~{chief engineers log - uss archimedes - stardate 1234567890 ~~==========~~===============}\n\n\nour shuttlepod has been rescued by the uss archimedes - but our job here isn't done. the archimedes is now under attack \nfrom the durnovarians, and recoverying the shuttle has come at a cost. Several major systems are now offline.\n\n\n\n\n\n\n\n\n\n\n\n\n\n~~~~~~~~{==========================================~~~~~~~~=======}" +, 50, 950); + + draw_sprite("spacebar",(DISPLAY_X/2)-106,50); + + screen_flipbuffer(); + + tick = clock(); + while(1) + { + if(clock() > (tick + 100)) + { + if(input_readkey(98)) + return; + } + } +} + +void game_draw_comms(char* msg) +{ + draw_sprite("commspanel",4,DISPLAY_Y-164); + draw_spritetext( +msg +, 80, DISPLAY_Y-80); +} + int game1_tick() { lasttick = tick; @@ -915,9 +1040,28 @@ int game1_tick() screen_flipbuffer(); screen_clear(); - if(Player.integrity > 200) + if(Player.remainingdistance <= 0) { return 2; + }else if (Player.remainingdistance <= 120000) + { + if(Player.remainingdistance <= 80000) + { + PROFILE(game_draw_tractor()); + } + + game_tick_endingcentre(); + // Run a smaller subset of the norm near the ending + PROFILE(game_tick_stars()); + PROFILE(game_tick_player()); + PROFILE(game_tick_npcs_scatter()); + PROFILE(game_tick_projectiles()); + PROFILE(game_draw_stars()); + PROFILE(game_draw_player()); + PROFILE(game_draw_npcs()); + PROFILE(game_draw_projectiles()); + game_draw_comms("Shuttlepod Phoebe - this is the USS Archimedes.\nPower down your engines and stand by for\nimmediate tractor beam recovery."); + return 0; } else if(Player.integrity > 0) { @@ -927,7 +1071,6 @@ int game1_tick() PROFILE(game_tick_npcs()); PROFILE(game_tick_collider()); PROFILE(game_tick_player_targets()); - PROFILE(game_tick_npcs()); PROFILE(game_tick_projectiles()); PROFILE(game_draw_stars()); PROFILE(game_draw_player()); diff --git a/README.md b/README.md index 76300a2..249b6e6 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,8 @@ Right Arrow: Right Q: Skip level (will be removed) +E: Move closer to level end + Space Bar: Fire phasers