about wubsoft

posted on Wednesday 28th January 2015 01:00:07 AM

This page is a shrine to my hobby of computer programming and the wubsoft brand is your guarantee that I'm always having fun, hacking away at some ill-advised dreamware in the service of all mankind.
I tend to have several projects on the go at once and I get distracted easily so if you are interested in the progress of anything in particular you can contact me directly through this page by clicking e-mail wub

The page is divided into three sections: Sam Coupe, Dingoo A320 and GP32 and at the end of each section there are links and downloads for the wubsoft freeware available on that platform.

what's new?

posted on Wednesday 28th January 2015 12:59:42 AM

Over the last 12 months I've been working on a couple of Sam games and I have put together a project that will be used to create PC versions of them. More details for this are included below. I now have a lot of stuff solved for my on-going Sam projects and hope to get a bit more finished over the next year or so. Particularly, I have worked out how to get a 2.5D driving game working and will be giving this another go. Epic Fail2 is delayed by all this but the benefit is I'm finding better ways of doing stuff with each project. My most recent attempt at improving things boosted the enemy sprites from 6 to 24 but I'm sure I can do better..

If you're foolish enough to be waiting for Dizzy and Conquer and Command, these are still on the table but as you can see I give myself way too much to do as it is so they are also on hold...

In other news, I've downoaded the docs I need to start learning x86 and mips assembly. My goal here is to port the x86 assembly in the SDL Quake source code to mips so my port to the Dingoo A320 can run a bit faster. If the shareware levels become playable at 336mhz, to allow TV-out, then I'll be happy.


sam0.jpg

This is a simple Super Sprint style game using graphics from the ST version of SuperCars2. I wanted to solve the problem of making the CPU cars drive around the track by themselves. It's not real AI as the process is entirely mechanical but the method I put together could allow the appearance of a real AI to a small extent. I can also keep tabs on the player car and can detect that it's going in the right direction, which was another issue I couldn't solve earlier.
The important thing is that all the solutions are very cheap code-wise and will transfer to a 2.5D racer too!

My goal is to remake the cars in a much smaller size for the Sam so a multiplayer version with maybe 16 cars on track could be possible. I'm advised that there are some inherent problems with trying to make this sort of thing work as a networked multiplayer game so it may not be feasible on the Sam. We'll see...


sam1.jpg

This is an update to a dungeon crawler type game that I started very early on after first getting my Sam. The player sprite is fixed and the map scrolls in the same way as the old Final Fantasy games albeit with a much smaller visible area due to the Sams limitations. There are randomly spawning badguys which you have to shoot and treasure to collect.

The goal was to make a randomly generated dungeon but instead I've had to settle on a number or pre-made maps that have randomised start points and treasure locations. The graphics for the map, with the exception of the more complicated floor tile, are drawn with the stack pointer and are my first attempt at blitting more than solid colour with this method. This is the only way to get anything drawn in a reasonable time on the Sam and will open the door to some better games from me in the future.


wubcore0.jpg

This is an OpenGL project created in c using SDL and the SDL ttf font library. It allows WaveFront objects to be imported and placed within a 3D scene. It has a console input which makes it very easy to access OpenGL functions while running and this will also be used for communication when I add networking features.


wubcore1.jpg

In this test scene the building is a single object, my first created in Blender, and the cone and the pictures on the walls are also separate objects that have been placed in the scene. The cone was made by a friend who is more experienced with Blender, and 3D object creation in general, than me. It can be controlled with the mouse, to move the camera view, and keys to move about. Time to get a PC joypad with an analogue stick...


wubcore2.jpg

The textures were quickly swiped from Google image search and are not scaled properly but I'm very pleased with how easy it was to get working. My object and material parsing seems to be fairly reliable at handling the texture mapping too so far..

The next step is to port the Super Sprint and dungeon crawler to the PC and get them running nicely. Then I'll be ready for networking with the Sam! :)

Sam Coupe

posted on Tuesday 24th September 2013 12:46:30 AM

Stolen Sam Picture

The Sam Coupe is a Z80 based, ZX Spectrum-friendly home micro released in 1989 by MGT. I didn't own one back in the day instead sticking with the Spectrum right up until the end of Crash by which time a second hand Atari ST was fairly cheap.

I bought a Sam a few years ago partly for the nostalgia value and partly for the opportunity to have a go at machine code in a more familiar environment.

The Sam has a well established scene and some extremely knowledgeable and experienced programmers working on software (and hardware!) for it. Being a programming n00b and a newcomer so late in a platform's life was a little intimidating at first but everyone has been welcoming, friendly and helpful.

Below are some of the things I have released and details of a few in development. As you will see, I have a big problem when it comes to working on one thing at a time or being realistic about anything in any way!





The Garden Centre of the Universe

GCOTU screenshots

TGCOTU is the most complete game I've managed to finish so far and is the most complicated too as it contains my first go at a CPU controlled player! Is it a bit rubbish? Yes. But that doesn't stop me being immensely proud of it! :)

There will be a sequel to this that improves the code and adds some of the missing gameplay elements.





Epic Fail

Epic Fail screenshots

This mini-game fakes vertical scrolling by taking an 8x8 tile and creating eight backgrounds with it, each offset by one line from the one that precedes it, creating a loop. This uses 256kb of memory so a slightly bigger tile could be used if needed, although, I think a more exciting idea would be to reserve several colours for the background and then design the tiles to be palette shiftable in some kind of cool way!

With a working demo in hand I set about making something similar to the Atari ST cult classic, Better Dead Than Alien, which seemed perfect for the Sam.. just a simple Space Invaders clone but with some cool 16-bit graphics and power-ups..

In the end I still underestimated the amount of cpu work needed to move enough sprites, handle collision etc. and Epic Fail was the result. Not to say I'm not pleased with it. If any of my previous programs had been as carefully made as this they would have been considerably better!

At the time I genuinely thought the code was as fast as it could be, but I have since learned more about self-modifying code and can see how quite a few CPU ticks could be saved in some crucial places throughout the code.

So I'm going to have another go at this. I think that by dropping the in-game tracker music, losing everything on screen that isn't the game itself (scores, HUD details etc.) and implementing some of these newly learned tricks I can maybe come up with something a bit closer to my original game idea.





wubtris

wubtris screenshot

My first playable Sam program was a 2 player Tetris clone. It also features my first attempt at tracker music! I've got some more ideas for this and I'm going to put together another, very different, version in the future. I wrote a developer diary for it which was printed in issue 24 of Sam Revival magazine and also ported it to the Dingoo A320 as my second entry for the Pandora Angst coding competition!





Fantasy World Dizzy

Dizzy screenshot

This evolved out of a discussion on the Sam Coupe mailing list regarding spectrum to Sam conversions. It is a pixel by pixel copy of the Atari ST version graphics to the Sam which, because of the difference in horizontal resolutions between them, fattens up the sprites somewhat!

I have now made a good start on creating a tile set for the full game and have a few sprite sets from different 8 and 16-bit versions to choose between for the character sprites. The Sam version will be a bit of a hybrid in this regard but will hopefully look ok!

I initially put some work into a machine code and basic program that was to offer the game engine with a built-in level editor for creating multiple dizzy titles. It would have been a cool direction to go in but also a major commitment to program and I just didn't have the patience for it.

The version currently in progress is a standard machine code effort with everything hard coded as normal and the level editor as a separate program. It's still in the very early stages of development and is unlikely to be finished before Epic Fail2 or:





Conquer and Command

CnC screenshots

This was created almost by accident when I was playing about trying to make really small sprites for the Sam. I'm a huge fan of the original and have racked up a good few hours with the N64 version. I had enough sprites to make most of the game within a few hours and so off I went again. For about 6 months! :)

The Sam version has a great deal removed, about 24-bits worth in total, but aims to recreate enough of the basic gameplay to be enjoyable. Only 2 types of unit can be built, men and tanks, and the current version starts to plod once you've built more than a dozen troops or so and have the harvester going.

It's more than half way complete but some of the code has become a bit too messy and is currently being updated with some of the Epic Fail solutions mentioned above.

After that is done I have to complete the AI, add a couple of missing structures, civilians... that's quite a lot still so I'm guessing mid 2014 will be the likely release date for this. *2015 EDIT* Hahahahahahahahahahaha! I crack me up I really do.





Others

If you already have half a dozen unfinished programs what you really need is a few more, obviously. These are mostly things that I started and then quickly put on hold.


Dungeon master/Chaos Strikes Back

I'd love to have a go at some sort of Dungeon Master port to the Sam. I have the C++ source of CSB/DMwin so porting from the disassembled 68000 program wouldn't be necessary. It's still a very complicated game though so it would be a serious commitment. Also, apart from the font, most of the graphics just don't look right with the reduced horizontal width of the Sam.


Driving Game

Racer screenshot

I got stuck into and then just plain stuck with a 2.5D driving game some time ago. I had a pretty neat road effect working. but what stumped me was how to deal with drawing the track and handling corners. Apparently the trick is to create a separate bitmap image of the track from overhead and from the current position within this copy graphic data to the screen. I couldn't quite get it to work but I can see how it should, sort of.. There is a demo of this in the related files section below.


Something with 3D

I'm very excited by the game-making potential of Thomas Harte's 3D engine and have read the documentation for it in the hope of having a go at making something one day. As you can probably imagine, all my ideas are completely realistic and don't involve Grand Theft Auto at all.

:: related links (5)

:: related files (2)

Dingoo A320

posted on Tuesday 24th September 2013 12:45:03 AM

Stolen A320 Picture

The Dingoo A320 is a Chinese portable media player(PMP) that was sold pre-installed with emulators for a host of 8 and 16-bit systems in a striking display of copyright violation that made it popular with retro enthusiasts.

Thanks to an amazing C/C++ SDK that supports SDL it is also a great platform to create games and apps for and will hopefully keep me going for the next few years. I have two and they seem pretty robust..

I'd like to make a 3D version of The Garden Centre of the Universe with the Dingoo SDK's OpenGL-like 3D library. I've also seen a very cool 3D Ant Attack for the PC based on the Sandy White classic and I think it would be very interesting to try something similar for the Native OS.





Quake


Quake logo

This is a very quick, straightforward port of SDL Quake by Sam Lantinga. It compiled easily and needed little work to be playable but it was very slow even at 444Mhz. I found the source for Pocket Quake by Dan East that has a fixed point solution and so I grafted these great changes in. It's fairly playable with lots of overclock but porting the i86 assembler routines would be the main thing I'd want to have a go at to really speed things up.

The binary and source can be downloaded below in the related files section.





Dooom - A Port of Chocolate Doom to the Dingoo Native OS


Dooom Logo

This is my first real attempt at porting something to the Dingoo. It basically adds a front-end to the excellent Chocolate Doom source port by Simon Howard. It provides easy launching of official and custom wads from a selectable batch file with most command line parameters supported. The networking code has been removed and I've simplified the handling of the music to use Impulse Tracker mods until I get my head around compiling libraries for the Dingoo SDK and can add some midi support!

It runs pretty well at 336Mhz despite all the awful things I did to the source and, because the vanilla limits have been removed, it should be able to play a few extra custom wads too.





Mojoo


Mojoo screenshots

Mojoo is the Dingoo version of Mojo, which was for the GP32 and both versions were entered to the Pandora Angst coding compo. The goal of the program was to create a simple guitar chord finder and it worked well enough for a quick demo. Unfortunately I don't have a proper screenshot of it running to hand so the shot above is of the background image only without the chord overlays on the guitar neck.

I have now created a Circle of fifths/fourths app in SDL and am going to combine the basic design of Mojo into it to create a proper chord and scale app for multiple platforms.





Wubtris Dingoo


Wubtris Dingoo screenshots

This is a direct port of the Sam Coupe version of Wubtris to the Dingoo Native OS using the Flatmush SDK. I copied all the variables and code structure directly from Comet to create a C source in just a few hours before the deadline of the Pandora Angst coding competition!

:: related links (2)

:: related files (8)

GP32

posted on Tuesday 24th September 2013 12:44:09 AM

stolen GP32 screenshot

The GP32 is a Korean handheld computer released in 2001 and for a few years it ruled the world! The Open Pandora project grew directly out of its community and most modern handheld devices running homebrew software can consider it their common ancestor.

At the time I was a very disappointed GBA owner, struggling with the screen and form factor despite a few triple A titles. Of particular disappointment was the port of Doom which, encouraged by the awful display, was migraine inducing to say the least.

I'd been looking for one of those new-fangled MP3 players at the time and had accidentally come across the GP32 in the process. It cost 100 shipped from Lik-Sang and when running Tom Forsyth's original GP32 Doom port it totally pwned the GBA. It played MP3's too, making it an early convergence device; a term that is rarely used these days since everything has now converged into an Apple product..

I was active in the GP32 scene from around 2002 and started releasing software by about 2003/04. I released nothing of any value and almost certainly caused more annoyance than anything. It is impossible to overstate how clueless I was but try this.. basically, I didn't know enough to know what I didn't know! "Running before learning to walk" was a common theme too! :)

Below is a history of my shame in, roughly, chronological order. I will try to find screenshots for everything but some of this stuff is over 10 years old and I don't have a fully working GP32 anymore.





Tony Targets

My first ever program in C and a bluntly nonsensical political statement at the same time! It features absolutely no sound at all because I didn't know how to do it and the complete lack of gameplay in no way makes up for the silence.

The "game" involves Tony Blairs decapitated head flying around the screen while you control a crosshair to aim the lazer beams that shoot from his cold, dead eyes. Shooting targets scores points and at the end of each round the cheeky war-criminal adds up your scores to see if you've met his target.





GPMusic/Smack my GP32 up!

GpSmack screenshot

The moment I managed to play a sound for the first time I instantly began work on a full-fledged audio application, my stupidity knowing no bounds. The GP32 official SDK has an unfortunate bug that causes glitches during audio playback but I was only too happy to ignore it while trying to emulate earache with this steaming pile of fail.

Another problem was that I had no idea what a single video frame was or how it might relate to timing and so the main loop ran with a kind of carefree abandon that made it musically useless.

The version entered to the gbax.com 15 days coding competition wasn't too bad by virtue of being limited to a simple 16-step sequencer with a few built-in kit types. It was also featured on the official Game Park website for quite a while which was very cool!

GPMusic, however, was an "improved" version that added wav support and more channels than could be used, which was four, with only one working properly anyway. The interface was updated but I still hadn't worked out how to use 16-bit colour so the whole thing looked like a washed-out mess.





The Advanced Lawn Mower Simulator

Mower screenshot

Surely this simple, legendary, game would be within my ability? A game that only requires the player to hold down one button while a single sprite moves slowly across the screen?

This was also created for a gbax.com 15 day coding competition and such was my confidence that I decided to over-egg the original joke by making it really OTT presentation-wise. There was a 30 second boot-up sequence with a huge evolving pad sound provided by the amazing Novation A-Station, I made a scrolling lawn mower background for each screen and used photo-quality sprites throughout. I even made a cheery hip hop version of "English Country Garden" and had a very good lawn mower sound effect that worked really well.

So what went wrong? It's hard to be certain because the original source is currently missing but from the behaviour of the program (it crashed right away for some people or at the end-game screen for others) it was probably a memory error of some kind. When I wrote it the only difference in my mind between an int and a char was that they had different names. This wasted opportunity was the typical result of such mistakes.





The Wub's Shoot-em-up Construction Kit

Of all my crushing GP32 failures this must rate as the biggest. At one point I was putting about 17 hours a day into it between shifts at my day job!

The idea was to make a system that allowed the creation of 2D shoot-em-ups with a completely "point and click" interface. The graphics, sounds and game data could all be thrown together and "compiled" into a single file which would be "run" with a "game" binary that could be renamed accordingly. A different game binary would exist for each supported platform, GP32, PSP, etc. and it would obviously conquer the world! Plus, the app would run on the GP32 itself so you could create games on the move, an idea that was both the motivation and the eventual cause of failure for the project.

Every time I worked on it the "To do" list got longer. Every new aspect of the program that was added yielded a whole new category of things that needed to be addressed before it could be used properly, and so on. In the end it became overwhelming, particularly because no one would use it until it was more complete leaving me to create both the app and the demonstration games to show off what it could do. There was even a Spanish language version made with the hopes of expanding the user base but it was to no avail.

The final release had a title screen editor that allowed moving elements and I used this to recreate the title screen for R-type. A mock up of the first level became the goal as it would be an impressive demonstration of the system.

At this time it was imperative that I start work on the "compiler" function and game executable to prove the title screen/game transition and the system in general. Even if there was still a lot missing having this working would allow a simple, stand-alone game to be created.

The list of things needed to be completed to make the first version of the compiler was depressingly long but the biggest problem was that I had decided to make the creation tool a GP32 app rather than one for the PC.

I now realised that a PC app and GP32 binary would be more user friendly and easier to work with code-wise. It would also entail a complete reboot of the project and after the time that had already been invested this was not a palatable option. It wasn't fun anymore and so that was the end of that.

I often consider reviving the project. Supporting the plethora of handheld devices and OS platforms currently available with one, easy to use, game-creation system still sounds like a good idea to me!





Semantix

This was a demo game created to show off what could be created using the SEUCK detailed above. The title-screen was hard coded, as was the animated background ripped from Blazing Star, but the game itself is entirely created with the SEUCK engine.

The bezier movement routines were re-used in a simple PC/SDL program to create the bad guy patterns for Epic Fail on the Sam Coupe.





Blair Wars

Blairwars screenshots

Another GBAX.com compo entry, this was my second attempt at Blair related humour and presents an expansion of the war on terror that targets the whole universe.

It was a simple game with 3 stages, a few bad guys followed by an asteroid field followed by a missile firing bin Laden. Pretty rote but, apart from the first stage being a bit feeble, it was fun enough for a cheap joke. It also features a huge sounding title soundtrack that I was very pleased with.

Sadly, the judges didn't put the files in the right place and the game was not reviewed. That was their excuse anyway. I suspect they were scared by such red hot satire and what the MAN might do to them if the kids got into it... and stuff.





GodTron

Godtron screenshot

The Almighty is displeased with his creation, once again, and decides against another flood in favour of smiting all life personally on a one by one basis. OK, so the plot's a bit silly! Obviously there isn't a God, but with the magic of computer graphics GodTron can help you to experience what being a deity might actually be like!

This was for a competition run by PDRoms to create a Llamatron style game which saves me having to explain it any further. There's lots of typical Robotron style action but my favourite bit is when you fight a huge Dubya head that fires oil barrels at you.

My graphic code let me down here but I still managed to get a few sprites moving around the screen and I copied a few of the tropes that you'd expect to see in a Robotron-style game. I got second place after being marked down for the music which was just a short gothic loop of a male choir.

I'm glad to say that my fondness for choosing somewhat off-colour subjects for games pretty much evaporated after this one.





Wubforge

Wubforge screenshots

I'm going to give my final GP32 app a little dignity and refrain from ripping it a new arsehole. By this stage I was getting a few things right and the wave file reading was something I achieved from pure research rather than copy/pasting other peoples code. Nonetheless, it was this app that made me realise that knowing the difference between data types and how memory works couldn't be put off any longer.

I'll leave the original text from the last wubforge update and call it a day. Thanks for reading this retrospective of my humble offerings to the greatest handheld console of all time!


Wubforge is a basic wave editor for the GP32. It can perform copy/paste, delete, mute or reverse operations on the whole or a section of a wav file. 8/16-bit, stereo/mono, 11,025, 22,050 and 44,100Khz, uncompressed wavs are supported.

Version 3 adds the ability to play a sample looped. If an area of the sample is highlighted then this will be looped when the PLAY LOOPED icon is pressed. The entire sample can still be played with an area highlighted by using the B button instead of A when pressing the PLAY icon.

This version is still limited to a 1:1 ratio view although the code for zooming is mostly complete. It's been a while since I looked at this and in all honesty I should really start again from scratch as it's a complete mess! :)

:: related links (1)

:: related files (1)