aboutsummaryrefslogtreecommitdiffstats
path: root/src/sprite_test/sprite_test.pde
diff options
context:
space:
mode:
Diffstat (limited to 'src/sprite_test/sprite_test.pde')
-rw-r--r--src/sprite_test/sprite_test.pde240
1 files changed, 240 insertions, 0 deletions
diff --git a/src/sprite_test/sprite_test.pde b/src/sprite_test/sprite_test.pde
new file mode 100644
index 0000000..9768498
--- /dev/null
+++ b/src/sprite_test/sprite_test.pde
@@ -0,0 +1,240 @@
+#include <SPI.h>
+#include <GD.h>
+
+#include "allsewage.h" // http://gameduino.com/results/b2f4c588/
+#include "sprites.h" // http://gameduino.com/results/16fe50de/
+
+#define JAWS_OPEN 0
+#define JAWS_CLOSED 1
+#define SWIM_SPEED 4
+#define FLOW_SPEED
+
+static unsigned int t = 0;
+static uint16 swimx, swimy;
+static uint16 narcox, narcoy;
+static int8 narcovx, narcovy;
+static uint8 swim_jaws;
+static unsigned int scrollx = 0;
+static unsigned int scrolly = 0;
+static unsigned char inchar;
+static boolean sunk_ship = false;
+static uint8 enemy_id, swimmer_id;
+static uint8 touching_swimmer, touching_enemy;
+
+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_id = 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, 1);
+ draw_sprite(x + 16, y + 00, 55, 0, 1);
+ draw_sprite(x + 00, y + 16, 63, 0, 1);
+ draw_sprite(x + 16, y + 16, 64, 0, 1);
+}
+
+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);
+ swimmer_id = GD.spr;
+ if(is_open) {
+ draw_sprite(x + 32, y , 2, 0, 0);
+ } else {
+ draw_sprite(x + 32, y , 20, 0, 0);
+ }
+}
+
+void setup()
+{
+ pinMode(BOARD_BUTTON_PIN, INPUT);
+ swimx = 20;
+ swimy = 20;
+ narcox = 180;
+ narcoy = 150;
+ narcovy = -1;
+
+ delay(250);
+ GD.begin();
+
+ GD.wr(JK_MODE, 1);
+
+ 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.copy(PALETTE16A, sprite_sprpal, sizeof(sprite_sprpal));
+ GD.copy(RAM_SPRIMG, sprite_sprimg, sizeof(sprite_sprimg));
+
+
+ GD.__wstartspr(0);
+ draw_standing_all(0,0);
+ GD.__end();
+}
+
+void loop()
+{
+ GD.waitvblank();
+
+ // ------- do graphics drawing
+
+ // check collisions
+ touching_swimmer = GD.rd(COLLISION + swimmer_id);
+ touching_enemy = GD.rd(COLLISION + enemy_id);
+
+ // scroll background
+ GD.wr16(SCROLL_X, scrollx);
+ GD.__wstartspr(0);
+ draw_standing_all(10,270);
+ draw_narco(narcox, narcoy, sunk_ship);
+ if (sunk_ship) {
+ for (uint8 i = 0; i < 5; i++) {
+ draw_explosion(narcox+random(96)-8, narcoy+random(64)-8);
+ }
+ }
+ draw_swim(swimx,swimy, (swim_jaws == 0));
+ GD.__end();
+
+ // -------- do logic stuff
+ scrollx += ((t % FLOW_SPEED) == 0);
+ //swimx = (swimx + 1) % 400;
+ if(swim_jaws > 0) {
+ swim_jaws -= 1;
+ }
+
+ if(SerialUSB.available()) {
+ inchar = SerialUSB.read();
+ while(SerialUSB.available()) {
+ inchar = SerialUSB.read();
+ }
+ SerialUSB.println(inchar, 16);
+ switch(inchar) {
+ case 'w':
+ swimy -= SWIM_SPEED;
+ break;
+ case 's':
+ swimy += SWIM_SPEED;
+ break;
+ case 'a':
+ swimx -= SWIM_SPEED;
+ break;
+ case 'd':
+ swimx += SWIM_SPEED;
+ break;
+ case 'W':
+ swimy -= SWIM_SPEED;
+ swim_jaws = 20;
+ break;
+ case 'S':
+ swimy += SWIM_SPEED;
+ swim_jaws = 20;
+ break;
+ case 'A':
+ swimx -= SWIM_SPEED;
+ swim_jaws = 20;
+ break;
+ case 'D':
+ swimx += SWIM_SPEED;
+ swim_jaws = 20;
+ break;
+ case ' ':
+ swim_jaws = 20;
+ break;
+ default:
+ break;
+ }
+ }
+
+ if(touching_swimmer != 255) {
+ SerialUSB.print("Enemy: ");
+ SerialUSB.println(enemy_id, 10);
+ SerialUSB.print("Swimmer: ");
+ SerialUSB.println(swimmer_id, 10);
+ SerialUSB.print("Touching swimmer: ");
+ SerialUSB.println(touching_swimmer, 10);
+ }
+
+ if(touching_enemy != 255) {
+ SerialUSB.print("Enemy: ");
+ SerialUSB.println(enemy_id, 10);
+ SerialUSB.print("Swimmer: ");
+ SerialUSB.println(swimmer_id, 10);
+ SerialUSB.print("Touching enemy: ");
+ SerialUSB.println(touching_enemy, 10);
+ }
+
+ if (swim_jaws > 15 and (touching_swimmer == enemy_id || touching_enemy == swimmer_id)) {
+ sunk_ship = true;
+ }
+ swimx = (swimx % 400);
+ swimy = (swimy % 300);
+
+ if(!sunk_ship) {
+ if(narcoy > 170) { narcovy = -1; }
+ if(narcoy < 130) { narcovy = 1; }
+ } else {
+ narcovy = 1;
+ if(narcoy > 400) { narcovy = 0; }
+ }
+ narcoy += narcovy;
+ t += 1;
+}