;-----------------------------------------------------------; ; ; ; Invaded ; ; Version 1.0 ; ; Item Pickups Routines ; ; ; ;-----------------------------------------------------------; ;------------------------------------------------ ; clearPickupArray - Clear pickupArray ; ; Input: None ; Output: None ;------------------------------------------------ clearPickupArray: ld hl,pickupArray ld de,pickupArray+1 ld bc,MAX_PICKUPS*3-1 ld (hl),0 ldir ret ;------------------------------------------------ ; newPickup - Create a new pickup item ; ; Input: C = Pickup type, 1 = Life/Score, 2 = Power, 3 = Two-Way, 4 = Vertical ; D = X Coord ; E = Y Coord ; Output: None ;------------------------------------------------ newPickup: ld hl,pickupArray ld b,MAX_PICKUPS findPickupEntry: ld a,(hl) or a jr z,pickupEntryFound inc hl inc hl inc hl djnz findPickupEntry ret pickupEntryFound: dec c jr z,newPickupRandom inc c inc c ld a,c jr doNewPickup newPickupRandom: ld b,50 call ionRandom cp 49 ld a,2 jr c,doNewPickup ld a,(lives) cp 4 ld a,1 jr c,doNewPickup inc a jr doNewPickup ld b,128 call ionRandom ; 0 <= A <= 127 cp 126 jr nc,newPickupExtraLife cp 120 jr nc,newPickupBonusScore cp 80 jr nc,newPickupPowerGun cp 40 jr nc,newPickupTwoWayGun newPickupVerticalGun: ld a,5 jr doNewPickup newPickupExtraLife: ld a,(lives) cp 4 ld a,1 jr c,doNewPickup ld a,2 jr doNewPickup newPickupBonusScore: ld a,2 jr doNewPickup newPickupPowerGun: ld a,3 jr doNewPickup newPickupTwoWayGun: ld a,4 doNewPickup: ld (hl),a inc hl ld a,d cp 96-8 jr c,newPickupXOK ld a,96-8 newPickupXOK: ld (hl),a inc hl ld a,e cp 56-8 jr c,newPickupYOK cp 56 ld a,56-8 jr c,newPickupYOK xor a newPickupYOK: ld (hl),a ret ;------------------------------------------------ ; drawPickups - Draw pickups ; ; Input: None ; Output: None ;------------------------------------------------ drawPickups: ld hl,pickupArray ld b,MAX_PICKUPS drawPickupsLoop: push bc push hl ld a,(hl) or a jr z,endDrawPickupsLoop ex de,hl ld l,a ld h,0 dec l add hl,hl add hl,hl add hl,hl ld bc,sprPickups add hl,bc push hl pop ix ex de,hl inc hl ld a,(hl) inc hl ld l,(hl) #ifdef MIRAGE call putSprite8 #else ld b,8 call ionPutSprite #endif endDrawPickupsLoop: pop hl pop bc inc hl inc hl inc hl djnz drawPickupsLoop ret ;------------------------------------------------ ; movePickups - Move pickups slowly to the left of screen ; ; Input: None ; Output: None ;------------------------------------------------ movePickups: ld a,(frame) and $01 ret nz ld hl,pickupArray ld b,MAX_PICKUPS movePickupsLoop: ld a,(hl) or a jr z,endMovePickupsLoop inc hl dec (hl) ld a,(hl) dec hl or a jr nz,endMovePickupsLoop ld (hl),0 endMovePickupsLoop: inc hl inc hl inc hl djnz movePickupsLoop ret ;------------------------------------------------ ; checkGetPickups - Check to see if player is picking up any item pickups ; ; Input: None ; Output: None ;------------------------------------------------ checkGetPickups: ld a,(dead) or a ret nz call storePlayerInCollideObject1 ld hl,pickupArray ld b,MAX_PICKUPS checkGetPickupsLoop: push bc push hl ld a,(hl) or a jr z,endCheckGetPickupsLoop ex de,hl ; DE => Start of pickup entry ld hl,collideObject2 inc de ld a,(de) ld (hl),a inc hl inc de ld (hl),8 inc hl ld a,(de) ld (hl),a inc hl ld (hl),8 call checkCollision jr nc,endCheckGetPickupsLoop pop hl push hl ld a,(hl) ld (hl),0 dec a ; Was it an extra life? jr nz,cgp2 ld hl,lives inc (hl) call showLives jr cgpAddScore cgp2: dec a ; Was it a bonus score? jr nz,cgp3 ld de,100 call updateScore jr cgpAddScore cgp3: dec a ; Was it a power gun? jr nz,cgp4 call tryIniOrb jr c,cgpAddScore ld a,1 ld (specialWeapon),a jr cgpAddScore cgp4: dec a ; Was it a two-way gun? jr nz,cgp5 call tryIniOrb jr c,cgpAddScore ld a,2 ld (specialWeapon),a jr cgpAddScore cgp5: call tryIniOrb jr c,cgpAddScore ld a,3 ld (specialWeapon),a cgpAddScore: ld de,10 call updateScore endCheckGetPickupsLoop: pop hl pop bc inc hl inc hl inc hl djnz checkGetPickupsLoop ret .end