Subject: RE: [stella] Sprite position to Tombstone Matrix conversion From: "Dennis Debro" <ddebro@xxxxxxxxxxxxx> Date: Sun, 18 Jan 2004 22:43:55 -0500 |
Hi Glenn, > I'm working on creating a lookup table I can use in the collision routine > for Death Derby where given the gremlin's X and Y, I figure out which RAM > strip to write to, which row of the RAM strip, and which bit to turn on. I don't know if this will help you but I'll post it anyway. It sounds like a similar problem I had with random ladders in Climber 5. With the random ladders I needed to calculate when the climber could move vertically. This is the same problem you'd find in your typical maze game too. This is from my Climber 5 comments. I hope they make sense. ;Theory behind the playfield computations ;The playfield is broken into chunks of 32 (based on the horizontal ;positions of the objects). ;The objects have a PF range of 7 - 135. (135 - 7) / 4 PF sections = 32 ;The PF has 4 pixel res and there are 40 bits across. ; ;----------------------- PF Pixels ----------------------- ;| PF0 | PF1 | PF2 | PF2 | PF1 | PF0 | ;|68 . 83|84 .. 115|116.. 147|148.. 179|180.. 211|212.227| ; -- or -- ;----------------------- PF Pixels ----------------------- ;| PF0 | PF1 | PF2 | PF2 | PF1 | PF0 | ;|0 . 15|16 .. 47|48 .. 79|80 .. 111|112.. 143|144.159| ; ;The climber has a horizontal range of 3 - 144 (72 - 213) ;In relationship to the PF that would be (80 - 221) ... pixels shifted by 8 ;because of HMOVE ; ;And a PF range of 7 - 135 (76 - 204) -or- (84 - 212) ... again shifting 8 ;pixels ;There are 4 sections of the PF that we're concerned about (PF1/PF2/PF2/PF1) ;So we subtract by 32 [(212 - 84) / 4] to find the PF section the climber is ;in ;We keep subtracting until the value is between the PF1 values (i.e. less ;than 116) sbc #LEFT_PF_BOUND ; subtract by LEFT_PF_BOUND to remove offset ldy #-1 ; when done y will hold the PF section the climber ; is in (0 - 3) .computePFSection iny ; increase the playfield section sbc #32 ; reduce the value to find the playfield section bcs .computePFSection adc #32 ; add the value back in -- value went negative lsr lsr sty pfSection ; y holds the PF section (0 - 3) tay .setPfSection lda pfSection ; the playfield is reflected so sections beq .loadPF1Vars ; 0 and 3 are for PF1 and sections 1 and cmp #$03 ; 2 are for PF2 bcs .loadPF1Vars .loadPF2Vars lda pf2Vars,x sta upMotionCheck lda pf2Vars-1,x sta downMotionCheck bcc .done .loadPF1Vars lda pf1Vars,x sta upMotionCheck lda pf1Vars-1,x sta downMotionCheck .done lsr pfSection ; shift the pfSection to determine if the bcc .loadAndValue ; playfield bits are flipped (sections 1 ; and 3 are flipped) tya eor #$07 tay .loadAndValue lda upMotionCheck and LadderMasking,y bne .checkForDown ldx #%00010000 .checkForDown lda downMotionCheck and LadderMasking,y bne .setVerticalMotion txa ora #%00100000 tax NOP_W .noVerticalMotion ldx #%00110000 .setVerticalMotion txa ora allowedMotion ; or with allowed motion to get climber .setAllowedMotion ; motion sta allowedMotion ; store the value in RAM to be used during ; VBLANK processing . . . LadderMasking .byte $80,$40,$20,$10,$08,$04,$02,$01 Maybe it helps...then again maybe it doesn't. I don't know about fast but it gets the job done. Take care, Dennis ---------------------------------------------------------------------------------------------- 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] Sprite position to Tombsto, Glenn Saunders | Thread | Re: [stella] Sprite position to Tom, Thomas Jentzsch |
[stella] Sprite position to Tombsto, Glenn Saunders | Date | Re: [stella] Sprite position to Tom, Thomas Jentzsch |
Month |