There’s a lot of other cool stuff worth checking out at his site, including an extensive NSF archive and a video game source code repository.
]]>The song data consists of two distinct parts: The music data, and the level data (AKA “object data” or “target data”). The music data is, unsurprisingly, the song (background music) itself. The level data defines the objects that come flying down the screen during play; their position (lane), timing and type.
Songs are composed as described in this video. At the composing stage, no consideration needs to be made with regards to how a song will be played in D-Pad Hero, i.e. the song can be composed freely.
Once the core song is ready, it must be “mapped” in order to make it playable in D-Pad Hero — that is, level data must be created. The mapping process is technically very similar to composing; instead of sequencing musical notes, you sequence the objects that the player can hit. In fact, we’re using the same tool (FastTracker 2) for creating both the music data and level data! The level data is placed in a separate channel (track), one per difficulty level (beginner - normal - expert). In such a channel, a note corresponds to one or more lanes in the game; for example, C corresponds to the left-most lane, E corresponds to the middle lane, and A corresponds to the two right-most lanes. Furthermore, the effect columns are used to encode the object type (0 = orb, 1 = skull, 2 = POW, and so on). It’s maybe not the most visually luxurious approach to mapping, and it’s not “realtime”; you typically map a small segment of the song, load up the game, try the song, make adjustments to the mapping; repeat. But it’s pretty effective once you get used to it (ask Andreas ).
Excerpt from “Whip Man”. Channels 0 through 4 contain the music (square 0, square 1, triangle, noise, DPCM). Channels 5 through 7 contain the mapping (beginner, normal, expert).
The xm2btn tool (part of the DH2 source code repository) extracts the song’s mapping and creates level data in a packed format that is essentially a list of (lane specifier(s), object type(s), time units until next occurrence) tuples. The level data is completely decoupled from the music data; the music is only used to drive the level data processing (by issuing a callback every time the song advances by one unit (row)). This means that changes can be made to a song or its mapping without affecting the other, and entirely new mappings can easily be accommodated (in order to support more difficulty levels, for instance).
Markers can be inserted in a mapping to define segments (”clips”) of a song. These segments are used in DH2’s final (”boss battle”) stage to create the “mega-mix” containing parts from all songs. FT2 effect 700 indicates the beginning/end of a segment in the mapping. The order of segments in the DH2 “mega-mix” is hard-coded (see the clips
label in game.asm
).
In D-Pad Hero 2 there are eight possible “challenges” that can be completed for each song (e.g. “Streak over 100″, “Blow up all POWs”). Care must be taken when designing a mapping to ensure that the challenges are actually possible to complete (e.g. are all letters that spell “D-PAD HERO” present?), and that there’s some balance between the various difficulty levels. To help with this, the xm2btn tool prints some statistics about the objects that occur in each lane, per difficulty level:
***** Statistics for targetdata/ripetargets.xm ***** EASY L R S B A Total Orb 75 56 49 53 62 295 Skull 22 17 6 16 16 77 POW 4 3 6 3 2 18 Star 1 0 1 0 1 3 Clock 4 0 2 0 1 7 Letter 1 2 3 0 2 8 F-skull 0 0 2 1 0 3 NORMAL L R S B A Total Orb 90 79 44 86 102 401 Skull 28 50 19 57 32 186 POW 3 1 10 1 0 15 Star 1 1 0 1 1 4 Clock 2 1 0 1 0 4 Letter 0 1 3 0 4 8 F-skull 0 2 0 0 1 3 HARD L R S B A Total Orb 113 92 46 128 133 512 Skull 70 69 30 78 56 303 POW 1 0 0 0 0 1 Star 0 0 0 1 1 2 Clock 1 0 0 0 1 2 Letter 4 2 2 0 0 8 F-skull 0 1 1 1 0 3
In D-Pad Hero 2, the challenges are the same for all songs; the only variable is the score limit in the “Score over XXXXX” challenge, which should reflect the difficulty and maximum obtainable score. These limits are defined in rock_score_table
in game.asm
.
That should cover the basics of song data in D-Pad Hero 2. The game engine takes care of the rest; I’ll leave that for a future behind-the-scenes special.
]]>http://repo.or.cz/w/dpadhero2.git
In order to build, you need to have xorcyst (from http://repo.or.cz/w/xorcyst.git) and xm2nes (from http://repo.or.cz/w/kents-nes-stuff.git) installed.
After cloning the dpadhero2 repository, first build tools/xm2btn
:
cd tools/xm2btn && make
Then build dpadhero2.nes:
cd ../../src && make
If all goes well, there will be a dpadhero2.nes under src/build/
.
D-Pad Hero 2 should build on Linux, Mac and Windows/Cygwin. If you have problems, let me know.
Brief structural overview:
src/
: Game code.src/common/
: Support (”library”) code.src/sound/
: Sound engine.src/songs/
: The game music.src/targetdata/
: “Level data” for the playable songs.tools/xm2btn/
: Converts target data to a packed format.Enjoy!
]]>BombSweeper also recommended.
]]>Getting Started
We recommend playing D-Pad Hero 2 on the Nestopia emulator. Mac users, we recommend getting the Emulator Enhancer (for fullscreen mode and USB gamepad support). D-Pad Hero 2 has also been tested on FCEUX and NESticle (!).
We strongly recommend playing D-Pad Hero 2 with a proper controller (e.g. “Retrolink NES controller”). Warning: Playing with a keyboard is likely to cause great aggravation and stress. The emulator’s default keyboard layout has the D-pad mapped to the arrow keys on the right side of the keyboard, whereas the D-pad on a NES controller is on the left side. Either swap the sides mentally in realtime, or change the emulator settings.
How To Play
Please refer to the D-Pad Hero 2 manual. Inspired by Ubisoft’s green decision to ditch paper manuals, we will not be offering printed manuals. Oh yeah, that’s also why we’re not producing a cartridge.
Here are some video demonstrations:
D-Pad Hero 2 gameplay (1 player)
D-Pad Hero 2: Free Man - Expert - 98%
D-Pad Hero 2: Whip Man - Expert - 99%
Features
Whew, a lot has happened since the first game. We’ve tried to incorporate as many of your suggestions as possible. We’ve tried to make a game that’s richer and longer lasting. In short, we’ve tried to make a game that we would have loved to play had it been released when we were kids (we don’t think it’s too shabby to play as grown-ups either, mind you!). Here are the 8 most notable additions and improvements:
Artists and Inspirations
Obviously we owe a lot to the artists whose music we’ve remixed and sprinkled with 8-bit flavor. Like with the first game, we’ve chosen artists and songs that we hold in the highest regard, and we’ve done our best to do them justice on the NES. Similarly, there are several games (old and new) that have inspired us in achieving the look, style and elements of the game. We recommend that everyone support the work of the following artists and companies (in alphabetical order):
Feedback
We’ve worked hard to ensure that there are no issues with this release. If you do find a bug or something else you think we should know about (e.g. glitches on certain emulators; experiences with other input devices; game is too easy), please let us know, so that we may consider making corrections in a future release.
Thanks to everyone who has supported us in one way or another. We hope you will get much enjoyment from the game!
- Kent and Andreas
]]>If you find issues with the site design or content let us know.
]]>Today’s rocker: LIFE MAN
Speciality: Coming of aage
]]>Today’s rocker: FREE MAN
Speciality: Quicksilver poisoning
]]>