###########################################
#
#  Snow Daze
#
#  Clear all the snow off your driveway
#  before you're late for work!
#  Press ASWD to move around the driveway
#  and press E to shovel snow behind you.
#  Runs best at 100 cycles/frame.
#
#  Created for the 2015 CCP Game Jam
#  Theme: Winter
#
###########################################

:alias px      va
:alias py      vb
:alias dir     vc
:alias frame   vd
:alias timer   v9
:alias timerx  v8
:alias endflag v7

:const LEFT      45
:const RIGHT      0
:const TICK_TIME  8
:const SNOWFALL   8

: draw-image
	v0 := 0
	v1 := 0
	v2 := 32
	loop
		sprite v0 v1 0
		i += v2
		v0 += 16
		if v0 == 128 begin
			v0 := 0
			v1 += 16
		end
		if v1 != 64 then
	again
;

: draw-player
	i := person-r
	i += dir
	i += frame
	sprite px py 15
;

: do-snow
	i := snow
	v3 := 0
	loop
		v1 := random 0b111111
		v1 += 32
		v2 := random 0b11111
		v2 += 16
		sprite v1 v2 15
		v0 := 5 wait
		v3 += 1
		if v3 != SNOWFALL then
	again
;

: do-scoop
	frame := 15
	draw-player
	v0 := 5 gamewait
	draw-player
	frame := 30
	draw-player
	v0 := 5 gamewait
	draw-player
	frame := 0

	v1 := py
	i := snow

	:macro scoop DELTA1 DELTA2 {
		v0 := px
		v0 += DELTA1
		sprite v0 v1 15
		if vf == 0 begin
			sprite v0 v1 15
		else
			v0 += DELTA2
			sprite v0 v1 15
			if vf == 1 then sprite v0 v1 15
		end
	}
	if dir == LEFT begin
		scoop -8 16
	else
		scoop 8 -16
	end
;

: move-player
	vf := 5 if vf key begin
		if py != 10 then py += -1
	end
	vf := 8 if vf key begin
		if py != 0x31 then py += 1
	end
	vf := 7 if vf key begin
		px += -1
		dir := LEFT
	end
	vf := 9 if vf key begin
		px += 1
		dir := RIGHT
	end
	vf := 6 if vf key then do-scoop
;

: countdown
	if timer == 0 begin
		timer := TICK_TIME
		vf := 4
		i := timeslice
		sprite timerx vf 3
		timerx += -1	
		if timerx == 3 then endflag := 1
	else
		timer += -1
	end
;

: gamewait
	loop
		sync
		countdown
		v0 += -1
		if v0 != 0 then
	again
;

: wait
	loop
		sync
		v0 += -1
		if v0 != 0 then
	again
;

: game-over
	draw-player
	v0 := 20 wait

	v1 := 32
	v2 := 15
	v3 := 0
	i := block
	loop
		sprite v1 v2 0
		if vf != 0 then v3 += 1
		v0 := 5 wait
		sprite v1 v2 0
		v1 += 16
		if v1 == 96 begin
			v1 := 32
			v2 += 16
		end
		if v2 != 63 then
	again
	i := bighex v3
	v1 := 60
	v2 := 14
	sprite v1 v2 10

	v0 := 20 wait
	v0 := key
	setup
;

: sync
	loop
		vf := delay
		if vf != 0 then
	again
	vf := 2
	delay := vf
;

: intro-num
	i := bighex v0
	v1 := 60
	v2 := 14
	sprite v1 v2 10
	v0 := 10 wait
	sprite v1 v2 10
;

: setup
	clear
	i := background
	draw-image
	timerx := 123
	timer := 0
	px := 64
	py := 32
	endflag := 0
	draw-player
	do-snow
	v0 := 10 wait
	v0 := 3 intro-num
	v0 := 2 intro-num
	v0 := 1 intro-num
;

: main
	hires
	setup
	loop
		draw-player
		move-player
		draw-player
		countdown
		if endflag == 1 then game-over
		sync
	again

: timeslice
	0x80 0x80 0x80
: block
	0x00 0x00 0x7F 0xFE 0x7F 0xFE 0x7F 0xFE 
	0x7F 0xFE 0x7F 0xFE 0x7F 0xFE 0x7F 0xFE 
	0x7F 0xFE 0x7F 0xFE 0x7F 0xFE 0x7F 0xFE 
	0x7F 0xFE 0x7F 0xFE 0x7F 0xFE 0x00 0x00 
: snow
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
	0x00 0x00 0x00 0x7E 0x7E 0x7E 0x00 
: person-r
	0x38 0x38 0x28 0x3C 0x78 0x70 0x78 0x78
	0xF8 0xF8 0xFB 0x7F 0x4F 0x4B 0x6C 
: scoop1-r
	0x00 0x1C 0x1C 0x14 0x1E 0x7C 0xF8 0xF8
	0xFC 0xFC 0xFC 0x7F 0x4F 0x4F 0x6F 
: scoop2-r
	0xC0 0xCE 0x4E 0x6A 0x7F 0xFE 0x78 0x7E
	0x7C 0xF8 0xF8 0xF8 0x38 0x48 0x6C 
: person-l
	0x1C 0x1C 0x14 0x3C 0x1E 0x0E 0x1E 0x1E
	0x1F 0x1F 0xDF 0xFE 0xF2 0xD2 0x36 
: scoop1-l
	0x00 0x38 0x38 0x28 0x78 0x3E 0x1F 0x1F
	0x3F 0x3F 0x3F 0xFE 0xF2 0xF2 0xF6 
: scoop2-l
	0x03 0x73 0x72 0x56 0xFE 0x7F 0x1E 0x7E
	0x3E 0x1F 0x1F 0x1F 0x1C 0x12 0x36 

: background # (1024 bytes)
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xE0 0x00
	0xEF 0xFF 0xEF 0xFF 0xEF 0xFF 0xE0 0x00
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFE 0xFF 0xFE 0xFF 0xFF 0x00 0x00
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00
	0xFF 0xFF 0xFF 0xFE 0xFF 0xFE 0xFF 0xFE
	0xFF 0xFE 0xFF 0xFE 0xFF 0xFE 0xFF 0xFE
	0x00 0x00 0x00 0x00 0xFF 0xFF 0x00 0x00
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00
	0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0xFF 0xFF 0x00 0x00
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00
	0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0xFF 0xFF 0x00 0x00
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00
	0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0xFF 0xFF 0x00 0x00
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00
	0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x7F 0xFF 0x7F 0xFF 0xFF 0xFF 0x00 0x00
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00
	0xFF 0xFF 0x7F 0xFF 0x7F 0xFF 0x7F 0xFF
	0x7F 0xFF 0x7F 0xFF 0x7F 0xFF 0x7F 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x07
	0xFF 0xF7 0xFF 0xF7 0xFF 0xF7 0x00 0x07
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFE 0xFF 0xFE 0xFF 0xFE 0xFF 0xFE
	0xFF 0xFE 0xFF 0xFE 0xFF 0xFE 0xFF 0xFE
	0xFF 0xFE 0xFF 0xFE 0xFF 0xFE 0xFF 0xFE
	0xFF 0xFE 0xFF 0xFE 0xFF 0xFE 0xFF 0xFE
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x7F 0xFF 0x7F 0xFF 0x7F 0xFF 0x7F 0xFF
	0x7F 0xFF 0x7F 0xFF 0x7F 0xFF 0x7F 0xFF
	0x7F 0xFF 0x7F 0xFF 0x7F 0xFF 0x7F 0xFF
	0x7F 0xFF 0x7F 0xFF 0x7F 0xFF 0x7F 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFE 0xFF 0xFE 0xFF 0xFE 0xFF 0xFE
	0xFF 0xFE 0xFF 0xFE 0xFF 0xFE 0xFF 0xFE
	0xFF 0xFE 0xFF 0xFE 0xFF 0xFE 0xFF 0xFE
	0xFF 0xFE 0xFF 0xFE 0xFF 0xFC 0xFF 0xFE
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x7F 0xFF 0x7F 0xFF 0x7F 0xFF 0x7F 0xFF
	0x7F 0xFF 0x7F 0xFF 0x7F 0xFF 0x7F 0xFF
	0x7F 0xFF 0x7F 0xFF 0x7F 0xFF 0x7F 0xFF
	0x7F 0xFF 0x7F 0xFF 0x7F 0xFF 0x7F 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFE
	0xFF 0xFF 0xFF 0xFF 0xF8 0xFB 0x00 0x00
	0xFF 0xFE 0xFF 0xFE 0xFF 0xFE 0xFF 0xFE
	0xFF 0xFC 0xFF 0xFC 0xFF 0xEE 0xFF 0xFE
	0xFF 0xFE 0xFF 0xFE 0xFF 0xFC 0xFF 0xF8
	0xFF 0xB8 0xFF 0xF0 0x8F 0xC0 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x5F 0xFF 0x7F 0xFF 0x7F 0xFF 0x7F 0xFF
	0x3F 0xFF 0x5F 0xFF 0x7F 0xFF 0x7F 0xFF
	0x3F 0xFF 0x3E 0xFF 0x3F 0xFF 0x1F 0xFF
	0x0F 0xDF 0x01 0xFF 0x00 0x3D 0x00 0x00
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
	0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x7F
	0xFF 0xFF 0xFF 0xFF 0xFE 0x1F 0x00 0x00
