Sunday, 10 April 2016

Procedural Pokedex

Seeded Pseudorandom Pokedex


I believe I mentioned this project some weeks ago and a recent foray into Cascading Style Sheets seemed like a good time to pretty this project up in order to post it. I have mixed feelings about using CSS to do styling. Sure it is going to work correctly on more browsers and is probably more efficient but I enjoy doing everything with JavaScript; that way I can pretend to be coding a native executable instead of a web app :P

Friday, 1 April 2016

Gameboy Tileset Viewer

Continuing on from my experiment last week to load and display the byte values of binary data as coloured dots, this week I've created a picture viewer. My dataset of choice continues to be from the Pokemon Blue Gameboy cartridge. Mostly for nostalgia's sake and also because at less than a Megabyte in size there is a chance to get an overview of it in its entirety onscreen at once.

The original gameboy had a black and white screen which could display 4 colours; black, dark grey, light grey and white. (Although due to the LCD used they tended to be a bit greenish. This meant a pixel's colour could be defined by 2 bits. The Gameboy used a tiling method to display images with each tile composed of 8 by 8 pixels. Essentially this means each tile is 16 bytes in memory. (for a more in depth description see here )

It took me a while to get my JavaScript code to view each part of the input data as being 8-bits but once I got it to stop defaulting to 16-bit it was easy to iterate over an entire bank of the cartridge to get this:


On the left is a rough overview of the 25th, 16KB block of rom. On the right is that same binary data converted into Gameboy tiles. It's so cool to see recognizable tiles from the game! There are grass, flower and tree tiles. Some tiles used for interiors, even the entire ship the SS Anne : 3

What really intrigues me is the tiles which stand out as being identifiable as real tile data, as opposed to some other kind of binary data are visible within the overview on the left. Generally tile data is higher byte values, hence lighter. I expect you could do some neat statistical analysis to automate identification of tile data.

Anyway I'll continue my foray into nostalgia driven disassembly; I've had a look for text encodings and have tried to work out the basic formatting and scripting functions which Pokemon Blue had. ie. printing the players name, playing 'item get' noises and clearing the textbox. Perhaps more usefully I've been looking at the instruction set of the Gameboy's processor, the Z80 (or some variation) I might end up decompiling machine code into actual assembly! :D

Friday, 25 March 2016

Binary Visualiser

Inspired by the Binary Visualiser explained and demo'ed at the other end of that link I messed around making a quick version myself:



In the above image blue denotes text byte values, green any other positive byte values and black zero. I will leave what the file could be up to your imagination :P (not that the whole file's data is visualised here, only about half) This particular file exhibits some interesting striping and the last quarter of the file is mainly text.

I doubt this will be of much interest to people who aren't as fascinated by data visualisation as I am. Ideally I would find a way to divide a binary executable into likely; logic, audio, graphical and text data. This topic would probably descend into disassembly though, which is sadly a bit of a legal grey area :/ A pity as it is wonderful to see computer code at the level of bits and bytes.

Friday, 18 March 2016

RPG Maker and Pokemon

Hobby-project wise I spent some time exploring RPG maker VX Ace (goodness what a mouthful of a name) It has a good organisation of the different resources that make up a game; tilesets, sprites, sound, animations etc. The default resources are pretty generic but you could add your own content and use the Ruby scripting engine to create a complex game with it.

Currently I've been studying the data which made up the very first Pokemon games, they hold a special place in my heart due to being the very first gameboy games I owned. It is impressive how much fitted onto half a Megabyte of memory! Many people have developed resources to make Pokemon-like games with RPG Maker so I've been giving them a look.

If I do end up making a monster catching game it will of course have to involve procedural generation :P Pokemon Randomizers are available for practically all the official games; changing the location and stats of all the Pokemon. I don't know of any fangames which create completely random monsters or maps though.

Alas the little script I wrote to make a completely random Pokedex isn't polished enough to post :/ Too much time spent doing productive coding and reading clearly!

Friday, 11 March 2016

More studying hosting

Exploring online resources about hosting and running a web server has been most illuminating, like most areas of computing there are a hundred and one different ways to do it. There are some tempting bundled products that contain all the software and tools to start, usually with a price tag associated. I am happy to see that when it comes to hobby projects there are some nice free options though. Amazon Web Services look to provide a dizzying amount of features in their free tier of hosting; even more evidence that they understand how to win at the internet. For good or for ill :/

Speaking of negatives associated with running a server I balk at the dangers of SQL injection and vulnerabilities around PHP. I am quite uneasy about hosting a website where server-side scripts can be executed. The site presents a target to the whole internet to be hit with all kinds of automated attacks. For a novice like me I would be very concerned about committing rookie mistakes in terms of security. I think I'll keep my experiments on the local network for now :P

 The prospect of writing server-side scripts does present interesting choices in terms of programming language to use; JavaScript is lovely for the ability to share a program online but if I'm writing code for the server there is essentially no limit on what I could use. I have heard Python mentioned rather frequently in relation to server scripts and wouldn't mind using it more. I have also heard good things about C# and feel it would be nice to see how it handles Classes and Objects. 

I want to spend more time using the Voxel Editor to work out what tools it is missing. I will endeavor to post the Schematics next time I post.

Friday, 4 March 2016

Forays into MySQL and PHP

Been doing some exploration of some different programming languages and software than I usually use the past week. I've been exploring the tools required to run a web server in order to deepen my understanding of the server-client relationship. It has been a pleasant surprise to see how easy it is to get started with various free tools.

In the future I would like to try running a basic web server for some sort of persistent online game functionality; be it user profiles, highscores or even a Massively Multiplayer Online game :) For this I needed to look into Database hosting and sending queries with SQL. MySQL is an excellent piece of software for this and with their extensive documentation I have easily been able to create and query my own database tables.

In order to serve webpages from the server I looked into server side scripting languages. It seems that PHP is the easiest and most popular one to use. It also comes included in XAMPP which I decided was the easiest bundled web server software to use :P

Give it a few weeks and I'll be making web front-ends to server-side database resources. I'm thinking a Voxel-Editor schematic database would be a pretty nifty initial project!

Friday, 26 February 2016

Voxel Editor Version 0.2



I've been working away at improving the Voxel Editor program and have gotten the next prototype into a tidy enough format to post. It has a proper interface now as well as a much nicer program structure!

Only a short explanation today, as before find the embedded program at the bottom of the post :)