Subject: [stella] gah! my suckitude knows no bounds From: KirkIsrael@xxxxxxxxxxxxx Date: 23 Aug 2003 20:25:47 0000 
So, I decided to pick up my long slumbering JoustPong project. And pretty dang quick, it layed the smackdown and reminded me why I set it aside in the first place. Below is about the code I started with. I decide to start messing with the playfield, just trying to figure out a simple way of detecting "goals". So the code here works...both players can hit the fire button, and it has a nice roughly joustlike flap against gravity. but if I uncomment these lines: ; LDA #%00100000 ; STA PF0 becomes LDA #%00100000 STA PF0 it all breaks. the guys get pinned to the top... it's almost like an enormous amount is being subtracted from P0VertSpeed or P1VertSpeed rather than just the constant FlapStrength. I know I'm a ASM retard, but what's going on here? This is tested with Z26. ; JoustPong by Kirk Israel processor 6502 include vcs.h org $F000 P0YPosFromBot = $80 P0VisibleLine = $81 P0DrawBuffer = $82 P0VertSpeed = $83 P1YPosFromBot = $84 P1VisibleLine = $85 P1DrawBuffer = $86 P1VertSpeed = $87 But0WasOn = $88 But1WasOn = $8A GravTimer = $8B ;CONSTANTS FlapStrength = #4; GravDelay = #6 ;How often does gravity pull 'em down? MaximumSpeed = #6 ;generic start up stuff... Start SEI CLD TXS LDX #$FF LDA #0 ClearMem STA 0,X DEX BNE ClearMem LDA #$00 STA COLUBK ;Some other initialization LDA GravDelay STA GravTimer ;initialize gravity timer (only 1 in N ticks do we pull) LDA #33 STA COLUP0 ;Set P0 Reddish LDA #66 STA COLUP1 ;Set P1 Purplish LDA #120 STA P0YPosFromBot ;P0 Initial Y Position STA P1YPosFromBot ;P1 Initial Y Position LDA #0 STA P0VertSpeed STA P1VertSpeed ;generate the background ;this is just one dot on the edge ;reflected. we'll use it for collision ;detection to know when a goal ;is scored ; LDA #%00100000 ; STA PF0 ; LDA #99 ; STA COLUPF ;color here ; LDA #%00000001 ; STA CTRLPF ; LDA #%00000010 ; STA ENABL ; LDA #%01110000 ; STA HMBL ;use NOPs to position the players LDA #0 STA WSYNC NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP STA RESM0 STA RESP0 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP STA RESBL NOP NOP NOP NOP NOP NOP NOP STA RESP1 NOP STA RESM1 LDA %00001000 STA REFP1 LDA #2 STA ENAM0 STA ENAM1 ;STA ENABL LDA #%10101010 STA COLUPF ;VSYNC time MainLoop LDA #2 STA VSYNC STA WSYNC STA WSYNC STA WSYNC LDA #43 STA TIM64T LDA #0 STA VSYNC CheckButton0 LDA INPT4 BMI NoButton0 ;Check to see if the button was already down LDA But0WasOn BNE Button0WasAlreadyDown ;New Button Pressed Time to Flap! LDA P0VertSpeed SEC SBC FlapStrength STA P0VertSpeed LDA #1 STA But0WasOn Button0WasAlreadyDown JMP EndButton0 NoButton0 ;button wasn't pressed, remember that LDA #0 STA But0WasOn EndButton0 CheckButton1 LDA INPT5 BMI NoButton1 ;Check to see if the button was already down LDA But1WasOn BNE Button1WasAlreadyDown ;New Button Pressed Time to Flap! LDA P1VertSpeed SEC SBC FlapStrength STA P1VertSpeed LDA #1 STA But1WasOn Button1WasAlreadyDown JMP EndButton1 NoButton1 ;button wasn't pressed, remember that LDA #0 STA But1WasOn EndButton1 ;Time to Add Gravity to Speeds of P0/P1? DEC GravTimer BNE DoneWithGravity INC P0VertSpeed INC P1VertSpeed LDA GravDelay STA GravTimer DoneWithGravity ; LDA P0YPosFromBot ; STA COLUBK ;Move the Players first, then check if hit ceiling/floor ; ; ;Add the negative of the Player 0 Vert Speed to 0 in A LDA #0 SEC SBC P0VertSpeed ;Then add the current position of p0 CLC ADC P0YPosFromBot STA P0YPosFromBot ;Add the negative of the Player 1 Vert Speed to 0 in A LDA #0 SEC SBC P1VertSpeed ;Then add the current position p1 CLC ADC P1YPosFromBot STA P1YPosFromBot ;check if player 0 hit floor LDA #10 ;10 is floor CLC CMP P0YPosFromBot BCC DoneCheckingHitFloorP0 ;we need a better bounce routine, like reducing the speed? ;speed should be positve; let's divide it my two and then ;subtract it from zero to get the new speed (i.e. a half rebound) LDA P0VertSpeed CLC ROR STA P0VertSpeed LDA #0 SEC SBC P0VertSpeed STA P0VertSpeed LDA #10 STA P0YPosFromBot ;putplayer on floor DoneCheckingHitFloorP0 ;check if player 1 hit floor LDA #10 ;10 is floor CLC CMP P1YPosFromBot BCC DoneCheckingHitFloorP1 ;we need a better bounce routine, like reducing the speed? ;speed should be positve; let's divide it my two and then ;subtract it from zero to get the new speed (i.e. a half rebound) LDA P1VertSpeed CLC ROR STA P1VertSpeed LDA #0 SEC SBC P1VertSpeed STA P1VertSpeed LDA #10 STA P1YPosFromBot ;putplayer on floor DoneCheckingHitFloorP1 ;check if player 0 hit ceiling  full rebound LDA #90 ;#was 180 before 2 line kernal CMP P0YPosFromBot BCS DoneCheckingHitCeilingP0 LDA #0; SBC P0VertSpeed STA P0VertSpeed LDA #90 ;#was 180 STA P0YPosFromBot DoneCheckingHitCeilingP0 ;check if player 1 hit ceiling  full rebound LDA #90 ;#was 180 before 2 line kernal CMP P1YPosFromBot BCS DoneCheckingHitCeilingP1 LDA #0; SBC P1VertSpeed STA P1VertSpeed LDA #90 ; was 180 STA P1YPosFromBot DoneCheckingHitCeilingP1 ;; ;;used to have left and right flow here... ;; ;; WaitForVblankEnd LDA INTIM BNE WaitForVblankEnd LDY #95 ; WAS, going for double #191 STA VBLANK STA WSYNC STA HMOVE ;main scanline loop... ScanLoop STA WSYNC LDA P0DrawBuffer ;[0]+3 STA GRP0 ;[3]+3 LDA P1DrawBuffer ;[6]+3 STA GRP1 ;[9]+3 ; here the idea is that P0VisibleLine ; is zero if the line isn't being drawn now, ; otherwise it's however many lines we have to go CheckActivatePlayer0 CPY P0YPosFromBot ;[12]+4 BNE SkipActivatePlayer0 ;[16]+3 LDA #8 ;8 lines tall ;[19]+3 STA P0VisibleLine ;[22]+3 SkipActivatePlayer0 ;turn player off then see if it should be on LDA #00 ;[25]+3 ; ;if the P0VisibleLine is non zero, ;we're drawing it ; LDX P0VisibleLine ;[28]+3 BEQ FinishPlayer0 ;[31]+3 IsPlayer0On LDA But0WasOn ;[34]+3 DoWing0 BNE DrawWing0Down ;[37]+3 DrawWing0Up LDA WingUpGraphic1,X ;[40]+3 JMP Wing0Finish ;[43]+3 DrawWing0Down LDA WingDownGraphic1,X Wing0Finish DEC P0VisibleLine ;[46]+3 FinishPlayer0 STA P0DrawBuffer ;[49]+3 ; here the idea is that P1VisibleLine ; is zero if the line isn't being drawn now, ; otherwise it's however many lines we have to go CheckActivatePlayer1 CPY P1YPosFromBot BNE SkipActivatePlayer1 LDA #8 ;8 lines tall STA P1VisibleLine SkipActivatePlayer1 ;turn player off then see if it should be on LDA #00 ; ;if the P0VisibleLine is non zero, ;we're drawing it ; LDX P1VisibleLine BEQ FinishPlayer1 IsPlayer1On LDA But1WasOn DoWing1 BNE DrawWing1Down DrawWing1Up LDA WingUpGraphic1,X JMP Wing1Finish DrawWing1Down LDA WingDownGraphic1,X Wing1Finish DEC P1VisibleLine FinishPlayer1 STA P1DrawBuffer NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP ;now just finish counting of scanloop DEY BNE ScanLoop LDA #2 STA WSYNC STA VBLANK LDX #30 OverScanWait STA WSYNC DEX BNE OverScanWait JMP MainLoop org $FF00 BigHeadGraphic .byte %00111100 .byte %01111110 .byte %11000001 .byte %10111111 .byte %11111111 .byte %11101011 .byte %01111110 .byte %00111100 WingUpGraphic .byte #%00001100 .byte #%00001100 .byte #%10001100 .byte #%11011100 .byte #%11111100 .byte #%01111100 .byte #%00101100 .byte #%00001100 WingDownGraphic .byte #%00001100 .byte #%00011100 .byte #%00111100 .byte #%01111100 .byte #%01111100 .byte #%00111100 .byte #%00001100 .byte #%00001100 org $FFFC .word Start .word Start  Archives (includes files) at http://www.biglist.com/lists/stella/archives/ Unsub & more at http://www.biglist.com/lists/stella/
Current Thread 


< Previous  Index  Next > 

[stella] music.h / SID2TIA, Manuel Polik  Thread  RE: [stella] gah! my suckitude know, Dennis Debro 
[stella] music.h / SID2TIA, Manuel Polik  Date  RE: [stella] gah! my suckitude know, Dennis Debro 
Month 