Jetpack on Facebook
JetpackHQ | Blog Home | Users | Register | Log in    


Jetpack is a classic DOS-based platform game released in 1993. This blog is a chronicle of the development of the long-awaited sequel, Jetpack 2. Please register to be notified about the progress of Jetpack 2!

Retrofit Contest – Week 4

March 6th, 2010 - filed under Input Requested, Status Updates

Working hard this week and I got a few more great submissions. I’ve done some tweaking to the tileset and there’s finally a game preview below!

Note: I’ve extended the contest to March 20th to give people more time to submit themes.

Game Preview

A level with the new tileset

New v2 – Demonstrating the faux-3D effect, tile enhancements, background, and various tiles in action

Themes

It recently occurred to me that I could swap out a few tiles and give the game a totally different look without much more work. I generate the curved & stone-wrapped tiles in code, so with only 5 tile swaps most levels can be completely rethemed:

A rough example of a castle/outdoor theme

It gives a level a whole new feel, doesn’t it?

If you want to make a theme, just redo the following 5 tiles:
background tile, ladder, brick, hard brick, stone
And optionally these 5 tiles:
steel panel, gold panel, column, vines, & fence
A few things will stay the same: gems, treasure, switches, barriers, and items.

There’s a 90×90 repeating background that will apply to the whole level. Other backgrounds are the standard 30×30 tile size and can be placed behind any other tile.

The theme could be anything: candyland, nature, castle, etc. In the editor I’ll have an option to preview different themes. This won’t be like jswitch, the theme will stay with the level. Then in the game we can group levels into missions by theme.

A candy world!

This week’s entries


Feb 27th

Some more sounds by Saga Musix

bell-life.mp3

freezer.mp3

New levels:
saga_6.zip
axem_3.zip
brienb_3.zip
robertr_2.zip
wolfgangs_1.zip


Feb 28th

New levels:
dough_1.zip
robertr_3.zip
adamd_2.zip


Mar 1st

Slow day…


Mar 2nd

Some vines from Tim K.:


Mar 3rd

A cool Flitzer from Tim K.:

New levels:
davidm_1.zip – some great ones


Mar 4th

Slow day…


Mar 5th

Some robot concepts from Eric F.:

Some new sounds from Saga Musix:

buzz2.mp3

buzz-cancel.mp3

cool.mp3

death3.mp3

death4.mp3

laser.mp3

steel.mp3

teleport5.mp3

New levels:
robertr_4.zip


See all the submissions on the Retrofit Updates page. If you have content to submit, refer to the rules on the contest page, and send your work to the business email here. If you don’t want your entries to be shown in the blog, or if you want to use an alias, just let me know in your email.

Retrofit Contest – Week 3

February 27th, 2010 - filed under Input Requested

This week the contest is slowing down, but we’ve still gotten some great graphics, songs, and sounds. We’re also starting to get some good beginner levels, keep them coming! I posted a new level 1 & 2 that I made, which are good examples.

Level Changes

I’m considering breaking the levels into groups of 10-20 (a “mission” or “zone”), and giving those groups a common theme. This may mean restyling all the levels in a certain theme like jungle or city. This is a quick change that involves automatically replacing 10 or so tiles with new custom “theme” tiles. My first goal is getting this previewable to see how well it works, and so people can contribute to the themes.

I’m going to do away with the concept of “lives”, you will have infinite lives and the extra life statues will turn into achievements. One achievement will be getting the statue for each level, another will be getting all the treasure in each level. For the new achievements system most levels will need a few changes:

  • Each level should have exactly ONE gold statue, which should be hard to get relative to the level difficulty
  • Each level should have some treasure which is trickier to get than the gems
  • All treasure in a level must be gettable – no more decorative treasure that can’t be reached

Don’t send in these changes yet, because there will probably be others coming up.

I’m keeping around 50 levels from the original Jetpack. These levels are the ones I put in the “maybe” category. Let me know if there are any in this group that you think should definitely make it to the final game.

Music Splashes

I think we could use some short 3-5 second music splashes for game events: a few for winning a level, possibly a few for dying, and 1 for during the level preview – a quiet song, little melody (maybe just percussion), so it doesn’t clash with the level music that will follow it. These types of things are pretty cheap to get online, but if anyone wants to try their hand at it, these are small enough to just be mp3.

Chosen Graphics

Here my working copy of the graphics I’ve chosen so far. All these are subject to change and tweaking!

This week’s entries


Feb 19th

More cool sounds from Saga Musix:

death2.mp3

brick.mp3


Feb 20th

Syniphas: DarkJet

And more levels:
alexw_2.zip
axem_1.zip
joes_2.zip
joec_6.zip
saga_4.zip
timb_1.zip


Feb 21st

Here’s a nice door concept by Juan G.


And some characters from Eric F.


And some levels:
juang_2.zip – perfect beginner levels!
ericf_4.zip


Feb 22nd

A jetman from Silas C.:

And another from Juan D.:

While these are cool, I’m looking for a different design for the new jetman. Either something metallic or something like this.

New levels:
jonasr_2.zip


Feb 23rd

More sounds from Saga Musix:

door.mp3

notice.mp3

monster-spawn.mp3

New levels:
brienb_2.zip
felipea_1.zip


Feb 24th

A new level 1 & 2 by me. We could use some more beginner levels after these. Try to make the learning quick & intuitive, and just a small part of the overall level: me_1.zip


Feb 25th

A work-in-progress song by Saga Musix:

Saga: Robot Hunt

A jetman from Joe C.:

New levels:
axem_2.zip
josephc_1.zip levels from the original jetpack alpha!
BTW the level “Wizard” was inspired by the game “Wizard” on the C64 – I highly recommend it.
josephc_2.zip some tutorial ideas
saga_5.zip great easy level!


Feb 26th

New levels:
robertr_1.zip


See all the submissions on the Retrofit Updates page. If you have content to submit, refer to the rules on the contest page, and send your work to the business email here. If you don’t want your entries to be shown in the blog, or if you want to use an alias, just let me know in your email.

Title Screen – Work in Progress

February 21st, 2010 - filed under Input Requested

v2, better gems!

Retrofit Contest – Week 2

February 20th, 2010 - filed under Development News, Input Requested, Status Updates

More excellent work this week, but entries are starting to slow down, so let me lay out our greatest needs:

  • A jetman!
  • Exit door
  • More music
  • New sound effect ideas

And here are some things which I have, but could use some better / more creative entries:

  • Steel ball, homer, flitzer, any enemy improvements
  • The blue/red/cyan barriers
  • Invincible cloak, stunner
  • Switches, spikes, gem in wall, column, foreground vines, steel, gold brick
  • Easy / teaching levels

Levels

It’s slow work reviewing good quality levels, and there are a lot of great ones in here so reviewing them took many hours!
I reviewed 241 levels and put 69 in the final round. These include:

3 bonus levels
7 easy
22 moderate
24 hard
13 extreme

Here are my brief notes for each designer:

adamd – Good variety and great visuals (with the limited tile palette). Favorite: d-m-ship
alexw – Some great variety and ideas in these. Favorite: artee001
benj – Magnificently tricky riddle
bens – Some fun ideas here. Favorite: beehive
bent – There are some great levels here. I like the way you use enemies to reveal secrets, like the insubstantial tiles.
brienb – These are some sadistic levels! Favorite: lotto/ohoh
ericf – Some good hard levels and clever game mechanics. Favorite: E1
jasonw – A deceptively tricky level.
joec – Some wicked hard levels, but a couple good easy ones too. Favorite: Shrine
joes – These have great playability, and a perfect progression from easy to difficult. Favorite: ventuz05
jonasr – Some really cool ideas here. Favorite: wer12
juang – These have a few cool new ideas, and are a lot of fun. Favorite: bcmissil
nickr – Good level. Could be interesting to offer an extra life for an extra trip across.
saga – Great intricate designs, but most are way too hard. Favorite: where
sebm – All crazy hard, at least for me. Favorite: switches
sn – Some very hard levels. Favorite: easy7

Learning Curve Needed

We badly need easy levels, and easy means super easy. The casual game crowd needs a very gentle introduction. I tried to do this somewhat in the original first 5 levels but it wasn’t nearly enough. My wife can’t even beat my original level 0 – it failed to be a good introduction to the game, except to experienced gamers. People were just looking around and learning about jumping when the trackbot killed them. Then they were getting fuel and learning how to fly when the trackbot killed them. As soon as they learned how to fly to avoid the trackbot, the spikes killed them. We need a much more gradual learning curve, and we need to make the harder parts of a level optional (eg, containing treasure only). Don’t assume the person playing these levels has EVER played an action game.

If you think an easy level can’t be challenging, think about how you would teach all these things in one level:

  • understanding the game goal
  • becoming comfortable with basic movement
  • sensing danger
  • jumping small gaps, then large gaps
  • flying, then flying with control, then flying level
  • learning to conserve fuel, and to monitor your fuel level
  • learning to read clues that there may be traps, and thinking before acting when there are traps
  • learning that missiles move in a predictable pattern
  • learning how smart the trackbot is
  • learning each special tile function
  • using teleporters, then being aware of and predicting enemy teleportation, then using invincibility while teleporting
  • learning what switches do, then how to use them, and enemy-triggered switches
  • learning that phasing is possible, then where and how to phase
  • learning to move quickly through purple doors, then through multiple doors
  • learning not to destroy crates you may need
  • phasing up, then phasing while jumping, then phasing while flying up, then phasing while flying level
  • learning how to use enemies to your advantage

These should be taught over 10-20 levels, with lots of fun stuff mixed in. I don’t like tutorials. The best way to teach these things it to show them in actual use, without the player being in danger.

Some examples:

* learning to move quickly through purple doors
On the first encounter with a purple door, put it on ice. The player will slide through before they know what happened.

* learning not to destroy crates you may need
Put gold above crates initially, not essential items like gems or switches.

Game Changes

Playing through all these levels has led me to some conclusions about changes that will affect gameplay. I can’t adjust difficulty by changing the monsters’ speed relative to the player because it screws up a lot of game mechanics. Maybe I’ll just leave in the game speed adjustment via +/-. How do you beat hard levels, do you find the slowdown useful?

Some of these may require tweaking your levels in the beta (don’t bother changing anything yet):

  • faint outline where barriers will be
  • smaller collision area for spikes & spear
  • no getting stuck on corners when jumping
  • jump or step close to a spear will set it off, then you can move past slowly
  • make phasing while jumping easier – only phase when at the middle of a tile
  • show a faint outline when jetman is behind bricks
  • flitzer light shows future movement
  • maybe a button which reveals hidden paths
  • placeable invincibility cloak

There will be automatic visual enhancements to levels, including:

  • replace repeating columns with a solid column
  • replace stacked ice stone with icy stone wall
  • automatic edge finding + enhancement
  • sag physical floor of sludge pool

And I want to add these options when saving a level:

  • frequency of bonus items
  • longer description
  • music selection
  • par completion time

This week’s entries


Feb 12th

A full tileset replacement from Joseph S.:

Love that extra life! Anyone want to make a character out of that shape?


Feb 13th

We have some sound effects! These are by Saga Musix:

close.mp3

gem.mp3

gem2.mp3

open.mp3

select.mp3

teleport.mp3

teleport2.mp3

And several more levels. Ben J. has a great puzzle – maybe too hard!
benj_1.zip
bens_1.zip
joec_3.zip
alexw_1.zip


Feb 14th

Enjoy your VD everyone!
Today brings another sweet tune from Coda:

Coda: JetSkillz

Eric F. sends in a trophy graphic:

And here’s another batch of levels:
jasonw_1.zip
joec_4.zip
juang_1.zip


Feb 15th

Today Saga Musix offers more sounds:

death1.mp3

phaser.mp3

stuck.mp3

stuck2.mp3

teleport3.mp3

teleport4.mp3

weird_jewel.mp3

And we have some more great levels:
adamd_1.zip
joec_5.zip


Feb 16th

Here are the great graphics previously contributed by Tim K.:

And some creative new designs by Eric F.:

New level submissions:
brienb_1.zip
arthurm_2.zip


Feb 17th & 18th

Slow days…

See all the submissions on the Retrofit Updates page. If you have content to submit, refer to the rules on the contest page, and send your work to the business email here. If you don’t want your entries to be shown in the blog, or if you want to use an alias, just let me know in your email.

Retrofit Contest – Week 1

February 13th, 2010 - filed under Development News, Input Requested, Status Updates


We are getting some very cool contributions via the contest, thanks to everyone who is participating! If you have content to submit, refer to the rules on the contest page, and send your work to the business email here. If you don’t want your entries to be shown in the blog, or if you want to use an alias, just let me know in your email. The odds of picking up some cash are still good, and as always, if even a single sprite you submit is used, you’ll get a free copy of Jetpack.

Music

Our first week has seen some awesome music. My favorite is from Saga Musix

I always thought trance or an ambient techno would be a good fit for Jetpack. We need music that doesn’t overpower the gameplay, for 3 different level types/moods: light adventure, mysterious puzzle, and challenging action. I’ll let the level authors choose which song should go with their level after the levels & music are chosen.

Music should be about 4 minutes long to avoid restarting during a typical level. If you have a short song, you can just add some looping to your patterns to stretch it out. I need .MOD format music with a max of 10 channels for performance reasons. I’m using Flod for mod playback, it supports 3 or 5 octaves and the following effects:

0×00:ARPEGGIO
0×01:PORTAMENTO_UP
0×02:PORTAMENTO_DOWN
0×03:TONE_PORTAMENTO
0×04:VIBRATO
0×05:TONE_PORTA_VOLUME_SLIDE
0×06:VIBRATO_VOLUME_SLIDE
0×07:TREMOLO
0×08:PANNING
0×09:SAMPLE_OFFSET
0×0A:VOLUME_SLIDE
0×0B:POSITION_JUMP
0×0C:SET_VOLUME
0×0D:PATTERN_BREAK
0×0E:EX_EFFECT
0×0F:SET_SPEED
0xE0:SET_FILTER
0xE1:FINE_SLIDE_UP
0xE2:FINE_SLIDE_DOWN
0xE3:GLISSANDO_CONTROL
0xE4:VIBRATO_CONTROL
0xE5:SET_FINETUNE
0xE6:PATTERN_LOOP
0xE7:TREMOLO_CONTROL
0xE8:KARPLUS_STRONG
0xE9:RETRIG_NOTE
0xEA:FINE_VOLUME_UP
0xEB:FINE_VOLUME_DOWN
0xEC:NOTE_CUT
0xED:NOTE_DELAY
0xEE:PATTERN_DELAY
0xEF:INVERT_LOOP

Sound Effects

There have been no sound effects entries yet!

Graphics

I’ve also gotten some great graphic entries. Eric F. has made some great contributions, including an interesting take on the bat.

For the graphics, leave the backgrounds transparent, and feel free to send in a larger size, or add frames if you think they are needed – I will do any necessary conversions. I’m also open to any new ideas you might have.

Because animating takes a lot of work, I’ve decided to choose certain characters in the next couple weeks. Once a character is chosen, no further designs will be accepted, so the creator can finish the animation without worrying about his/her time being wasted. This is especially important for the main Jetman, since he has several frames.

Levels

There have been tons of levels submitted that I haven’t had time to review yet. From what I’ve seen, I think we have a lot of hard levels, and could probably use some more on the clever puzzle side, and some on the easy side. We want to appeal mainly to casual gamers – for hardcore gamers there will be a difficulty level that speeds up the enemies. It occurred to me that it may help to know my favorites, so here they are:

  • 70: Work Those Leg Muscles – my all time favorite, varied tests of skill
  • 40: The Gauntlet – like an obstacle course, a feeling that you’re being tested
  • 30: Mission Possible – a feeling of a mission in an exotic location
  • 04: The Complex – a feeling of escaping, or intruding into a fortification
  • 12: Fuel Shortage – not sure why I like this one, maybe just the simplicity
  • 50: Montezuma’s Revenge – has a jungle feeling
  • 90: The Volcano – original use of devices, you have to find a way to penetrate the structure

Analyzing these selections, they have a few things in common: There’s a feeling of adventure within the level, each level has distinct sections, you can easily form your own story behind the level, and you have a feeling of outsmarting & conquering something big at the end. They are all tricky without being too frustrating – I’d say a couple of these are close to the limit of how hard a level should be in a casual game.

More Features

Time is tight on this project, and I haven’t planned any gameplay enhancements, but it would be nice to have a couple of new things. There may or may not make it into the final release, but here are a few I’m considering:

  • multi-tile scenic objects on the background wall – brickwork, shackles, tapestries, windows, etc
  • a new enemy
  • a new gameplay/puzzle element
  • some physics effects

All the public entries this week are below.


Feb 5th

Here’s our first submission, some sweet tunes from coda:

Coda: Rad

Coda: Puzzling

Coda: Phenomenon

A level by Nick R.: nickr_1.zip

Feb 6th

A stomping track by Saga Musix:

Saga: song1

Some hard levels by Joe C.: joec_1.zip

Feb 7th

A bassy tune by Travis R.:

Travis R.: Bass

More hard levels by Saga Musix: saga_1.zip
Some more levels by Joe C.: joec_2.zip

Feb 8th

More levels by Saga Musix: saga_2.zip
Levels by Ben T.: bent_1.zip
Levels by Eric F.: ericf_1.zip

Feb 9th

Some simple graphics from Eric F.:

More levels by Eric F.: ericf_2.zip
A cool teleporter concept from Eric F.:

Feb 10th

Lots of contributions today!
Another level by Saga Musix: saga_3.zip
A pack of levels by Sebastian M.: sebm_1.zip
A pack of levels by Joe S.: joes_1.zip

A tight robot by Eric F.:

Some new bat graphics by Henry F.:

Feb 11th

Another song by Travis R.:

Travis R.: Icy

New graphics from Eric F.:




A few new tiles from Jason W.:

And a bunch of levels! If you find any favorites when playing these, point them out to me and I’ll give them extra attention.
ericf_3.zip
arthurm_1.zip
jonasr_1.zip
sn_easy_1.zip
sn_hard_1.zip

See all the submissions on the Retrofit Updates page.

The Jetpack Retrofit Contest!

February 9th, 2010 - filed under Development News, Input Requested


I’ve set a goal to release the new web playable Jetpack in March.  To get all the programming done in the next month will take a lot of work, not to mention the graphics, music, sounds, and extra levels.  If you’ve been following this blog, you know this is an indie release with a shoestring budget, and I can’t afford to hire an artist.  So instead, I’ve decided to blow it all on a contest!  This will give everyone in the Jetpack fan community a chance to contribute to the new Jetpack, and will help to reward some of the great work that’s being donated.

Calling All Artists, Musicians, SFX Wizards, and Level Designers

I already have a few volunteer Jetpack fans doing some great work, but we need a lot more. You can contribute any of the following resources for the final release:

  • Graphics: Use this template and replace the old blocky graphics with new ones that are closer to the style of modern flash games. Just leave the backgrounds transparent.
  • Sound Effects:  Record your own replacements for the sound effects here. There’s no remastering these, since my masters are 8 bit 8000hz mono VOC. I need 256bit 44khz stereo mp3. Feel no obligation to stay close to the originals!
  • Music:   I need MOD format music, 50k-150k per song, in styles to suit different types of levels. You must be the copyright holder. I recommend MilkyTracker or ModPlug Tracker. Note the exact format we can support is still up in the air.
  • Levels:  I’d like to put a lot of new levels in the release.  Send me your creations that you consider to be the cream of the crop. Currently the only way to create levels is with the DOS version of Jetpack

New creations are great, and if you have any past work to which you still hold the copyright, that will work too. I’ll use the best parts out of what I receive, as long as it meets my quality standards.

For more details on what’s needed, see the post Retrofit Contest – Week 1.

Prizes

A total of $200 will go to the 6 people who create the most content chosen for use in Jetpack.

  • The top 2 will receive $50.00
  • 4 runners-up will receive $25.00

In addition EVERYONE who submits work used in Jetpack will receive:

  • A FREE premium/deluxe/platinum edition of Jetpack
  • Your name in the credits of the game

Get Started!

The contest ends on March 20th. Send in your creations as often as you like, the sooner the better. With your permission, I’ll place your entries in a members-only section of the blog for members to vote & comment on. Until I get a submission form set up, you can submit your work to the business email here.

Also, please help spread the word about this contest to any gaming groups or forums you’re on!

See all the latest submissions on the contest updates page!

Here’s a sample: song1 by Saga Musix

Rules

* The “Content” refers to any submitted work, data, or content, or any number of parts of such Content.
* You must be the copyright holder of the submitted Content, with the ability to transfer copyright ownership of the Content.
* By sending Content to Adept Software, you grant Adept Software the unlimited royalty-free license to use, modify, publish, and sell the Content as part of a game.
* While votes may be encouraged from users, Adept Software will be the sole judge of the winners of the contest.
* Winners are solely responsible for all taxes and/or fees that may be incurred.
* Adept Software reserves the right to alter the rules of this contest at any time.

BY SUBMITTING AN ENTRY, YOU WARRANT AND REPRESENT THAT IT: (A) IS YOUR OWN ORIGINAL WORK, (B) DOES NOT CONTAIN, INCORPORATE OR REFERENCE ANYTHING THAT IS OWNED BY ANY THIRD PARTY OR ENTITY OR WOULD REQUIRE THE CONSENT OF ANY THIRD PARTY OR ENTITY IN ANY JURISDICTION, (C) DOES NOT INFRINGE UPON THE COPYRIGHTS, TRADEMARKS, RIGHTS OF PRIVACY, PUBLICITY OR OTHER INTELLECTUAL PROPERTY OR OTHER RIGHTS OF ANY PERSON OR ENTITY, AND (D) THAT PUBLICATION OF THE WORK WILL NOT INFRINGE ON THE RIGHTS OF ANY THIRD PARTY. ANY SUCH ENTRANT WILL INDEMNIFY AND HOLD HARMLESS, SPONSOR FROM ANY CLAIMS TO THE CONTRARY. Contest void where prohibited or restricted by law and subject to all applicable federal, state, local and municipal laws and regulations.

Good News, Everyone!

January 31st, 2010 - filed under Development News, Status Updates

(apologies to Hubert J. Farnsworth)

We’re shifting gears!

Instead of just releasing a small retro port as a milestone on the way to Jetpack 2, I suddenly realized with so much work done, taking a bit more work I could make a full game release out of it. Announcing the March 2010 release of a brand new & enhanced, web playable Jetpack!

Jetpack Logo

From the press release:

Jetpack is a classic game from the MSDOS era (1993). Jetpack was the #1 top seller for its publisher out of 70 titles, and since its re-release as freeware in 1995 it has been downloaded over 1 million times from AdeptSoftware.com. Many people have fond memories of the family-friendly brand. The old DOS version of Jetpack continues to receive 2000+ downloads per month from our site, despite requiring DOSBox to run in new versions of Windows. The re-release of Jetpack to the web platform will add high res graphics, new levels, remastered sounds, realistic physics, and a pixelated “retro mode”, as well as a level editor integrated into the level repository at JetpackHQ.com.

Adept Software was founded in 1997 and incorporated in 2004. Past projects range from development applications (PLC, Nautilus) to dating & social networking services (CyberSoulmate, NetRelate, ConnectMate). Our current focus is on web playable video games, specifically reviving classic retro games.

Jetpack Level Intro

 
 
The title of this game will just be “Jetpack”, like the original. As for Jetpack 2, the plan is for a release near the end of this year.   I’m pulling the retro mode out of Jetpack 2 – it will only exist in Jetpack 1.  The gameplay of Jetpack 2 will be significantly different, so you’ll want to play them both.
 
 
It’s great to be working toward a goal that’s so close! We’ll be staying true to the original gameplay, but with your help there will be several enhancements:

  • New high res graphics & sound effects
  • Music!
  • New levels!
  • Difficulty levels. Finally my mom will be able to play.
  • Improvements to controls and physics
  • Shiny new info panels & end level stats
  • The author & background story for each original level, including the official hintbook text
  • Web playable, embeddable, and downloadable versions
  • Retro mode with the original, old school graphics and sounds

I say “with your help”, because I’m going to need help creating new graphics, music, sounds, and levels. More on that coming soon.

Adam

Control Me

January 18th, 2010 - filed under Input Requested, Programming, Status Updates, Tech Demos

In the good old days of Jetpack 1, things were much simpler. Input from the keyboard or joystick was translated directly into action.

It was along the lines of:

  • if(key[right arrow]) speedx += 10;
  • sprite.posx += speedx;

Sometimes I miss the old days… The new path from input to action now looks like:

  • set up key bindings from default or configuration data
  • for each human player, translate input into commands based on bindings table; “right arrow” becomes “move right”
  • send commands to each player’s controlled entity
  • each entity processes commands through its state machine(s); if we’re on the ground, “move right” becomes “run right”
  • active states run actions – in this case, the “run right” state applies horizontal force to the entity’s physical body
  • the graphical representation of the physical body is updated

The new process is certainly more powerful, but requires somewhere around 1000x more effort to write. Below lies the implementation of the above process, the control tech demo. You can use the arrows to control all the various entities, and [square backets] or the mouse to switch entities. Your entity’s active state machines are displayed in the debug line at the bottom.

One of the nice things about this newfangled control system is that it meshes very well with the AI, which only needs to supply a command list to an entity, and not worry about the implementation details. You can see this in action when you launch a guided missile – it will follow the mouse cursor using a generic AI “chase” algorithm. This release also incorporates various other enhancements, including the launcher from a previous post.

Jetpack 2 Engine Status

I meant to have this demo out a month ago, but I opened up the Pandora’s Box of AS3 code optimization and fell in. This had to be done at some point, so I’m glad its mostly out of the way. On the plus side, I found several optimizations that doubled the frame rate of the game engine – there will be a big post on this later. The engine is pretty close to basic playability now, and I’ll be releasing a special retro version of Jetpack in March.

Personal Stuff

My gallbladder surgery was successful, but I’m only feeling about 25% better. I think it was worth it, but it looks like that wasn’t the cure-all I was hoping for. Thanks to all the well-wishers!

Progress Report

December 2nd, 2009 - filed under Status Updates

Very shortly I’ll be releasing the next tech demo, on controlling entities with state machines. Before I wrap that up, here’s an update on the progress since the last demo:

What’s Done

  • faux-3D depth: What a headache. I spent days banging my head against different methods of faux-3D depth sorting in 2D, until I finally realized the problem: it’s impossible. Depth in 3D is not sequential, and approximating it cannot be done perfectly using a back-to-front rendering system without some big hacks. So I adjusted the tiles to be slightly less 3D, and I think it’s just as good with no sacrifice in speed.
  • control: input bindings, command queues, state machines, actions
  • animated effects: “tween” style
  • created entities: ball, spring, missile, retro jetman

What’s To Come

I had hoped to get pre-alpha relase 1 done by December 31st, but my work needs me for extra time this month. When its done, this first official release should be a roughly playable “retro-mode” of a few levels, using the original graphics. I also have gall bladder surgery scheduled in early January. Hopefully that will cure or at least help with my chronic fatigue.

Remaining tasks for the pre-alpha:

  • basic sound effects
  • basic menus
  • retro tile behavior: ladders, gems, treasure, teleporters, conveyor belts
  • retro creature behavior: jetman, ball, spring, missile, homer, bat, trackbot, flitzer, spikes

Using a Launcher SWF

November 17th, 2009 - filed under Programming

Since this blog could potentially have many SWF examples on a single page, I have to consider effect of having them load and run all at once, both on the browser and on my bandwidth.  Users will not always want to see every SWF, so ideally a “click to start” intro would precede the loading of each example.

I tried this with just an image: when it was clicked, it would hide itself and embed the SWF where the image had been. Unfortunately, the SWF was not focused and would have to be clicked again, and Firefox has a flaw that does not always allow javascript to focus a SWF :( . Therefore the nice and simple image idea had to give way to a whole separate SWF as a launcher for the examples. The launcher is always running, but it’s small and the frame rate is low and it doesn’t do too much. Once the launcher is clicked it loads the example SWF and bumps up the frame rate to the proper level.  Of course, since this is Actionscript, what takes a sentence to write took 2 days to implement.

This is a form of preloader, and I’ve gotten confused a few times when thinking about this, so I’ll document it here.  It also helped me to refer back to my post on preloaders.

preloader via separate swf

  • displays “click to start” and waits – this can be bypassed via an argument to the swf
  • loads the main swf while updating progress
  • sets the new framerate, activates the main swf, and goes away

preloader embedded in main swf

  • the preloader is on frame 1 of the timeline, and begins to execute while the rest of the timeline loads
  • large assets are embedded in later frames
  • the preloader passes control to the main program once the swf fully loads

For Jetpack, I’m going to attempt a combination of the 2 methods, so the user experience will be as follows:

  • The game window will instantly show loading progress (preloader swf)
  • The preloader will fade away, revealing a Jetpack level in demo playback (main swf preloader)
  • While the demo game runs, a status bar will show progress as the rest of the assets (mp3 music) load
    (At this point, an in-game ad could be shown, but the income from those is not impressive and I’d rather not clutter up the game.)
  • When loading is complete, the main menu will fade into view

There are some other advantages to using a launcher swf that I can think of:

  • When users embed the launcher swf on their own websites, it will always load the latest version of Jetpack from JetpackHQ.
  • I’ll have full stats on who is playing and where.
  • Security against game reskinning is improved, by having the launcher and the main swf validate eachother.

Getting the launcher just right took some struggling with Actionscript, but the result works great.  It’s only 2k, and can serve just about any swf file (on the same server).  I was able to find a way to read the target framerate from the loaded swf and set that before launching it.  You can also read the width & height, but I know no way of resizing the SWF at runtime without using javascript.  I’ve attached the source code to this project at the bottom of this post.  Here’s a sample:

function Startup()
{
    // ARGS - launch='', now=0/1
    var args = stage.loaderInfo.parameters;
    if(args.launch!=undefined) launch_swf_path = args.launch;
    if(args.now!=undefined) wait_for_click = !int(args.now);
    if(!launch_swf_path) Fail("usage: launcher.swf?launch=abc.swf&now=0");

    if(wait_for_click)
    {
        Show_WaitForClick();
        stage.addEventListener(MouseEvent.CLICK, StartLaunch);
    }
    else StartLaunch();
}

//--------------------------------------

function Shutdown()
{
    root.Shutdown();
    root = null;
    System.gc();
}

//------------------------------------------------------------------------------

function StartLaunch(event:MouseEvent=null)
{
    if(wait_for_click)
    {
        stage.removeEventListener(MouseEvent.CLICK, StartLaunch);
        Hide_WaitForClick();
    }
    Show_Preloader();
    loader = new Loader();
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, CheckReady_Hack);
    stage.addEventListener(Event.ENTER_FRAME, CheckReady_Hack);
    loader.load(new URLRequest(launch_swf_path));
}

//--------------------------------------

function CheckReady_Hack(event:Event)
{
    // in certain cases when not waiting for click, complete/init fires but loaderInfo.frameRate
    // is not accessible.  misinformation from the official ActionScript docs: "When the loaderInfo
    // object dispatches the init event, you can access all properties of the loaderInfo object"
    if(event.type==Event.COMPLETE)
    {
        ready_hack = true;
        loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, CheckReady_Hack);
    }
    if(event.type==Event.ENTER_FRAME)
    {
        if(!ready_hack) return;
        stage.removeEventListener(Event.ENTER_FRAME, CheckReady_Hack);
        Launch();
    }
}

//--------------------------------------

function Launch()
{
    Hide_Preloader();

    var swf:DisplayObject = loader.content;
    // frameRate, width, height are only available before unload()
    stage.frameRate = swf.loaderInfo.frameRate;
    loader.unload();
    loader = null;

    // clear the stage
    while(stage.numChildren) stage.removeChildAt(0);
    // launch the loaded swf
    stage.addChild(swf);
    Shutdown();
}

Download launcher-2009-11-17.zip


  • Categories