Browse Source

adding some sprites

pixelbath 1 year ago
parent
commit
93a2479e67
2 changed files with 109 additions and 10 deletions
  1. 109 10
      shmup/shmup.lua
  2. BIN
      shmup/sprites.png

+ 109 - 10
shmup/shmup.lua

@@ -12,29 +12,106 @@ local bullet_timer_start = 10
 local player_bullets = {}
 
 local player = {
-	x=0,y=0,
+	x=20,y=60,
 	vx=0,vy=0,
 	speed=1.5,
 	sp=256,
 	fire_t=0,
 	fire_held=false,
+	gun_type=1,
+	gun_level=1,
+	gunpods={},
 }
 
+local grad_palettes = {
+	{ 1, 2, 3, 4, 12 },
+	{ 7, 6, 5, 4, 12 },
+	{ 8, 9, 10, 11, 12 },
+}
+
+function mod(a, b)
+	return math.floor(a-(math.floor(a/b)*b))
+end
+
+function draw_gradient(xpos, ypos, width, height, startindex, gradient)
+	local idx = startindex or 1
+	local grad = gradient or 1
+	local band_w = width / 5 --# of colors in each gradient
+	local cur_band = 0
+	for i=0,width-1 do
+		if cur_band >= band_w then
+			idx = idx + 1
+			cur_band = 0
+		end
+		cur_band = cur_band + 1
+		if idx > 5 then idx = 1 end
+		line(xpos + i, ypos, xpos + i - height, ypos + height, grad_palettes[grad][idx])
+	end
+end
+
 -- TODO: various types
 function add_bullet()
 	sfx(0, 'D-6', 10, 0, 11, 4)
 	table.insert(player_bullets, {
 		x=player.x + 10,
-		y=player.y + 5,
+		y=player.y,
 		vx = 0,
 		vy = 0,
 	})
 end
 
+function add_gunpod()
+	if #player.gunpods < 5 then
+		table.insert(player.gunpods, {
+			x=0,y=0,vx=0,vy=0,
+			sprs={ 259,260,261,262,263 },
+			fr=1,t=0,frametime=5,
+		})
+	end
+end
+
 function draw_player()
-	spr(player.sp, player.x, player.y, 0, 1, 0, 0, 2, 2)
+	local engine_spr = 274
+	if player.vx > 0 then
+		engine_spr = 306
+	elseif player.vx < 0 then
+		engine_spr = 290
+	end
+
+	if player.vy > 0 then
+		player.sp = 272
+	elseif player.vy < 0 then
+		player.sp = 288
+	else
+		player.sp = 256
+	end
+	-- draw engine fire then player
+	spr(engine_spr, player.x-8, player.y+1)
+	spr(player.sp, player.x, player.y, 0, 1, 0, 0, 2, 1)
+
+	-- draw gunpods
+	if #player.gunpods > 0 then
+		for key,pod in ipairs(player.gunpods) do
+			pod.t = pod.t + 1
+			if mod(pod.t, pod.frametime) == 0 then
+				pod.fr = pod.fr + 1
+				if pod.fr > #pod.sprs then pod.fr = 1 end
+			end
+			spr(pod.sprs[pod.fr], pod.x, pod.y)
+
+			-- TODO: move this into an update
+			local targx = player.x + 4 - pod.x
+			local targy = player.y - 10 - pod.y
+			pod.vx = targx / 3
+			pod.vy = targy / 3
+			pod.x = pod.x + pod.vx
+			pod.y = pod.y + pod.vy
+		end
+	end
 end
 
+add_gunpod()
+
 function draw_bullets()
 	for key,val in ipairs(player_bullets) do
 		spr(258, val.x, val.y, 0)
@@ -66,6 +143,11 @@ function handle_input()
 	player.x = player.x + player.vx
 	player.y = player.y + player.vy
 
+	if player.x < 5 then player.x = 5 end
+	if player.x > 220 then player.x = 220 end
+	if player.y < 5 then player.y = 5 end
+	if player.y > 128 then player.y = 128 end
+
 	player.fire_held = false
 	if btn(4) then
 		if player.fire_t <= 0 then
@@ -78,6 +160,11 @@ function handle_input()
 	else
 		player.fire_t = 0
 	end
+
+	-- debug
+	if btnp(5) then
+		player.gun_type = mod(player.gun_type + 1, 3) + 1
+	end
 end
 
 function TIC()
@@ -94,10 +181,12 @@ function TIC()
 	draw_player()
 	draw_bullets()
 
-	dbg(tostring(player.fire_t), 0)
+	draw_gradient(10, 40, 10, 5, mod(t/3, 5) + 1, player.gun_type)
+
+	dbg("type:"..tostring(player.gun_type), 0)
 	dbg(tostring(player.fire_held), 1)
-	dbg(tostring(player.vx), 2)
-	dbg(tostring(player.vy), 3)
+	dbg(tostring(mod(t/3, 5) + 1), 2)
+	-- dbg(tostring(player.vy), 3)
 	t=t+1
 end
 
@@ -106,11 +195,21 @@ function dbg(msg, line_no)
 end
 
 -- <SPRITES>
--- 000:00000000000000000000000000000000ede00000ecdef0000edddef00fcccc8b
--- 001:000000000000000000000000000000000000000000000000000000009cde0000
+-- 000:00000000eccef0000edddefa0fcccc8bcf9deededfb8cddd00db8cdd00008cce
+-- 001:000000000000000090000000aa9deecc99eedcddddcccdf0ccf0000000000000
 -- 002:0000000000000000000000004040440030303300000000000000000000000000
--- 016:cf9edd99dfb8eeee00db8ddd00008cce00000000000000000000000000000000
--- 017:aaeddcefeeeccde0ccde00000000000000000000000000000000000000000000
+-- 003:00dd00000eeedddd023eeee02344320023443200023eddd00feefeee00ff0000
+-- 004:000000000f1eeddd02331ee023443200234eddd00feefeee00f1000000000000
+-- 005:000000000022000002332eef23dd31f0231ddddd0fe1eee00022000000000000
+-- 006:000000000022000002dd2000231ddddd23e1eeee02ee20000022000000000000
+-- 007:0000000000de00000f1ddddd2341eee02344320002331ee00f1eeddd00000000
+-- 016:dccefeed0ddddefa0fcccc8acf9deededfbbcddd0000bcdd00008ccc00000dd0
+-- 017:d00000009eedd000aaaaeecc9aa9dccdddcccdf0ccd00000d000000000000000
+-- 018:0000000000000880000889ab08899abc000889ab000008800000000000000000
+-- 032:ecdf00000edddf0000edddc00bbcfeeddcc99feeee8888880bc99f99000bfeee
+-- 033:000000000000000009aa0000cdc99e00eeedddcc88888eef9eeeedd0df000000
+-- 034:00000000000000000000089a000089ab0000089a000000000000000000000000
+-- 050:00000000000099a000889abb8889accc00889abb000099a00000000000000000
 -- </SPRITES>
 
 -- <WAVES>

BIN
shmup/sprites.png