Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- rem ****************************************************************
- rem ****************************************************************
- rem *
- rem * Fake Gravity Platformer Test with Shooting
- rem *
- rem * By Duane Alan Hahn (Random Terrain) using hints, tips,
- rem * code snippets, and more from AtariAge members such as
- rem * batari, SeaGtGruff, RevEng, Robert M, Atarius Maximus,
- rem * jrok, Nukey Shay, supercat, and GroovyBee.
- rem *
- rem ****************************************************************
- rem ****************************************************************
- set kernel_options no_blank_lines
- set smartbranching on
- rem ****************************************************************
- rem *
- rem * Create aliases for variables.
- rem *
- rem ****************************************************************
- rem '
- rem ' (You can have more than one alias for each variable.)
- rem '
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem '
- rem ' Player movement variables.
- rem '
- dim _P0_Left_Right = player0x.a
- dim _P0_Up_Down = player0y.b
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem ' Converts sprite position to playfield position.
- rem '
- dim _Convert_X = c
- dim _Convert_Y = d
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem ' Limits how high player can jump.
- rem '
- dim _Counter_Jump_Up = e
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem ' Fake gravity jump counter.
- rem '
- dim _Gravity_U_Counter = f
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem ' Decreases over the time of a jump.
- rem '
- dim _Gravity_Up = g
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem ' Fake gravity fall counter.
- rem '
- dim _Gravity_D_Counter = h
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem ' Increases over the time of a fall.
- rem '
- dim _Gravity_Down = i
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem ' Becomes slower each time it loops back around.
- rem '
- dim _Slide_Speed = k
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem ' Sound effect duration for channel 0.
- rem '
- dim _C0_Duration = o
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem ' Sound effect counter for channel 0.
- rem '
- dim _C0_Counter = p
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem ' BitOp variables.
- rem '
- dim BitOp_01 = q
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem ' Player is falling if on.
- rem '
- dim Bit0_Fall_in_Progress = q
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem ' Channel 0 sound effects (set 1).
- rem '
- dim BitOp_Ch_0_Sound_Set_01 = r
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem ' Jumping sound.
- rem '
- dim Bit0_Sound_Jump = r
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem ' Falling sound.
- rem '
- dim Bit1_Sound_Fall = r
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem ' Sliding sound.
- rem '
- dim Bit2_Sound_Slide = r
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem ' Shot sound.
- rem '
- dim Bit3_Sound_Shot = r
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem ' BitOp variables.
- rem '
- dim BitOp_02 = s
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem ' Remembers if player was facing left.
- rem '
- dim Bit3_Mem_Left = s
- __Start_Restart
- rem @# Start-Restart
- rem ****************************************************************
- rem ****************************************************************
- rem *
- rem *
- rem * Program Start/Restart
- rem *
- rem *
- rem ****************************************************************
- rem ****************************************************************
- rem ****************************************************************
- rem *
- rem * Clears all normal variables.
- rem *
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem '
- for temp5 = 0 to 25 : a[temp5] = 0 : next
- rem ****************************************************************
- rem *
- rem * Sets up bits, variables, objects and mute sounds.
- rem *
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem '
- rem * 0, 0 ist links oben
- AUDV0 = 0 : rem * Mute channel 0.
- player0x = 79 : rem * Sets position of player sprite (across).
- player0y = 79 : rem * Sets position of player sprite (down).
- _Gravity_Up = 3 : rem * Decreases over the time of a jump.
- _Slide_Speed = 1 : rem * Becomes slower each time it loops back around.
- Bit3_Mem_Left{3} = 1 : rem * Player shoots left if ducking right away.
- dim counter = u
- dim grav_an = v
- rem ****************************************************************
- rem *
- rem * Sets up the playfield.
- rem *
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem '
- playfield:
- ................................
- ................................
- ................................
- ......X..................X......
- ......XXXXXXX......XXXXXXX......
- ......X..................X......
- ................................
- .XXX......XXXXXXXXXXXX....XXX...
- .X.................X........X...
- .X..........................X...
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- end
- counter = 0
- __Main_Loop
- rem @# Main Loop
- rem ****************************************************************
- rem ****************************************************************
- rem *
- rem *
- rem * Main Loop
- rem *
- rem *
- rem ****************************************************************
- rem ****************************************************************
- rem ****************************************************************
- rem *
- rem * Sets up colors.
- rem *
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem '
- grav_an = %00000010
- rem * grav_an{0} = 1 heisst nach oben, {1} nach unten {2} nach rechts {3} nach links
- gameloop
- if grav_an{0} && joy0left then REFP0 = 0
- if grav_an{0} && joy0right then REFP0 = 8
- if grav_an{1} && joy0left then REFP0 = 0
- if grav_an{1} && joy0right then REFP0 = 8
- if grav_an{2} then REFP0 = 0
- if grav_an{3} then REFP0 = 8
- COLUPF = $3A : COLUBK = $08
- rem ****************************************************************
- rem *
- rem * Converts player sprite position to playfield position.
- rem *
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem '
- rem ich nehme an, es ist die linkere untere? Ecke
- _Convert_X = (player0x-14)/4
- _Convert_Y = player0y/8
- if grav_an{0} gosub gravity_down
- if grav_an{1} gosub gravity_up
- if grav_an{2} gosub gravity_right
- if grav_an{3} gosub gravity_left
- gravity_down
- gosub down_0
- gosub jump_0
- gosub left_0
- gosub right_0
- gosub down_0
- goto animation
- gravity_up
- gosub down_1
- gosub jump_1
- gosub left_1
- gosub right_1
- gosub down_1
- goto animation
- gravity_right
- gosub down_2
- gosub jump_2
- gosub left_2
- gosub right_2
- gosub down_2
- goto animation
- gravity_left
- gosub down_3
- gosub jump_3
- gosub left_3
- gosub right_3
- gosub down_3
- goto animation
- animation
- if joy0left && grav_an{0} goto leftup
- if joy0left && grav_an{1} goto leftdown
- if joy0right && grav_an{0} goto leftup
- if joy0right && grav_an{1} goto leftdown
- if joy0up && grav_an{3} goto upleft
- if joy0up && grav_an{2} goto upleft
- if joy0down && grav_an{3} goto downleft
- if joy0down && grav_an{2} goto downleft
- if grav_an{0} goto upidle
- if grav_an{1} goto downidle
- if grav_an{2} goto rightidle
- if grav_an{3} goto rightidle
- goto mein_ende
- rightidle
- player0:
- %01110100
- %10101011
- %11101110
- %10101011
- %01110000
- end
- goto mein_ende
- upidle
- player0:
- %00111000
- %01010100
- %01111100
- %01000100
- %00111000
- %01010000
- %00111000
- %00101000
- end
- goto mein_ende
- downidle
- player0:
- %00101000
- %00111000
- %01010000
- %00111000
- %01000100
- %01111100
- %01010100
- %00111000
- end
- goto mein_ende
- upleft
- if counter{3} then player0:
- %01110000
- %10101011
- %11101110
- %10101011
- %01110100
- end
- if counter{3} then goto mein_ende
- if !counter{3} then player0:
- %01110000
- %10101011
- %11101110
- %10101010
- %01110100
- end
- if !counter{3} then goto mein_ende
- downleft
- if counter{3} then player0:
- %01110100
- %10101011
- %11101110
- %10101011
- %01110000
- end
- if counter{3} then goto mein_ende
- if !counter{3} then player0:
- %01110100
- %10101010
- %11101110
- %10101011
- %01110000
- end
- if !counter{3} then goto mein_ende
- leftup
- if counter{3} then player0:
- %00111000
- %01010100
- %01111100
- %01000100
- %00111000
- %01010000
- %00111000
- %00101000
- end
- if counter{3} then goto mein_ende
- if !counter{3} then player0:
- %00111000
- %01010100
- %01111100
- %01000100
- %00111000
- %01010000
- %00111000
- %00001000
- end
- if !counter{3} then goto mein_ende
- leftdown
- if counter{3} then player0:
- %00101000
- %00111000
- %01010000
- %00111000
- %01000100
- %01111100
- %01010100
- %00111000
- end
- if counter{3} then goto mein_ende
- if !counter{3} then player0:
- %00001000
- %00111000
- %01010000
- %00111000
- %01000100
- %01111100
- %01010100
- %00111000
- end
- mein_ende
- COLUP0 = $86
- counter = counter + 1
- rem ****************************************************************
- rem *
- rem * Reset Program:
- rem *
- rem * Any Atari 2600 program should restart when the reset switch
- rem * is pressed. It is part of the usual standards and procedures.
- rem *
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem '
- if switchreset then goto __Start_Restart
- rem ****************************************************************
- rem *
- rem * Update the screen.
- rem *
- rem ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- rem '
- drawscreen
- goto __Main_Loop
- down_0
- temp5 = (player0y-9)/8 : temp4 = _Convert_X
- if _Counter_Jump_Up || pfread(temp4,temp5) then goto __Skip_Fall_01_0
- gosub fallmiddlepart
- player0y = player0y - _Gravity_Down
- goto __Skip_Fall_02_0
- __Skip_Fall_01_0
- gosub fallmiddlepart_2
- temp5 = (player0y)/8 : temp4 = _Convert_X
- if pfread(temp4,temp5) then player0y = player0y+1
- __Skip_Fall_02_0
- return
- down_1
- temp5 = (player0y+1)/8 : temp4 = _Convert_X
- if _Counter_Jump_Up || pfread(temp4,temp5) then goto __Skip_Fall_01_1
- gosub fallmiddlepart
- player0y = player0y + _Gravity_Down
- goto __Skip_Fall_02_1
- __Skip_Fall_01_1
- gosub fallmiddlepart_2
- temp5 = (player0y)/8 : temp4 = _Convert_X
- if pfread(temp4,temp5) then player0y = player0y-1
- __Skip_Fall_02_1
- return
- down_2
- temp4 = (player0x-8)/4 : temp5 = _Convert_Y
- if _Counter_Jump_Up || pfread(temp4,temp5) then goto __Skip_Fall_01_2
- gosub fallmiddlepart
- player0x = player0x + _Gravity_Down
- goto __Skip_Fall_02_2
- __Skip_Fall_01_2
- gosub fallmiddlepart_2
- temp4 = (player0x -14)/4 : temp5 = _Convert_Y
- if pfread(temp4,temp5) then player0x = player0x-1
- __Skip_Fall_02_2
- return
- down_3
- temp4 = (player0x-19)/4 : temp5 = _Convert_Y
- if _Counter_Jump_Up || pfread(temp4,temp5) then goto __Skip_Fall_01_3
- gosub fallmiddlepart
- player0x = player0x - _Gravity_Down
- goto __Skip_Fall_02_3
- __Skip_Fall_01_3
- gosub fallmiddlepart_2
- temp4 = (player0x -14)/4 : temp5 = _Convert_Y
- if pfread(temp4,temp5) then player0x = player0x+1
- __Skip_Fall_02_3
- return
- jump_0
- if !joy0down then _Counter_Jump_Up = 0 : _Gravity_U_Counter = 0 : _Gravity_Up = 3 : return
- if Bit0_Fall_in_Progress{0} then return
- if _Counter_Jump_Up > 11 then _Counter_Jump_Up = 0 : Bit0_Fall_in_Progress{0} = 1 : _Gravity_U_Counter = 0 : _Gravity_Up = 3 : return
- gosub jumpmiddlepart
- temp5 = (player0y +2)/8 : temp4 = _Convert_X
- if pfread(temp4,temp5) then _Counter_Jump_Up = 0 : Bit0_Fall_in_Progress{0} = 1 : _Gravity_U_Counter = 0 : _Gravity_Up = 3 : return
- player0y = player0y + _Gravity_Up
- return
- jump_1
- if !joy0up then _Counter_Jump_Up = 0 : _Gravity_U_Counter = 0 : _Gravity_Up = 3 : return
- if Bit0_Fall_in_Progress{0} then return
- if _Counter_Jump_Up > 11 then _Counter_Jump_Up = 0 : Bit0_Fall_in_Progress{0} = 1 : _Gravity_U_Counter = 0 : _Gravity_Up = 3 : return
- gosub jumpmiddlepart
- temp5 = (player0y-10)/8 : temp4 = _Convert_X
- if pfread(temp4,temp5) then _Counter_Jump_Up = 0 : Bit0_Fall_in_Progress{0} = 1 : _Gravity_U_Counter = 0 : _Gravity_Up = 3 : return
- player0y = player0y - _Gravity_Up
- return
- jump_2
- if !joy0left then _Counter_Jump_Up = 0 : _Gravity_U_Counter = 0 : _Gravity_Up = 3 : return
- if Bit0_Fall_in_Progress{0} then return
- if _Counter_Jump_Up > 11 then _Counter_Jump_Up = 0 : Bit0_Fall_in_Progress{0} = 1 : _Gravity_U_Counter = 0 : _Gravity_Up = 3 : return
- gosub jumpmiddlepart
- temp4 = (player0x -17)/4 : temp5 = _Convert_Y
- if pfread(temp4,temp5) then _Counter_Jump_Up = 0 : Bit0_Fall_in_Progress{0} = 1 : _Gravity_U_Counter = 0 : _Gravity_Up = 3 : return
- player0x = player0x - _Gravity_Up
- return
- jump_3
- if !joy0right then _Counter_Jump_Up = 0 : _Gravity_U_Counter = 0 : _Gravity_Up = 3 : return
- if Bit0_Fall_in_Progress{0} then return
- if _Counter_Jump_Up > 11 then _Counter_Jump_Up = 0 : Bit0_Fall_in_Progress{0} = 1 : _Gravity_U_Counter = 0 : _Gravity_Up = 3 : return
- gosub jumpmiddlepart
- temp4 = (player0x -11)/4 : temp5 = _Convert_Y
- if pfread(temp4,temp5) then _Counter_Jump_Up = 0 : Bit0_Fall_in_Progress{0} = 1 : _Gravity_U_Counter = 0 : _Gravity_Up = 3 : return
- player0x = player0x + _Gravity_Up
- return
- left_0
- if !joy0right then goto __Skip_Joy0Left_0
- temp5 = _Convert_Y - 1 : temp4 = (player0x-17)/4
- if pfread(temp4,temp5) then goto __Skip_Joy0Left_0
- _P0_Left_Right = _P0_Left_Right - 1.38
- __Skip_Joy0Left_0
- return
- left_1
- if !joy0left then goto __Skip_Joy0Left_1
- temp5 = _Convert_Y : temp4 = (player0x-17)/4
- if pfread(temp4,temp5) then goto __Skip_Joy0Left_1
- _P0_Left_Right = _P0_Left_Right - 1.38
- __Skip_Joy0Left_1
- return
- left_2
- if !joy0down then goto __Skip_Joy0Left_2
- temp4 = _Convert_X : temp5 = (player0y+1)/8
- if pfread(temp4,temp5) then goto __Skip_Joy0Left_2
- _P0_Up_Down = _P0_Up_Down + 1.38
- __Skip_Joy0Left_2
- return
- left_3
- if !joy0up then goto __Skip_Joy0Left_3
- temp4 = _Convert_X : temp5 = (player0y-6)/8
- if pfread(temp4,temp5) then goto __Skip_Joy0Left_3
- _P0_Up_Down = _P0_Up_Down - 1.38
- __Skip_Joy0Left_3
- return
- right_0
- if !joy0left then goto __Skip_Joy0Right_0
- temp5 = _Convert_Y - 1: temp4 = (player0x-10)/4
- if pfread(temp4,temp5) then goto __Skip_Joy0Right_0
- _P0_Left_Right = _P0_Left_Right + 1.38
- __Skip_Joy0Right_0
- return
- right_1
- if !joy0right then goto __Skip_Joy0Right_1
- temp5 = _Convert_Y : temp4 = (player0x-10)/4
- if pfread(temp4,temp5) then goto __Skip_Joy0Right_1
- _P0_Left_Right = _P0_Left_Right + 1.38
- __Skip_Joy0Right_1
- return
- right_2
- if !joy0up then goto __Skip_Joy0Right_2
- temp4 = _Convert_X : temp5 = (player0y-6)/8
- if pfread(temp4,temp5) then goto __Skip_Joy0Right_2
- _P0_Up_Down = _P0_Up_Down - 1.38
- __Skip_Joy0Right_2
- return
- right_3
- if !joy0down then goto __Skip_Joy0Right_3
- temp4 = _Convert_X : temp5 = (player0y+1)/8
- if pfread(temp4,temp5) then goto __Skip_Joy0Right_3
- _P0_Up_Down = _P0_Up_Down + 1.38
- __Skip_Joy0Right_3
- return
- jumpmiddlepart
- if !_Counter_Jump_Up then BitOp_Ch_0_Sound_Set_01 = 0 : Bit0_Sound_Jump{0} = 1 : _C0_Duration = 1 : _C0_Counter = 0
- _Counter_Jump_Up = _Counter_Jump_Up + 1
- _Gravity_U_Counter = _Gravity_U_Counter+1
- if _Gravity_U_Counter = 8 then _Gravity_U_Counter = 0 : if _Gravity_Up > 0 then _Gravity_Up = _Gravity_Up - 1
- return
- fallmiddlepart
- _Gravity_D_Counter = _Gravity_D_Counter+1
- if _Gravity_D_Counter = 8 then _Gravity_Down = _Gravity_Down + 1 : _Gravity_D_Counter = 0
- Bit0_Fall_in_Progress{0} = 1
- return
- fallmiddlepart_2
- Bit0_Fall_in_Progress{0} = 0 : _Gravity_Down = 0 : _Gravity_D_Counter = 0
- return
Advertisement
Add Comment
Please, Sign In to add comment