changeset 18:60bb690233cf

merge
author William Morgan <bill@mrgn.org>
date Sun, 12 Jan 2014 19:11:54 -0800
parents ea345aa9cc30 (current diff) a9500e8bff93 (diff)
children 08f2bcf3447f
files src/main.c
diffstat 2 files changed, 30 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/creep.h	Sun Jan 12 19:02:44 2014 -0800
+++ b/src/creep.h	Sun Jan 12 19:11:54 2014 -0800
@@ -17,6 +17,7 @@
 
 #define MAX_CREEPS 40
 extern u16 cur_creeps;
+extern u16 distances[20*14];
 u16 spawn_creep(u8 species, s16 x, s16 y);
 void gen_distances(u16 x, u16 y);
 void print_distances(void);
--- a/src/main.c	Sun Jan 12 19:02:44 2014 -0800
+++ b/src/main.c	Sun Jan 12 19:11:54 2014 -0800
@@ -42,9 +42,9 @@
 };
 
 #define EMPTY 0
-#define WALL 'O' + TILE_FONTINDEX
-#define TOWER TILE_ATTR_FULL(1, 0, 0, 0, 'T' + TILE_FONTINDEX)
-#define GOAL TILE_ATTR_FULL(1, 0, 0, 0, 'G' + TILE_FONTINDEX)
+#define WALL 'O'-32 + TILE_FONTINDEX
+#define TOWER TILE_ATTR_FULL(1, 0, 0, 0, 'T'-32 + TILE_FONTINDEX)
+#define GOAL TILE_ATTR_FULL(1, 0, 0, 0, 'G'-32 + TILE_FONTINDEX)
 
 u16 tilemap[40*28];
 u16 countdown;
@@ -61,6 +61,7 @@
 	TOWER,
 };
 u8 build_order_size = 3;
+u8 running = 0;
 
 void joy_event_handler(u16 joy, u16 changed, u16 state) {
 	u16 went_down = changed & state;
@@ -76,13 +77,25 @@
 	if (went_down & BUTTON_RIGHT) {
 		cursor_x += cursor_width;
 	}
-	if (went_down & BUTTON_A) {
+	if (went_down & BUTTON_A && !running) {
 		//u16 type_to_place = EMPTY;
 		u16 type_to_place = WALL;
 		tilemap[cursor_x     + (cursor_y    ) * 40] = type_to_place;
 		tilemap[cursor_x + 1 + (cursor_y    ) * 40] = type_to_place;
 		tilemap[cursor_x     + (cursor_y + 1) * 40] = type_to_place;
 		tilemap[cursor_x + 1 + (cursor_y + 1) * 40] = type_to_place;
+		gen_distances(38, 14);
+		if (distances[122/16] == 0xFFFF)
+		{
+			tilemap[cursor_x     + (cursor_y    ) * 40] = 0;
+			tilemap[cursor_x + 1 + (cursor_y    ) * 40] = 0;
+			tilemap[cursor_x     + (cursor_y + 1) * 40] = 0;
+			tilemap[cursor_x + 1 + (cursor_y + 1) * 40] = 0;
+		}
+	}
+	if (went_down & BUTTON_START)
+	{
+		running = 1;
 	}
 }
 
@@ -96,22 +109,23 @@
 
 	u16 i;
 	VDP_setPlanSize(64, 32);
-	for (i = 6; i < 40*28; i += 4)
+	/*for (i = 6; i < 40*28; i += 4)
 		if ((i > 80 || i & 4) && (i < 40*26 || !(i & 4)) && i % 40 < 38)
 		{
 			tilemap[i] = WALL;
 			tilemap[i+1] = WALL;
 		}
+	*/
 
 	tilemap[38 + 14*40] = GOAL;
 	tilemap[39 + 14*40] = GOAL;
 	tilemap[38 + 15*40] = GOAL;
 	tilemap[39 + 15*40] = GOAL;
-	gen_distances(38, 14);
 	for (i = 0; i < MAX_SPRITE; i++)
 	{
 		spriteDefCache[i].posx = -0x80;
 	}
+	gen_distances(38, 14);
 	//print_distances();
 	for (;;)
 	{
@@ -122,14 +136,17 @@
 			VDP_setTileMapRectByIndex(VDP_PLAN_B, tilemap + i*40, i*64, 40, 0);
 		}
 		VDP_setSprite(0, cursor_x * pixels_per_tile, cursor_y * pixels_per_tile, SPRITE_SIZE(2,2), TILE_ATTR_FULL(PAL0, 1, 0, 0, cursor_tile_index), spriteDefCache[0].link);
-		if (countdown)
-			--countdown;
-		else if (cur_creeps < 4)
+		if (running)
 		{
-			spawn_creep(CREEP_NORMAL, 4, 122);
-			countdown = 300;
+			if (countdown)
+				--countdown;
+			else if (cur_creeps < 4)
+			{
+				spawn_creep(CREEP_NORMAL, 4, 122);
+				countdown = 300;
+			}
+			update_creeps();
 		}
-		update_creeps();
 	}
 	return 0;
 }