Mega

Last Login:
September 01, 2014
Warn:

Rank:
Member



User Profile
Follow

Hits: 97,408
Joined August 08, 2010
Games (10)

Game Music Player
October 10, 2011
Exile
August 01, 2012
In a word
August 10, 2010
Trace
October 07, 2010
Flood the mines Demo
November 12, 2010
Tetris
January 24, 2011
Velocite R
April 12, 2011
Shinsetsu Ninja
February 18, 2013
Walk of Darkness Demo
November 15, 2013
Project Phoenix
April 30, 2014
Examples (1)
Favorite Users


Ludum Dare 30 - Post-Mortem
Posted on August 28, 2014 at 19:02

I actually pulled off a game for Ludum Dare #30.
The theme was Connected Worlds, and as usual, I set out to make a platformer with the usual art and music styles.

Boy did I end up making something completely different...

I present to you... Shattered Horizon




Give it a play if you haven't yet! I'd appreciate it!

Or, you know, read the post-mortem if you have played it. I'll be going over what I remember of my thought processes during the comp.

I streamed (And saved to YT) a few ridiculously long videos of the development process. Two 5 hour vids and a 1 hour vid, I think. Take a look here if you're bored and have no drying paint to watch instead:
Part 1-1
Part 1-2
Part 1-3
Part 2
Part 3-1
Part 3-2

I'm not talking over these videos. I was too focused to bother :P
I did, however, start capturing my desktop sound once I started adding sounds and music to the game. So if you want to hear that, take a look at Part 3-2.

Post Mortem


Before the comp started, I had brashly decided to create my game in C++.
Because I'm a masochist, apparently.
Then things happened: I had to work on Saturday for most of the day, and ended up losing around 20 hours (Because of other things, family related).

So I started out at around... I have no idea when... on Saturday evening.
For some reason, I blanked out and started making my game in C++ from scratch. About three hours (And a working patial framework later), I remembered that I had uploaded an engine or two to Github...
I switched to my newer engine, IndieBoy.

It's important to note that I still had no idea for my game, other than "Platformer =DDDD" and not much else.

After another... four or five hours of screwing around with that, I realized that I was spending way too much time implementing new engine features and far too little on actually making a game. So I decided to drop my original plans and go with GM.

At this point, I actually started to think about game design.
Interestingly, Blackhole had hosted a copy-competition, 64Dare, that had a very similar theme to this Ludum Dare; my game for that, Alterality, got 'best overall'.
I decided to draw some elements from that game (The world swapping from a "light world" to a "dark world").

I also took a few ideas from a couple of story ideas I had a few months ago. The gist of these ideas being a planet that has a sun that periodically bombards the planet with "dark energy", a useful McGuffin that has created a dark side to the planet, inhabited by different people/creatures, but retaining the same physical objects for the most part.

And then I decided that making a platformer with these ideas would be a pain in the ass.

So I took a dip in the history pool and pulled out Gauntlet.
I've always wanted to make a game in this style, and decided to take a shot at it.

Some of the first things I did was establish a few basic core concepts:
> The game would be low-resolution to help with rapid art production
> The game would use a widescreen aspect ratio
> Gameplay is centered around the two worlds, Normal and Dark
> The Dark world is significantly more dangerous than the Normal world.
> There would be some basic 'survival' elements (Food and "Dark").
> Combat would be centered around guns.
> The Dark World would be entered after a specific time had passed.
> Food and Medicine would spawn at points on the map, and resupply after
a given time
> Enemies would continually spawn at the edges of the screen at specified ticks.
> Death is permanent

After a bit of fiddling around, I established a very low base resolution of 200x112, and eventually on a playing area of 112x112, with 88 pixels being reserved for the HUD. It made the screen a bit more 'cramped', in a sense, but also allowed me to get a decent HUD into the game without requiring a pause menu or other mechanism.

Around this time, I jumped on TeamSpeak with SpectreNectar, Pirate-Rob and Acid...
We were focusing so hard that we forgot that we were using TS, and it was deadly silent for the most part.

At this point, I started to work on basic gameplay. I had a simple prototype player sprite from the platformer idea that I was using as an HUD decoration, and used a simple circle in place of the player while I figured the basics out.
Then I decided to bite the bullet and face the task I looked forward to the least: Drawing the player sprite.
I'm not very good with top-down perspectives. I always want to add some more detail, the 'front' of the character... but I think I managed to pull off a character with a decent bit of depth, even though very little of it is shown at any given time.
The walking animation was both the easiest and hardest part of the player to figure out. When you basically have three squat circles next to each other, how do you make them appear to be attached to some legs that are hidden from view, and walking?

A couple of revisions later and I had a decent character, a simple map to walk around, and a basic movement engine.
I decided to go with GM's rotation in this case. It worked well enough for my purpose, though I usually avoid it. Then I made it 'smooth', so instead of snapping to a direction, you turn towards it at a fixed rate.

For a while I had a bug where, from certain starting positions, instead of turning in the direction the player wanted via the shortest route, the character would do a little reverse 'spin'. Made it look like he was dancing :P

Around this time, I decided that I needed a simple 6x6 bitmap font so I could print some info on the HUD. Just the characters A-Z would do for now... but I kinda forgot to keep it to that and drew a nearly fully-formed font-set, sans lowercase glyphs, in about 10 minutes. Worked better for me later, because I wanted to print the score too, and use some of the punctuation marks as bars/separators.

Now, my experience with short competitions... with any competitions, really... is that I leave my enemies and level design 'til last. I decided to break tradition with this one and swallow the bitter pill first.
I mapped out the entire game map in one sitting, and started drawing up enemies. In the end, I basically had two: Creatively named "Thing" and "Soldier". I made stronger re-coloured variants for the Dark World... Called "Dark Thing" and "Dark Soldier". Because that's as far as my mind was thinking at the time.

I toyed with the idea of quickly adding an A* pathfinder to the enemy AI (All base AI was handled by the parent object), but I decided against it, and instead implement a Fast Bogo Intelligence and focus on adding more features.

So now I had enemies that tracked and followed the player. I added in a spawner for them that would place them just beyond the edge of the screen if there was an opening, and moved onto the next 'big thing' that I usually left 'til last in my games:
The game over screen.

Not much to be said about that, but about an hour later I had managed to hammer out a Game Over screen, Title screen and intro cards.

Now, in a fit of reverse logic... I implemented the enemy's shots first, damage to the player (And death) after that... and only got around to adding a way for the player to fight back quite a bit later. :P
That's a bit of a turnaround from my common practice of forgetting to add a way for the player to lose the game in some of my games.

After I had that done, I added the switch to the Dark World. Actually, I had 'added' the Dark World a while back, but there were no triggers to enter it (I had a debug key to enter it. Which I forgot to remove from the game. Find it :P)

In Alterality, the world was 'switched' by switching rooms. That process was a pain in the neck, involving duplicating the first room I made, painting over the duplication with the 'alternate' tileset, and adding in extra hazards.
This time, I did something simple on game start:
> Create a temporary surface
> Draw tileset A to surface
> Save surface as background A
> Draw tileset B to surface
> Save surface to background B
> Assign backgrounds A or B to background C (The one defined in the GM editor and used in the room editor) during gameplay.
> Instant tileset switch.

And for world specific hazards/objects, I just made the player deactivate anything that was a descendant of 'obj_darkworld' if the world.mode variable was set to "WORLD_NORMAL".

After this, the only major things I added were the pickups and drops. There are three levels of each pickup: Small, Medium and Large.
Small food/med items drop with a small chance from enemies when you kill them, and restore a few points of food/hp.
Medium and Large items spawn in the world at predefined points, and respawn after a specified time (Somewhat buggy, I forgot to take a few things into account... but it works.)

Otherwise, most of the work from this point on was balancing: At first the food bar ran down too slowly. This was by design, since I originally envisioned a much slower paced game. A survival/roguelike/action hybrid of sorts, in which you would gather supplies and materials, etc, etc.
Obviously ditched most of those ideas very quickly. It was a Ludum Dare, after all :P

So I spent around an hour tweaking the Stamina, Hunger and Dark ticks. Made them a bit faster, tweaked enemy speed/damage/hp, tweaked player hp and attack, food restoration, etc.

Making this game was a lot of fun; I'm still working on it, and plan to release a polished "2.0" version at some point next year. Hopefully, by then, I'll have added in the new features I want (And features other people want):
> Huge maps (With a map system, so you know where you are)
> Randomly generated wilderness and cities
> WASD controls, with the mouse being used for interaction
> Refined survival elements, including the ability to barricade yourself in a ruined building in order to survive.
> Higher native resolution, with a more polished interface.
> 3D or pseudo-3D (Think of the original GTA).
> Boss battles!
> More enemy types, AI types... and proper pathfinding.
> Weapons! Items! Loot!
> Local multiplayer. The idea of a co-op Roguelike style game is appealing to me. And depending on how I code the base system, it might be possible to make it playable over the net too :P
> Rebase to C++, like it was meant to be. I already have the groundwork done for this game in my C++ engine, and am busy working on this already.

Ambitious, perhaps. But I'm finding that being forced to spend more time away from my computer (At work) tends to motivate me to work on things a bit more. So we'll see what happens.

I also plan on releasing a simple "1.1" release that'll fix a few of the nastier bugs (one of them being that food can run negative, and be extremely hard to get back into the green again), and a few new weapons.

Well, that's that. I'm off to go do something completely unrelated to work, programming or game design in general. I can't even remember the last time I've relaxed and played through a game. :<




NES Adventures - Part 1
Posted on August 16, 2014 at 14:47

I've been dreaming of assembly for the last two nights...

In his blog, Cyrus non-seriously challenged me to create a raycaster for the NES.

I'm not 100% sure whether I'll be able to pull that off or not, but I did start tinkering with some of the tools again, and decided to challenge myself incrementally. There's still a lot I have to learn about the NES hardware, and the tricks I can pull off with it.

So what I'm going to do is post blogs like this each time I complete a challenge I've set. The first one was to create a "text writer", something like the printf() function, for the NES.

I'm using pure assembly code, and a simple bitmap font. Strings are written to the nametable at runtime (A considerable amount of my time was spent last night trying to safely modify the nametables without glitching).
The result is this:


It's also scrolling, but you can't see that.
If you have an NES emulator, you can take a look at the ROM:
CH01.NES

And here's the assembly listing for those of you who can read it :P
Warning: Spaghetti assembly code (Show)


There are a couple of problems with this code that I'm already aware of. Firstly, the nametable modification is inefficient. I only need to write to the nametable once, and leave it until I need to change it again.
At the moment, I'm doing it every frame.

The write_nt_str macro doesn't work, because I can't figure out how to pass a label's address to a macro with this damned assembler (I've nearly convinced myself to write my own assembler for 6502 code).

There are a bunch of inefficient comparisons/branches. I remembered afterwards that the lda/ldx/ldy ops also affect the C/Z flags, so...
Code: asm

;; I should do this
    lda $<somelocation>
   bne a_label

;; Instead of
  lda $<somelocation>
  cmp #$00
  bne a_label


Also, the scrolling is somewhat jerky when it hits the top of the screen. I'm derping somewhere in my checks, but I'll fix that next time I use scrolling.

Next up, I'm going to try do something a bit more complicated.




Coming up with blog titles is a pain...
Posted on August 06, 2014 at 06:31

So I'm going to start using The Video Game Name Generator to come up with them.

So this blog is now called

Bling Bling Dragon Choreographer

.

Anyway, I took a trip recently to the city of Cape Town. Was a rainy weekend, but I had a good time. And of course I had to visit the game shops and bankrupt myself.
Because that's how I do things.

I managed to get hold of Street Fighter IV, Bionic Commando and Red Faction 2 as part of a "3 games for R129" bargain (That's about $10). Was thinking of getting Dark Souls 2, but the retail price was far higher than Steam's price, so I decided to hold off on it for a while longer.

And then, while wondering around aimlessly in the local mall, I went into an electronics and audio shop for the fun of it. And I found something I had been looking for: An R4 clone.
An R4 is a flashcard system for the Nintendo DS series (You can use the DS ones on a 3DS too, to play NDS games and run homebrew roms).
And these guys were selling one of the units I was thinking of ordering from a local importer for about $30 less than the importer was selling it for.
So of course I snapped it up. And now I have what amounts to most of the good NES games on my DS, a bunch of homebrew apps, a DOS emulator, an SNES emulator that works really well (Can play Megaman X1, Super Mario All Stars + Mario World, FFIV, but not games like MMX2, X3, etc. Emulator isn't fully complete/compatible... I might just have to write my own :P)

But the real reason I got an R4 was so I could do silly things like port some of my games to it. For no real reason other than that it's something I've wanted to do for a while: Make something I can run on actual hardware.

And if I make something good enough, I can always pull a Battle Kid and make back what I spent on the unit :P

Other developments
My GBJam game is coming along... slowly. I've done more engine work than any game-related work, but that's fine by me. I'm actually looking forward more to the 7DFPS jam coming up directly after GBJam.

No, I'm not going to try make an FPS for the DS in seven days... ... Oh damn it all. I just thought of what Exile would look like on the DS...
Maybe if I can learn DevKitPro's setup and the basics of libnds in time, I'll take a crack at it. :P
I can implement a software renderer pretty quickly if I have access to a good framebuffer. Give me a way of drawing pixels quickly and I'll pull it off.

Anyway, I was streaming development of my engine for a while on Saturday. You can take a look at the archive here if you want:
http://www.twitch.tv/64mega/b/553411324

Comment about how screwed up/odd my programming style is below.
And yes, I'm fully aware that I'm still using OpenGL 1.2 functionality. I'm just keeping things simple for now; the rendering code is pretty much plug-in/out as far as I'm concerned; a black box from an outside perspective. So switching it over to a shader based system should be a piece of cake.

Well, that's enough from me. Go blog some more guys, you're being boring. =3




What are your favourite VGM/OST tracks?
Posted on July 16, 2014 at 06:55

You know how this works.
Post your favorite tracks from games, old scene chiptune, or full soundtracks you like the sound of.

Keep Youtube links as URLs.




Final Boss confirmed (Progress Update)
Posted on July 08, 2014 at 09:06

Completition update, I guess. Spent the last few days... doing something completely unrelated to the Hunter reboot I was working on.
That is to say, I ended up back in the midst of Exile's code again. Must be something I ate.

So progress report... I spent the last two days adding in a feature that was in that one version of Exile that had the 3D Mana pickups: the model loader.



As seen in Steven's blog, here is the final boss of Project Phoenix, with its texture this time.
[salesMode]
Final boss confirmed. Pay $5 for the "Phoenix Stone" DLC package and you'll get a free spaceship to tackle this monster with!
[/salesMode]

Heheh.
Actually... it turns out that I'm not going to be using models very much; this project is just to 'fix' the original Exile up a bit, decorate a little, and generally get it back to the point it was at before I lost all the work I had done (That reminds me... I should copy my current working code to Dropbox while I'm thinking about it)...
So in other words... I've wasted time working on a feature I'm not going to be using yet. But that's nothing new.

Technically, I could've done a lot more over the last week, but I was having a bit of an issue with my eyesight. My right eye is a lot weaker than my left, and it's been getting worse over time; partially due to the amount of time I spend in front of a computer monitor, and partially due to these glasses I have. They're too weak to correct my vision properly now.
Just to demonstrate how blind I am, I can't see 12pt text on my monitor at a distance of around 40cm without squinting really hard. But that's only if my right-eye is open. The second I close it I can see with much greater clarity. The glasses help to a degree, but are causing strain themselves (I need a thicker lens at this point).

So I spent a bit of time away from the computer... and changed the system font size settings up to 125% when I got back to it. If that eye gives too much trouble, I'm going to buy a bunch of eye-patches and keep on doing what I do at a hit to my depth-perception.

Another detriment to my productivity has been the addition by my brother of several hundred gigabytes of anime to my HDD. This is including the entire Naruto Shippuden series, the entire One Piece series... Yu-Gi-Oh, Gundam SEED (And Destiny), Hack.//Sign... I stopped them at the Bleach series.
There are a couple of newer ones I've been taking a look at too. Zero no Tsukaima (Familiar of Zero), No Game No Life, Black Butler...
And these are all a huge waste of time. So I started an attempt at multitasking yesterday: Play the anime on left-hand monitor, do work on the right hand monitor. Worked well enough (Coded the model loader, for instance).

Well that's enough of that. I'm going to go get some more work done, ponder career choices, and figure out how I'm going to afford new glasses.




Progress, I guess...
Posted on June 19, 2014 at 08:20

So I kinda did something with my engine for the Completition... but it's not something easily visible: Just structural changes and a slight tweak to lighting.
Yes, I've been lazy as heck. Haven't done any major programming in the last three weeks.

I've got a plan though. Probably not going to end up with a major game by the end of this, but I'll have something. Something more than I had before, anyway :P

Exile Engine Plans (Mostly Technical, skip if easily bored) (Show)


So what have I been doing, besides not programming?

Gaming. A lot of gaming.
To be specific, I've started practicing with speedruns of a few of my favorite games. That happened after I watched a lot of these videos:


And then I got my hands on LiveSplit. My current time for Megaman X is 56:37, Megaman 7 is 1:10:21, and a bunch of unfinished runs that I'm working on.

And then there's Dark Souls. The multiplayer has been busy. Messages everywhere, bloodstains everywhere, a veritable army of summons available, invasions galore... It's been a load of fun :P
On a new character the other day, I saw a summon sign at the entrance to Lower Undead Burg. I've been having a really good time with summoning/invading; no connection issues whatsoever, for some reason.
So I decided to summon this guy. Let me tell you this: I didn't even get a chance to wave. He just sprinted down the stairs and the next thing I'm hearing the sounds of carnage. Literally took us all of three minutes to get from the entrance to solidly beating Capra Demon on the first try.

I also stuck around a bit and left my summon sign in front of Capra's fog gate; I'm part of the Warriors of Sunlight covenant, so I tend to get summoned pretty quickly.


I've never enjoyed a game so much, for so long :P
'cept maybe some of the classic NES games I keep on going back to. And Minecraft.

Well, my hands are freezing over. Time to grab a hot cup of tea/coffee and do something with my time...




Minecraft Shenanigans
Posted on May 25, 2014 at 15:05

I've been playing around with the Minecraft 1.8 pre-releases for a few weeks now, and have started messing around with an adventure map. Using a redstone clock, some command blocks, and a few commands, I came up with this:



Sound derped up, but it's not the point. :P

This works using the /scoreboard, /testfor and /title commands. It displays the title card only to the player entering the zone, doesn't display it again until you switch to another zone, and is really simple to set up.

There are two command blocks attached to the RS clock. They both contain a variant of the following command:
Code
/testfor @a[<cubic coordinates for check>,score_zonenum=0,score_zonenum_min=0]


And both execute the following three commands if they detect a player matching those criteria (Using a Redstone Comparator and three more command blocks):
Code

/scoreboard players set @a[<zone coordinates>] 
/title @a[<zone coordinates>] title "Title"
/title @a[<zone coordinates>] subtitle "Subtitle"


Quite a bit of setup work involved (You have to manually enter zone coordinates. ~ doesn't seem to work with @ selectors), but it's an interesting effect. And with a few mods, it could become very easy to do.

Dark Souls
Oh, and some Dark Souls shenanigans...


I'm occasionally doing PVP in Anor Londo. Mostly baiting invasions (There are a ton of Blue Phantoms recently), and earning a ton of souls doing it.
I'm using DSCFix, so if anybody with the game wants to add me to their GFWL friends list so they have a much higher chance of bumping into me, my name is Megaura. For now, anyway. GFWL is dying soon :P

Speaking of that, From Software and Namco Bandai have confirmed that they aren't going to let Dark Soul's multiplayer side die.
Oh, and the game is currently 66% off, at $6.79. So get it if you haven't got it, so we can engage in jolly cooperation! :P




Post-comp burnout and some plans
Posted on May 09, 2014 at 13:38

Burnout is something I suffer from very often after competing in a competition of any sort. The whole of last month is just a jumble of memories in my mind, centered around the three games I was working on, late nights spent hunting silly bugs, and later nights spent working on artwork.

I'm glad with what I eventually made; it's the first time I've worked with 3D in this way, and also the first game I've created with Unity. It was an interesting process of learning, and relearning a few things I forgot about C#.

Originally, I was planning on silently dropping out; I was feeling pretty down with the work I had to do to pull either Exile 2 or the other game I had into the 'playable demo' phase, so I opted to just do "whatever I felt like" until something happened.

And a few nights after that thought, I sat down in a bored manner and decided to model a spaceship. It turned out far better than I anticipated, and I naturally decided to run with what I managed to make. And I'd say it turned out fairly well.

I will say that I'm still deciding whether or not to continue working on Project Phoenix in Unity. For starters, it relies heavily on image effects that I can't use in the free version, so if I don't manage to win/loot/buy a copy of the Pro license, the game will look very different.
In that case, I'd probably see to porting it to a custom C++ engine; writing a Bloom and Motion Blur shader is elementary. The hardest part of the 'port' would be choosing a good model format and writing a loader for it.

Either way, at this juncture I am creating a new from-scratch engine. Or at least, designing one. That's always been a fascinating process to me, and I've been spending a few days studying the Doom, Doom 3 and Vanilla Doom source; Carmack's code is particularly interesting.

There's a good article here about it:
http://kotaku.com/5975610/the-exceptional-beauty-of-doom-3s-source-code

And a more detailed view of the internals (This guy has reviewed most of the source id has produced, as well as the Build engine, and picks apart how these engines got around to doing what they did. Fascinating reads if that's your kinda thing).
http://fabiensanglard.net/doom3/

Anyway, I'm going to be looking into a more data driven model for my new engine. I want all game logic to be handled in an external manner. Either by runtime scripts, precompiled scripts, or just by 'hooking' the game engine into the game logic via a DLL (Which is what the idTech4 does).

I'm not actually designing this with a specific game in mind; I'm just making this because I enjoy programming tasks like this immensely.

Well, I'll leave you with that. Now to kill time until the competition winners are announced!

Addendum: Dark Souls
I did it!




Mega's Competition Dev Log - Final
Posted on April 28, 2014 at 07:12

This is the time when those of us who still need to finish our games either go into manic overdrive, or sink into severe depression. Try the former; it's healthier. :P

I decided to show one last screenshot before release:


The game is a bit of a one-sided shooting gallery at the moment. I'm busy adding enemy projectiles and such to the game right now. And planning the boss.

Well, good luck everybody!




Mega's Competition Dev Log #6
Posted on April 24, 2014 at 17:07

We're now into the last quarter of the competition. 6 days left; this is officially crunch time.

Did quite a few things during the past four days, as I showed in the comments of my last blog. What I didn't do was talk about it much. So here we go.

First off, a screenshot or two:




Me dicking around with Sun Shafts:


And dicking around with Bloom settings:


Going to make things like Bloom optional. Motion blur was going to be optional, but due to some changes, it's not really effective any more.

Anyway... changes.

Switch from Level orientated to Player orientated
My original concept that I threw together had two 'segments' of the level, or 'road', as I'm calling it. These were pretty long (Stretching well beyond the 'back' of the view frustum). When the player hit the join between the two segments, he would be flung back to the starting point , seamlessly (More or less).
This 'works', but was shortsighted of me. Figured this out when I added projectiles. Now I had to either make every moving object jump back if it hit the boundary, or figure out a new way of doing things.
I decided on the latter; generally if you're doing too much work you're doing things wrong.

The system I decided to use is very common in 'endless' games. In this system, the player doesn't move. The level does.
So in my game, the level segments are moving towards the camera at the the same velocity the player should be moving. When it's out of the camera bounds completely, it jumps up to behind the segment behind it.
This is, in fact, a much more seamless transition, and is also going to make handling my AI code a lot easier down the line.

Modeling an Enemy
Spent some time today working on an enemy model. I've been getting far more comfortable with Blender, and the creation of exactly what I have envisioned in my mind. Mechanical and inorganic objects are easier to work with; add a couple of hours overhead to anything vaguely humanoid. :P

I posted a timelapse video on my last blog, but I'll repost it here:


Had a bit of trouble with my normals; I think I accidentally hit Laplacian Smooth at some point during my tweaking of the model, and that did something to the faces I had selected.

I still have a few more enemies to model (Though I'm only aiming to complete one more before the comp deadline), and a huge boss that I have planned.

Anyway, that's enough out of me. Have a GIF/Video of the progress so far:



Prev Page | Next Page

Recent Activity
 
Active Users (0)