From 73f557b7b909bd6a6d15625a8fdbb57bba7e8540 Mon Sep 17 00:00:00 2001 From: bnewbold Date: Sun, 29 Jan 2012 15:31:55 -0500 Subject: draft progress --- src/draft/graphics.pde | 222 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 222 insertions(+) create mode 100644 src/draft/graphics.pde (limited to 'src/draft/graphics.pde') diff --git a/src/draft/graphics.pde b/src/draft/graphics.pde new file mode 100644 index 0000000..b8af1b9 --- /dev/null +++ b/src/draft/graphics.pde @@ -0,0 +1,222 @@ + +//static extern enemy_sprid; + +// ================ INIT =================== +static void init_sprites() { + GD.copy(PALETTE16A, sprite_sprpal, sizeof(sprite_sprpal)); + GD.copy(RAM_SPRIMG, sprite_sprimg, sizeof(sprite_sprimg)); +} + +static void clear_all_sprites() { + for (int i = 0; i < 256; i++) { + GD.sprite(i, 400, 400, 0, 0, 0); + } +} + +static void init_splashpage() { + for (byte y = 0; y < 64; y++) + GD.copy(RAM_PIC + y * 64, allsewage_pic + y * 64, 64); + GD.copy(RAM_CHR, allsewage_chr, sizeof(allsewage_chr)); + GD.copy(RAM_PAL, allsewage_pal, sizeof(allsewage_pal)); + + GD.__wstartspr(0); + for (int rand_count = 0; rand_count < 20; rand_count += 1) { + draw_standing_all(random(400),random(300)); + } + GD.__end(); + +} + +static void init_background() { + for (byte y = 0; y < 64; y++) + GD.copy(RAM_PIC + y * 64, allsewage_pic + y * 64, 64); + GD.copy(RAM_CHR, allsewage_chr, sizeof(allsewage_chr)); + GD.copy(RAM_PAL, allsewage_pal, sizeof(allsewage_pal)); +} + +// ================ TRASH MANAGEMENT =================== + +#define DEAD_TRASH_SPRID 54 +#define NUM_TRASH 20 +#define STUCKX 100 + +struct trash_item { + int8 vx; + int16 x, y; + uint8 sprid, collid; + boolean stuck; +}; + +static trash_item trash_bag[NUM_TRASH]; +static uint8 trash_count, trash_stuck; + +static uint8 get_stuck() { + return trash_stuck; +} + + +static void init_trash() { + for (int i = 0; i < NUM_TRASH; i++) { + trash_bag[i].x = 400; + trash_bag[i].y = 400; + trash_bag[i].vx = 0; + trash_bag[i].sprid = 0xFF; + trash_bag[i].stuck = false; + trash_bag[i].collid = 0xFF; + } + trash_count = 0; + trash_stuck = 0; +} + +static void cleanup_trash() { + for (int i = 0; i < NUM_TRASH; i++) { + if(trash_bag[i].x < 0) { + trash_count -= 1; + trash_bag[i].x = 400; + trash_bag[i].y = 400; + trash_bag[i].vx = 0; + trash_bag[i].sprid = 0xFF; + trash_bag[i].stuck = false; + } + } +} + +static void add_trash() { + if (trash_count == NUM_TRASH) return; + int i; + for (i = 0; i < NUM_TRASH; i++) { + if(trash_bag[i].sprid == 0xFF) { + trash_bag[i].x = 400; + trash_bag[i].y = 25 + random(200); + trash_bag[i].vx = 3 + random(5); + trash_bag[i].sprid = 36; + trash_bag[i].collid = 255; + break; + } + } +} + +static void update_trash() { + for (int i = 0; i < NUM_TRASH; i++) { + if (trash_bag[i].sprid == 0xFF) continue; + if (trash_bag[i].stuck) continue; + trash_bag[i].x -= ((t % (2*scrollvx)) == 0); + if ((t % trash_bag[i].vx) == 0) { + trash_bag[i].x -= 1; + } + if (trash_bag[i].sprid != DEAD_TRASH_SPRID && trash_bag[i].x <= STUCKX) { + trash_bag[i].stuck = true; + trash_bag[i].x = STUCKX; + trash_stuck += 1; + } + } +} + +static void check_trash(int cid) { + for (int i = 0; i < NUM_TRASH; i++) { + if (cid == trash_bag[i].collid) { + trash_bag[i].sprid = DEAD_TRASH_SPRID; + if (trash_bag[i].stuck) { + trash_bag[i].stuck = false; + trash_stuck -= 1; + } + } + } +} + +// ================ DRAWING =================== +static void draw_all_trash() { + for (int i = 0; i < NUM_TRASH; i++) { + if (trash_bag[i].sprid == 0xFF) continue; + trash_bag[i].collid = GD.spr; + draw_sprite(trash_bag[i].x, + trash_bag[i].y, + trash_bag[i].sprid, + 0, + TARGET_GROUP); + } +} +static void draw_standing_all(int x, int y) { + draw_sprite(x , y , 36, 0, 1); + draw_sprite(x , y + 16, 45, 0, 0); +} + +static void draw_narco(int x, int y, boolean sunk) { + if(!sunk) { + draw_sprite(x , y + 00, 03, 0, 1); + draw_sprite(x + 16, y + 00, 04, 0, 1); + // periscope! + enemy_sprid = GD.spr; + draw_sprite(x + 32, y + 00, 05, 0, 1); + draw_sprite(x + 48, y + 00, 6, 0, 1); + draw_sprite(x + 64, y + 00, 7, 0, 1); + draw_sprite(x + 80, y + 00, 8, 0, 1); + draw_sprite(x , y + 16, 12, 0, 1); + draw_sprite(x + 16, y + 16, 13, 0, 1); + draw_sprite(x + 32, y + 16, 14, 0, 1); + draw_sprite(x + 48, y + 16, 15, 0, 1); + draw_sprite(x + 64, y + 16, 16, 0, 1); + draw_sprite(x + 80, y + 16, 17, 0, 1); + draw_sprite(x , y + 32, 21, 0, 1); + draw_sprite(x + 16, y + 32, 22, 0, 1); + draw_sprite(x + 32, y + 32, 23, 0, 1); + draw_sprite(x + 48, y + 32, 24, 0, 1); + draw_sprite(x + 64, y + 32, 25, 0, 1); + draw_sprite(x + 80, y + 32, 26, 0, 1); + draw_sprite(x , y + 48, 30, 0, 1); + draw_sprite(x + 16, y + 48, 31, 0, 1); + draw_sprite(x + 32, y + 48, 32, 0, 1); + draw_sprite(x + 48, y + 48, 33, 0, 1); + draw_sprite(x + 64, y + 48, 34, 0, 1); + draw_sprite(x + 80, y + 48, 35, 0, 1); + } else { + draw_sprite(x , y + 00, 39, 0, 1); + draw_sprite(x + 16, y + 00, 40, 0, 1); + draw_sprite(x + 32, y + 00, 41, 0, 1); + draw_sprite(x + 48, y + 00, 42, 0, 1); + draw_sprite(x + 64, y + 00, 43, 0, 1); + draw_sprite(x + 80, y + 00, 44, 0, 1); + draw_sprite(x , y + 16, 48, 0, 1); + draw_sprite(x + 16, y + 16, 49, 0, 1); + draw_sprite(x + 32, y + 16, 50, 0, 1); + draw_sprite(x + 48, y + 16, 51, 0, 1); + draw_sprite(x + 64, y + 16, 52, 0, 1); + draw_sprite(x + 80, y + 16, 53, 0, 1); + draw_sprite(x , y + 32, 57, 0, 1); + draw_sprite(x + 16, y + 32, 58, 0, 1); + draw_sprite(x + 32, y + 32, 59, 0, 1); + draw_sprite(x + 48, y + 32, 60, 0, 1); + draw_sprite(x + 64, y + 32, 61, 0, 1); + draw_sprite(x + 80, y + 32, 62, 0, 1); + draw_sprite(x , y + 48, 66, 0, 1); + draw_sprite(x + 16, y + 48, 67, 0, 1); + draw_sprite(x + 32, y + 48, 68, 0, 1); + draw_sprite(x + 48, y + 48, 69, 0, 1); + draw_sprite(x + 64, y + 48, 70, 0, 1); + draw_sprite(x + 80, y + 48, 71, 0, 1); + } +} + +static void draw_explosion(int x, int y) { + draw_sprite(x + 00, y + 00, 54, 0, 0); + draw_sprite(x + 16, y + 00, 55, 0, 0); + draw_sprite(x + 00, y + 16, 63, 0, 0); + draw_sprite(x + 16, y + 16, 64, 0, 0); +} + +static void draw_swim(int x, int y, boolean is_open) { + draw_sprite(x , y , 0, 0, 0); + draw_sprite(x + 16, y , 1, 0, 0); + draw_sprite(x , y + 16, 9, 0, 0); + draw_sprite(x + 16, y + 16, 10, 0, 0); + draw_sprite(x + 32, y + 16, 11, 0, 0); + if(is_open) { + weapon_sprid = GD.spr; + draw_sprite(x + 32, y , 2, 0, 0); + draw_sprite(400, 400, 20, 0, 0); + } else { + draw_sprite(400, 400, 2, 0, 0); + weapon_sprid = GD.spr; + draw_sprite(x + 32, y , 20, 0, 0); + } +} -- cgit v1.2.3