Code archives/Miscellaneous/Pitfall II

This code has been declared by its author to be Public Domain code.

Download source code

Pitfall II by WolRon2004
Here is the complete source code for the Pitfall II remake I made in 2003 for the RetroRemakes Remakes Competition.
This is a pixel for pixel remake of the original (1983 Activision) game and also includes an additional cavern (if you download the associated media) that I created.

It's not necessarily the 'cleanest' code but it definately works. It was finished in haste for the competition so some parts are not as optimal as they could be (or maybe even poorly done).
There are also some commented out parts that I honestly don't remember why they were removed, so I don't know if they are useful or not.

You are free to use any part or parts of this code as you wish in any other creation that you do (with maybe a small mention of me in the credits of your creation).
The only thing that I ask is that no-one use the code in-whole (or even slight modifications) and slap their own name on it. It is shared here for educational purposes only.
In other words, you may use parts of this code to create similar works but you cannot use this code to create another Pitfall II game.

You can check out the game in the gallery here:
http://www.blitzbasic.com/gallery/view_pic.php?id=155&gallery=&page=16

And you can download the media that was used in the game from the game zip file itself here:
http://www.classic-retro-games.com/Pitfall_309.html Click on the DOWNLOAD NOW: Pitfall link

NOTE that the entire source did not fit into the codebox below (and the download link above is broken because of it).
The remainder of the source is posted in the following comment.
;Pitfall II remake
;by WolRon
;Copyright 2003


;;;;;;;;;;;;;;;;;;   Initialize Arrays and Types   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Type Level
	Field graphic			;0=nothing 1=ladderhole 2=hole-in-middle 3=left 4=right 5=ladderhole+2holes
							;6=flat 7=ground 8=treetops 9=water 10=skyline 11=other-treetops 12=other-skyline
	Field water				;0=not 1=true(graphic needs to be set to 3 or 4)
	Field left_blocked		;0=not 1=solid 2=checkered
	Field right_blocked		;0=not 1=solid 2=checkered
	Field animal			;0=not 1=bat 2=bird 3=scorpion 4=frog 5=eel 6=mouse(treasure has to be 6 also)
	Field ladder			;0=not 1=ladder in middle
	Field checkpoint		;0=not 1=true
	Field background_image	;0=not 1=water 2=trees 3=treetops 4=ground 5=other-trees
	Field treasure			;0=not 1=gold(right) 2=gold(left) 3=cat 4=girl 5=ring 6=mouse(animal has to be 6 also)
End Type

Dim Board.Level(8, 30)
;8 screens across x 30 levels high (including sky as a level)


Type Animal
	Field animaltype		;1=bat, 2=bird, 3=scorpion, 4=frog, 5=eel, 6=mouse
	Field levelX
	Field levelY
	Field x
	Field y
	Field dir
	Field state
End Type

Type Coordinate
	Field levelX
	Field levelY
	Field x
	Field y
End Type

PlayerLastCheckPoint.Coordinate = New Coordinate

Dim LevelGraphic(13)
Dim BgImage(10)

Dim FileLength(11)


;;;;;;;;; Check command line ;;;;;;;;;;
cl$ = CommandLine$()
If cl$ = "/MLC"
	UnlockMoreLostCaverns()
EndIf
If cl$ = "/Cheat"
	Cheat = True
EndIf
If Cheat
	Font = LoadFont("FixedSys", 10)
EndIf

;;;;;;;;;  Check if Game Unlocked  ;;;;;;;;;;;;
file = OpenFile("Unlocked.txt")
If Not file
	Unlocked = False
Else
	Unlocked = True
	CloseFile(file)
EndIf

;;;;;;;;   Setup title screen   ;;;;;;;;;;;;;;;
AppTitle " Pitfall II ","Are you sure you want to exit?"

Const FrameRate = False

Mode320200 = GfxModeExists(320, 200, GraphicsDepth())
If Not Mode320200
	Mode320200 = GfxModeExists(320, 200, 16)
	If Mode320200 Then Mode320200 = 16
EndIf	

.TitleScreen

Graphics 640,480, 0, 2
SetBuffer(BackBuffer())
ClsColor 83, 28, 16
Cls
SplashGraphic = LoadImage("levelgraphics\splash")
If Not SplashGraphic Then RuntimeError("Pitfall II - Error: Can't load graphic: splash. Reinstall program.")
MidHandle SplashGraphic
FullscreenGraphic = LoadImage("levelgraphics\fullscreen")
If Not FullscreenGraphic Then RuntimeError("Pitfall II - Error: Can't load graphic: fullscreen. Reinstall program.")
HandleImage FullscreenGraphic, ImageWidth(FullscreenGraphic)/2, 0
WindowedGraphic = LoadImage("levelgraphics\windowed")
If Not WindowedGraphic Then RuntimeError("Pitfall II - Error: Can't load graphic: windowed. Reinstall program.")
HandleImage WindowedGraphic, ImageWidth(WindowedGraphic)/2, 0
ArrowGraphic = LoadImage("levelgraphics\arrow")
If Not ArrowGraphic Then RuntimeError("Pitfall II - Error: Can't load graphic: arrow. Reinstall program.")
NotGraphic = LoadImage("levelgraphics\not")
If Not NotGraphic Then RuntimeError("Pitfall II - Error: Can't load graphic: not. Reinstall program.")
CRGraphic = LoadImage("levelgraphics\crm")
If Not CRGraphic Then RuntimeError("Pitfall II - Error: Can't load graphic: crm. Reinstall program.")
MLCGraphic = LoadImage("levelgraphics\mlc")
If Not MLCGraphic Then RuntimeError("Pitfall II - Error: Can't load graphic: mlc. Reinstall program.")
HandleImage MLCGraphic, ImageWidth(MLCGraphic)/2, 0
OCGraphic = LoadImage("levelgraphics\oc")
If Not OCGraphic Then RuntimeError("Pitfall II - Error: Can't load graphic: oc. Reinstall program.")
HandleImage OCGraphic, ImageWidth(OCGraphic)/2, 0
MCGraphic = LoadImage("levelgraphics\mc")
If Not MCGraphic Then RuntimeError("Pitfall II - Error: Can't load graphic: mc. Reinstall program.")
HandleImage MCGraphic, ImageWidth(MCGraphic)/2, 0


If Mode320200 = 0
	LockBuffer(ImageBuffer(FullscreenGraphic))
	For xiter = 0 To ImageWidth(FullscreenGraphic)
		For yiter = 0 To ImageHeight(FullscreenGraphic)
			pixelcolor = ReadPixel(xiter, yiter, ImageBuffer(FullscreenGraphic))
			If pixelcolor <> -11330544
				red = (pixelcolor Shl 8) Shr 24
				green = (pixelcolor Shl 16) Shr 24
				blue = (pixelcolor Shl 24) Shr 24
				red = red/3
				green = green/3
				blue = blue/3
				pixelcolor = red*2^16 + green*2^8 + blue
			EndIf
			WritePixel(xiter, yiter, pixelcolor, ImageBuffer(FullscreenGraphic))
		Next
	Next
	UnlockBuffer(ImageBuffer(FullscreenGraphic))
EndIf

GameLevel = 1
Selected = False
Selection = 1
If Unlocked = True
	Menu = 1
Else
	Menu = 2
EndIf
; Create timer to set framerate
frameTimer=CreateTimer(30)

While Menu < 3
	While Not Selected
		WaitTimer(frameTimer)
		Cls
		DrawImage SplashGraphic, 320, 137
		If (Unlocked And Selection = 2 And Menu = 1) Or (GameLevel = 2 And Menu = 2)
			DrawImage MLCGraphic, 320, 202
		EndIf
		
		If Menu = 1
			DrawImage OCGraphic, 320, 300
			DrawImage MCGraphic, 320, 350
		Else
			DrawImage FullscreenGraphic, 320, 300
			DrawImage WindowedGraphic, 320, 350
		EndIf
	
		DrawImage CRGraphic, 0, 456
		
		DrawImageRect ArrowGraphic, 50, 300 + 50 * (Selection = 2), 0, 0, ImageWidth(ArrowGraphic)/2, ImageHeight(ArrowGraphic)
		If Menu = 1
			Width1 = ImageWidth(OCGraphic)/2
			Width2 = ImageWidth(MCGraphic)/2
		Else
			Width1 = ImageWidth(FullscreenGraphic)/2
			Width2 = ImageWidth(WindowedGraphic)/2
		EndIf
		If Selection = 1
			xoffset = 320 - ImageWidth(ArrowGraphic)/2 - Width1
		Else
			xoffset = 320 - ImageWidth(ArrowGraphic)/2 - Width2
		EndIf
		If Selection = 1 And Mode320200 = 0 And Menu = 2
			DrawImage NotGraphic, xoffset, 300
		Else
			DrawImageRect ArrowGraphic, xoffset, 300 + 50 * (Selection = 2), ImageWidth(ArrowGraphic)/2, 0, ImageWidth(ArrowGraphic)/2, ImageHeight(ArrowGraphic)
		EndIf
		If KeyHit(1) Then Menu = Menu - 1
		If Menu = 1 And Unlocked = False Then End
		If Menu = 0 Then End
		If KeyHit(200) Then Selection = 1
		If KeyHit(208) Then Selection = 2
		If KeyHit(28) Or KeyHit(57)
			If Menu = 1 Or (Selection = 2 Or Mode320200 > 0)
				Selected = True
				Menu = Menu + 1
			EndIf
		EndIf
		Flip
	Wend
	If Menu = 3
		If Selection = 1
			GraphicMode = 1
		Else
			GraphicMode = 3
		EndIf
		
		If GraphicMode = 1
			If Mode320200 = 1 Then ColorDepth = 0	
		Else
			ColorDepth = 0
		EndIf
	Else
		If Selection = 1
			GameLevel = 1
		Else
			GameLevel = 2
		EndIf
	EndIf
	Selected = False
	Selection = 1
Wend


If Unlocked
	Menu = 1
Else
	Menu = 2
EndIf

FreeTimer frametimer
NumTreasures = LoadLevelData(GameLevel)


;;;;;;;;;;;;;;;;;;   Initialize Game   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Graphics 320, 200, ColorDepth, GraphicMode
;Original game screen appears to be 152 x 200
;All horizontal pixels are grouped in twos and offset by 4 pixels (actually 8) from the left.

SetBuffer(BackBuffer())
ClsColor 0, 0, 0

If GameLevel = 2
	l$ = "2"
Else
	l$ = ""
EndIf

For iter = 1 To 13
	LevelGraphic(iter) = LoadImage("levelgraphics\lg" + iter)
	If Not LevelGraphic(iter) Then RuntimeError("Pitfall II - Error: Can't load graphic: lg" + iter + ". Reinstall program.")
Next
For iter = 1 To 5
	BgImage(iter) = LoadImage("levelgraphics\bg" + iter)
	If Not BgImage(iter) Then RuntimeError("Pitfall II - Error: Can't load graphic: bg" + iter + ". Reinstall program.")
Next
BgImage(6) = LoadAnimImage("levelgraphics\wf", 34, 42, 0, 2)
If Not BgImage(6) Then RuntimeError("Pitfall II - Error: Can't load graphic: wf. Reinstall program.")
If GameLevel = 2
	BgImage(7) = LoadAnimImage("level2graphics\wf2", 34, 42, 0, 2)
	If Not BgImage(7) Then RuntimeError("Pitfall II - Error: Can't load graphic: wf2. Reinstall program.")
	BgImage(8) = LoadAnimImage("level2graphics\wft", 36, 46, 0, 2)
	If Not BgImage(8) Then RuntimeError("Pitfall II - Error: Can't load graphic: wft. Reinstall program.")
	BgImage(9) = LoadAnimImage("level2graphics\wfm", 36, 46, 0, 2)
	If Not BgImage(9) Then RuntimeError("Pitfall II - Error: Can't load graphic: wfm. Reinstall program.")
	BgImage(10) = LoadAnimImage("level2graphics\wfb", 36, 42, 0, 2)
	If Not BgImage(10) Then RuntimeError("Pitfall II - Error: Can't load graphic: wfb. Reinstall program.")
EndIf

Checkpoint = LoadImage("levelgraphics\cp")
If Not Checkpoint Then RuntimeError("Pitfall II - Error: Can't load graphic: cp. Reinstall program.")

Left_block = LoadImage("levelgraphics\bgl")
If Not Left_block Then RuntimeError("Pitfall II - Error: Can't load graphic: bgl. Reinstall program.")

Left_block_striped = LoadImage("levelgraphics\bgls")
If Not Left_block_striped Then RuntimeError("Pitfall II - Error: Can't load graphic: bgls. Reinstall program.")

Right_block = LoadImage("levelgraphics\bgr")
If Not Right_block Then RuntimeError("Pitfall II - Error: Can't load graphic: bgr. Reinstall program.")

Right_block_striped = LoadImage("levelgraphics\bgrs")
If Not Right_block_striped Then RuntimeError("Pitfall II - Error: Can't load graphic: bgrs. Reinstall program.")

Ladder = LoadImage("level"+l$+"graphics\ladder")
If Not Ladder Then RuntimeError("Pitfall II - Error: Can't load graphic: ladder. Reinstall program.")

Girl = LoadImage("levelgraphics\Rhonda")
If Not Girl Then RuntimeError("Pitfall II - Error: Can't load graphic: Rhonda. Reinstall program.")

Ring = LoadImage("levelgraphics\ring")
If Not Ring Then RuntimeError("Pitfall II - Error: Can't load graphic: ring. Reinstall program.")

Logo = LoadImage("levelgraphics\logo")
If Not Logo Then RuntimeError("Pitfall II - Error: Can't load graphic: logo. Reinstall program.")

Pause = LoadImage("levelgraphics\pause")
If Not Pause Then RuntimeError("Pitfall II - Error: Can't load graphic: pause. Reinstall program.")

Reset = LoadImage("levelgraphics\reset")
If Not Reset Then RuntimeError("Pitfall II - Error: Can't load graphic: reset. Reinstall program.")


Wave = LoadImage("levelgraphics\wave")
If Not Wave Then RuntimeError("Pitfall II - Error: Can't load graphic: wave. Reinstall program.")


Player = LoadAnimImage("level"+l$+"graphics\player", 16, 21, 0, 12)
If Not Player Then RuntimeError("Pitfall II - Error: Can't load graphic: player. Reinstall program.")

Playl = LoadAnimImage("level"+l$+"graphics\playl", 12, 21, 0, 2)
If Not Playl Then RuntimeError("Pitfall II - Error: Can't load graphic: playl. Reinstall program.")

Playlbo = LoadAnimImage("level"+l$+"graphics\playlbo", 20, 13, 0, 2)
If Not Playlbo Then RuntimeError("Pitfall II - Error: Can't load graphic: playlbo. Reinstall program.")

Plays = LoadAnimImage("level"+l$+"graphics\plays", 16, 15, 0, 8)
If Not Plays Then RuntimeError("Pitfall II - Error: Can't load graphic: plays. Reinstall program.")

Playb = LoadAnimImage("level"+l$+"graphics\playb", 16, 21, 0, 2)
If Not Playb Then RuntimeError("Pitfall II - Error: Can't load graphic: playb. Reinstall program.")

Balloon = LoadAnimImage("levelgraphics\balloon", 14, 28, 0, 2)
If Not Balloon Then RuntimeError("Pitfall II - Error: Can't load graphic: balloon. Reinstall program.")

Gold = LoadAnimImage("levelgraphics\gold", 14, 14, 0, 2)
If Not Gold Then RuntimeError("Pitfall II - Error: Can't load graphic: gold. Reinstall program.")

Goldtemplate = LoadImage("levelgraphics\goldt")
If Not Goldtemplate Then RuntimeError("Pitfall II - Error: Can't load graphic: goldt. Reinstall program.")

Cat = LoadAnimImage("levelgraphics\cat", 14, 23, 0, 2)
If Not Cat Then RuntimeError("Pitfall II - Error: Can't load graphic: cat. Reinstall program.")

Mouse = LoadAnimImage("levelgraphics\rat", 16, 8, 0, 2)
If Not Mouse Then RuntimeError("Pitfall II - Error: Can't load graphic: rat. Reinstall program.")

Bat = LoadAnimImage("levelgraphics\bat", 14, 10, 0, 2)
If Not Bat Then RuntimeError("Pitfall II - Error: Can't load graphic: bat. Reinstall program.")

Bird = LoadAnimImage("levelgraphics\bird", 16, 11, 0, 4)
If Not Bird Then RuntimeError("Pitfall II - Error: Can't load graphic: bird. Reinstall program.")

Scorpion = LoadAnimImage("levelgraphics\scorpion", 16, 11, 0, 4)
If Not Scorpion Then RuntimeError("Pitfall II - Error: Can't load graphic: scorpion. Reinstall program.")

Frog = LoadAnimImage("levelgraphics\frog", 16, 9, 0, 4)
If Not Frog Then RuntimeError("Pitfall II - Error: Can't load graphic: frog. Reinstall program.")

Eel = LoadAnimImage("levelgraphics\eel", 16, 3, 0, 4)
If Not Eel Then RuntimeError("Pitfall II - Error: Can't load graphic: eel. Reinstall program.")
MaskImage Eel, 0, 0, 255

Digits = LoadAnimImage("levelgraphics\digits", 16, 8, 0, 10)
If Not Digits Then RuntimeError("Pitfall II - Error: Can't load graphic: digits. Reinstall program.")


sndJump = LoadSound("levelsounds\jump")
If Not sndJump Then RuntimeError("Pitfall II - Error: Can't load sound: jump. Reinstall program.")

sndTreasure = LoadSound("levelsounds\treasure")
If Not sndTreasure Then RuntimeError("Pitfall II - Error: Can't load sound: treasure. Reinstall program.")

sndHit = LoadSound("levelsounds\hit")
If Not sndHit Then RuntimeError("Pitfall II - Error: Can't load sound: hit. Reinstall program.")

sndCheckpoint = LoadSound("levelsounds\cp")
If Not sndCheckpoint Then RuntimeError("Pitfall II - Error: Can't load sound: cp. Reinstall program.")

sndBPop = LoadSound("levelsounds\bpop")
If Not sndBPop Then RuntimeError("Pitfall II - Error: Can't load sound: bpop. Reinstall program.")

sndSPop = LoadSound("levelsounds\spop")
If Not sndSPop Then RuntimeError("Pitfall II - Error: Can't load sound: spop. Reinstall program.")


mscChorus = LoadSound("levelmusic\chorus")
If Not mscChorus Then RuntimeError("Pitfall II - Error: Can't load music: chorus. Reinstall program.")

mscHappy = LoadSound("levelmusic\happy")
If Not mscHappy Then RuntimeError("Pitfall II - Error: Can't load music: happy. Reinstall program.")

mscSad = LoadSound("levelmusic\sad")
If Not mscSad Then RuntimeError("Pitfall II - Error: Can't load music: sad. Reinstall program.")

mscBalloon = LoadSound("levelmusic\balloon")
If Not mscBalloon Then RuntimeError("Pitfall II - Error: Can't load music: balloon. Reinstall program.")



;These need to be declared before gameloop can begin
DisplayScore = False
GameAlmostRunning = False
GameWon = 0
PlayerX = 68
PlayerY = 0
ScreenY = 107
PlayerScreenY = 107
PlayerLevelX = 1
PlayerLevelY = 2
PlayerAction = 0 ;0=standing, 1=running, 2=swimming, 3=climbing ladder, 4=climbing into ladder, 5=standing on ladder
				 ;6=jumping off of ladder, 7=falling, 8=jumping or uncontrolled (hor.) fall, 9=jumping out of water
				 ;10=falling into water, 11=hanging onto balloon, 12=balloon jump
PlayerLastAction = 0 ;0 = nothing, 1=jumping off ladder to left, 2=jumping off ladder to right
PlayerDir = 0    ;0 = right, 1 = left
PlayerFrame# = 0 ;declaring here to declare variable type
curFrame = 0
PlayerHurt = False
PlayerLastCheckPoint\LevelX = 1
PlayerLastCheckPoint\LevelY = 2
PlayerLastCheckPoint\x = 70
PlayerPauseTime = 0
PlayerJustJumped = False
PlayerJustHoppedOnLadder = False
PlayerJustHoppedOffLadder = False
PlayerBob = -1
Score = 4000
GoldBars = 0
Music = 0		;1=chorus 2=happy 3=sad 4=balloon
SubLevel = False
HalfUpdate = -1
FourthUpdate = 0
batY = 11
batDir = 1
birdY = 11
birdDir = 1
eelY = 11
eelDir = 1
frogX = 128
frogY = 15
frogDir = 1
frogState = 0
frogInc = 0
eelState = 0
MouseStopped = False
MouseXPos = 64
MouseCollide = False
MouseLevelX = 0
MouseAnim = 0
BalloonBoardX = 0
BalloonBoardY = 0
Balloon2BoardX = 0
Balloon2BoardY = 0
curWave = -1
WaveInc = 1

;Erase any animals that may exist from last game
For curAnimal.Animal = Each Animal
	Delete curAnimal 
Next

GameRunning = False

; Create the timer to set framerate
frameTimer=CreateTimer(60)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  GameLoop  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.GameLoop

WaitTimer(frameTimer)

If FrameRate
	curTime=MilliSecs()
EndIf

;;;;;;testing purposes only;;;;;;;
If Cheat
	If KeyDown(30) ;a key
		ChannelPitch chnlMusic, 22050
		ChannelPitch chnlCP, 24000
		ChannelPitch chnlJump, 24000
		ChannelPitch chnlTreasure, 24000
		ChannelPitch chnlHit, 24000
		Delay(33)
		ChannelPitch chnlMusic, 44100
		ChannelPitch chnlCP, 48000
		ChannelPitch chnlJump, 48000
		ChannelPitch chnlTreasure, 48000
		ChannelPitch chnlHit, 48000
	EndIf
EndIf
;While KeyDown(31)			   ;s key
;Wend

If GameRunning And (Not GamePaused)

	;;;;;;;;;;;   Check Keys   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	If KeyDown(200)
		upkey = True
	Else
		upkey = False
	EndIf
	If KeyDown(203)
		leftkey = True
		If PlayerJustHoppedOffLadder = 2 Then PlayerJustHoppedOffLadder = False
	Else
		leftkey = False
	EndIf
	If KeyDown(205)
		rightkey = True
		If PlayerJustHoppedOffLadder = 1 Then PlayerJustHoppedOffLadder = False
	Else
		rightkey = False
	EndIf
	If KeyDown(208)
		downkey = True
	Else
		downkey = False
	EndIf
	If KeyDown(57)
		spacekey = True
	Else
		spacekey = False
	EndIf
	
	;;;;;;;   Determine what elements to update   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	HalfUpdate = HalfUpdate * -1			;used for most actions (30 fps)
	FourthUpdate = FourthUpdate + 1			;used for moving bat&eel ver. & scorpion hor. and swimming (15 fps)
	If FourthUpdate > 3 Then FourthUpdate = 0

	
	;;;;; update variables   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	If PlayerPauseTime = 0
		;Cat, gold, waterfall
		Animflip1 = Animflip1 + 1
		If animflip1 > 1
			animflip1 = 0
			Animation1 = Animation1 + 1
			If Animation1 > 1 Then Animation1 = 0
		EndIf
		
		;bat, scorpion, eel
		Animflip2 = Animflip2 + 1
		If animflip2 > 6
			animflip2 = 0
			Animation2 = Animation2 + 1
			If Animation2 > 1 Then Animation2 = 0
		EndIf
		
		;wave
		Animflip5 = Animflip5 + 1
		If animflip5 > 7
			animflip5 = 0
			curWave = curWave + WaveInc
			If curWave = 2
				curWave = 0
				WaveInc = -1
			EndIf
			If curWave = -2
				curWave = 0
				WaveInc = 1
			EndIf
		EndIf
		
		;bird
		Animflip3 = Animflip3 + 1
		If animflip3 > 15
			animflip3 = 0
			Animation3 = Animation3 + 1
			If Animation3 > 1 Then Animation3 = 0
		EndIf
	EndIf
	If PlayerHurt
		Animflip4 = Animflip4 + 1
		If animflip4 > 6
			animflip4 = 0
			Animation4 = Animation4 + 1
			If Animation4 > 1 Then Animation4 = 0
		EndIf
		crash = 0
	EndIf
	
	PlayerPrevY = PlayerY

	If HalfUpdate = 1 And (Not PlayerHurt)
		If rightkey = False And leftkey = False Then PlayerJustHoppedOnLadder = False
		If upkey = False And downkey = False Then PlayerJustHoppedOffLadder = False
		If spacekey = False And PlayerAction < 2 Then PlayerJustJumped = False
	
		If PlayerAction = 1 Then PlayerAction = 0
		
		If PlayerFallDist > 0 Then PlayerFallDist = PlayerFallDist - 1
		
		If crash > 0
			If (crash Mod 4) = 0 Then ScreenY = ScreenY + 1
			If (crash Mod 4) = 2 Then ScreenY = ScreenY - 1
			crash = crash - 1
		EndIf
		
	EndIf ;HalfUpdate
	
	If PlayerPauseTime > 0 Then PlayerPauseTime = PlayerPauseTime - 1

	If Music > 0
		If Not ChannelPlaying(chnlMusic)
			If Music = 4
				chnlMusic = PlaySound(mscBalloon)
			Else
				chnlMusic = PlaySound(mscChorus)
				Music = 1
			EndIf
		EndIf
	EndIf
	
	;;;;;;;   Process keys   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	
	If FourthUpdate = 1
		If (Not crash) And (Not PlayerHurt)
			If leftkey And (Not rightkey) ;left
				If PlayerAction = 2
					If Board(PlayerLevelX, PlayerLevelY - 1)\graphic = 3
						If PlayerY > 24
							If PlayerX > 58 And PlayerX < 66
								PlayerJustJumped = True
								PlayerAction = 9
								PlayerJumpDist = 14
								PlayerJumpDir = -1
								PlayerX = PlayerX - 2 ;to adjust for initial jumping movement
							EndIf
						EndIf
					EndIf
					If PlayerX > 20 Or Board(PlayerLevelX, PlayerLevelY)\left_blocked = 0 Then PlayerX = PlayerX - 2
					PlayerDir = 1
					If PlayerX = 18
						If downkey And PlayerY = 0 Then PlayerX = 20
					EndIf
				EndIf
			EndIf
			If rightkey And (Not leftkey);right
				If PlayerAction = 2
					If Board(PlayerLevelX, PlayerLevelY - 1)\graphic = 4
						If PlayerY > 24
							If PlayerX > 228 And PlayerX < 236
								PlayerJustJumped = True
								PlayerAction = 9
								PlayerJumpDist = 14
								PlayerJumpDir = 1
								PlayerX = PlayerX + 2 ;to adjust for initial jumping movement
							EndIf
						EndIf
					EndIf
					If PlayerX < 284 Or Board(PlayerLevelX, PlayerLevelY)\right_blocked = 0 Then PlayerX = PlayerX + 2
					PlayerDir = 0
					If PlayerX = 286
						If downkey And PlayerY = 0 Then PlayerX = 284
					EndIf
				EndIf
			EndIf
			If downkey And (Not upkey);down
				If PlayerAction = 2
					If PlayerY > 1
						PlayerY = PlayerY - 1
					ElseIf PlayerLevelY + 1 < 31
						If board(PlayerLevelX, PlayerLevelY + 1)\water = 1
							PlayerY = 45
							PlayerPrevY = PlayerPrevY + 45
							PlayerLevelY = PlayerLevelY + 1
							ScreenY = ScreenY + 45
						EndIf
					EndIf
				EndIf
			EndIf
			If upkey And (Not downkey);up
				If PlayerAction = 2
					If PlayerY > 24
						If board(PlayerlevelX, PlayerLevelY - 1)\ladder = 1
							If PlayerJustHoppedOffLadder = False
								If PlayerX > 122 And PlayerX < 166
									If PlayerX > 146
										PlayerJustHoppedOnLadder = 2 ;right
									Else
										PlayerJustHoppedOnLadder = 1 ;left
									EndIf
									PlayerAction = 3
									If PlayerDir = 0
										curFrame = 1
									Else
										curFrame = 0
									EndIf
									PlayerX = 146
									PlayerY = 40
								EndIf
							EndIf
						EndIf
					EndIf
				EndIf
			EndIf ;upkey
		EndIf ;not crash and not hurt
	EndIf ;FourthUpdate
	
	If HalfUpdate = 1
		If (Not crash) And (Not PlayerHurt)
			If leftkey And (Not rightkey);left
				If PlayerAction < 2
					PlayerAction = 1
					PlayerDir = 1
				EndIf
				If PlayerAction = 1
					If PlayerX > 20 Or board(PlayerLevelX, PlayerLevelY)\left_blocked = 0 Then PlayerX = PlayerX - 2
					If PlayerX < 122 Then PlayerJustHoppedOffLadder = False
				EndIf
				If PlayerAction = 3 Or PlayerAction = 5
					If PlayerJustHoppedOnLadder = False
						If (PlayerY < 7 And PlayerY > 0) Or (PlayerY > 37)
							PlayerAction = 6
							PlayerDir = 1
							PlayerClimb = 0
							PlayerJumpDist = 6
							PlayerJustHoppedOffLadder = 1 ;left
						EndIf
					EndIf
					If PlayerAction = 6
						PlayerFrame = 3
						PlayerX = PlayerX - 2 ;to adjust for transition from climbing to jumping?
					Else
						PlayerFrame = 0
					EndIf
				EndIf
				If PlayerAction = 7
					If PlayerFallDist = 0
						PlayerX = PlayerX - 2
						PlayerFallDist = Rnd(20, 65)
						PlayerDir = 1
					EndIf
				EndIf
				If PlayerAction = 11
					If PlayerX > 20 Then PlayerX = PlayerX - 2
					PlayerDir = 1
				EndIf
			EndIf ;leftkey
		
			If rightkey And (Not leftkey);right
				If PlayerAction < 2
					PlayerAction = 1
					PlayerDir = 0
				EndIf
				If PlayerAction = 1
					If PlayerX < 284 Or board(PlayerLevelX, PlayerLevelY)\right_blocked = 0 Then PlayerX = PlayerX + 2
					If PlayerX > 166 Then PlayerJustHoppedOffLadder = False
				EndIf
				If PlayerAction = 3 Or PlayerAction = 5
					If PlayerJustHoppedOnLadder = False
						If (PlayerY < 7 And PlayerY > 0) Or (PlayerY > 37)
							PlayerAction = 6
							PlayerDir = 0
							PlayerClimb = 0
							PlayerJumpDist = 6
							PlayerJustHoppedOffLadder = 2 ;right
						EndIf
					EndIf
					If PlayerAction = 6
						PlayerFrame = 3
					Else
						PlayerFrame = 0
					EndIf
				EndIf
				If PlayerAction = 7
					If PlayerFallDist = 0
						PlayerX = PlayerX + 2
						PlayerFallDist = Rnd(20, 65)
						PlayerDir = 0
					EndIf
				EndIf
				If PlayerAction = 11
					If PlayerX < 284 Then PlayerX = PlayerX + 2
					PlayerDir = 0
				EndIf
			EndIf ;rightkey
		
			If upkey And (Not downkey);up
				If PlayerAction = 3 Or PlayerAction = 5
					If PlayerClimb > 3
						PlayerClimb = 0
						If PlayerY < 34 Or board(PlayerLevelX, PlayerLevelY - 1)\ladder = 1
							PlayerAction = 3
							PlayerX = 146
							PlayerY = PlayerY + 4
							If PlayerY > 45
								PlayerY = 2
								PlayerPrevY = PlayerPrevY - 45
								PlayerLevelY = PlayerLevelY - 1
								ScreenY = ScreenY - 45
							EndIf
							curFrame = curFrame + 1
							If CurFrame > 1 Then curFrame = 0
						Else
							PlayerAction = 5
							PlayerY = 38
							PlayerX = 144
						EndIf
						If PlayerY = 10 Then PlayerJustHoppedOnLadder = False
					EndIf
				EndIf
				If PlayerAction < 2
					If PlayerY = 0
						If board(PlayerlevelX, PlayerLevelY)\ladder = 1
							If PlayerJustHoppedOffLadder = False
								If PlayerX > 122 And PlayerX < 166
									If PlayerX > 146
										PlayerJustHoppedOnLadder = 2 ;right
									Else
										PlayerJustHoppedOnLadder = 1 ;left
									EndIf
									PlayerAction = 3
									If PlayerDir = 0
										curFrame = 1
									Else
										curFrame = 0
									EndIf
									PlayerX = 146
									PlayerY = 2
								EndIf
							EndIf
						EndIf
					EndIf
				EndIf
			EndIf ;upkey
			
			If downkey And (Not upkey);down
				If PlayerAction = 3 Or PlayerAction = 5
					If PlayerClimb > 3
						PlayerClimb = 0
						If PlayerLevelY + 1 < 31
							lad = Board(PlayerLevelX, PlayerLevelY + 1)\ladder
						Else
							lad = False
						EndIf
						If PlayerY > 4 Or lad = True
							If Board(PlayerLevelX, PlayerLevelY)\ladder = 1
								PlayerAction = 3
								PlayerX = 146
								PlayerY = PlayerY - 4
								If PlayerY < 0
									PlayerY = 42
									PlayerPrevY = PlayerPrevY + 45
									PlayerLevelY = PlayerLevelY + 1
									ScreenY = ScreenY + 45
								EndIf
								curFrame = curFrame + 1
								If CurFrame > 1 Then curFrame = 0
							Else
								If Board(PlayerLevelX, PlayerLevelY)\water = 1
									PlayerAction = 10
									PlayerJumpDir = 0
									PlayerJumpDist = 10
									PlayerFrame = 3
								Else
									PlayerAction = 0
								EndIf
								PlayerX = 144
							EndIf
						Else
							PlayerAction = 0
							PlayerY = 0
							PlayerX = 144
						EndIf
					EndIf
				EndIf
				If PlayerAction < 2
					If PlayerLevelY < 30
						If board(PlayerLevelX, PlayerLevelY+1)\ladder = 1
							If PlayerJustHoppedOffLadder = False
								If PlayerX > 122 And PlayerX < 166
									PlayerAction = 4
									PlayerClimb = 0
									If PlayerX < 144
										curFrame = 0
										PlayerDir = 1
									Else
										curFrame = 1
										PlayerDir = 0
									EndIf
									PlayerX = 144
									PlayerY = 36
									PlayerPrevY = PlayerPrevY + 45
									PlayerLevelY = PlayerLevelY + 1
									ScreenY = ScreenY + 45
								EndIf
							EndIf
						EndIf
					EndIf
				EndIf
				If PlayerAction = 11
					BalloonClimb = BalloonClimb - 3
				EndIf
			EndIf ;downkey
			
			If spacekey
				If PlayerAction < 2
					If board(PlayerLevelX, PlayerLevelY)\graphic > 0
						If board(PlayerLevelX, PlayerLevelY)\graphic < 7 Or board(PlayerLevelX, PlayerLevelY)\graphic = 13
							If Not CheckForHole(PlayerX, PlayerLevelX, PlayerLevelY)
								If Not PlayerAction = 8 ;??????????????????????????????????????????????
									If PlayerJustJumped = False
										PlayerJustJumped = True
										PlayerFrame = 3
										PlayerJumpDir = 0
										chnlJump = PlaySound(sndJump)
										If Board(PlayerLevelX, PlayerLevelY - 1)\animal = 7 And (Not leftkey) And (Not rightkey)
											PlayerAction = 12
											PlayerJumpDist = 25
										Else
											PlayerAction = 8
											PlayerJumpDist = 15
											If leftkey
												PlayerJumpDir = -1
												PlayerX = PlayerX + 2 ;to adjust for jumping movement
											EndIf
											If rightkey
												PlayerJumpDir = 1
												PlayerX = PlayerX - 2 ;to adjust for jumping movement
											EndIf
											If (leftkey And rightkey) Then PlayerJumpDir = 0
										EndIf
									EndIf
								EndIf
							EndIf
						EndIf
					EndIf
				EndIf
			EndIf ;spacekey
			
			;Make player jump if collided with mouse
			If MouseCollide
				If PlayerLevelX <> MouseLevelX
					PlayerJustJumped = True
					PlayerAction = 8
					PlayerJumpDist = 15
					PlayerFrame = 3
					PlayerDir = 0
					PlayerJumpDir = 1
					PlayerX = PlayerX + 2 ;to make him clear ledge
					MouseCollide = False
				EndIf
			EndIf
		EndIf ;not crash and not hurt
	EndIf ;HalfUpdate
	
	;If AllUpdate
		If upkey
			If PlayerAction = 11
				BalloonClimb = BalloonClimb + 5
			EndIf
		EndIf
	;EndIf ;AllUpdate
		
	;;;;;;;;;;   Process Actions   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	
	If FourthUpdate = 1 And (Not PlayerHurt)
		If PlayerAction = 2
			PlayerFrame = PlayerFrame + .5
			If PlayerFrame > 3.5 Then PlayerFrame = 0
		EndIf
		
		If PlayerAction = 2
			If PlayerY > 27
				If Board(PlayerLevelX, PlayerLevelY - 1)\water = 0
					PlayerY = PlayerY - 1
				EndIf
			EndIf
			If PlayerY < 24 Or Board(PlayerLevelX, PlayerLevelY - 1)\water = 1
				If (Not downkey) Or upkey
					PlayerY = PlayerY + 1
					If PlayerY > 44
						PlayerY = 0
						PlayerPrevY = PlayerPrevY - 45
						PlayerLevelY = PlayerLevelY - 1
						ScreenY = ScreenY - 45	
					EndIf
				EndIf
			EndIf
			If Board(PlayerLevelX, PlayerLevelY - 1)\water = 0
				If PlayerY < 28 And PlayerY > 23 And ((Not downkey) Or upkey)
					PlayerY = PlayerY + PlayerBob
					If PlayerY = 28
						PlayerY = 27
						PlayerBob = -1
					EndIf
					If PlayerY = 23
						PlayerY = 24
						PlayerBob = 1
					EndIf
				EndIf
			EndIf
			If Board(PlayerLevelX, PlayerLevelY)\water = 0
				PlayerFrame = 3
				PlayerAction = 8
				If PlayerDir = 0 Then PlayerJumpDir = 1
				If PlayerDir = 1 Then PlayerJumpDir = -1
				PlayerJumpDist = 1
			EndIf
		EndIf
	EndIf ;FourthUpdate and not hurt
	
	If HalfUpdate = 1 And (Not PlayerHurt)
		If PlayerAction = 1
			PlayerFrame = PlayerFrame + .5
			If PlayerFrame > 4.5 Then PlayerFrame = 0
		ElseIf PlayerAction = 0
			PlayerFrame = 0
		EndIf
		
		If PlayerAction = 6
			If PlayerY = 38
				PlayerY = PlayerY + 3
			EndIf
		EndIf
		
		If PlayerAction = 6
			If PlayerDir = 0
				PlayerX = PlayerX + 2
			Else
				PlayerX = PlayerX - 2
			EndIf
			PlayerJumpDist = PlayerJumpDist - 1
			If PlayerY > 37
				PlayerY = PlayerY + 1
				If PlayerY > 44
					PlayerY = 0
					PlayerPrevY = PlayerPrevY - 45
					PlayerLevelY = PlayerLevelY - 1
					ScreenY = ScreenY - 45
				EndIf
			EndIf
			If PlayerY < 7 And PlayerY > 0
				PlayerY = PlayerY - 1
			EndIf
			If PlayerJumpDist = 0 ;PlayerY should be 0!
				If CheckForHole(PlayerX, PlayerLevelX, PlayerLevelY)
					PlayerY = 45
					PlayerPrevY = PlayerPrevY + 45
					PlayerLevelY = PlayerLevelY + 1
					ScreenY = ScreenY + 45
					If Board(PlayerLevelX, PlayerLevelY)\water = 1
						PlayerAction = 10
						PlayerJumpDir = 0
						PlayerJumpDist = 10
						PlayerFrame = 3
					Else
						graphic = Board(PlayerLevelX, PlayerLevelY)\graphic
						If graphic > 0 And graphic <> 3 And graphic <> 4
							If PlayerAction <> 7
								PlayerFrame = 0
								PlayerFallDist = Rnd(20, 65)
								PlayerAction = 7
							EndIf
						Else
							PlayerFrame = 3
							PlayerAction = 8
							If PlayerDir = 0
								PlayerJumpDir = 1
								PlayerX = PlayerX - 2 ;adjust for new action
							EndIf
							If PlayerDir = 1
								PlayerJumpDir = -1
								PlayerX = PlayerX + 2 ;adjust for new action
							EndIf
							PlayerJumpDist = 1
						EndIf
					EndIf
				Else
					PlayerAction = 1
				EndIf
			EndIf
		EndIf
	
		If PlayerAction < 2 Or PlayerAction = 7
			If PlayerY <> 0
				PlayerY = PlayerY - 2
				If PlayerY < 0 Then PlayerY = 0
			EndIf
			If PlayerY = 0
				If CheckForHole(PlayerX, PlayerLevelX, PlayerLevelY)
					PlayerY = 45
					PlayerPrevY = PlayerPrevY + 45
					PlayerLevelY = PlayerLevelY + 1
					ScreenY = ScreenY + 45
					If Board(PlayerLevelX, PlayerLevelY)\water = 1
						PlayerAction = 10
						PlayerJumpDir = 0
						PlayerJumpDist = 10
						PlayerFrame = 3
					Else
						graphic = Board(PlayerLevelX, PlayerLevelY)\graphic
						If graphic > 0 And graphic <> 3 And graphic <> 4
							If PlayerAction <> 7
								PlayerFrame = 0
								PlayerFallDist = Rnd(20, 65)
								PlayerAction = 7
							EndIf
						Else
							PlayerFrame = 3
							PlayerAction = 8
							PlayerJumpDir = 0
							PlayerJumpDist = 1
						EndIf
					EndIf
				Else
					If PlayerAction = 7
						PlayerAction = 0
						score = score - 100
						If score < 0 Then score = 0
						crash = 12
						chnlHit = PlaySound(sndHit)
					EndIf
				EndIf
			EndIf
		EndIf
		
		If PlayerAction = 4
			If PlayerClimb > 3
				PlayerClimb = 0
				If downkey
					PlayerAction = 3
					PlayerY = 34
					PlayerX = 146
				Else
					PlayerAction = 5
					PlayerY = 38
					PlayerX = 144
				EndIf
			EndIf
		EndIf

		If PlayerAction = 8
			If PlayerJumpDir = 1
				PlayerX = PlayerX + 2
				If PlayerX > 282 And board(PlayerLevelX, PlayerLevelY)\right_blocked > 0
					PlayerX = PlayerX - 4
					PlayerDir = 1
					PlayerJumpDir = -1
				EndIf
			Else If PlayerJumpDir = -1
				PlayerX = PlayerX - 2
				If PlayerX < 22 And board(PlayerLevelX, PlayerLevelY)\left_blocked > 0
					PlayerX = PlayerX + 4
					PlayerDir = 0
					PlayerJumpDir = 1
				EndIf
			EndIf
			PlayerJumpDist = PlayerJumpDist - 1
			Select PlayerJumpDist
				;Case 15
				;	PlayerY = PlayerY + 2
				Case 14
					PlayerY = PlayerY + 4
				Case 13
					PlayerY = PlayerY + 2
				Case 12
					PlayerY = PlayerY + 1
				Case 11
					PlayerY = PlayerY + 1
				Case 10
					PlayerY = PlayerY + 0
				Case 9
					PlayerY = PlayerY + 0
				Case 8
					PlayerY = PlayerY + 0
				Case 7
					PlayerY = PlayerY + 0
				Case 6
					PlayerY = PlayerY - 1
				Case 5
					PlayerY = PlayerY - 0
				Case 4
					PlayerY = PlayerY - 2
				Case 3
					PlayerY = PlayerY - 1
				Case 2
					PlayerY = PlayerY - 2
				Case 1
					PlayerY = PlayerY - 1
			End Select
			If PlayerJumpDist = 0
				For iter = 1 To 2
					If PlayerY = 0
						If Not CheckForHole(PlayerX, PlayerLevelX, PlayerLevelY)
							PlayerAction = 1
						Else
							PlayerY = 45
							PlayerPrevY = PlayerPrevY + 45
							PlayerLevelY = PlayerLevelY + 1
							ScreenY = ScreenY + 45
							PlayerJumpDist = 1
							If Board(PlayerLevelX, PlayerLevelY)\water = 1
								PlayerAction = 10
								PlayerJumpDist = 10
								PlayerFrame = 3
								If PlayerJumpDir = 1
									PlayerX = PlayerX - 2 ;adjust for new action
								ElseIf PlayerJumpDir = -1
									PlayerX = PlayerX + 2 ;adjust for new action
								EndIf
							Else
								graphic = board(PlayerLevelX, PlayerLevelY - 1)\graphic
								If graphic > 0 And graphic <> 3 And graphic <> 4 And graphic <> 13
									PlayerFallDist = Rnd(20, 65)
									PlayerAction = 7
									PlayerJumpDir = 0
									PlayerFrame = 0
								EndIf
								graphic = board(PlayerLevelX, PlayerLevelY)\graphic
								If graphic = 0 Or graphic = 3 Or graphic = 4 Or graphic = 13
									PlayerAction = 8
									PlayerFrame = 3
								EndIf
								If graphic > 0 And graphic <> 3 And graphic <> 4 And graphic <> 13
									If PlayerAction <> 7
										PlayerFallDist = Rnd(20, 65)
										PlayerAction = 7
										PlayerJumpDir = 0
										PlayerFrame = 0
									EndIf
								EndIf
							EndIf
						EndIf
					Else
						PlayerJumpDist = 1
						PlayerY = PlayerY - 1
					EndIf
				Next
			EndIf
		EndIf ;playeraction=8
		
		If PlayerAction = 9
			If PlayerJumpDir = 1
				PlayerX = PlayerX + 2
			Else If PlayerJumpDir = -1
				PlayerX = PlayerX - 2
			EndIf
			PlayerJumpDist = PlayerJumpDist - 1
			Select PlayerJumpDist
				Case 13
					PlayerY = 44
				Case 12
					PlayerY = 44
					PlayerFrame = 3
				Case 11
					PlayerPrevY = PlayerPrevY - 45
					PlayerLevelY = PlayerLevelY - 1
					ScreenY = ScreenY - 45
					PlayerY = 0
				Case 10
					PlayerY = 1
				Case 9
					PlayerY = 1
				Case 8
					PlayerY = 2
				Case 7
					PlayerY = 2
				Case 6
					PlayerY = 3
				Case 5
					PlayerY = 2
				Case 4
					PlayerY = 2
				Case 3
					PlayerY = 1
				Case 2
					PlayerY = 0
				Case 1
					PlayerY = 0
				Case 0
					PlayerY = 0
					PlayerAction = 1
			End Select
		EndIf ;playeraction=9
		
		If PlayerAction = 10
			If PlayerJumpDir = 1
				PlayerX = PlayerX + 2
			Else If PlayerJumpDir = -1
				PlayerX = PlayerX - 2
			EndIf
			For iter = 1 To 2
				PlayerJumpDist = PlayerJumpDist - 1
				If PlayerJumpDist > 0
					PlayerY = PlayerY - 1
				Else
					PlayerAction = 2
					iter = 2
				EndIf
			Next
		EndIf ;playeraction=10
		
		If PlayerAction = 12
			PlayerJumpDist = PlayerJumpDist - 1
			Select PlayerJumpDist
				Case 24
					PlayerY = PlayerY + 2
				Case 23
					PlayerY = PlayerY + 2
				Case 22
					PlayerY = PlayerY + 2
				Case 21
					PlayerY = PlayerY + 2
				Case 20
					PlayerY = PlayerY + 2
				Case 19
					PlayerY = PlayerY + 2
				Case 18
					PlayerY = PlayerY + 2
				Case 17
					PlayerY = PlayerY + 2
				Case 16
					PlayerY = PlayerY + 2
				Case 15
					PlayerY = PlayerY + 2
				Case 14
					PlayerY = PlayerY + 2
				Case 13
					PlayerY = PlayerY + 2
				Case 12
					PlayerY = PlayerY + 2
				Case 11
					PlayerY = PlayerY - 2
				Case 10
					PlayerY = PlayerY - 2
				Case 9
					PlayerY = PlayerY - 2
				Case 8
					PlayerY = PlayerY - 2
				Case 7
					PlayerY = PlayerY - 2
				Case 6
					PlayerY = PlayerY - 2
				Case 5
					PlayerY = PlayerY - 2
				Case 4
					PlayerY = PlayerY - 2
				Case 3
					PlayerY = PlayerY - 2
				Case 2
					PlayerY = PlayerY - 2
				Case 1
					PlayerY = PlayerY - 2
					PlayerAction = 0
			End Select
		EndIf ;playeraction=12
							
		;Check if player went offscreen
		If PlayerX > 284
			PlayerX = 26
			PlayerLevelX = PlayerLevelX + 1
		EndIf
		If PlayerX < 20
			PlayerX = 280
			PlayerLevelX = PlayerLevelX - 1
		EndIf
	EndIf ;HalfUpdate and not hurt
	
	;If AllUpdate
		If PlayerAction = 11
			If BalloonClimb > 4
				BalloonClimb = 0
				PlayerY = PlayerY + 1
				If PlayerY > 44
					PlayerPrevY = PlayerPrevY - 45
					PlayerLevelY = PlayerLevelY - 1
					ScreenY = ScreenY - 45
					PlayerY = PlayerY - 45
				EndIf
			EndIf
			If Board(PlayerLevelX, PlayerLevelY - 1)\background_image = 4
				If PlayerY > 3
					PlayerAction = 8
					PlayerJumpDist = 1
					PopBalloon = True
					If HalfUpdate <> 1
						PlayerScreenY = PlayerScreenY - (PlayerY - PlayerPrevY)
					EndIf
				EndIf
			EndIf
		EndIf ;playeraction=11
	;endif ;AllUpdate	


	;;;;;;;;   update variables   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

	If HalfUpdate = 1 Or (FourthUpdate = 1 And (PlayerAction = 2 Or PlayerAction = 10)) Or (PlayerAction = 11 And BalloonClimb = 0)
		PlayerScreenY = PlayerScreenY - (PlayerY - PlayerPrevY)
	EndIf
	
	If HalfUpdate = 1
		If PlayerLevelY > 2
			If ScreenY <> 152
				SubLevel = True
			EndIf
		EndIf
		
		If PlayerAction > 2
			PlayerClimb = PlayerClimb + 1
		EndIf
	EndIf ;HalfUpdate

	If PlayerAction < 3
		curFrame = Floor(PlayerFrame)
	EndIf

	BalloonClimb = BalloonClimb + 3
	
	If PlayerHurt
		If PlayerPauseTime = 1
			PlayerAction = 0
			PlayerFrame = 0
			chnlMusic = PlaySound(mscSad)
			Music = 3
		EndIf
		If PlayerPauseTime = 0
			If PlayerLevelX = PlayerLastCheckPoint\levelX
				If PlayerX > PlayerLastCheckPoint\x
					PlayerDir = 1
					PlayerX = PlayerX - 2
				EndIf
				If PlayerX < PlayerLastCheckPoint\x
					PlayerDir = 0
					PlayerX = PlayerX + 2
				EndIf
			EndIf
			If PlayerLevelX > PlayerLastCheckPoint\levelX
				PlayerDir = 1
				PlayerX = PlayerX - 2
			EndIf
			If PlayerX < 20
				PlayerX = 282
				PlayerLevelX = PlayerLevelX - 1
			EndIf
			If PlayerLevelX < PlayerLastCheckPoint\levelX
				PlayerDir = 0
				PlayerX = PlayerX + 2
			EndIf
			If PlayerX > 284
				PlayerX = 22
				PlayerLevelX = PlayerLevelX + 1
			EndIf
			If PlayerLevelY = PlayerLastCheckPoint\levelY
				If PlayerY > 0
					PlayerY = PlayerY - 1
				EndIf
			EndIf
			If PlayerLevelY < PlayerLastCheckPoint\levelY
				PlayerY = PlayerY - 1
				If PlayerY < 0 Then PlayerY = 0
				If PlayerY = 0
					PlayerY = 45
					PlayerPrevY = PlayerPrevY + 45
					PlayerLevelY = PlayerLevelY + 1
					ScreenY = ScreenY + 45
				EndIf
			EndIf
			If PlayerLevelY > PlayerLastCheckPoint\levelY
				PlayerY = PlayerY + 1
				If PlayerY > 45 Then PlayerY = 45
				If PlayerY = 45
					PlayerY = 0
					PlayerPrevY = PlayerPrevY - 45
					PlayerLevelY = PlayerLevelY - 1
					ScreenY = ScreenY - 45
				EndIf			
			EndIf
			If PlayerLevelX = PlayerLastCheckPoint\levelX
				If PlayerX = PlayerLastCheckPoint\x
					If PlayerLevelY = PlayerLastCheckPoint\levelY
						If PlayerY = 0
							PlayerHurt = False
						EndIf
					EndIf
				EndIf
			EndIf
			score = score - 7
			If score < 0 Then score = 0
		EndIf ;playerpausetime
		PlayerScreenY = PlayerScreenY - (PlayerY - PlayerPrevY)
	EndIf ;playerhurt
	
	;testing purposes only -----------------------------------------------------------------
	If FrameRate
		time = MilliSecs()-curTime
		Text 5 + 8 * (time < 10), 0, MilliSecs()-curTime
	EndIf
	;testing purposes only------------------------------------------------------------------

	If KeyHit(1)
		GamePaused = True
		PauseChannel chnlMusic
		FlushKeys()
	EndIf
	
	;scroll screen if necessary
	If PlayerHurt
		If PlayerScreenY > 140
			scrollScreen = scrollscreen - 2
		EndIf
		If PlayerScreenY < 61
			scrollScreen = scrollscreen + 2
		EndIf
		
		If scrollscreen < 0
			scrollscreen = scrollscreen + 2
			ScreenY = ScreenY - 2
			PlayerScreenY = PlayerScreenY - 2
		EndIf
		If scrollscreen > 0
			scrollscreen = scrollscreen - 2
			ScreenY = ScreenY + 2
			PlayerScreenY = PlayerScreenY + 2
		EndIf	
	Else
		If PlayerScreenY > 137
			If PlayerAction = 3
				If scrollscreen > -2 Then scrollscreen = scrollscreen - 45
			Else
				scrollScreen = scrollscreen - 1			
			EndIf
		EndIf
		If PlayerScreenY < 116
			If PlayerScreenY < 105 And Board(PlayerLevelX, PlayerLevelY - 1)\animal = 7 And PlayerAction <> 12
				scrollscreen = scrollscreen + 1
			ElseIf PlayerScreenY < 61
				If PlayerAction = 3
					If scrollscreen < 2 scrollscreen = scrollscreen + 45
				Else
					scrollScreen = scrollScreen + 1
				EndIf
			Else
				If PlayerAction = 11
					scrollscreen = scrollscreen + 1
				EndIf
			EndIf
		EndIf
		
		If scrollscreen < 0
			scrollscreen = scrollscreen + 1
			ScreenY = ScreenY - 1
			PlayerScreenY = PlayerScreenY - 1
		EndIf
		If scrollscreen > 0
			scrollscreen = scrollscreen - 1
			ScreenY = ScreenY + 1
			PlayerScreenY = PlayerScreenY + 1
		EndIf
	EndIf ;playerhurt


	;;;;;;;;;;;;;;   Manage Animals   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	;Erase offscreen animals
	For curAnimal.Animal = Each Animal
		deleteAnimal = False
		If curAnimal\levelX <> PlayerLevelX Then deleteAnimal = True
		If curAnimal\levelY < PlayerLevelY - 3 Then deleteAnimal = True
		If curAnimal\levelY > PlayerLevelY + 3 Then deleteAnimal = True
		If deleteAnimal = True Then Delete curAnimal 
	Next
	
	;Replace balloons if they are offscreen
	If BalloonBoardX <> 0
		If PlayerAction <> 11
			If BalloonBoardX <> PlayerLevelX Or (BalloonBoardY < PlayerLevelY - 2) Or (BalloonBoardY > PlayerLevelY + 2)
				Board(BalloonBoardX, BalloonBoardY)\animal = 7
				BalloonBoardX = 0
				BalloonBoardY = 0
				If Balloon2BoardX <> 0
					BalloonBoardX = Balloon2BoardX
					BalloonBoardY = Balloon2BoardY
					Balloon2BoardX = 0
					Balloon2BoardY = 0
				EndIf
			EndIf
		EndIf	
	EndIf
	;Create new onscreen animals
	For yiter = (PlayerLevelY + 3) To (PlayerLevelY - 3) Step -1
		If yiter > 0 And yiter < 31
			If board(PlayerLevelX, yiter)\animal
				newAnimal = True
				If yiter = PlayerLevelY + 3 Or yiter = PlayerLevelY - 3
					If board(PlayerLevelX, yiter)\animal <> 4 Then newAnimal = False
				EndIf
				For curAnimal.Animal = Each Animal
					If curAnimal\levelY = yiter Then newAnimal = False
				Next
				If newAnimal
					curAnimal.Animal = New Animal
					curAnimal\animaltype = board(PlayerLevelX, yiter)\animal
					curAnimal\levelX = PlayerLevelX
					curAnimal\levelY = yiter
					Select curAnimal\animaltype
						Case 1 ;bat
							curAnimal\x = 56
							curAnimal\y = batY
							curAnimal\dir = 1
							curAnimal\state = 0 ;has no state
						Case 2 ;bird
							curAnimal\x = 268
							curAnimal\y = birdY
							curAnimal\dir = -1
							curAnimal\state = 0 ;has no state
						Case 3 ;scorpion
							curAnimal\x = 120
							curAnimal\y = 10
							curAnimal\dir = 1
							curAnimal\state = 0 ;has no state
						Case 4 ;frog
							curAnimal\x = frogX
							curAnimal\y = frogY
							curAnimal\dir = frogDir ;1=right, -1=left
							curAnimal\state = frogState ;0=sitting, 1=jumping
						Case 5 ;eel
							curAnimal\x = 56
							curAnimal\y = -batY + 2 - 1*(batY > 8)
							curAnimal\dir = 0 ;0=tail up, 1=tail down
							curAnimal\state = 0;0=not shocking, 1=shocking
						Case 6 ;mouse
							curAnimal\x = 64 ;needs work
							curAnimal\y = 0
							curAnimal\dir = 1
							curAnimal\state = 1 ;0=stopped, 1=running
							MouseStopped = False
							MouseXPos = 64
						Case 7 ;bat that can become balloon
							curAnimal\x = 56
							curAnimal\y = batY
							curAnimal\dir = 1
							curAnimal\state = 0 ;0=bat 1=balloon
						;Case 8 ;bat that has become balloon
						;	curAnimal\x = PlayerX + 2 * (PlayerDir = 0)
						;	curAnimal\y = PlayerY + 28
						;	curAnimal\dir = PlayerDir
						;	curAnimal\state = 0 ;0=alone 1=attached to player
					End Select
				EndIf
			EndIf
		EndIf
	Next
	
	;update animal variables
	If FourthUpdate = 1 And PlayerPauseTime = 0
		;bat
		batY = batY + batDir
		If batY > 12
			batY = 12
			batDir = -1
		EndIf
		If batY < 5
			batY = 5
			batDir = 1
		EndIf
		;bird
		birdY = birdY + birdDir
		If birdY > 3
			birdY = 3
			birdDir = -1
		EndIf
		If birdY < -12
			birdY = -12
			birdDir = 1
		EndIf
		;eel
		eelY = eelY + eelDir
		If eelY > 11
			eelY = 11
			eelDir = -1
		EndIf
		If eelY < 4
			eelY = 4
			eelDir = 1
		EndIf
	EndIf ;fourthupdate
	If HalfUpdate = 1 And PlayerPauseTime = 0
		;frog
		frogInc = frogInc + 1
		Select frogInc
			Case 1
				frogY = 12
				frogState = 1
			Case 2
				frogY = 11
			Case 3
				frogY = 10
				frogX = frogX + frogDir * 2
			Case 4
				frogY = 8
				frogX = frogX + frogDir * 2
			Case 5
				frogY = 7
			Case 6
				frogY = 6
				frogX = frogX + frogDir * 2
			Case 7
				frogY = 5
			Case 8
				frogY = 4
				frogX = frogX + frogDir * 2
			Case 9
				frogY = 3
			Case 10
				frogY = 2
				frogX = frogX + frogDir * 2
			Case 11
				frogY = 1
			Case 12
				frogY = 0
				frogX = frogX + frogDir * 2
			Case 13
				frogY = -1
			Case 14
				frogY = -2
				frogX = frogX + frogDir * 2
			Case 15
				frogY = -3
			Case 16
				frogY = -2
				frogX = frogX + frogDir * 2
			Case 17
				frogY = -1
			Case 18
				frogY = 0
				frogX = frogX + frogDir * 2
			Case 19
				frogY = 1
				frogX = frogX + frogDir * 2
			Case 20
				frogY = 2
				frogX = frogX + frogDir * 2
			Case 21
				frogY = 3
			Case 22
				frogY = 4
				frogX = frogX + frogDir * 2
			Case 23
				frogY = 5
			Case 24
				frogY = 6
				frogX = frogX + frogDir * 2
			Case 25
				frogY = 7
			Case 26
				frogY = 8
				frogX = frogX + frogDir * 2
			Case 27
				frogY = 10
			Case 28
				frogY = 11
				frogX = frogX + frogDir * 2
			Case 29
				frogY = 12
			Case 30
				frogY = 15
				frogState = 0
			Case 46
				frogDir = frogDir * -1
		End Select
		If frogInc = 62 Then frogInc = 0
	EndIf ;halfupdate
	
	;Move animals
	If FourthUpdate = 1 And PlayerPauseTime = 0
		For curAnimal.Animal = Each Animal
			Select curAnimal\animaltype
				Case 3 ;scorpion
					curAnimal\x = curAnimal\x + curAnimal\dir * 2
					If curAnimal\x > 312 Then curAnimal\x = -6
					If curAnimal\x < -6 Then curAnimal\x = 312
			End Select
		Next
	EndIf ;fourthupdate
	If HalfUpdate = 1 And PlayerPauseTime = 0
		For curAnimal.Animal = Each Animal
			Select curAnimal\animaltype
				Case 1 ;bat
					curAnimal\x = curAnimal\x + 2
					If curAnimal\x > 312 Then curAnimal\x = -6
				Case 2 ;bird
					curAnimal\x = curAnimal\x + curAnimal\dir * 2
					If curAnimal\x > 312 Then curAnimal\x = -6
					If curAnimal\x < -6 Then curAnimal\dir = 1
				Case 3 ;scorpion
					chase = False
					If PlayerLevelY = curAnimal\levelY And PlayerY = 0 Then chase = True
					If PlayerAction = 3 Or PlayerAction = 5
						If PlayerLevelY = curAnimal\levelY And PlayerY < 36 Then chase = True
						If PlayerLevelY = curAnimal\levelY + 1 And PlayerY > 30 Then chase = True
					EndIf
					If chase
						prevDir = curAnimal\dir
						If PlayerX < curAnimal\x + 4 Then curAnimal\dir = -1
						If PlayerX > curAnimal\x + 4 Then curAnimal\dir = 1
						If curAnimal\dir <> prevDir Then curAnimal\x = curAnimal\x + curAnimal\dir * 2
					EndIf
				Case 4 ;frog
					curAnimal\x = frogX
					curAnimal\y = frogY
					curAnimal\dir = frogDir
					curAnimal\state = frogState
				Case 5 ;eel
					curAnimal\x = curAnimal\x + 2
					If curAnimal\x > 312 Then curAnimal\x = -6
					curAnimal\y = -eelY + 1*(eelY > 7)
					curAnimal\dir = Animation2
					eelshock = eelshock + 1
					If eelshock > 1
						curAnimal\state = Rnd(0, 1)
						eelshock = 0
					EndIf
				Case 6 ;mouse
					If curAnimal\levelY = PlayerLevelY
						If curAnimal\x < 288
							curAnimal\x = curAnimal\x + 4
							MouseXPos = MouseXPos + 4
							MouseAnim = MouseAnim + 1
							If MouseAnim > 1 Then MouseAnim = 0
						Else
							curAnimal\state = 0
							MouseStopped = True
							MouseAnim = 0
						EndIf
					EndIf
				Case 7 ;bat that can become balloon
					curAnimal\x = curAnimal\x + 2
					If curAnimal\x > 312
						curAnimal\x = -6
						If curAnimal\levelY = PlayerLevelY - 1
							If (PlayerAction < 2 Or PlayerAction = 12) And (Not PlayerHurt)
								curAnimal\animaltype = 8 ;balloon
								curAnimal\dir = 1
							EndIf
						EndIf
					EndIf
				Case 8 ;bat that has become balloon
					If curAnimal\state = 0
						curAnimal\x = curAnimal\x + 2
						If curAnimal\x > 312 Then curAnimal\x = -6
						curAnimal\y = baty - 7
					EndIf
			End Select
		Next
	EndIf ;HalfUpdate
	;If AllUpdate
		For curAnimal.Animal = Each Animal
			If curAnimal\animaltype = 8
				If curAnimal\state = 1
					curAnimal\x = PlayerX + 2 * (PlayerDir = 0)
					curAnimal\dir = PlayerDir
					curAnimal\y = PlayerY + 28
					curAnimal\LevelY = PlayerLevelY
				EndIf
			EndIf
		Next
	;EndIf ;AllUpdate

	
	
	;;;;;;;;;;;;;;   Check for Collisions   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	If Not PlayerHurt
		image1 = Player
		x1 = PlayerX
		y1 = ScreenY - PlayerY
		frame1 = curFrame
		Select PlayerAction
			Case 0
				frame1 = 0 + 6*(PlayerDir = 1)
			Case 1
				frame1 = curFrame + 1 + 6*(PlayerDir = 1)
			Case 2
				image1 = Plays
				frame1 = curFrame + 4*(PlayerDir = 1)
			Case 3
				image1 = Playl
			Case 4
				image1 = Playlbo
				x1 = PlayerX - 2
			Case 5
				frame1 = 0 + 6*(PlayerDir = 1)
			Case 6
				frame1 = 3 + 6*(PlayerDir = 1)
			Case 7
				frame1 = 0 + 6*(PlayerDir = 1)
			Case 8
				frame1 = PlayerFrame + 6*(PlayerDir = 1)
			Case 9
				frame1 = PlayerFrame + 6*(PlayerDir = 1)
			Case 10
				frame1 = PlayerFrame + 6*(PlayerDir = 1)
			Case 11
				image1 = Playb
				frame1 = PlayerDir
			Case 12
				frame1 = PlayerFrame + 6*(PlayerDir = 1)
		End Select
		;collide with animal
		For curAnimal.Animal = Each Animal
			YOffset = ((PlayerLevelY - curAnimal\levelY) * -45) + ScreenY
			Select curAnimal\animaltype
				Case 1 ;bat
					If ImagesCollide(image1, x1, y1, frame1, Bat, curAnimal\x, -batY + YOffset, Animation2)
						PlayerHurt = True
						PlayerPauseTime = 100
					EndIf
				Case 2 ;bird
					If ImagesCollide(image1, x1, y1, frame1, Bird, curAnimal\x, birdY + YOffset, Animation3 + 2*(curAnimal\dir = 1))
						PlayerHurt = True
						PlayerPauseTime = 100
					EndIf
				Case 3 ;scorpion
					If ImagesCollide(image1, x1, y1, frame1, Scorpion, curAnimal\x, curAnimal\y + YOffset, Animation2 + 2*(curAnimal\dir = 1))
						PlayerHurt = True
						PlayerPauseTime = 100
					EndIf
				Case 4 ;frog
					If ImagesCollide(image1, x1, y1, frame1, Frog, curAnimal\x, curAnimal\y + YOffset, 2 - 2*(curAnimal\dir = -1) + curAnimal\state)
						PlayerHurt = True
						PlayerPauseTime = 100
					EndIf
				Case 5 ;eel
					If ImagesCollide(image1, x1, y1, frame1, Eel, curAnimal\x, curAnimal\y + YOffset, curAnimal\dir * 2)
						PlayerHurt = True
						PlayerPauseTime = 100
					EndIf
				Case 6 ;mouse
					If PlayerLevelY = curAnimal\levelY
						If x1 < curAnimal\x + 10 And x1 > curAnimal\x - 4
							If curAnimal\state = 1
								PlayerX = curAnimal\x + 10
								PlayerDir = 0
								MouseCollide = True
								MouseLevelX = curAnimal\levelX
							EndIf
						EndIf
					EndIf
				Case 7 ;bat that can become balloon
					If ImagesCollide(image1, x1, y1, frame1, Bat, curAnimal\x, -batY + YOffset, Animation2)
						PlayerHurt = True
						PlayerPauseTime = 100
					EndIf
				Case 8 ;balloon
					If curAnimal\state = 0
						If ImagesCollide(image1, x1, y1, frame1, Balloon, curAnimal\x, -curAnimal\y + YOffset, curAnimal\dir)
							PlayerAction = 11
							If BalloonBoardX = 0
								BalloonBoardX = curAnimal\LevelX
								BalloonBoardY = curAnimal\LevelY
								Board(BalloonBoardX, BalloonBoardY)\animal = 0
							Else
								Balloon2BoardX = curAnimal\LevelX
								Balloon2BoardY = curAnimal\LevelY
								Board(Balloon2BoardX, Balloon2BoardY)\animal = 0
							EndIf								
							curAnimal\levelY = PlayerLevelY
							curAnimal\x = PlayerX + 2 * (PlayerDir = 0)
							curAnimal\y = PlayerY + 28
							curAnimal\dir = PlayerDir
							curAnimal\state = 1
							StopChannel chnlMusic
							chnlMusic = PlaySound(mscBalloon)
							Music = 4
						EndIf
					EndIf
			End Select
		Next
		If PlayerHurt = True
			StopChannel chnlMusic
			StopChannel chnlCP
			StopChannel chnlJump		
			Music = 0
			If PlayerAction = 11
				PlayerAction = 8
				PlayerJumpDist = 1
				PopBalloon = True
			EndIf		
		EndIf
		;balloon collide with animal
		For ThisBalloon.Animal = Each Animal
			If ThisBalloon\animaltype = 8
				BallYOff = ((PlayerLevelY - ThisBalloon\levelY) * -45) + ScreenY
				For curAnimal.Animal = Each Animal
					YOffset = ((PlayerLevelY - curAnimal\levelY) * -45) + ScreenY
					Select curAnimal\animaltype
						Case 1
							If ImagesCollide(Balloon, ThisBalloon\x, -ThisBalloon\y + BallYOff, ThisBalloon\dir, Bat, curAnimal\x, -batY + YOffset, Animation2)
								PlayerAction = 8
								PlayerJumpDist = 1
								PopBalloon = True
							EndIf
						Case 2
							If ImagesCollide(Balloon, ThisBalloon\x, -ThisBalloon\y + BallYOff, ThisBalloon\dir, Bird, curAnimal\x, birdY + YOffset, Animation3 + 2*(curAnimal\dir = 1))
								PlayerAction = 8
								PlayerJumpDist = 1
								PopBalloon = True
							EndIf
						Case 7
							If ImagesCollide(Balloon, ThisBalloon\x, -ThisBalloon\y + BallYOff, ThisBalloon\dir, Bat, curAnimal\x, -batY + YOffset, Animation2)
								PlayerAction = 8
								PlayerJumpDist = 1
								PopBalloon = True
							EndIf
					End Select
				Next
			EndIf
		Next
		;Pop Balloon if necessary
		If PopBalloon = True
			PopBalloon = False
			For curAnimal.Animal = Each Animal
				If curAnimal\animaltype = 8 Then Delete curAnimal
			Next
			If PlayerHurt
				PlaySound sndSPop
			Else
				PlaySound sndBPop
				StopChannel chnlMusic
				chnlMusic = PlaySound(mscChorus)
				Music = 1
			EndIf
		EndIf
		;collide with checkpoint
		If Board(PlayerLevelX, PlayerLevelY)\Checkpoint = True
			If PlayerLastCheckpoint\levelX <> PlayerLevelX Or PlayerLastCheckpoint\levelY <> PlayerLevelY
				YOffset = ScreenY
				If ImagesCollide(image1, x1, y1, frame1, Checkpoint, PlayerLastCheckpoint\x, 15 + YOffset, 0)
					PlayerLastCheckpoint\LevelX = PlayerLevelX
					PlayerLastCheckpoint\LevelY = PlayerLevelY
					chnlCP = PlaySound(sndCheckpoint)
				EndIf
			EndIf
		EndIf
		;collide with treasure
		treasure = Board(PlayerLevelX, PlayerLevelY)\treasure
		If treasure > 0
			YOffset = ScreenY
			Select treasure
				Case 1 ;gold
					If ImagesCollide(image1, x1, y1, frame1, Goldtemplate, 248, 8 + YOffset, 0)
						Score = Score + 5000
						Board(PlayerLevelX, PlayerLevelY)\treasure = 0
						chnlTreasure = PlaySound(sndTreasure)
						If Music <> 2
							StopChannel chnlMusic
							chnlMusic = PlaySound(mscHappy)
							Music = 2
						EndIf
						GoldBars = GoldBars + 1
					EndIf
				Case 2 ;gold
					If ImagesCollide(image1, x1, y1, frame1, Goldtemplate, 56, 8 + YOffset, 0)
						Score = Score + 5000
						Board(PlayerLevelX, PlayerLevelY)\treasure = 0
						chnlTreasure = PlaySound(sndTreasure)
						If Music <> 2
							StopChannel chnlMusic
							chnlMusic = PlaySound(mscHappy)
							Music = 2
						EndIf
						GoldBars = GoldBars + 1
					EndIf
				Case 3 ;Cat
					If ImagesCollide(image1, x1, y1, frame1, Cat, 54, -1 + YOffset, Animation1)
						Score = Score + 10000
						Board(PlayerLevelX, PlayerLevelY)\treasure = 0
						chnlTreasure = PlaySound(sndTreasure)
						If Music <> 2
							StopChannel chnlMusic
							chnlMusic = PlaySound(mscHappy)
							Music = 2
						EndIf
						NumTreasures = NumTreasures - 1
					EndIf
				Case 4 ;girl
					If ImagesCollide(image1, x1, y1, frame1, Girl, 58, 2 + YOffset, 0)
						Score = Score + 10000
						Board(PlayerLevelX, PlayerLevelY)\treasure = 0
						chnlTreasure = PlaySound(sndTreasure)
						If Music <> 2
							StopChannel chnlMusic
							chnlMusic = PlaySound(mscHappy)
							Music = 2
						EndIf
						NumTreasures = NumTreasures - 1
					EndIf
				Case 5 ;ring
					If ImagesCollide(image1, x1, y1, frame1, Ring, 136, 5 + YOffset, 0)
						Score = Score + 20000
						Board(PlayerLevelX, PlayerLevelY)\treasure = 0
						chnlTreasure = PlaySound(sndTreasure)
						If Music <> 2
							StopChannel chnlMusic
							chnlMusic = PlaySound(mscHappy)
							Music = 2
						EndIf
						NumTreasures = NumTreasures - 1
					EndIf
				Case 6 ;mouse
					If MouseStopped
						For curAnimal.Animal = Each Animal
							If curAnimal\animaltype = 6
								MouseState = curAnimal\state
							EndIf
						Next
						If ImagesCollide(image1, x1, y1, frame1, Mouse, MouseXPos, 7 + YOffset, MouseAnim)
							Score = Score + 15000
							Board(PlayerLevelX, PlayerLevelY)\treasure = 0
							Board(PlayerLevelX, PlayerLevelY)\animal = 0
							;Erase mouse from animals
							For curAnimal.Animal = Each Animal
								If curAnimal\animaltype = 6 Then Delete curAnimal
							Next
							MouseCollide = False
							chnlTreasure = PlaySound(sndTreasure)
							If Music <> 2
								StopChannel chnlMusic
								chnlMusic = PlaySound(mscHappy)
								Music = 2
							EndIf
						EndIf
					EndIf
			End Select
		EndIf
		If NumTreasures = 0
			GameRunning = False
			GameWon = True
			;Erase animals on same level as player
			For curAnimal.Animal = Each Animal
				If curAnimal\levelY = PlayerLevelY Then Delete curAnimal 
			Next
		EndIf
	EndIf ;not playerhurt
EndIf ;if gamerunning

If GameWon
	HalfUpdate = HalfUpdate * -1
	If HalfUpdate = 1
		If PlayerAction = 6
			If PlayerDir = 0
				PlayerX = PlayerX + 2
			Else
				PlayerX = PlayerX - 2
			EndIf
			PlayerJumpDist = PlayerJumpDist - 1
			If PlayerY > 37
				PlayerY = PlayerY + 1
				If PlayerY > 44
					PlayerY = 0
					PlayerPrevY = PlayerPrevY - 45
					PlayerLevelY = PlayerLevelY - 1
					ScreenY = ScreenY - 45
				EndIf
			EndIf
			If PlayerY < 7 And PlayerY > 0
				PlayerY = PlayerY - 1
			EndIf
			If PlayerJumpDist = 0 ;PlayerY should be 0!
				PlayerAction = 1
			EndIf
		EndIf
		If PlayerAction < 2
			If board(PlayerLevelX, PlayerLevelY)\graphic > 0
				If board(PlayerLevelX, PlayerLevelY)\graphic < 7 Or Board(PlayerLevelX, PlayerLevelY)\graphic = 13
					If Not CheckForHole(PlayerX, PlayerLevelX, PlayerLevelY)
						PlayerAction = 8
						PlayerJumpDist = 15
						PlayerFrame = 3
						PlayerDir = 0
						chnlJump = PlaySound(sndJump)
					Else
						Repeat
							PlayerX = PlayerX - 2
							If PlayerX < 0 Then RuntimeError("Pitfall II - Error: Player off screen. Fatal error.")
						Until Not CheckForHole(PlayerX, PlayerLevelX, PlayerLevelY)
					EndIf
				EndIf
			EndIf
		EndIf
		If PlayerAction = 8
			PlayerJumpDist = PlayerJumpDist - 1
			Select PlayerJumpDist
				Case 15
					PlayerY = 2
				Case 14
					PlayerY = 4
				Case 13
					PlayerY = 6
				Case 12
					PlayerY = 7
				Case 11
					PlayerY = 8
				Case 10
					PlayerY = 8
				Case 9
					PlayerY = 8
					PlayerDir = 1
				Case 8
					PlayerY = 8
				Case 7
					PlayerY = 8
				Case 6
					PlayerY = 7
				Case 5
					PlayerY = 7
				Case 4
					PlayerY = 5
				Case 3
					PlayerY = 4
				Case 2
					PlayerY = 2
				Case 1
					PlayerY = 1
			End Select
			If PlayerJumpDist = 0
				PlayerY = 0
				PlayerAction = 0
				PlayerFrame = 0
				curFrame = 0
				PlayerDir = 0
			EndIf
		EndIf ;playeraction=8
		If (Not ChannelPlaying(chnlMusic)) And PlayerJumpDist = 0
			If GameLevel = 1
				UnlockMoreLostCaverns()
			EndIf
			GameWon = False
			FlushKeys()
		EndIf
	EndIf
EndIf ;gamewon


Cls

;Draw board
For yiter = (PlayerLevelY+3) To (PlayerLevelY-3) Step -1
	If yiter > 0 And yiter < 31
		YOffset = ((PlayerLevelY - yiter) * -45) + ScreenY
		backgroundimage = Board(PlayerLevelX, yiter)\background_image
		If backgroundimage = 0 Or backgroundimage = 6 Or backgroundimage = 7 Or backgroundimage = 10
			If yiter + 1 < 31
				If Board(PlayerLevelX, yiter + 1)\background_image = 1
					DrawBlockRect Wave, 8, 21 + YOffset, 0, 6 + (curWave * 6), 304, 6
				EndIf
			EndIf
		EndIf
		If backgroundimage <> 0
			If backgroundimage < 6
				DrawImage BgImage(backgroundimage), 8, -20 + YOffset
			Else
				If backgroundimage = 6 Or backgroundimage > 7
					extraYOffset = 0
					If backgroundimage = 10 Then extraYOffset = -1
					If backgroundimage = 9
						If yiter Mod 2 = 0 Then extraYOffset = 1
					EndIf
					DrawImage BgImage(backgroundimage), 8, -12 + YOffset + extraYOffset, Animation1
				EndIf
				If backgroundimage = 7
					DrawImage BgImage(7), 278, -12 + YOffset, Animation1
				EndIf
			EndIf
		EndIf
		If Board(PlayerLevelX, yiter)\graphic <> 0
			DrawImage LevelGraphic(Board(PlayerLevelX, yiter)\graphic), 8, 15 + YOffset
		EndIf
		If Board(PlayerLevelX, yiter)\checkpoint = True
			DrawImage Checkpoint, 70, 15 + YOffset
		EndIf
		If Board(PlayerLevelX, yiter)\left_blocked = 1
			DrawImage Left_block, 8, -11 + YOffset
		EndIf
		If Board(PlayerLevelX, yiter)\left_blocked = 2
			DrawImage Left_block_striped, 8, -11 + YOffset
		EndIf
		If Board(PlayerLevelX, yiter)\right_blocked = 1
			DrawImage Right_block, 280, -11 + YOffset
		EndIf
		If Board(PlayerLevelX, yiter)\right_blocked = 2
			DrawImage Right_block_striped, 280, -11 + YOffset
		EndIf
		If Board(PlayerLevelX, yiter)\ladder = 1
			If GameLevel = 2
				XOffset = -1
				Y2Offset = -3
				width = 2
			Else
				XOffset = 0

Comments

WolRon2004
And here is the remainder since it didn't all fit above:
				Y2Offset = 0
				width = 0
			EndIf
			If (Board(PlayerLevelX, yiter)\graphic = 1 Or Board(PlayerLevelX, yiter)\graphic = 6) And GameLevel = 2
				DrawImageRect Ladder, 148 + XOffset, -13 + YOffset + Y2Offset, 0, 0, 10, 35
			Else
				DrawImage Ladder, 148 + XOffset, -13 + YOffset + Y2Offset
			EndIf
			If yiter < 30
				If Board(PlayerLevelX, yiter + 1)\ladder = 1
					graphic = Board(PlayerLevelX, yiter)\graphic
					If graphic = 0 Or (graphic > 2 And graphic < 5)
						DrawImageRect Ladder, 148 + XOffset, 25 + YOffset + Y2Offset, 0, 1, 8 + width, 7
					EndIf
				EndIf
			EndIf
		EndIf
		If Board(PlayerLevelX, yiter)\treasure = 1
			DrawImage Gold, 248, 3 + YOffset, Animation1
		EndIf
		If Board(PlayerLevelX, yiter)\treasure = 2
			DrawImage Gold, 56, 3 + YOffset, Animation1
		EndIf
		If Board(PlayerLevelX, yiter)\treasure = 3
			DrawImage Cat, 54, -1 + YOffset, Animation1
		EndIf
		If Board(PlayerLevelX, yiter)\treasure = 4
			DrawImage Girl, 58, 2 + YOffset
		EndIf
		If Board(PlayerLevelX, yiter)\treasure = 5
			DrawImage Ring, 136, 5 + YOffset
		EndIf
	EndIf
Next
;draw sky
If PlayerLevelY < 4
	YOffset = (-45 * PlayerLevelY) + ScreenY - 1
	If PlayerLevelX Mod 2 = 0
		DrawImage LevelGraphic(12), 8, 15 + YOffset
	Else
		DrawImage LevelGraphic(10), 8, 15 + YOffset
	EndIf
EndIf
;draw bottom of ground
If PlayerLevelY > 27
	YOffset = (45 * (31 - PlayerLevelY)) + ScreenY - 1
	DrawImage BgImage(4), 8, -20 + YOffset
EndIf

;Draw animals
For curAnimal.Animal = Each Animal
	YOffset = ((PlayerLevelY - curAnimal\levelY) * -45) + ScreenY
	Select curAnimal\animaltype
		Case 1
			DrawImage Bat, curAnimal\x, -batY + YOffset, Animation2
		Case 2
			DrawImage Bird, curAnimal\x, birdY + YOffset, Animation3 + 2*(curAnimal\dir = 1)
		Case 3
			DrawImage Scorpion, curAnimal\x, curAnimal\y + YOffset, Animation2 + 2*(curAnimal\dir = 1)
		Case 4
			DrawImage Frog, curAnimal\x, curAnimal\y + YOffset, 2 - 2*(curAnimal\dir = -1) + curAnimal\state
		Case 5
			DrawImage Eel, curAnimal\x, curAnimal\y + YOffset, curAnimal\dir * 2 + curAnimal\state
		Case 6
			DrawImage Mouse, curAnimal\x, 7 + YOffset, 0 + MouseAnim
		Case 7
			DrawImage Bat, curAnimal\x, -batY + YOffset, Animation2
		Case 8
			DrawImage Balloon, curAnimal\x, -curAnimal\y + YOffset, curAnimal\dir
	End Select
Next


;Draw Player
If (Not PlayerHurt) Or (PlayerHurt And Animation4)
	If PlayerAction < 2
		DrawImage Player, PlayerX, ScreenY - PlayerY, curFrame + 1*(PlayerAction > 0) + 6*(PlayerDir = 1)
	EndIf
	If PlayerAction = 2
		DrawImage Plays, PlayerX, ScreenY - PlayerY, curFrame + 4*(PlayerDir = 1)
	EndIf
	If PlayerAction = 3
		DrawImage Playl, PlayerX, ScreenY - PlayerY, curFrame
	EndIf
	If PlayerAction = 4
		DrawImage Playlbo, PlayerX - 2, ScreenY - PlayerY, curFrame
	EndIf
	If PlayerAction = 5 Or PlayerAction = 7
		DrawImage Player, PlayerX, ScreenY - PlayerY, 0 + 6*(PlayerDir = 1)
	EndIf
	If PlayerAction = 6
		DrawImage Player, PlayerX, ScreenY - PlayerY, 3 + 6*(PlayerDir = 1)
	EndIf
	If PlayerAction = 8 Or PlayerAction = 12
		DrawImage Player, PlayerX, ScreenY - PlayerY, PlayerFrame + 6*(PlayerDir = 1)
	EndIf
	If PlayerAction = 9 Or PlayerAction = 10
		If PlayerJumpDist = 13
			DrawImage Plays, PlayerX, ScreenY - PlayerY, curFrame + 4*(PlayerDir = 1)
		Else
			DrawImage Player, PlayerX, ScreenY - PlayerY, PlayerFrame + 6*(PlayerDir = 1)
		EndIf
	EndIf
	If PlayerAction = 11
		DrawImage Playb, PlayerX, ScreenY - PlayerY, 0 + 1*(PlayerDir = 1)
	EndIf
EndIf


;draw bottom of levels (to cover player if climbing through hole)
If PlayerAction <> 2 And PlayerAction <> 11
	For yiter = (PlayerLevelY+3) To (PlayerLevelY-3) Step -1
		If yiter > 0 And yiter < 31
			graphic = Board(PlayerLevelX, yiter)\graphic
			If graphic <> 0
				DrawImageRect LevelGraphic(graphic), 8, 22 - ((PlayerLevelY-yiter) * 45) + ScreenY, 0, 7, 304, 7
			EndIf
		EndIf
	Next
EndIf

;redraw balloon
If PlayerAction <> 11
	For curAnimal.Animal = Each Animal
		YOffset = ((PlayerLevelY - curAnimal\levelY) * -45) + ScreenY
		If curAnimal\animaltype = 8 Then DrawImage Balloon, curAnimal\x, -curAnimal\y + YOffset, curAnimal\dir
	Next
EndIf

;Erase top of screen and draw score
Color 0, 0, 255
Rect 8, 8, 304, 23
Color 0, 0, 0
Rect 8, 0, 304, 8
If SubLevel
	Rect 8, 31, 304, 2
EndIf
If DisplayScore
	scoreX = 108
	tempscore = score
	multiplier = 10
	For iter = 1 To 6
		number = tempscore Mod multiplier
		digit = number / (multiplier / 10)
		DrawImage Digits, scoreX, 11, digit
		scoreX = scoreX - 16
		multiplier = multiplier * 10
		tempscore = tempscore - number
		If tempscore = 0 Then Exit
	Next
	If Cheat
		Text 150, 7, "Location: X:" + PlayerLevelX + ", Y:" + PlayerLevelY
		Text 150, 17, "Gold collected: " + GoldBars
	EndIf
EndIf

;Erase bottom of screen
Color 0, 0, 0
Rect 8, 184, 304, 16

;Erase sides of screen
Rect 0, 0, 8, 200
Rect 312, 0, 8, 200


If GamePaused
	Color 255, 255, 255
	;animate Pause graphic
	PausePause = PausePause + 1
	If PausePause > 90
		PauseScroll = PauseScroll + 1
		If PauseScroll > 8
			PauseScroll = 0
			PauseY = PauseY + 1
			If PauseY > 9 Then PauseY = 9
		EndIf
	EndIf
	If PausePause > 260
		PausePause = 0
		PauseY = 0
		PauseScroll = 0
	EndIf
	DrawImageRect Pause, 188, 186, 0, PauseY, 100, 7
	If KeyHit(1);esc
		GamePaused = False
		PausePause = 0
		PauseY = 0
		PauseScroll = 0
		ResumeChannel chnlMusic
		FlushKeys()
	EndIf
	If KeyHit(16);q
		GameRunning = False
		GamePaused = False
		StopChannel chnlMusic
		LogoY = 0
		FlushKeys()
	EndIf
EndIf

If (Not GameRunning) And (Not GameWon)
	If KeyHit(28) ;enter
		;Initialize new game
		NumTreasures = LoadLevelData(GameLevel)
		DisplayScore = True
		GameAlmostRunning = True
		GameWon = 0
		PlayerX = 68
		PlayerY = 0
		ScreenY = 107
		PlayerScreenY = 107
		PlayerLevelX = 1
		PlayerLevelY = 2
		PlayerAction = 0 ;0 = standing
		PlayerLastAction = 0
		PlayerDir = 0 ;0 = right, 1 = left
		PlayerFrame# = 0
		curFrame = 0
		PlayerHurt = False
		PlayerLastCheckPoint\LevelX = 1
		PlayerLastCheckPoint\LevelY = 2
		PlayerLastCheckPoint\x = 70
		PlayerPauseTime = 0
		PlayerJustJumped = False
		PlayerJustHoppedOnLadder = False
		PlayerJustHoppedOffLadder = False
		Score = 4000
		GoldBars = 0
		Music = 0
		SubLevel = False
		HalfUpdate = -1
		FourthUpdate = 0
		batY = 11
		batDir = 1
		birdY = 11
		birdDir = 1
		eelY = 11
		eelDir = 1
		frogX = 128
		frogY = 15
		frogDir = 1
		frogState = 0
		frogInc = 0
		eelState = 0
		MouseStopped = False
		MouseXPos = 64
		MouseCollide = False
		MouseLevelX = 0
		MouseAnim = 0
		BalloonBoardX = 0
		BalloonBoardY = 0
		Balloon2BoardX = 0
		Balloon2BoardY = 0
		curWave = -1
		WaveInc = 1
		LogoY = 9
		For curAnimal.Animal = Each Animal
			Delete curAnimal 
		Next
		StopChannel chnlMusic
	EndIf
	If KeyDown(1) Then Goto TheEnd
	If Not GameAlmostRunning
		;animate logo
		LogoPause = LogoPause + 1
		If LogoPause > 90
			LogoScroll = LogoScroll + 1
			If LogoScroll > 8
				LogoScroll = 0
				LogoY = LogoY + 1
				If LogoY > 9 Then LogoY = 9
			EndIf
		EndIf
		If LogoPause > 260
			LogoPause = 0
			LogoY = 0
			LogoScroll = 0
		EndIf
		;reset message
		If KeyDown(200) Or KeyDown(203) Or KeyDown(205) Or KeyDown(208) Or KeyDown(57)
			DrawImage Reset, 188, 186
		EndIf
	EndIf
EndIf

;Draw Logo
DrawImageRect Logo, 32, 186, 0, LogoY, 100, 7

;testing drawing functions
;Color 255, 255, 255
;Text 0, 0, PlayerJustHoppedOnLadder

If GameAlmostRunning
	If KeyDown(200) Or KeyDown(203) Or KeyDown(205) Or KeyDown(208) Or KeyDown(57)
		GameRunning = True
		GameAlmostRunning = False
		chnlMusic = PlaySound(mscHappy)
		Music = 2
	EndIf
EndIf

;framerate
If FrameRate
	timeelapsed = MilliSecs()-curTime
	;If timeelapsed > 0 Then timeelapsed = 1000/timeelapsed
	Text 10, 15, timeelapsed
	;curTime=MilliSecs()
EndIf


Flip

Goto GameLoop

.TheEnd
FreeTimer frametimer

Goto TitleScreen
End



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   FUNCTIONS   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Function CheckForHole(x, lx, ly)
	leveltype = board(lx, ly)\graphic
	If leveltype > 6 And leveltype <> 8 And leveltype <> 11 And leveltype <> 13
		RuntimeError("Pitfall II - Error: You shouldn't be able to get there.  *Info: "+lx+" "+ly+" "+leveltype)
	EndIf
	level = -1
	holes = 0
	If GameLevel = 1
		Restore LevelData
	Else
		Restore Level2Data
	EndIf
	While level <> leveltype
	Read level
	Read holes
	If holes > 0
		Read hole1a
		Read hole1b
		If holes = 3
			Read hole2a
			Read hole2b
			Read hole3a
			Read hole3b
		EndIf
	EndIf
	Wend
	If holes > 0
		If x > hole1a And x < hole1b
			Return True ;hole
		EndIf
		If holes = 3
			If x > hole2a And x < hole2b
				Return True ;hole
			EndIf
			If x > hole3a And x < hole3b
				Return True; hole
			EndIf
		EndIf
	Else
		Return False ; no hole
	EndIf
End Function

Function LoadLevelData(level)
	;fill level data
	If level = 2
		l$ = "2"
	Else
		l$ = ""
	EndIf
	; Open the file to Read
	filein = ReadFile("level"+l$+"data\leveldata")
	If filein = 0 Then RuntimeError("Pitfall II - Error: Can't read level data. Reinstall program.")
	For xiter = 1 To 8
		For yiter = 1 To 30
			; Read the data from the file
			Board.Level(xiter, yiter) = New Level
			Board(xiter, yiter)\graphic = ReadByte( filein )
			Board(xiter, yiter)\water = ReadByte( filein )
			Board(xiter, yiter)\left_blocked = ReadByte( filein )
			Board(xiter, yiter)\right_blocked = ReadByte( filein )
			Board(xiter, yiter)\animal = ReadByte( filein )
			Board(xiter, yiter)\ladder = ReadByte( filein )
			Board(xiter, yiter)\checkpoint = ReadByte( filein )
			Board(xiter, yiter)\background_image = ReadByte( filein )
			Board(xiter, yiter)\treasure = ReadByte( filein )
			If Board(xiter, yiter)\treasure > 2
				If Board(xiter, yiter)\treasure < 6
					NumTreasures = NumTreasures + 1
				EndIf
			EndIf
		Next
	Next
	; Close the file once reading is finished
	CloseFile( filein )
	Return NumTreasures
End Function


Function UnlockMoreLostCaverns()
	;Create Unlocked.txt file
	fileout = WriteFile("Unlocked.txt")
	WriteLine(fileout, "Congratulations on your successful rescue of Rhonda, Quickclaw, and the Raj Diamond!")
	WriteLine(fileout, "")
	WriteLine(fileout, "")
	WriteLine(fileout, "New Objectives:")
	WriteLine(fileout, "  You are once again Pitfall Harry (with a slightly upgraded image!) and you are on a journey")
	WriteLine(fileout, "    once again to rescue your niece Rhonda, your cat Quickclaw, and the Raj Diamond from the")
	WriteLine(fileout, "    new underground caverns where they are now dreadfully lost again.")
	WriteLine(fileout, "  To win, you must find Rhonda, Quickclaw, and the Raj Diamond.")
	WriteLine(fileout, "  There are also now -51- gold bars and another stone-aged rat that can be collected for")
	WriteLine(fileout, "    additional points.")
	WriteLine(fileout, "  Points awarded for collection of each item are the same as the original.")
	WriteLine(fileout, "  4000 points are once again given in advance at the beginning of the game.")
	WriteLine(fileout, "")
	WriteLine(fileout, "  This time a total of 314,000 points is achievable (And well earned!).")
	WriteLine(fileout, "")
	CloseFile(fileout)
	MemBank = CreateBank(50000)
	Offset = 0
	file = 11
	
	;Read in file lengths
	filein = ReadFile("leveldata\extradata2")
	If filein = 0 Then RuntimeError("Pitfall II - Error: Can't read extradata2. Reinstall program.")
	For iter = 1 To file
		;read the data from the file
		FileLength(iter) = ReadInt( filein )
	Next
	;Close the file once reading is finished
	CloseFile( filein )
	
	For iter = 1 To file
		Offset = Offset + FileLength(iter)
	Next
	
	;load in file data
	filein = ReadFile("leveldata\extradata")
	If filein = 0 Then RuntimeError("Pitfall II - Error: Can't read extradata. Reinstall program.")
	For iter = 0 To Offset
		; read the data from the file
		PokeByte(MemBank, iter, ReadByte( filein ))
	Next
	;Close the file once reading is finished
	CloseFile( filein )
	
	;Write files to disk
	CreateDir("level2data")
	fileout = WriteFile("level2data\leveldata")
	If fileout = 0 Then RuntimeError("Pitfall II - Error: Can't write leveldata. Reinstall program.")
	For iter = 0 To FileLength(1)
		WriteByte(fileout, PeekByte(MemBank, iter))
	Next
	;Close the file once writing is finished
	CloseFile( fileout )
	LastOffset = FileLength(1)
	
	Restore Filenames
	
	CreateDir("level2graphics")
	For iter = 1 To 10
		Read filename$
		;Create the file to Write
		fileout = WriteFile("level2graphics\"+filename$)
		If fileout = 0 Then RuntimeError("Pitfall II - Error: Can't write levelgraphics. Reinstall program.")
		For loop = LastOffset To LastOffset + FileLength(iter+1)
			WriteByte(fileout, PeekByte(MemBank, loop))
		Next
		;Close the file once writing is finished
		CloseFile( fileout )
		LastOffset = LastOffset + FileLength(iter+1)
	Next
	FreeBank(MemBank)
End Function

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   DATA   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

.LevelData
Data 0, 1, 0, 320
Data 1, 0
Data 2, 1, 136, 152
Data 3, 1, 52, 320
Data 4, 1, 0, 242
Data 5, 3, 88, 112, 136, 152, 176, 200
Data 6, 0
Data 7, 0
Data 8, 1, 0, 152
Data 9, 0
Data 10, 0
Data 11, 1, 136, 320

.Level2Data
Data 0, 1, 0, 320
Data 1, 0
Data 2, 1, 136, 152
Data 3, 1, 52, 320
Data 4, 1, 0, 242
Data 5, 3, 88, 112, 136, 152, 176, 200
Data 6, 0
Data 7, 0
Data 8, 1, 0, 152
Data 9, 0
Data 10, 0
Data 11, 1, 136, 320
Data 13, 3, 0, 112, 136, 152, 176, 320

.Filenames
Data "ladder", "playb", "player", "playl", "playlbo", "plays", "wf2", "wfb", "wfm", "wft"



;end of file


2792 lines of code

**Note again that there is a gap in the code above between this codebox and the one above it.


VIP3R2004
Nice work :)


DNielsen2004
@WolRon
You mentioned in another post that you could - if asked - post the ORIGINAL hacked graphics. I would LOVE to

1: see the hacked graphics
2: know more about HOW you hacked the original Atari 2600 version, since I am myself looking for a TRUE River Raid (also 2600) to rip and replicate as a retro remake.


WolRon2004
You mentioned in another post that you could - if asked - post the ORIGINAL hacked graphics.

No, I did not. In my other post I stated that if anyone would like to see the MAPS of the original cavern and the cavern that I created, that I would show them to them. "I" created the map images using the level editor I wrote.

Also, all the graphics in the game were hand-drawn by me from screenshots of the original. I did not rip them from anywhere.


danjo2004
nice job wolron.
@olsen. come on. atari gfx isnt that hard to replicate, you're just being lazy :P


DNielsen2004
@DanJo
To me - everything related to graphics is hard. very hard.


aab2004
True: especially collission and gravity.

Very Nice of You to Share.

I know someone who would love to see this game ('s code: 4 educational purposes)


EOF2004
Thankyou. How long did it take you to get the right 'feel' of the gameplay?


WolRon2004
It just happened all by itself, being that I copied the original...

But I did put a LOT of effort into making it as true to the original as I could (besides my scrolling name :).


Code Archives Forum