view src/main.c @ 14:5c7f33441e43

Creeps now move towards the goal
author Mike Pavone <pavone@retrodev.com>
date Sun, 12 Jan 2014 18:16:51 -0800
parents d118fe8fb1db
children f71eb24b3896
line wrap: on
line source

#include <genesis.h>
#include "creep.h"

const u32 cursor_tiles[4*8] = {
	0x21100000, // top left
	0x10000000,
	0x10000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,

	0x00000000, // bottom left
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x10000000,
	0x10000000,
	0x21100000,

	0x00000112, // top right
	0x00000001,
	0x00000001,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,

	0x00000000, // bottom right
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000001,
	0x00000001,
	0x00000112,

};

u16 tilemap[40*28];
u16 countdown;

int cursor_x = 0;
int cursor_y = 0;
const int cursor_size_px = 2 * 8; // two tiles of 8 pixels each

void joy_event_handler(u16 joy, u16 changed, u16 state) {
	u16 went_down = changed & state;
	if (went_down & BUTTON_UP) {
		cursor_y -= cursor_size_px;
	}
	if (went_down & BUTTON_DOWN) {
		cursor_y += cursor_size_px;
	}
	if (went_down & BUTTON_LEFT) {
		cursor_x -= cursor_size_px;
	}
	if (went_down & BUTTON_RIGHT) {
		cursor_x += cursor_size_px;
	}
}

int main(void)
{
	JOY_init();
	JOY_setEventHandler(&joy_event_handler);

	u8 cursor_tile_index = 1;
	VDP_loadTileData((const u32 *)cursor_tiles, cursor_tile_index, 4, 0);

	u16 i;
	VDP_setPlanSize(64, 32);
	for (i = 6; i < 40*28; i += 4)
		if ((i > 80 || i & 4) && (i < 40*26 || !(i & 4)) && i % 40 < 38)
		{
			tilemap[i] = 'O' + TILE_FONTINDEX;
			tilemap[i+1] = 'O' + TILE_FONTINDEX;
		}

	tilemap[38 + 14*40] = TILE_ATTR_FULL(1, 0, 0, 0, 'G' + TILE_FONTINDEX);
	tilemap[39 + 14*40] = TILE_ATTR_FULL(1, 0, 0, 0, 'G' + TILE_FONTINDEX);
	tilemap[38 + 15*40] = TILE_ATTR_FULL(1, 0, 0, 0, 'G' + TILE_FONTINDEX);
	tilemap[39 + 15*40] = TILE_ATTR_FULL(1, 0, 0, 0, 'G' + TILE_FONTINDEX);
	gen_distances(38, 14);
	for (i = 0; i < MAX_SPRITE; i++)
	{
		spriteDefCache[i].posx = -0x80;
	}
	//print_distances();
	for (;;)
	{
		VDP_waitVSync();
		VDP_updateSprites();
		for (i = 0; i < 28; i++)
		{
			VDP_setTileMapRectByIndex(VDP_PLAN_B, tilemap + i*40, i*64, 40, 0);
		}
		VDP_setSprite(0, cursor_x, cursor_y, 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)
		{
			spawn_creep(CREEP_NORMAL, 4, 122);
			countdown = 300;
		}
		update_creeps();
	}
	return 0;
}