Saturday, December 31, 2005
widget (t.a.g.)
It's not quite 'user interface', which instead discusses what sort of widgets/activities/feedback are interesting for a desired user experience, nor 'user guide' which present how to use the *EDS tools themselves.
No, it's really a sub-part of the 'coding' posts, but which are very unlikely to have any mean if you're interested to use the GEDS game engine. That's more for the "applications" section.
user interface (t.a.g.)
These described thoughts about human/software interaction for tools rather than the mechanics used in video games. Sometimes it introduces new widgets, sometimes I'm just taking a step back and revise the existing UI in terms of accessibility, ergonomy or ease-of-use.
It's not to be swapped with user guides that present how the software with that interface can be used to achieve the desired actions.
Unit-test [t.a.g.]
I still struggle a bit to decide whether what I'm doing is unit testing or not, but I encountered two qualities that "allow" you to claim you're doing unit-testing:
- the test is "fast" to run (shorter than recompiling the project, at least?)
- the test helps you localize problems.
It's a kind of time-investment compared to guru meditation.
tutogit [t.a.g]
Well, if you're an English reader, chances are this category wasn't convincing for you. There's a good reason for that: the set of presentation posts that was used to promote the libgeds tutorial branch on github was initially posted on gbatemp forums. There was a french translation too, but on deserted boards that are likely to turn 404 fairly soon.
But don't worry: the whole story in English is now available as a pdf.
sketch (t.a.g.)
tiled [t.a.g.]
Tileset [t.a.g.]
You have likely seen level editors where people drop little blocks to create their level rather than using larger "assets". The tiled mode pushes that one step further by structuring the video memory so that it natively works with little, 8x8 blocks. That is, one part of the memory will store such block and the other a 'map' telling which block to use at which place. Some can be used multiple times, some will not be used on this image. The technique is as old as the 8-bit era and was also used in almost every 16-bit machine.
What has changed over the generations is the number of individual colors that can be used in a tile (from 3 to 255) and the number of layers of such tiled maps that you can compose to get your final image (from 1 to 4).
A large part of the .spr files created by the Sprite Editor for DS is a dump of the "tileset" part of the video ram, so that you can easily load it and start rendering scenes with them.
SpriteRam myRam(WIDGETS_CHARSET(512)); SpriteSet mySet(&myRam, BG_PALETTE); mySet.Load("efs:/bg.spr");
- see complete tutorial code on github
- see corresponding post (#2) in gbatemp tutorial thread.
superpowers (t.a.g.)
storyline (t.a.g.)
These posts talk about the development of the background of "Bilou's Adventure" game, e.g. the addition/refinement of which zones the world will offer to explore, etc.
It contained some historical elements, although there's more history than just presenting the storyline (the story was pretty much missing in the '94-'96 16-bit prototype.
sprtools (t.a.g.)
It may sound an odd idea to run your own file format when doing a video game. This is mostly motivated by the odd memory structure of the DS video chip, tiled to the bones. '.spr' file are mostly a VRAM dump with IFF-like headers, created by my SpriteEditor. "sprtools" are all the PC-side programs that manipulate those dumps, converting, extracting, recombining pixels and checking more complex data structures embedded within the file, such as the list of "free tiles" within a chunk of video memory.
state machine (t.a.g.)
This is to meet the observation that, in games I loved, one cannot really speak about "artificial intelligence" for ennemies. However, they have behaviours more sophisticated than a mere goomba. More like a Zelda boss, they alternate between states where they have different hit boxes corresponding to harmful blades or weak spots. A sophisticated state machine usually translates into deeper interplay with the game.
In my PhD thesis, I have observed that a strong design for the basic elements of a virtual execution engine allows a much more efficient handling of tasks. Reading open-sourced code from other games conforted me in the idea that a plain 'think()' method for handling all the possible cases of a complex character is a nightmare to work with. In an interpreted language, it would translate into repeated evaluation of tons of conditionals that could otherwise have been avoided.
As a result, the line between compiled and scripted code revolves around those state machines: the compiled code executes whatever is to happen in the current state, a data structure (built from script parsing) defines links between states, and interpreted expressions rule conditional transitions and side-effects, which allows strong reduction of the amount of interpreted symbols per game frame.
scripts (t.a.g.)
Amazing. You've been scrolling through the whole set of 'scripting' posts. I bet you have realised that these are posts about automating things using some scripting language, like Perl, bash or tcsh (yes, I've taught myself python fairly late).
If you know my pet project enough, you've noticed we aren't at all speaking of scripting game logic with LUA or my own GobScript, right ?
Oh, and yeah, there's also a tag dedicated to those scripts that manipulate .spr files to extract/merge/twist spritesheets and animations. That's sprtools. This category is for more general-purpose scripts.
I've been doing more bash only over my 'embeddever' years, and I could use more defensive bashes tips if I'm to do that again.
screenshot (t.a.g.)
They usually introduce a new feature in my tools or a significant visual progress in games. Not all of these are pictures taken with a real camera (hopefully), and they are conveniently complemented by videos (mostly screencasts) for more dynamic features.
In contrast, mock ups are made-up pictures (typically featuring Gimp) for things that do not exist yet out of my personnal virtual world (running Mind OS :)
palette (t.a.g.)
There was a thing with 8-bit consoles and 16-bit machines: you wouldn't have the bandwidth to select precise color for each individual pixel. The digital-to-analog circuitry that provides signal to your screen might have 5- or 6-bit resolution, you're still stuck to 4 or 8 bits per pixel instead of the 15 (or 18) you should be allowed to use.
The solution was to let you select a subset (usually 16, 256 if you were lucky) of the possible colors you could use at once (per screen or per-object if you were lucky) and have a fast 'palette' memory in addition to the large 'video' memory.
It was a significant artistic constraint, but it allowed tricks like palette cycling animation, fade-in/fade out by palette edition alone and of course palette-swapping to provide more visually unique content with the same video contents.
Of course, pixel artists will speak about 'palettes' when they speak of the restricted set of colours they're using for one particular piece. I'd rather use the tag 'colours' for that purpose.
PPP Team (t.a.g.)
This thread is dedicated to all those games that were planned or developed by the core team "Piet, Pierrick and Pype" in the '90es, and the characters that were involved in these games, such as Badman or Biokid. Most of these were either made in MS QuickBasic or with RSD Game-Maker.
Some of these post may also be presenting thoughts about (hypothetical) porting of PPP-era game on the Nintendo DS and the GEDS engine.
You can find some more info about those games on the RSD-era spin-off page or on Aderack's wiki.
OAM (t.a.g.)
VRAM alone doesn't make a sprite. |
On the nintendo consoles, these are named Object Attribute Memory entries. I use that 'OAM' term when I truly mean "a hardware sprite", not a Game Object's rendition on screen (sprite).
modplayer (t.a.g)
Now to make 'instruments', think you have sampled something with a microphone or another Audio In feature. Save all this (patterns-spreadsheets plus samples) together with a few extra info (song title and samples names) with the .MOD extension and voilà. You've got a module. To hear it again, you'll need a module player. I've used a lot of them, and I still do. I've studied the code of some of them. I've wrote a few and I'm still working on one for the Nintendo DS. Posts with the 'modplayer' tag should tell you more about it.
mybrew (t.a.g.)
These post present the software development and releases I've been through on the Nintendo DS. That captures everything about the sprite editor, the level editor and the animation editor that I intend to use for building Bilou's adventure, plus the Multi-purpose transfer-and-testing tool dubbed 'runme' and (of course), all the demo games that fill the gaps until the future Grand Release, such as Apple Rumble, apple assault and the other gedsdemo :P
It may miss some mere coding or documenting posts, and is wider than just the milestones. It doesn't cover the projects that haven't started yet such as Deep Ink Pit, although it has received a codename and a gameplay target.
Although all this software is homebrew (and open-source, btw), the 'homebrew' tag is for other's software on discussed on this blog.
Somehow, it would be a shame to keep that for myself. If I'm right, it would be as good as having a game maker for NDS on the NDS. I started a tutorial series on github to share the knowledge of how to use my homebrew engine. The first layer is a framework of compilation scripts (Makefile) together with low-level libraries (including a modified version of 0xtob music player. Well, everything needed to get a first program built and running.
KISS (t.a.g)
I have a natural twist towards over-sophisticated designs. I certainly prefer Great Ball Contraptions over the shortest path. I've spent countless hours of my childhood trying to build a mechanical pattern to have a spider-like LEGO robot. I need to monitor my own designs again and again to ensure my software doesn't end up so sophisticated that it becomes impossible to think about it over the time of a tea cup.
There were likely too little words in this section, showing that the road is still long.
Mechanics (t.a.g.)
Mechanics are the player initiated actions from controller inputs as designated by the game designers. These actions have effects on the gamestate in terms of the variables and dynamics of the gameplay system
.
In fact, if we consider that gameplay is the part that defines and rules interactions between game elements based on user inputs, mechanics are actually atomical element of the gameplay.
I'm mostly building platformers here, so my primary mechanics are JUMP and RUN. I can modulate them with FLOAT. I don't quite have a shooting or fighting character, but it instead GRAB and THROW things.
As you have noted, I use all-caps when I want to obviously refer to gameplay actions (mechanics) within the text. I promise I won't shout too much.
Readme: KK: Mechanics & Abstractions (p.2)
Mario (t.a.g.)
Yep, I mean the mustachied one.
At first, I had in mind not to create a "Mario" tag (nor any tag for Nintendo or any third-party character). If a reader would have liked to read "all references to Mario" on this blog, the search feature is there.
However, with the time, it turned out that the Super Mario series is an inevitable reference point in the design of Bilou's adventure. So a Mario tag appeared nonetheless to collect all those comparisons.
Similar tags were then introduced for other key reference games such as Rayman, Sonic and Keen Commander or Fury of the Furries or even Rick Dangerous.
Other reference points are picked more occasionally, such as games from Titus Interactive, Kirby or WayForward (Shantae). For these, I'm afraid you'll still have to rely on the search feature of the online blog.
Oh; and if you're here because you followed the 'keen' tag and you're done reading all I had to say about that, consider paying Bobby Prince's blog a visit ;) He's the one who made the iconic soundtrack of Commander Keen games.
let's try (t.a.g.)
These posts present some game design that were not initially planned but reveal required to improve the game, usually after some "guest star" suggestion.
That's also the proof I dropped my "arguing" phase and admitted that "okay. Let's prototype it, try it and we'll see what it is really worth without all the should and the would and the could. When I have to explain it to someone else, I usually say "well, my natural reaction is to deny the issue so I force myself to ask what if Miyamoto / Michel Ancel had just said that?"
Comme disais Mollusk (PAlib): ne vous posez pas de question: codez (un proto).
inkjet (t.a.g.)
Not the printers model, you fool. The character in the School Zone that can throw ink drops at you.
It is one of the original design for the school zone, with pendats, erasers, pencil sharpeners (redesigned as dumblador) and sponge (redesigned as spongebop)
indie (t.a.g.)
This was the collection of posts that relate to somebody else's creation of what I see as "grown up garage games", where games are made along the creator's own vision of what is fun without trying to stick to pre-established rules. That used to represent a large fraction of games produced back in the MS-DOS and C-64 era, and it looks nowadays as a kind of protected minority :P
I do not try to cover that extensively, as this is not the main purpose of this blog, but some of those games become inspiring or reference point for my own game/level/monster design experiments and thoughts.
I also draw a line between "indie" (which usually happens on systems with (freely?) available, official development kits) and "homebrew" (which uses some underground, community maintained development kits on platforms where this was not intended by vendors).
iGobController (t.a.g.)
The name "controller" comes from the initial idea that this part of the soft acts as virtual joysticks for the various objects. The "tracker" controller, for instance, would have "pressed right" if the hero is on the right of the tracking monster. Controllers arise from the desire to keep the game engine game-agnostic, and to provide a clear API line between reusable code and project-specific code, while keeping the interpretation cost low.
Further evolution of the game project suggested that behaviour needs one extra level of flexibility: some part of a behaviour (i.e. walking on sloped ground) is shared by several characters (heroes and baddies) while other part (i.e. reading DPAD) is ignored by most monsters, but shared by most (but not all) the states of the hero. This sub-division is referred to as "chained micro-controllers" in this blog.
homebrew (t.a.g.)
These posts present essentially work done by *other* homebrewers -- that is, people who decide to build software as a hobby, usually with no profits-making plans (unlike most of indie developers) and on systems where you're not supposed - as a regular customer - to do so. That may be games I liked, libraries I used or simply projects I find exciting.
I'm doing homebrew too, but that's filed under the mybrew thread.
history (t.a.g.)
These posts present the development of games that pre-date this blog, digs of old paperwork on ancient machines. This is not only nostalgia, which would also encompass games of those times which I enjoyed and similar things. It's wider than the sole development of the story line for Bilou's Adventure and captures a lot of other "PPP Team" games & tools.
Some milestones:
- 1989: first hand on the Great Giana Sisters and first "quarters" into a Super Mario Bros arcade machine.
- 1990 : Playing Rick Dangerous at the computer store roughly every week. Planning a cover of "le Labyrinthe d'Errare" on C64 (Role-playing Book)
- 1991: First platformer project on my 8086 computer while my brother discovers Blues Brothers (titus) and Commander Keen (ID software)
- 1992 : Super Mario World arrives in Europe.
- Fall '93 : first Bilou projects
- Easter '94: I buy VGA graphics and 8-bit PCM sound for my 80386 computer. I want to make a Z:LA clone on PC.
- 1995 : RSD Game Maker year, launching the Badman series. (Rayman is released in Q4)
- Summer '96: the last one with a working C64 around, replaced by a Pentium 120MHz, my first machine with a CD-ROM reader. On my quest for an assembly module player. I can now play Rayman!
- Fall '97: Done with PC-Bot, my first major C program. First steps on Internet, starting the Ultimate Game Maker research.
- Winter '98: Upgrading the pentium into AMD K6-II, demoscene-ready. Teaching myself C++ for the first time.
- Summer '99: Crazy Brix converted into 100K game for Inscene
- Summer Y2K: Out'm'up, my last game for the PC platform.
- 2001: first hand on a PSX system.
game [t.a.g.]
Have you liked the posts related to games I practiced (in general) ?
Sure, there's a good deal of nostalgy in these posts, but also some more recent productions. I tend to have a preference for independent productions, mostly because I never really got convinced by 3D gameplay and love the charm of garage-style games which contain the sort of unexpected fantasy of my childhood.
Of course, I'm not running windows on my computer, but rather linux, and I don't devote a significant share of my budget to gaming (and globally try not to pirate softwares) so that sort of reduces the set of games I can experience, or significantly delay my observations compared to release dates.
*but* ... since 2019, I now own a Nintendo Switch, so I can get demos, run "recent" games, spend money on Mario and Zelda again, and hope for ports of the hits I missed in 201x
Form Fits Function [t.a.g.]
I'm sure there are more aspects of monster design that will interest you.
Flickr (t.a.g)
It is one of those online free services I had joined, before it got swallowed by some internet giant. But since I was there, I started collecting pictures I was shooting of NDS development as well.
So this tag should be used whenever a picture shown in a blog post is actually backed by a more complete photo on flickr, just in case somebody might one day want to print this all and have sub-pixels details of a screenshot.
design [t.a.g.]
Level design is the first item I considered when starting to think about video games beyond a pure technical point. I use to think about it as the art of drawing interesting maps. If it looks cool on a sheet of paper, then it's great level design.
I started thinking about game design after I experienced new Super Mario Bros for the first time, and immediately compared it to SMB3. It captures the rules and the decisions that affect the whole game, especially how you manage game-over, save states, character abilities and whether they are progressively revealed, etc. If you can't alter it with e.g. RSD game-maker or an editor in any way, then it's likely game design.
It took me time to realise the difference between gameplay and monster design. I had noted that some levels may be completely boring if you change the behaviour of the monsters that are in.
But gameplay goes beyond that interplay between static structures of the level, player's avatar and monsters. It really defines what goes between user input and game engine core rules. It's the part of the game that definitely *cannot* be depicted on paper and that *need* to be experienced. The part that Youtube cannot show you and that stress your dexterity, reflexes and timing.
dslinker [t.a.g.]
coding [t.a.g.]
I mean ... You made it! You've been reading through the *whole* set of "coding"-related topics. They weren't just todo lists, but true stories about behind-the-scene hacks, fixes, eurekas and such that turn dreams into reality.
You definitely deserve
}( 1 ){ \ / o[ ]o ___ ___ / \/ \ / ^ ^ \ /__ooOOoo_The Ultimate Ascii aRt Trophy of Awesomeness!
NB: I guess you have noted that I use tag cxx for things about c++, since blogger doesn't seem reliable in whether it supports '+' in tag names or not.
choice (t.a.g.)
These posts sets the boundaries of what I do and what I let for others to do. Not all of them are technical choices, but when they are, they usually have a significant impact on what the project will support.
c64 (t.a.g)
micro-ordinateur hors du commun ... celui sur lequel j'ai appris à programmé et celui sur lequel j'ai découvert les joies du jeu vidéo. Mon frangin nous a construit une ligne du temps de nos jeux vidéo, y compris (sur base des hit parades et autres journaux personnels) les jeux auxquels ont avait accès à l'époque de l'arrivée de C64 en 1984 ...
BASIC [t.a.g.]
Young me, showing off BASIC stuff |
The big issue with BASIC was that I was always trying to do things that are too big for it. Whether 'space mission' spaceship simulator and maze runs project on C64 or Calimero platformer with line-numbered programming language for a platformer ... And it wasn't much better for Bilou's Adventure which MS QuickBasic couldn't compile properly because it was using too much pictures (although it could be interpreted perfectly well :-/)
One thing was great, though: you could quickly start a new project. Something that stopped being true when I started working with C and makefiles, only to find it back with PERL.
artwork (t.a.g.)
Amiga (t.a.g.)
- never having used more than an Amiga joystick back then
- still not having an Amiga and not planning to hunt for one
- having used very little Amiga emulation because finding kickstart ROMs again is a pain.
Why so ? Because Amiga was the pinnacle of the crazindies era of game development in the 90's that bred titles from Alfred Chicken to Zool. Video games magazines that weren't PC-only were covered of screenshots of appealing games that were readily available on Amiga and might have a decent PC port in a hopefully not-so-distant future.
Because even 30 years later, I'm still amazed by the technology of the copper + blitter much more than I am by pixel shaders.
And because there was so much talented pixel artists in studios like the Bitmap Brothers!
Will there be Bilou on Amiga ? Well, with at most 32 colors plus extras, it isn't exactly the dream machine to do it. And there doesn't seem to be a wide amiga users base among Bilou followers either
adventure (t.a.g., Bilou's)
These posts presented you whatever is related to the "great project" of having a platformer game starring my blue ball Bilou (and possibly co-starring his sidekick Bouli) collecting the 7 magic stones and saving the world from some impending disaster. As you have guessed the storyline is still subject of major changes from times to times and the gameplay mechanics are still largely under study, but one piece at a time, it builds up.
The game will features different zone on the planet Bilou's cruiser is crashed, including (at least) green zone, school zone, desert zone, fire zone, ocean zone, castle zone and lost zone. I keep giving them generic names so far, to avoid setting excessively strong boundaries to creativity and imagination.
20 years anniversary (t.a.g)
Somewhere in 1993, my brother would come back home with a sketch of a new Bilou level (there had been some since October) and a monsters design sheet with all the adversaries we could find in the School Zone.
My computer so far would only render black and white and produce beep sounds. Playing the school zone was some kind of un-achievable teenagers dream, just like performing (and winning) the Eurovision song contest had been some years earlier.
Friday, March 11, 2005
{ Nintendo DS release date }
(too bad, they missed Mar 10 by so little)
US & Japan already had it since November-December 2004