|
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)
|