From eeb38707aeda2bc0fdcecede3aa6ffc996a0f4f0 Mon Sep 17 00:00:00 2001 From: stevenhowes <38082088+stevenhowes@users.noreply.github.com> Date: Sun, 21 Mar 2021 22:00:38 +0000 Subject: [PATCH] Player weapons --- !RunImage,ff8 | Bin 12896 -> 14364 bytes c/CTheEscape | 117 ++++++++++++++++++++++++++++++++++++++++++++------ c/Graphics | 12 ++++++ 3 files changed, 115 insertions(+), 14 deletions(-) diff --git a/!RunImage,ff8 b/!RunImage,ff8 index 5f0b5b4d0830f9cd82a4c11ac51c6e14f63f8569..9343bf34e3a36625b4baff9d26821f21b3f5602c 100644 GIT binary patch delta 6819 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 delta 5395 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 0)) + { + graphics_colour(colours[phaserorange1]); + draw_line( + Player.location.X + Player.phaser1.X, + Player.location.Y + Player.phaser1.Y, + NPCS[Player.targetleft].location.X + ((NPCS[Player.targetleft].hitbox_bl.X + NPCS[Player.targetleft].hitbox_tr.X)/2), + NPCS[Player.targetleft].location.Y + NPCS[Player.targetleft].hitbox_bl.Y + ); + graphics_colour(colours[phaserorange2]); + draw_dotted_line( + Player.location.X + Player.phaser1.X + 1, + Player.location.Y + Player.phaser1.Y, + 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 + ); + draw_dotted_line( + Player.location.X + Player.phaser1.X - 1, + Player.location.Y + Player.phaser1.Y, + 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 + ); + } + + if((Player.firingright) && (Player.targetright >= 0)) + { + graphics_colour(colours[phaserorange1]); + draw_line( + Player.location.X + Player.phaser2.X, + Player.location.Y + Player.phaser2.Y, + NPCS[Player.targetright].location.X + ((NPCS[Player.targetright].hitbox_bl.X + NPCS[Player.targetright].hitbox_tr.X)/2), + NPCS[Player.targetright].location.Y + NPCS[Player.targetright].hitbox_bl.Y + ); + graphics_colour(colours[phaserorange2]); + draw_dotted_line( + Player.location.X + Player.phaser2.X + 1, + Player.location.Y + Player.phaser2.Y, + 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 + ); + draw_dotted_line( + Player.location.X + Player.phaser2.X - 1, + Player.location.Y + Player.phaser2.Y, + 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 + ); + } + if(debugs[dbweapons]) { graphics_colour(colours[debuggreen]); @@ -353,7 +405,9 @@ void game_setup_player() Player.phaser2.Y = 75; Player.targetleft = -1; Player.targetright = -1; - + Player.firingleft = 0; + Player.firingright = 0; + Player.phaserdamage = 10; } void game_tick_stars() @@ -404,6 +458,7 @@ void game_respawn_npc(int id) switch(NPCS[id].npctype) { case bigdurno: + NPCS[id].idlesprite = durno_ship; NPCS[id].sprite = durno_ship; NPCS[id].velocity.X = 0; NPCS[id].velocity.Y = (rand() % 3) + 1; @@ -415,6 +470,7 @@ void game_respawn_npc(int id) NPCS[id].collideforce = 1000; break; case littledurno: + NPCS[id].idlesprite = durno_ship2; NPCS[id].sprite = durno_ship2; NPCS[id].velocity.X = (rand() % 3) - 1; NPCS[id].velocity.Y = (rand() % 2) + 6; @@ -496,7 +552,7 @@ void game_draw_debugmenu() font_colour(colours[debuggreen],colours[lcars_black],font[sys_12_8]); for(i = 0; i < MAX_NPCS; i++) { - sprintf(hudbuffer,"NPCS[%i] %i,%i %i,%i %i",i,NPCS[i].velocity.X,NPCS[i].velocity.Y,NPCS[i].location.X,NPCS[i].location.Y); + sprintf(hudbuffer,"NPCS[%i] %i%i,%i %i,%i %i",i,NPCS[i].health,NPCS[i].velocity.X,NPCS[i].velocity.Y,NPCS[i].location.X,NPCS[i].location.Y); draw_text(hudbuffer,DISPLAY_X-800,DISPLAY_Y-60-(i * 20),font[sys_12_8]); } } @@ -548,15 +604,6 @@ void game_collider_tick() Player.integrity += Player.shields; Player.shields = 0; } - - if(NPCS[i].health <= 0) - { - NPCS[i].sprite = explode_shp1; - NPCS[i].explodenextframe = tick + 4; - sound_play(1,-5,0,100); - sound_play(3,-15,0,1000); - sound_play(2,-10,1,100); - } } } @@ -603,6 +650,8 @@ void game_player_targets_tick() for(i = 0; i < MAX_NPCS; i++) { + if(!NPCS[i].collidable) + continue; LeftCornerX = NPCS[i].location.X + NPCS[i].hitbox_bl.X; LeftCornerY = NPCS[i].location.Y + NPCS[i].hitbox_bl.Y; RightCornerX = NPCS[i].location.X + NPCS[i].hitbox_tr.X; @@ -740,6 +789,17 @@ void game_input_tick() Player.location.X = 0 - Player.hitbox_bl.X; } } + + // Space + if(input_readkey(98)) + { + Player.firingleft = 1; + Player.firingright = 1; + Player.nextshieldheal = tick + 100; + }else{ + Player.firingleft = 0; + Player.firingright = 0; + } } void game_setup_audio() @@ -800,8 +860,37 @@ void game_tick_player() Player.nextshieldheal = tick + 10; } } + + if((Player.firingleft) && (Player.targetleft >= 0)) + { + NPCS[Player.targetleft].health -= (tick - lasttick) * Player.phaserdamage; + } + + if((Player.firingright) && (Player.targetright >= 0)) + { + NPCS[Player.targetright].health -= (tick - lasttick) * Player.phaserdamage; + } } +void game_npcs_tick() +{ + int i; + for(i = 0; i < MAX_NPCS; i++) + { + if(NPCS[i].health <= 0) + { + if(NPCS[i].sprite == NPCS[i].idlesprite) + { + NPCS[i].collidable = 0; + NPCS[i].sprite = explode_shp1; + 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_tick() { lasttick = tick; @@ -817,7 +906,7 @@ void game_tick() game_collider_tick(); game_projectiles_tick(); game_player_targets_tick(); - + game_npcs_tick(); game_draw_stars(); game_draw_player(); game_draw_npcs(); diff --git a/c/Graphics b/c/Graphics index 0a2bc5d..ef4046a 100644 --- a/c/Graphics +++ b/c/Graphics @@ -66,6 +66,18 @@ void display_mode(int mode) _kernel_swi(OS_ScreenMode,&inreg,&outreg); } +void draw_dotted_line(int x1,int y1,int x2,int y2) +{ + inreg.r[0] = 4 + 16; + inreg.r[1] = x1; + inreg.r[2] = y1; + _kernel_swi(OS_Plot,&inreg,&outreg); + inreg.r[0] = 5 + 16; + inreg.r[1] = x2; + inreg.r[2] = y2; + _kernel_swi(OS_Plot,&inreg,&outreg); +} + void draw_line(int x1,int y1,int x2,int y2) { inreg.r[0] = 4;