Log In  


Cart #shmup_1k_werxzy-0 | 2024-02-23 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

After seeing LokiStriker's and Achie's shmups made in 1024 compressed bytes, I wanted to give it a go.

Here's the uncompressed source code.

--1k shmup
--werxzy

-- enemy data
ty=split("⁶:425affffe7662400,0.01,0,7,0,0.3,0,-0.0001,2,5,5`⁶:425affffe7662400,0.01,0,7,0,1.1,0,-0.01,1,3,3`⁶:22227f7f2a361c08,0,0,9,0,0.3,0,0.02,4,1,3`⁶:425affffe7662400,0,0,13,0,0.1,0,0,3,30,20`⁶:3c42bdbdbda5423c,0,0,5,0,0.25,0,-0.0005,5,20,25","`")
-- bullet data
bty=split("●,1,0,0,0.8,1,60`✽,1,-15,15,0.4,3,200`✽,0,-120,10,0.4,7,100`\feミ,0,0,180,1,2,20`✽,1,0,36,1,10,30","`")
cartdata"shm1k_werx"
function _init()
	en,bul,pb,px,py,ph,pi,pc,sc = {},{},{},64,80,3,0,0,0
end

function _update60()
	cls()
	if ph ~= 0 then
		-- spawn regular enemy
		if t() % 2 == 1 then
			e=add(en, split(ty[rnd{1,2,3}]))
			e[7]=rnd(e[2])-e[2]/2
			e.r,e[2]=rnd(20),rnd(100)+10
		end

		-- spawn boss enemy
		if t() % 20 == 1 then
			e=add(en, split(ty[rnd{4,5}]))
			e.r,e[2]=rnd(20),64
		end

		-- player movement and drawing
		p_=btn(4)and 0.5or 1.2
		px+=(tonum(btn(1))-tonum(btn(0)))*p_
		py+=(tonum(btn(3))-tonum(btn(2)))*p_
		px=mid(px,120)
		py=mid(py,120)
		?(pi%20<=10and"⁶:081c362a7f7f3614"or""),px,py,11
		-- player fires
		if pc<=0 and btn(4)then
			pc+=10
			add(pb,{"⁶:1c3e3e1c1c080800",px,py,3,0,-3.5,0,0})
			?"\as3i7gc",0,0
		end

		-- update bullets, and enemy ships
		for t in all{pb,en,bul} do
			for o in all(t) do
				o[2]+=o[5]
				o[3]+=o[6]
				o[5]+=o[7]
				o[6]+=o[8]
				if(not col(o,0,0,128,128))del(t,o)
				if o.r then
					o.r-=1
					if o.r<0then
						b=split(bty[o[9]])
						o.r=b[7]
						nb(o[2],o[3],unpack(b))
					end
				end
				?unpack(o) -- draws ship or bullet
				 -- check player collision with enemy ships or bullets
				if pget(px+3,py+2) ~= 0 and pi==0 and t ~= pb then
					ph-=1
					pi=90
					if(t==bul)del(t,o)
					?ph==0 and "\a<i6g1g2g1g2g1g2g1" or "\a<i6g1",0,0
				end

				if t==en then
					-- check collision with each bullet
					for b in all(pb) do
						if col(o,b[2],b[3],5,5)then
							del(pb,b)
							o[10]-=1
							?o[10]==0 and "\a<i6g1g2g1g2g1g2g1" or "\a<i6g1",0,0
							if o[10]==0 then
								del(t,o)
								sc += (o[11]>>16)*50
							end
						end
					end
				end
			end
			if t == pb then
				pset(px+3,py+2,0)
			end
		end

		for i = 1,ph do
			?"♥",i*6,118,8
		end

		-- high scores
		?tostr(sc,2),6,1
		?tostr($0x5e00,2)
		poke4(0x5e00, max($0x5e00, sc))
		-- cooldowns
		pi = max(pi-1)
		pc = max(pc-1)
	else
		?"game over\n"..tostr(sc,2),50,50
		if(btnp(5))_init()
	end

end

function col(o,x,y,w,h)
	x-=o[2]y-=o[3]
	return x<8and x+w>0and y<5and y+h>0
end

-- bullet generation function
function nb(x,y,ch,pt,as,ad,sp,c)
	a=atan2(px-x,py-y)*pt+as/360
	for _=1,c do
		add(bul,{ch,x,y,8,cos(a)*sp,sin(a)*sp,0,0})
		a+=ad/360
	end
end
1



[Please log in to post a comment]