sage Posted October 13, 2012 Share Posted October 13, 2012 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" Quote Link to comment Share on other sites More sharing options...
LX.NET Posted October 13, 2012 Share Posted October 13, 2012 Cool, even more for me to look at. Nice to see a listing that is in assembly. You could enter Karri's 1K competition. Quote Link to comment Share on other sites More sharing options...
sage Posted October 14, 2012 Author Share Posted October 14, 2012 Cool, even more for me to look at. Nice to see a listing that is in assembly. You could enter Karri's 1K competition. Well, it did already take part in a minigame competition in 2002. Thats the reason I put in out on cartridge. Quote Link to comment Share on other sites More sharing options...
+karri Posted October 14, 2012 Share Posted October 14, 2012 Yeah! It was the same competition. I don't remember how we scored anymore. Was it 6th and 8th. Or something like that. But both entries went on the same cart. -- Karri Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.