From 0b4f05e1c2c67a443425d16cf20462dac24c3970 Mon Sep 17 00:00:00 2001 From: Tyrel Souza Date: Tue, 24 Jan 2023 00:39:34 -0500 Subject: [PATCH] collisions --- atlantico/atlantico.asm | 125 ++++++++++++++++++++++++++++++++++++++++ atlantico/atlantico.nes | Bin 40976 -> 40976 bytes atlantico/atlantico.o | Bin 52911 -> 54684 bytes 3 files changed, 125 insertions(+) diff --git a/atlantico/atlantico.asm b/atlantico/atlantico.asm index b5834a8..0ed3387 100755 --- a/atlantico/atlantico.asm +++ b/atlantico/atlantico.asm @@ -8,6 +8,8 @@ ;; Variables declared in RAM zero-page ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .segment "ZEROPAGE" +Collision: .res 1 ; 0 or 1, if 0 no collision, if 1, collisison + Buttons: .res 1 ; Pressed buttons (A|B|Sel|Start|Up|Dwn|Lft|Rgt) PrevButtons: .res 1 ; Stores the previous buttons from the last frame @@ -39,6 +41,11 @@ ParamYPos: .res 1 ; Used as parameter to subroutine ParamTileNum: .res 1 ; Used as parameter to subroutine ParamNumTiles: .res 1 ; Used as parameter to subroutine ParamAttribs: .res 1 ; Used as parameter to subroutine +ParamRectX1: .res 1 ; Used as parameter to subroutine +ParamRectY1: .res 1 ; Used as parameter to subroutine +ParamRectX2: .res 1 ; Used as parameter to subroutine +ParamRectY2: .res 1 ; Used as parameter to subroutine + PrevOAMCount: .res 1 ; Store the previous number of bytes that were sent to the OAM @@ -327,6 +334,103 @@ EndRoutine: rts .endproc +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Subroutine to check collisions +;; PARAMS: ParamXPos, ParamYPos (x and y of missile) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +.proc CheckEnemyCollision + txa + pha ; Push and save the X register in the stack + + ldx #0 + stx Collision ; Collision = 0 + + EnemiesCollisionLoop: + cpx #MAX_ACTORS * .sizeof(Actor) + beq FinishCollisionCheck + lda ActorsArray+Actor::Type,x + cmp #ActorType::AIRPLANE + bne NextEnemy ; If not an airplane - skip to next enemy type + + ;; LOAD BOUNDING BOX X1,Y1,X2,Y2 + lda ActorsArray+Actor::XPos,x ; Bounding Box X1Y1 + sta ParamRectX1 + lda ActorsArray+Actor::YPos,y + sta ParamRectY1 + + lda ActorsArray+Actor::XPos,x ; Bounding Box X2Y2 + clc + adc #22 ; Get right value of the airplane bounding box by adding 22 + sta ParamRectX2 + + lda ActorsArray+Actor::YPos,y ; Bottom of box by adding 8, one sprite tall + clc + adc #8 + sta ParamRectY2 + + jsr IsPointInsideBoundingBox + + lda Collision + beq NextEnemy + lda #ActorType::NULL + sta ActorsArray+Actor::Type,x + jmp FinishCollisionCheck + + NextEnemy: + txa + clc + adc #.sizeof(Actor) + tax + jmp EnemiesCollisionLoop + +FinishCollisionCheck: + pla + tax + + rts +.endproc + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Subroutine to check if a point is inside a bounding box. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Params: +;; (ParamXPos, ParamYPos) - coords to be tested +;; (ParamRectX1,ParamRectY1,ParamRectX2,ParamRectY2) Are rectangle coords) +;; Output: +;; Collision flag is either 1 or 0 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +.proc IsPointInsideBoundingBox + lda ParamXPos + cmp ParamRectX1 + bcc PointIsOutside + + lda ParamYPos + cmp ParamRectY1 + bcc PointIsOutside + + lda ParamXPos + cmp ParamRectX2 + bcs PointIsOutside + + lda ParamYPos + cmp ParamRectY2 + bcs PointIsOutside + + PointIsInside: + lda #1 + sta Collision + jmp EndCollisionCheck + + PointIsOutside: + lda #0 + sta Collision + + EndCollisionCheck: + rts + +.endproc + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Subroutine to loop all actors and update them (position, velocity, etc.) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -345,6 +449,27 @@ EndRoutine: lda #ActorType::NULL sta ActorsArray+Actor::Type,x ; Remove the missile from the array SkipMissile: + + CheckCollision: + lda ActorsArray+Actor::XPos,x + clc + adc #3 + sta ParamXPos ; Missile position to be checked X += 3 + + lda ActorsArray+Actor::YPos,y + clc + adc #1 + sta ParamYPos ; Missile position to be checked Y += 1 + + jsr CheckEnemyCollision ; Perform collision check between the missile and other enemy actor + + lda Collision + beq NoCollisionFound + lda #ActorType::NULL + sta ActorsArray+Actor::Type,x + NoCollisionFound: + + jmp NextActor : diff --git a/atlantico/atlantico.nes b/atlantico/atlantico.nes index e64e2b3b7a8a90a7bb72429bff040839c7568ae8..01ff9e140f9fdf25dcc90bbc7a6b7aad8d9fed0f 100644 GIT binary patch delta 1135 zcmZWo&ubGw6rTOjBu#6&*|g~<)i^dyN~9M-u!5inLK+qk_26-j?oH1gvPt_y3V{tZ zP)~-!9HvmI)F__J!9pV{`yc2*gHn_|`0G&6H`^o)xa`i(yzjm5`(_^Fwq>_1m#<#A zk(MQi^dByPR7+ke;kSjqyyX6|nh`b|&1YSC>HGul7tD5uwIEY|u@<77;Ls#5pRClv zbgxalpBB?fr4l4qd`XH%4V%Iw)1%^nDW(f3$)*hZJ+6}WN*R(|tr5Bvv~MIu36Dj9Yg`SrpDF9__>on^RyNIV4x4VwF{6=VsYc#nV~d}|9mPv?8K(IMFzBQc7xIyldj~V|gN-18xm4g#6^8_-jT-mUba1s~76s2nw zM*J`*jXBe;96GvHxxHyIWA}ucVyWGXo51+UNgx;U z(zqF;m4_6+18Gj-I9i&a-KzPj+L4A(3sHioIzVNCmV3o&ulNYYLmyCUh$>jD42snu z^cteluyD_=ubA`I_2TPO+j0K49@`td=DX@`I2E)d!%`S#>3Xc2-ebqb+^EMyGmO12 zpJvt`$;I+0jDZGm(D_|ZI0KbykcC+~@9+?|oPfb+f@Y(OX@;lG)c!J#s0KQ{>@ZD` zYF(Y_9qN6@cpTF;M7la&B0_Q1&#njA6f~wAwps>Ju|KG&iwaj%klF~vmuG4cWfI7g zI7})y{iuh172I#Xp){{Z=-=8xs#YH__7>5g)_HhGC@g|Ig++@i2l zKxK@qeNg7lXiW1$;wD0zX+l$Ib9W>zd<6QVoeN&5JBGBQxRvP6IrZkfk%g6G%Ue4W Hjzs?f1<;fb delta 1011 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 bWOpm*l3!5RsB5<_g?(~@I0|3|cbxwV1eh!M literal 52911 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