Jump to content
IGNORED

No Beginners Nor Guide


sage

Recommended Posts

Cleaning up my harddisc I found this dusty bits...

Maybe its useful for someone.

Sorry, no documentation, but its self explaing...

 

PS: You can find the game on the (offical) Lynx Reloaded cartridge.

 

****************************
* Pong4Fun1K			 *
*								 *
* created : 12.01.02	 *
* by Björn Spruck	 *
****************************
; FIX_EVERON_BUG set 1
; TWO_PLAYER set 1
CURSOR_MAX_SPEED set 7
SCHLAEGER_BREITE set 30
SCHLAEGER_HOEHE set 20
SCHLAEGER_DICKE set 3
SCHLAEGER_POSMIN equ 3
SCHLAEGER_POSMAXX equ 160-SCHLAEGER_BREITE-3
SCHLAEGER_POSMAXY equ 102-SCHLAEGER_HOEHE-3
_UP equ $80
_DOWN equ $40
_LEFT equ $20
_RIGHT equ $10
_FIREB equ $02
_FIREA equ $01
; Collision:
; 1,2,3,4 Cursors
COLL_CURSOR_O equ 1
COLL_CURSOR_U equ 2
COLL_CURSOR_L equ 3
COLL_CURSOR_R equ 4
COLL_BALL equ 5
COLL_WALL_HO equ 8+1
COLL_WALL_HU equ 8+2
COLL_WALL_VL equ 8+3
COLL_WALL_VR equ 8+4

*
* macros
			 include <macros/hardware.asm>
			 include <macros/help.mac>
			 include <macros/if_while.mac>
			 include <macros/mikey.mac>
			 include <macros/suzy.mac>
			 MACRO ADDBW_Y
 _IFMI
 ldy #$FF
 _ELSE
 ldy #$00
 _ENDIF
			 clc
			 adc \0
			 sta \0
 tya
			 adc \0+1
			 sta \0+1
 ENDM
 MACRO SHOW
			 LDAY \0
			 jsr DrawSprite
			 ENDM
*
* variables
				 include <vardefs/help.var>
				 include <vardefs/mikey.var>
				 include <vardefs/suzy.var>
*
BEGIN_ZP
tmp ds 2
first ds 2
CurrentCursor ds 1
IFD TWO_PLAYER
CurrentButton ds 1
ENDIF
ball_speed_x ds 2
ball_pos_x ds 2
ball_speed_y ds 2
ball_pos_y ds 2
cursor_xy ds 5 ; Offset 1-4
cursor_speed ds 5 ; Offset 1-4
END_ZP
BEGIN_MEM
END_MEM
run $4000	 ; code directly after variables
Start::
START_UP			 ; Start-Label needed for reStart
CLEAR_ZP +STACK ; clear stack ($100) too
; INITMIKEY
INITSUZY
FRAMERATE 60
;
; stereo sound
;
lda #$42
sta $fd50
lda #$3B
sta $fd25
lda #$24
sta $fd21
; Set RGB
 ldx #7
.looprgb lda rgb_g-1,x
	 sta $FDA0,X
 lda rgb_br-1,x
	 sta $FDB0,X
	 dex
 bne .looprgb
 lda #<(screen0)&$fc
 sta ScreenBase
 ldx #>(screen0)
 stx ScreenBase+1 ; ScreenBase = draw-buffer
 lda #<(screen1)&$fc
 sta ScreenBase2
 ldx #>(screen1)
 stx ScreenBase2+1 ; ScreenBase2 = display-buffer
MOVEI collision,$fc0a
lda #$ff
sta $fc24
sta $fc25	 ; collide-offset = -1
lda #%01000010
sta $fc92
sta SPRSYS
 lda #102/2-SCHLAEGER_HOEHE/2
 sta cursor_xy+COLL_CURSOR_L
 sta cursor_xy+COLL_CURSOR_R
 lda #160/2-SCHLAEGER_BREITE/2
 sta cursor_xy+COLL_CURSOR_O
 sta cursor_xy+COLL_CURSOR_U
new_game:: ; Bei Spielende hier neu einsteigen...
lda #160/2+1-5 +13
sta ball_pos_x+1
lda #102/2+3 -5
 sta ball_pos_y+1
IFD 0
lda ball_speed_y
ora #$80
and #$70
sta ball_speed_y
lda ball_speed_x
ora #$80
and #$70
sta ball_speed_x
ENDIF
jsr richtung_speed
.mainloop
jsr move_ball
.do
lda $FD0A
bne .do
	 ldx ScreenBase
	 ldy ScreenBase+1
	 lda ScreenBase2
	 sta ScreenBase
	 lda ScreenBase2+1
	 sta ScreenBase+1
	 stx ScreenBase2
	 sty ScreenBase2+1
		
	 stx $fd94
	 sty $fd95
lda $fd20
_IFNE
dec $fd20
_ENDIF
	 SHOW back_SCB
jsr Draw_Lines
	 SHOW cursor_r_SCB ; alle anderen verlinkt
IFD FIX_EVERON_BUG
 lda ball_x
cmp #160
bcs new_game
 lda ball_y
cmp #102
bcs new_game
lda ball_coll
ELSE
lda ball_coll
bmi new_game ; Everon?
ENDIF
_IFEQ
jmp .5
_ENDIF
; _IFNE
tax
ora #$30
sta $fd24
bit #$08
_IFNE
 ldx #0
_ENDIF
and #$7
pha
lda cursor_speed,x
asl
asl
asl
tay
pla
dec ; cpx #COLL_CURSOR_O
_IFEQ
 lda ball_speed_y+1
 bmi .1
 bra .11
_ENDIF
dec ; cpx #COLL_CURSOR_U
_IFEQ
 lda ball_speed_y+1
 bpl .1
 bra .11
_ENDIF
dec ; cpx #COLL_CURSOR_L
_IFEQ
 lda ball_speed_x+1
 bmi .2
 bra .22
_ENDIF
dec ; cpx #COLL_CURSOR_R
_IFEQ
 lda ball_speed_x+1
 bpl .2
 bra .22
_ENDIF
bra .3_1
.1
eor #$FF
sta ball_speed_y+1
lda ball_speed_y
_IFNE
 eor #$FF
 sta ball_speed_y
_ENDIF
.11
tya
ADDBW_Y ball_speed_x
lda ball_speed_x+1
ldy ball_speed_x
jsr check_overflow
sta ball_speed_x+1
sty ball_speed_x
bra .3
.2
eor #$FF
sta ball_speed_x+1
lda ball_speed_x
_IFNE
 eor #$FF
 sta ball_speed_x
_ENDIF
.22
tya
ADDBW_Y ball_speed_y
lda ball_speed_y+1
ldy ball_speed_y
jsr check_overflow
sta ball_speed_y+1
sty ball_speed_y

; bra .3
.3
stz cursor_speed,x
lda #20
sta $fd20 ; Volume
lda ball_speed_x
and #$1F
sta $fd23
.3_1
jsr richtung_speed
.4
.5; _ENDIF
	 lda $FCB0
IFD TWO_PLAYER
	 and #$C3
ELSE
	 and #$F0
ENDIF
	 sta CurrentCursor
;		 jsr move_schlaeger
;move_schlaeger::
ldx #4
.dos
lda bitbit-1,x
 ldy cursor_xy,x
bitbit2 BIT CurrentCursor
 BEQ _NO_UP
 CPY #SCHLAEGER_POSMIN
 BEQ _NO_DOWN
 DEY
dec cursor_speed,x
 BRA _NO_DOWN2
_NO_UP
lsr
bitbit3 BIT CurrentCursor
 BEQ _NO_DOWN
tya
 CMP sch_max-1,x
 BEQ _NO_DOWN
 INY
inc cursor_speed,x
 BRA _NO_DOWN2
_NO_DOWN
 stz cursor_speed,x
_NO_DOWN2
 sty cursor_xy,x

 lda cursor_speed,x
cmp #CURSOR_MAX_SPEED
_IFEQ
dec
_ENDIF
cmp #-CURSOR_MAX_SPEED
_IFEQ
inc
_ENDIF
sta cursor_speed,x
 lda cursor_speed,x
cmp #CURSOR_MAX_SPEED
_IFEQ
dec
_ENDIF
cmp #-CURSOR_MAX_SPEED
_IFEQ
inc
_ENDIF
sta cursor_speed,x
dex
bne .dos
lda cursor_xy+COLL_CURSOR_O
sta cursor_o_x
lda cursor_xy+COLL_CURSOR_U
sta cursor_u_x
lda cursor_xy+COLL_CURSOR_L
sta cursor_l_y
lda cursor_xy+COLL_CURSOR_R
sta cursor_r_y
; rts
jmp .mainloop
check_overflow::
cmp #$FE
_IFEQ
inc
ldy #$00
_ENDIF
cmp #$01
_IFEQ
dec
ldy #$FE ; FF ist wegen invertieren schlecht
_ENDIF
cpy #$FF
_IFEQ
dey ; FF ist wegen invertieren schlecht
_ENDIF
rts
DrawSprite::
		 sta $fc10
		 sty $fc11
		 MOVE ScreenBase,$fc08
		 lda #$5 ; 1 SprStart + 4 Everon
		 STA $FC91
		 STZ $FD90
.WAIT		 STZ $FD91
		 lda $fc92
		 lsr
		 bcs .WAIT
		 STZ $FD90
		 rts
move_ball::
; Jetzt neue X Position bestimmen (evtl y auch hier?)
ADDW ball_speed_x, ball_pos_x
; Jetzt neue Y Position bestimmen
ADDW ball_speed_y, ball_pos_y
; set_ball_positions::
; Jetzt neue Ballposition setzen
lda ball_pos_x+1 ; Vollzahlanteil
sta ball_x
lda ball_pos_y+1 ; Vollzahlanteil
sta ball_y
rts
; COLL_CURSOR_O equ 1
; COLL_CURSOR_U equ 2
; COLL_CURSOR_L equ 3
; COLL_CURSOR_R equ 4
;_UP equ $80
;_DOWN equ $40
;_LEFT equ $20
;_RIGHT equ $10
sch_max dc.b SCHLAEGER_POSMAXX,SCHLAEGER_POSMAXX,SCHLAEGER_POSMAXY,SCHLAEGER_POSMAXY
IFD TWO_PLAYER
bitbit dc.b _FIREB,_FIREB,_UP,_UP
ELSE
bitbit dc.b _LEFT,_LEFT,_UP,_UP
ENDIF
*
* Quadriere A (8 bit)
*
square::
sta MATHD
sta MATHB
stz MATHA ; Start
.wait
lda SPRSYS
bmi .wait
rts
invert_if_neg::
lda ball_speed_x+1
_IFMI
lda ball_speed_x
_IFNE
eor #$FF
sta ball_speed_x
_ENDIF
_ENDIF
lda ball_speed_y+1
_IFMI
lda ball_speed_y
_IFNE
eor #$FF
sta ball_speed_y
_ENDIF
_ENDIF
rts
richtung_speed::
jsr invert_if_neg
.lloop
stz MATHK ; Akkumulator auf 0
stz MATHM ; Akkumulator auf 0
lda ball_speed_x
jsr square
lda ball_speed_y
jsr square

lda MATHK
ora MATHJ
_IFNE
lsr ball_speed_x
inc ball_speed_x
lsr ball_speed_y
inc ball_speed_y
bra .lloop
_ENDIF
lda MATHL
_IFMI
jsr invert_if_neg
rts
_ENDIF
inc ball_speed_x
inc ball_speed_y
bra .lloop
Draw_Lines::
ldx #18
.hll
phx
		 lda line_data_x,x
sta dl_scb_x
		 lda line_data_y,x
sta dl_scb_y
lda line_data_s,x
lsr
ldx #COLL_WALL_VR
ldy #1
_IFCC
 pha
 ldx #COLL_WALL_HU
 tya
 ply
_ENDIF
		 sty dl_scb_xsize+1
		 sta dl_scb_ysize+1
stx dl_scb+2
php
SHOW dl_scb
plp
_IFCS
 inc dl_scb_x
_ELSE
 inc dl_scb_y
_ENDIF
dec dl_scb+2
SHOW dl_scb
plx
dex
bpl .hll
	 rts
*
;			 BALL O U L R LYNX BACK
rgb_g dc.b $00,$00,$00,$0F,$00,$0C,$0D
rgb_br dc.b $08,$0F,$FF,$F0,$F0,$00,$FD
*
* Jetzt kommen die Sprite Daten
*
;				 L Y N N X X	 L Y Y Y N N N N X X X X X
line_data_x dc.b 30,50,86,91,112,112, 30,50,70,60,80,90,90,100,110,110,130,130,120
line_data_y dc.b 67,48,42,57, 43, 56, 30,30,30,50,30,42,57,30, 30, 56, 30, 56, 44
line_data_s dc.b 40,44,10,10, 36, 36, 75,37,37,41,81, 5, 5,81, 31, 29, 31, 29, 27
 dc.b 0
dl_scb	 dc.b $04,$10,6
		 dc.w 0,
 dc.w back_cls_data
dl_scb_x	 dc.w 0
dl_scb_y	 dc.w 0
dl_scb_xsize dc.w $100
dl_scb_ysize dc.w $100
dl_scb_color dc.b $60

back_cls_data
dc.b 2,$80,0
dc.b 0
back_SCB	 dc.b $00,$10,$00			 ; Background, collideable
		 dc.w 0
back_data	 dc.w back_cls_data
		 dc.w 0
		 dc.w 0
		 dc.w $100*160
		 dc.w $100*102
		 dc.b $70 ; do not use E here
; 04 - normal Sprite - 0 transparent & not collideable
dc.b 0
cursor_r_SCB dc.b $04,$10,COLL_CURSOR_R
		 dc.w cursor_l_SCB
cursor_r_data dc.w back_cls_data
cursor_r_x	 dc.w 160-SCHLAEGER_DICKE
cursor_r_y	 dc.w 0
		 dc.w $100*SCHLAEGER_DICKE
		 dc.w $100*SCHLAEGER_HOEHE
		 dc.b $20
dc.b 0
cursor_l_SCB dc.b $04,$00,COLL_CURSOR_L
		 dc.w cursor_u_SCB
cursor_l_data dc.w back_cls_data
cursor_l_x	 dc.w 0
cursor_l_y	 dc.w 0
		 dc.b $30
dc.b 0
cursor_u_SCB dc.b $04,$10,COLL_CURSOR_U
		 dc.w cursor_o_SCB
cursor_u_data dc.w back_cls_data
cursor_u_x	 dc.w 0
cursor_u_y	 dc.w 102-SCHLAEGER_DICKE
		 dc.w $100*SCHLAEGER_BREITE
		 dc.w $100*SCHLAEGER_DICKE
		 dc.b $40
dc.b 0
cursor_o_SCB dc.b $04,$00,COLL_CURSOR_O
		 dc.w ball_SCB
cursor_o_data dc.w back_cls_data
cursor_o_x dc.w 0
cursor_o_y dc.w 0
		 dc.b $50
; perhaps better boundary sprite???
ball_coll dc.b 0
ball_SCB	 dc.b $04,$10,COLL_BALL
		 dc.w 0
ball_data	 dc.w back_cls_data
ball_x		 dc.w 0
ball_y		 dc.w 0
		 dc.w $100*3
		 dc.w $100*3
		 dc.b $10
;dc.b "B.Spruck"
end_code
collision	 set (end_code+4)&$FFFC
screen0		 set collision+SCREEN.LEN
screen1		 set screen0+SCREEN.LEN
screen_end	 set screen1+SCREEN.LEN
echo "COLLISION: %Hcollision"
echo "SCREEN0: %Hscreen0"
echo "SCREEN1: %Hscreen1"
echo "SCR_END: %Hscreen_end"

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...