Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # This file contains the source code of our Flappy Bird game
- # Wait counters
- alias counter1 r5
- alias counter2 r6
- # Sprite values
- alias sprite_x r0
- alias sprite_y r1
- alias sprite_speed r2
- alias fall_speed r4
- alias layer_target r3
- # Sprite locations
- alias loc_layer_target $00
- alias _loc_layer_target &$00
- alias loc_bird $01
- alias loc_cloud1 $04
- alias loc_cloud2 $07
- alias loc_pipe1 $0A
- alias loc_pipe2 $0E
- alias loc_ground1 $11
- alias loc_ground2 $14
- alias loc_ground3 $17
- alias loc_ground4 $20
- # Sprite layers
- alias bird_l 0
- alias cloud_l 1
- alias ground_l 2
- alias pipe_l 3
- # Sprite IDs
- alias bird 0
- alias ground 1
- alias pipe 5
- alias cloud 8
- # Constants
- alias col_check 30 # 0000000000011110
- alias width 320
- alias width_n $FEC0 # -320
- alias gns $FFCE # Godtycklig Negativ Siffra = -50
- # KEYS
- alias k_jump 0
- alias k_pause 16
- # COUNTERS
- alias tick_counter r11
- alias tick r13
- # Help registers
- alias RND r12
- alias IM r14
- alias TMP r15
- JMP INIT
- # == SPRITE FUNCTIONS == #
- FETCH_SPRITE:
- LDI IM 1
- # Get x
- ST loc_layer_target layer_target
- LD sprite_x _loc_layer_target
- # Get y
- ADD layer_target IM
- ST loc_layer_target layer_target
- LD sprite_y _loc_layer_target
- # Get speed
- ADD layer_target IM
- ST loc_layer_target layer_target
- LD sprite_speed _loc_layer_target
- RET
- SAVE_SPRITE:
- LDI IM 1
- # Save speed
- ST _loc_layer_target sprite_speed
- # Save y
- SUB layer_target IM
- ST loc_layer_target layer_target
- ST _loc_layer_target sprite_y
- # Save x
- SUB layer_target IM
- ST loc_layer_target layer_target
- ST _loc_layer_target sprite_x
- RET
- # Returns a sprite to x = width (320) and gives it a random y.
- RETURN:
- LDI sprite_x width
- CPY sprite_y RND
- RET
- RETURN_SIMPLE:
- LDI sprite_x width
- RET
- # == HELPER == #
- # Waits for x ticks.
- WAIT:
- LDI counter2 7
- LDI IM 1
- WAIT_LOOP_START:
- LDI counter1 $FFFF
- WAIT_LOOP1:
- SUB counter1 IM
- BEQ WAIT_LOOP2
- JMP WAIT_LOOP1
- WAIT_LOOP2:
- SUB counter2 IM
- BEQ WAIT_DONE
- JMP WAIT_LOOP_START
- WAIT_DONE:
- RET
- # Maintains a "random" number between 20 - 220 in RND.
- RANDOM:
- LDI IM 1
- ADD RND IM
- LDI IM 220
- CMP RND IM
- BEQ RND_RESET
- RET
- RND_RESET:
- LDI RND 20
- RET
- # Pauses if P pressed
- PAUSE:
- KBD k_pause
- BEQ PAUSE_LOOP
- RET
- PAUSE_LOOP:
- KBD k_pause
- BNE PAUSE_LOOP
- RET
- # == CORE == #
- INIT:
- # Set values
- LDI tick_counter 6
- LDI tick 0
- LDI RND 20
- # Set bird starting values.
- LDI layer_target loc_bird
- CALL FETCH_SPRITE
- LDI sprite_x 40
- LDI sprite_y 120
- LDI sprite_speed 5
- # Set ground1 starting values
- LDI layer_target loc_ground1
- CALL FETCH_SPRITE
- LDI sprite_x 0
- LDI sprite_y 310
- LDI sprite_speed 1
- # Set ground2 starting values
- LDI layer_target loc_ground2
- CALL FETCH_SPRITE
- LDI sprite_x 80
- LDI sprite_y 310
- LDI sprite_speed 1
- # Set ground3 starting values
- LDI layer_target loc_ground3
- CALL FETCH_SPRITE
- LDI sprite_x 160
- LDI sprite_y 310
- LDI sprite_speed 1
- # Set ground4 starting values
- LDI layer_target loc_ground4
- CALL FETCH_SPRITE
- LDI sprite_x 240
- LDI sprite_y 310
- LDI sprite_speed 1
- # Set cloud1 starting values
- LDI layer_target loc_cloud1
- CALL FETCH_SPRITE
- LDI sprite_x width
- LDI sprite_speed 1
- # Set cloud2 starting values
- LDI layer_target loc_cloud2
- CALL FETCH_SPRITE
- LDI sprite_x width
- LDI sprite_speed 2
- JMP GAME_LOOP
- GAME_LOOP:
- # ==== Bird ====
- LDI layer_target loc_bird
- CALL FETCH_SPRITE
- CALL BIRD
- DRW bird_l bird sprite_x sprite_y
- # ==== Ground ====
- LDI layer_target loc_ground1
- CALL FETCH_SPRITE
- CALL GROUND
- DRW ground_l ground sprite_x sprite_y
- CALL SAVE_SPRITE
- LDI layer_target loc_ground2
- CALL FETCH_SPRITE
- CALL GROUND
- DRW ground_l ground sprite_x sprite_y
- CALL SAVE_SPRITE
- LDI layer_target loc_ground3
- CALL FETCH_SPRITE
- CALL GROUND
- DRW ground_l ground sprite_x sprite_y
- CALL SAVE_SPRITE
- LDI layer_target loc_ground4
- CALL FETCH_SPRITE
- CALL GROUND
- DRW ground_l ground sprite_x sprite_y
- CALL SAVE_SPRITE
- # ==== Pipe ====
- LDI layer_target loc_pipe1
- CALL FETCH_SPRITE
- CALL PIPE
- DRW pipe_l pipe sprite_x sprite_y
- CALL SAVE_SPRITE
- LDI layer_target loc_pipe2
- CALL FETCH_SPRITE
- CALL PIPE
- DRW pipe_l pipe sprite_x sprite_y
- CALL SAVE_SPRITE
- # ==== Cloud ====
- LDI layer_target loc_cloud1
- CALL FETCH_SPRITE
- CALL CLOUD
- DRW cloud_l cloud sprite_x sprite_y
- CALL SAVE_SPRITE
- LDI layer_target loc_cloud2
- CALL FETCH_SPRITE
- CALL CLOUD
- DRW cloud_l cloud sprite_x sprite_y
- CALL SAVE_SPRITE
- FWDB
- LDI IM 1
- ADD tick IM
- CALL RANDOM
- CALL WAIT
- # Pause
- CALL PAUSE
- JMP GAME_LOOP
- # == SPRITE BEHAVIOUR FUNCTIONS == #
- # Checks for collision, actions and controlls the flapping.
- BIRD:
- # Check for collision.
- COL bird TMP
- LDI IM col_check
- AND TMP IM
- BPL GAME_OVER
- # Check if space is pressed or still traveling from previous jump, return if not.
- KBD k_jump
- BEQ FLAP
- LDI IM 0
- CMP sprite_speed IM
- BPL FLAP2
- #Falling
- LDI IM 1
- SUB tick_counter IM
- BPL NO_SPEED_CHANGE
- ADD fall_speed IM
- LDI tick_counter 6
- NO_SPEED_CHANGE:
- ADD sprite_y fall_speed # Always moves bird down, unless flap.
- RET
- # Bird flap function. Returns to game loop.
- FLAP:
- LDI sprite_speed 4
- LDI fall_speed 0
- LDI tick_counter 6
- FLAP2:
- LDI IM 1
- SUB tick_counter IM
- BPL NO_LIFT_CHANGE
- SUB sprite_speed IM
- LDI tick_counter 6
- NO_LIFT_CHANGE:
- SUB sprite_y sprite_speed# Speed is in this case used as jump height.
- RET
- # Moves from right to left. Checks if x == 0 then x = 320
- GROUND:
- LDI IM 1
- SUB sprite_x IM
- LDI IM width_n
- CMP sprite_x IM # Check if ground has traveled all the way to the left.
- BEQ RETURN_SIMPLE
- RET
- # Moves from right to left. One in the "Ceiling" and one in the ground. Random y
- PIPE:
- LDI IM 1
- SUB sprite_x IM
- LDI IM gns
- CMP sprite_x IM # Check if pipe has traveled off screen.
- BEQ RETURN
- RET
- # Moves from right to left. Random y.
- CLOUD:
- LDI IM 1
- SUB sprite_x IM
- LDI IM gns
- CMP sprite_x IM # Check if cloud has traveled off screen.
- BEQ RETURN
- RET
- GAME_OVER:
- JMP GAME_OVER
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement