152 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
 | 
						|
' written by Robert Sanchez
 | 
						|
 | 
						|
 | 
						|
_runtimePath_ "../../at67/gbas/runtime"
 | 
						|
_codeRomType_ ROMv2
 | 
						|
 | 
						|
const MISSLE_COUNT = 5
 | 
						|
 | 
						|
set FGBG_COLOUR, 0
 | 
						|
cls : mode 3
 | 
						|
 | 
						|
x = 100
 | 
						|
y = 100
 | 
						|
tmpx = 0
 | 
						|
tmpy = 0
 | 
						|
oldc = 0
 | 
						|
 | 
						|
 | 
						|
dim mis_x1%(MISSLE_COUNT)
 | 
						|
dim mis_y1%(MISSLE_COUNT)
 | 
						|
 | 
						|
dim mis_x2%(MISSLE_COUNT)
 | 
						|
dim mis_y2%(MISSLE_COUNT)
 | 
						|
 | 
						|
dim mis_dx(MISSLE_COUNT)
 | 
						|
dim mis_dy(MISSLE_COUNT)
 | 
						|
 | 
						|
dim mis_sx(MISSLE_COUNT)    ' TODO: what is wrong with using this?
 | 
						|
dim mis_e(MISSLE_COUNT)
 | 
						|
 | 
						|
 | 
						|
for n=0 to MISSLE_COUNT
 | 
						|
    gosub initMissle
 | 
						|
next n
 | 
						|
 | 
						|
mystep:
 | 
						|
    gosub handleInput
 | 
						|
 | 
						|
    for n=0 to MISSLE_COUNT
 | 
						|
        gosub drawMissle
 | 
						|
    next n
 | 
						|
goto mystep
 | 
						|
'end
 | 
						|
 | 
						|
 | 
						|
 | 
						|
initMissle:
 | 
						|
    mis_x1(n) = rnd(159)
 | 
						|
    mis_y1(n) = 1
 | 
						|
 | 
						|
    mis_x2(n) = rnd(159)
 | 
						|
    mis_y2(n) = 119
 | 
						|
 | 
						|
    mis_dx(n) = abs(mis_x2(n) - mis_x1(n))
 | 
						|
 | 
						|
    'if mis_x1(n) < mis_x2(n)
 | 
						|
        'mis_sx(n) = 1
 | 
						|
    'else
 | 
						|
        'mis_sx(n) = -1
 | 
						|
    'endif
 | 
						|
 | 
						|
    mis_dy(n) = -abs(mis_y2(n) - mis_y1(n))
 | 
						|
 | 
						|
    mis_e(n) = mis_dx(n) + mis_dy(n)
 | 
						|
 | 
						|
    return
 | 
						|
 | 
						|
 | 
						|
 | 
						|
'loop:
 | 
						|
drawMissle:
 | 
						|
    'pset mis_x1(n),mis_y1(n),rnd(0) and &h3F
 | 
						|
    pset mis_x1(n),mis_y1(n),&h03
 | 
						|
 | 
						|
    if (mis_x1(n) = mis_x2(n)) and (mis_y1(n) = mis_y2(n))
 | 
						|
        goto done
 | 
						|
    endif
 | 
						|
 | 
						|
    e2 = mis_e(n)
 | 
						|
    
 | 
						|
    if e2 >= mis_dy(n)
 | 
						|
        if mis_x1(n) = mis_x2(n)
 | 
						|
            goto done
 | 
						|
        endif
 | 
						|
        mis_e(n) = mis_e(n) + mis_dy(n)
 | 
						|
        
 | 
						|
        ' TODO: hoist this logic out, having problems with that though
 | 
						|
        if mis_x1(n) < mis_x2(n)
 | 
						|
            mis_x1(n) = mis_x1(n) + 1
 | 
						|
        else
 | 
						|
            mis_x1(n) = mis_x1(n) -1
 | 
						|
        endif
 | 
						|
    endif
 | 
						|
 | 
						|
    if e2 <= mis_dx(n)
 | 
						|
        if mis_y1(n) = mis_y2(n)
 | 
						|
            goto done
 | 
						|
        endif
 | 
						|
        mis_e(n) = mis_e(n) + mis_dx(n)
 | 
						|
        mis_y1(n) = mis_y1(n) + 1
 | 
						|
    endif
 | 
						|
 | 
						|
    pset mis_x1(n),mis_y1(n),&h3F
 | 
						|
    return
 | 
						|
 | 
						|
done:
 | 
						|
    gosub initMissle
 | 
						|
    return
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
handleInput:
 | 
						|
    button = get("BUTTON_STATE")
 | 
						|
    if (button AND &h01)   
 | 
						|
        tmpx = tmpx - 1
 | 
						|
        if tmpx < -1
 | 
						|
            tmpx = 0
 | 
						|
            pset x,y,oldc
 | 
						|
            x = x - 1
 | 
						|
        endif
 | 
						|
    endif
 | 
						|
    if (button AND &h02)
 | 
						|
        tmpx = tmpx + 1
 | 
						|
        if tmpx > 1
 | 
						|
            tmpx = 0
 | 
						|
            pset x,y,oldc
 | 
						|
            x = x + 1
 | 
						|
        endif
 | 
						|
    endif
 | 
						|
    if (button AND &h04)
 | 
						|
        tmpy = tmpy -1
 | 
						|
        if tmpy < -1
 | 
						|
            tmpy = 0
 | 
						|
            pset x,y,oldc
 | 
						|
            y = y - 1
 | 
						|
        endif
 | 
						|
    endif
 | 
						|
    if (button AND &h08)
 | 
						|
        tmpy = tmpy + 1
 | 
						|
        if tmpy > 1
 | 
						|
            tmpy = 0
 | 
						|
            pset x,y,oldc
 | 
						|
            y = y + 1
 | 
						|
        endif
 | 
						|
    endif
 | 
						|
 | 
						|
    'oldc = peek(((y + 8) LSL 8) + x) ' TODO
 | 
						|
    pset x,y,rnd(0) and &h3F
 | 
						|
    return
 |