The Spooky Swamp Prototype

Various "source" files can be found in the "prototype" folder, as well as a zipped .app for osX. The prototype should run nicely on any G4, G5 or intel Macintosh.

The .Zip is HERE.

The "Working Files" for Spooky Swamp are in the SPOOKYSWAMPsrc.zip - but you'd need a copy of PGF1.1 to load these files, I can provide that if necessary though as the license liberally lets you copy it in some circumstances, and I know it's creator wouldn't mind for this brief. :D


About The Engine & Why I used it on this project
PGF (power game factory) is a game engine and set of tools i've been involved with as a tester and admin on it's  forums. I'm good friends with the programmer (Jesse Simko) and my input has helped shape some parts of the engine. Before it's name change to PGF it was called "The Green Machine" - at that point it had no design interface whatsoever and to make a game you had to create and change a tonne of textfiles. Eek.

You can make all types of platform game in it, though it's most ideally suited for games like Metal Slug (though oddly nobody has made a metal slug-like game in it.. Don't ask me why..) Everything is heavily changeable, so you ccan make floaty cave-story type mechanics or stricker, less slippery old school ones. It has physics, particles and graphics acceleration. People underestimate what it can do,

To demonstrate the variables that dictate player-set behaviour, slidiness, jumping speed and so-on, this is the text file it stores player parameters in:

0=aimDownFacingLeftXOffsetstanding
31=aimDownFacingLeftYOffSetstanding
68=aimDownFacingRightXOffsetstanding
31=aimDownFacingRightYOffsetstanding
0=aimDownLeftXOffsetstanding
52=aimDownLeftYOffsetstanding
56=aimDownRightXOffsetstanding
54=aimDownRightYOffsetstanding
1=aimLeftXOffsetstanding
38=aimLeftYOffsetstanding
71=aimRightXOffsetstanding
33=aimRightYOffsetstanding
-4=aimUpLeftXOffsetstanding
2=aimUpLeftYOffsetstanding
68=aimUpRightXOffsetstanding
3=aimUpRightYOffsetstanding
2=aimUpFacingLeftXOffsetstanding
-1=aimUpFacingLeftYOffsetstanding
44=aimUpFacingRightXOffsetstanding
-3=aimUpFacingRightYOffsetstanding
25=aimDownFacingLeftXOffsetShellCasingstanding
27=aimDownFacingLeftYOffsetShellCasingstanding
41=aimDownFacingRightXOffsetShellCasingstanding
27=aimDownFacingRightYOffsetShellCasingstanding
26=aimDownLeftXOffsetShellCasingstanding
28=aimDownLeftYOffsetShellCasingstanding
31=aimDownRightXOffsetShellCasingstanding
31=aimDownRightYOffsetShellCasingstanding
15=aimLeftXOffsetShellCasingstanding
38=aimLeftYOffsetShellCasingstanding
35=aimRightXOffsetShellCasingstanding
29=aimRightYOffsetShellCasingstanding
23=aimUpLeftXOffsetShellCasingstanding
22=aimUpLeftYOffsetShellCasingstanding
40=aimUpRightXOffsetShellCasingstanding
23=aimUpRightYOffsetShellCasingstanding
16=aimUpFacingLeftXOffsetShellCasingstanding
28=aimUpFacingLeftYOffsetShellCasingstanding
30=aimUpFacingRightXOffsetShellCasingstanding
29=aimUpFacingRightYOffsetShellCasingstanding
-2=aimDownLeftXOffsetwalking
55=aimDownLeftYOffsetwalking
69=aimDownRightXOffsetwalking
54=aimDownRightYOffsetwalking
1=aimLeftXOffsetwalking
39=aimLeftYOffsetwalking
86=aimRightXOffsetwalking
35=aimRightYOffsetwalking
-1=aimUpLeftXOffsetwalking
3=aimUpLeftYOffsetwalking
79=aimUpRightXOffsetwalking
1=aimUpRightYOffsetwalking
23=aimDownLeftXOffsetShellCasingwalking
33=aimDownLeftYOffsetShellCasingwalking
47=aimDownRightXOffsetShellCasingwalking
32=aimDownRightYOffsetShellCasingwalking
20=aimLeftXOffsetShellCasingwalking
38=aimLeftYOffsetShellCasingwalking
56=aimRightXOffsetShellCasingwalking
31=aimRightYOffsetShellCasingwalking
25=aimUpLeftXOffsetShellCasingwalking
22=aimUpLeftYOffsetShellCasingwalking
56=aimUpRightXOffsetShellCasingwalking
20=aimUpRightYOffsetShellCasingwalking
24=aimDownFacingLeftXOffsetJumping
64=aimDownFacingLeftYOffSetJumping
24=aimDownFacingRightXOffsetJumping
63=aimDownFacingRightYOffsetJumping
-2=aimDownLeftXOffsetJumping
54=aimDownLeftYOffsetJumping
52=aimDownRightXOffsetJumping
51=aimDownRightYOffsetJumping
1=aimLeftXOffsetJumping
43=aimLeftYOffsetJumping
68=aimRightXOffsetJumping
32=aimRightYOffsetJumping
0=aimUpLeftXOffsetJumping
4=aimUpLeftYOffsetJumping
62=aimUpRightXOffsetJumping
3=aimUpRightYOffsetJumping
8=aimUpFacingLeftXOffsetJumping
-3=aimUpFacingLeftYOffsetJumping
39=aimUpFacingRightXOffsetJumping
-2=aimUpFacingRightYOffsetJumping
28=aimDownFacingLeftXOffsetShellCasingJumping
31=aimDownFacingLeftYOffsetShellCasingJumping
18=aimDownFacingRightXOffsetShellCasingJumping
30=aimDownFacingRightYOffsetShellCasingJumping
19=aimDownLeftXOffsetShellCasingJumping
33=aimDownLeftYOffsetShellCasingJumping
28=aimDownRightXOffsetShellCasingJumping
31=aimDownRightYOffsetShellCasingJumping
26=aimLeftXOffsetShellCasingJumping
42=aimLeftYOffsetShellCasingJumping
38=aimRightXOffsetShellCasingJumping
30=aimRightYOffsetShellCasingJumping
23=aimUpLeftXOffsetShellCasingJumping
23=aimUpLeftYOffsetShellCasingJumping
36=aimUpRightXOffsetShellCasingJumping
24=aimUpRightYOffsetShellCasingJumping
24=aimUpFacingLeftXOffsetShellCasingJumping
29=aimUpFacingLeftYOffsetShellCasingJumping
25=aimUpFacingRightXOffsetShellCasingJumping
33=aimUpFacingRightYOffsetShellCasingJumping
1=rapidFireStartingFrame
1=noAttackSequenceWhenMoving
3=DelayBetweenFrameAdvanceStationary
4=DelayBetweenFrameAdvanceWalking
2=DelayBetweenFrameAdvanceJumping
1=DelayBetweenFrameAdvanceAttacking
5=DelayBetweenFrameAdvanceClimbing
2=DelayBetweenFrameAdvanceFallingBack
4=DelayBetweenFrameAdvanceDying
0=canAttackUpwards
0=canAttackDownwards
0=canAttackDiagonallyDownwards
0=canAttackDiagonallyUpwards
0=StoppingOffset
0=loopAnimationWhileJumping
0=loopStandingSequence
1=usesSingleFallingBackSequence
1=holdLastAttackFrameWhileInAir
1=displaysLastDescendingFrameWhenResumingJumpSequence
0=playsAcceleratingSoundWhileAirborne
1=DisplaysLastDescendingFrameWhenWalkingOffCliff
1=DisplaysLastStandingFrameAfterFalling
2=descendingFrameToStartFromWhenHitHead
8=HorizontalOverlapLimit
8=VerticalOverlapLimit
1=AttackFrameStanding
1=AttackFrameRunning
1=AttackFrameJumping
1=mirrorFramesWhenFacingRight
0=attackSequencesMayBeInterrupted

- Fortunately there IS an interface now, and you can edit these variables easily.

The Routines are interesting and can trigger loads of different things, be chained together and create complex scripting, even without having to do any "real" programming. There aren't any examples of this in SS, but there are loads in Zombie Holiday. The only routine necessary for the SS prototype is the one which creates the ghosts and mushrooms. The ghost is actually a homing projectile, while the mushrooms are "characters". here is the routine:

1=activateForceField
0=activateOrDeactivateAForceField
0=activateOrDeactivateAnimatedScenery
1=activateSceneryObject
0=allowDownwardScrolling
0=allowScrollingToTheLeft
0=allowScrollingToTheRight
0=allowUpwardScrolling
0=amountOfForce
0=amountOfForceToPlayer
0=animatedSceneryObjectToModify
1=applyForceTo
0=applyForceToCharacter
0=applyForceToPlayer
0=cameraScrollingSpeedHorizontal
0=cameraScrollingSpeedVertical
0=changeBackgroundMusicVolume
0=changeBackgroundMusicVolumeTo
0=ChangeCharacterGoals
0=ChangeCharacterGoalX1
0=ChangeCharacterGoalX2
0=ChangeCharacterGoalY1
0=ChangeCharacterGoalY2
0=changeCharacterType
Snowmobile=changeCharacterTypeTo
0=changeLightingEffectColor
0=changeLightingEffectColorToB
0=changeLightingEffectColorToG
0=changeLightingEffectColorToR
0=changeLightingEffectStrength
0=changePlayerType
Standard Player=changePlayerTypeTo
0=changeSceneryObjectDisplayOrder
0=changeTheValueOfAVariable1
0=changeTheValueOfAVariable2
0=changeTimeRemaining
0=changeTimeRemainingValue
0=changeTypesOfScrollingAllowed
0=changeWhoAForceFieldAffects
0=changeWhoCanOpenADoor
0=changeWhoCanTurnASwitchOnOrOff
0=characterFallsBackWhenDamaged
1=characterToDamage
1=characterWhoseBehaviorWillBeControlled
1=characterWhosePropertiesWillBeSet
0=closeDoor
0=connectToAnotherLevel
0=controlCharacterBehavior
1=controlCharacterBehaviorFor
0=controlPlayerBehavior
250=controlPlayerBehaviorFor
1=createCharacter
0=createContrail
0=createNewCharacterVariableLocationX
0=createNewCharacterVariableLocationY
1365=createNewCharacterXLocation
830=createNewCharacterYLocation
0=createNewContrailHorizontalSpeed
0=createNewContrailVariableLocationX
1=createNewContrailVariableLocationY
0=createNewContrailVerticalSpeed
0=createNewContrailXLocation
0=createNewContrailYLocation
0=createNewItem
0=createNewItemVariableLocationX
1=createNewItemVariableLocationY
1=createProjectile
1=createProjectileAtFixedLocation
0=createProjectileAtVariableLocation
0=damageACharacter
0=damageCharacterValue
0=deactivateForceField
0=deactivateSceneryObject
0=detonateAllEnemyProjectiles
0=detonateAllPlayerProjectiles
0=directionOfForce
0=directionOfForceToPlayer
0=divideVariableValueBy1
0=divideVariableValueBy2
0=doorCanBeOpenedByEnemy
0=doorCanBeOpenedByPlayer
0=doorToChange
0=doorToOpenOrClose
0=fadeInSound
0=fadeInSoundLength
0=fadeOutSoundBeforeStopping
0=fadeOutSoundLength
0=focusCameraOnSpecificLocation
0=focusCameraOnSpecificLocationX
0=focusCameraOnSpecificLocationY
0=forceFieldAffectsEnemies
0=forceFieldAffectsObjects
0=forceFieldAffectsPlayer
0=forceFieldToActivateOrDeactivate
0=forceFieldToChange
0=forceIncreaseSpeedBy
1=forceSetSpeedTo
0=forceToPlayerIncreaseSpeedBy
1=forceToPlayerSetSpeedTo
0=giveItemToPlayer
0=hasPrerequisite(1)
0=hasPrerequisite(2)
0=hasPrerequisite(3)
0=hasPrerequisite(4)
0=hasPrerequisite(5)
0=hideMessagePane
0=holdCameraPosition
0=holdCameraPositionFor
0=hotZoneToModify
1=increaseLightingEffectStrengthBy
0=increaseTimeBy
0=increaseVariableValueBy1
0=increaseVariableValueBy2
0=insertBlockOfSolidMaterial
0=levelToConnectTo
0=lightingEffectStrengthValue
0=lightingEffectToModify
0=makeCharacterAccelerate
0=makeCharacterAccelerateVertically
0=makeCharacterAdvancePatrol
0=makeCharacterAimDown
0=makeCharacterAimLeft
0=makeCharacterAimRight
0=makeCharacterAimUp
0=makeCharacterAttack
0=makeCharacterDecelerate
0=makeCharacterDecelerateVertically
0=makeCharacterDropItems
0=makeCharacterFaceAwayFromPlayer
0=makeCharacterFaceTowardsPlayer
0=makeCharacterJump
0=makeCharacterUnleashChildren
0=makePlayerAccelerate
0=makePlayerAccelerateVertically
0=makePlayerAimDown
0=makePlayerAimLeft
0=makePlayerAimRight
0=makePlayerAimUp
0=makePlayerAttack
0=makePlayerDecelerate
0=makePlayerDecelerateVertically
0=makePlayerJump
0=makePlayerLeaveVehicle
0=materialLocationOfBottomRightCornerX
0=materialLocationOfBottomRightCornerY
0=materialLocationOfTopLeftCornerX
0=materialLocationOfTopLeftCornerY
0=materialType
0=messagePaneToHide
0=messagePaneToShow
1=moveHotZoneByAmount
1=MoveHotZoneToFixedLocation
0=moveHotZoneToLocation
0=MoveHotZoneToVariableLocation
0=MoveHotZoneVariableX
0=MoveHotZoneVariableY
0=moveHotZoneX
0=moveHotZoneY
0=moveLightingEffect
1=moveLightingEffectByAmount
1=MoveLightingEffectToFixedLocation
0=moveLightingEffectToLocation
0=MoveLightingEffectToVariableLocation
0=MoveLightingEffectVariableX
0=MoveLightingEffectVariableY
0=moveLightingEffectX
0=moveLightingEffectY
0=moveSceneryObject
1=moveSceneryObjectByAmount
0=moveSceneryObjectToLocation
0=MoveSceneryObjectVariableX
1=MoveSceneryObjectVariableY
0=moveSceneryObjectX
0=moveSceneryObjectY
0=MoveSceneryToFixedLocation
1=MoveSceneryToVariableLocation
0=multiplyVariableValueBy1
0=multiplyVariableValueBy2
Octopus Dance=nameOfSoundToPlay
Octopus Dance=nameOfSoundToStop
0=newCharacterGoalX1
0=newCharacterGoalX2
0=newCharacterGoalY1
0=newCharacterGoalY2
0=newCharacterIsAimingLeft
0=newItemCurrentDownwardSpeed
0=newItemCurrentHorizontalSpeed
2=newItemGravitationalAcceleration
15=newItemMaxDownwardSpeed
100=newItemPointValue
-1=newItemTicksBeforeDisappearing
0=newItemValue
0=newItemXLocation
0=newItemYLocation
0=onlyApplyForceIfCharacterIsOnScreen
0=onlyCreateCharacterIfCharacterWouldBeOnScreen
0=onlyCreateContrailIfContrailWouldBeOnScreen
0=onlyCreateNewItemIfItemWouldBeOnScreen
0=onlyCreateProjectileIfProjectileWouldBeOnScreen
0=onlyDamageCharacterIfCharacterIsOnScreen
0=onlyPlaySoundIfNotAlreadyPlaying
1=openDoor
0=openOrCloseADoor
0=overrideAllOtherCharacterActions
0=overrideAllOtherPlayerActions
0=performAdditionalRoutineA
0=performAdditionalRoutineADelay
Untitled Routine=performAdditionalRoutineARoutineName
0=performAdditionalRoutineB
0=performAdditionalRoutineBDelay
Untitled Routine=performAdditionalRoutineBRoutineName
0=performAdditionalRoutineC
0=performAdditionalRoutineCDelay
Untitled Routine=performAdditionalRoutineCRoutineName
-1=performanceLimit
0=performAnimatedSceneryAction
0=PerformDifferentRoutineIfConditionsArentMet
0=performHotZoneAction
0=performLightingEffectAction
0=performMessagePaneAction
1=performProjectileAction
0=performScrollingAction
0=playBackgroundMusic
0=playSound
10=playSoundFor
0=performPrecipitationAction1
0=precipitationDensity1
0=precipitationDownwardSpeed1
0=precipitationHorizontalSpeed1
0=precipitationScrollSpeed1
1=precipitationTypes1
0=performPrecipitationAction2
0=precipitationDensity2
0=precipitationDownwardSpeed2
0=precipitationHorizontalSpeed2
0=precipitationScrollSpeed2
1=precipitationTypes2
0=performPrecipitationAction3
0=precipitationDensity3
0=precipitationDownwardSpeed3
0=precipitationHorizontalSpeed3
0=precipitationScrollSpeed3
1=precipitationTypes3
0=prerequisiteOperation(1)
0=prerequisiteOperation(2)
0=prerequisiteOperation(3)
0=prerequisiteOperation(4)
0=prerequisiteOperation(5)
0=prerequisiteVariable(1)
0=prerequisiteVariable(2)
0=prerequisiteVariable(3)
0=prerequisiteVariable(4)
0=prerequisiteVariable(5)
0=prerequisiteVariableValue(1)
0=prerequisiteVariableValue(2)
0=prerequisiteVariableValue(3)
0=prerequisiteVariableValue(4)
0=prerequisiteVariableValue(5)
1=projectileDetonatesUponHittingPlayer
0=projectileDownwardSpeed
0=projectileHorizontalSpeed
2650=projectileLocationX
800=projectileLocationY
0=projectilePropulsion
1=projectileTargetCharacter
0=projectileThrustDirection
0=projectileVariableLocationX
1=projectileVariableLocationY
0=recursionLimit
1=reduceCharactersHitPointsBy
0=reduceCharactersHitPointsTo
0=resetAllVariablesTo0
=routineToPerformIfConditionsArentMet
0=scrollCameraHorizontally
0=scrollCameraHorizontallyFor
0=scrollCameraVertically
0=scrollCameraVerticallyFor
0=setCharacterProperties
0=setGoalsForNewCharacter
0=setLightingEffectStrengthTo
1=setLightingEffectStrengthToAFixedValue
0=setLightingEffectStrengthToAVariable
0=setLightingEffectStrengthVariableToUse
0=setPlayerProperties
1=setSceneryObjectDisplayOrderTo
1=setTimeTo
1=setVariableValueTo1
1=setVariableValueTo2
0=showMessagePane
0=stopAllSounds
0=stopBackgroundMusic
0=stopExistingSoundBeforePlaying
0=stopSound
0=switchCanBeTurnedOnByEnemy
0=switchCanBeTurnedOnByPlayer
0=switchPlayerWeapon
0=switchPlayerWeaponTo
0=switchToTurnOnOrOff
0=toggleDoor
0=toggleForceField
0=toggleSceneryObject
0=toggleSwitch
0=turnASwitchOnOrOff
0=turnOffSwitch
1=turnOnSwitch
Mushroom=typeOfCharacterToCreate
1=typeOfContrailToCreate
1=typeOfItemToCreate
1=typeOfItemToGiveToPlayer
2=typeOfProjectileToCreate
1=useFixedCoordinatesToDetermineNewCharacterLocation
1=useFixedCoordinatesToDetermineNewContrailLocation
1=useFixedCoordinatesToDetermineNewItemLocation
0=useVariableCoordinatesToDetermineNewItemLocation
0=useVariableToDetermineNewCharacterLocation
0=useVariableToDetermineNewContrailLocation
0=valueOfItemToGiveToPlayer
0=VariableChangeOperation1
0=VariableChangeOperation2
0=VariableGameObject1
0=VariableGameObject2
0=variableToChange1
1=variableToChange2
0=variableValue1
0=variableValue2
0=warpCharacter
0=warpCharacterToX
0=warpCharacterToY
0=warpPlayer
0=warpPlayerToX
0=warpPlayerToY
50=zoomAmount
0=zoomCamera
1=zoomDuration
0=switchToChange
0=projectileDetonatesUponHittingCharacters
0=SetCustomRespawnLocation
0=customRespawnLocationX
0=customRespawnLocationY

You can see from all the 0s there are a lot of things that the routine ISN'T doing. XD When compiled all the text disappears and the number order is scrambled.

Anyway, yeah.. PGF suits this sort of project at a prototyping level but would be useless past that. Xcode is really the only way to go for iphone development. Flash would also have been an option and would've been more portable, but making it look right would've taken more work and I had very limited time.


 

Intro


Games

Game 1:
Spooky Swamp (Developed & Prototyped)

Game 2&3:
Big Screen &
Saloon Of Doom (ideas & scraps)