Letter for Mimi 2 – wip #25

Letter for mimi 2 map editor map

In the image above you can see the current state of the map interface in the Letter for Mimi 2 editor. The tiles are double their actual size (the actual size being 16×16 pixels). What is cool here is that all tiles are loaded from a single tilesheet. The map you see at the moment has been randomly generated, the map still needs to be loaded from the file. I hope to expand this view to drag-and-drop npcs and show which tiles are blocked etc.

Letter for Mimi 2 – wip #24

Letter for Mimi 2 battle mock up

In the picture above you can see a mock-up I have made for the battle engine that I might implement in the sequel of Letter for Mimi 2. Writing the code for this part will take a lot of time, so it will not be included in the second installment of the Letter for Mimi series.

The layout is based on the Final Fantasy 1 battles, the player’s party is located on the right side and the enemies on the left side. The middle will feature a choice menu in which the player can select an action for each of it’s conscious party members. Each party-member has a small block showing his/her current health points and magic points. The white edges can change colour to indicate ailments and buffs. For example, a poisoned character might have a green edge surrounding its info-block.

I think this is a better and more flexible layout than the previous mock-up I made. The screen feels a bit empty at this moment, but then again that might be a good thing as it draws attention to the status of the party.

Letter for Mimi 2 – wip #23

A lot of the *.xml manipulation functions have been made, but I still have to do most ‘npc’ change functions (such as changing a dialogue line and adding events) and some others. A lot of this is copy-paste work so it is a bit boring work. In the screenshot below you can see what the main menu looks like when running the Python program.

Letter for Mimi 2 map editor

New games released on floppy disks

The idea of creating a game for an old console or pc is still on my mind. I did a little research to see how many ‘new’ releases were on this old medium. Here is a list of new games and music that have recently been released on floppy disk (the ones I could find, that is):

Actual games

Music

Gimmicks

The Amiga still has a big scene going on as can be seen here: Amiga 2014 games. However, none of these games are released on floppy. Since the Amiga is one of the few home entertainment systems that uses the 3.5 inch floppy, it is interesting to see that a lot of new games still come out for it.

Not a lot of new games come out on the floppy disk, probably because they are easily copied and their is not a large market for them.

Edits:
2015-07-10 Added Retro City Rampage (DOS)

Pseudo 3d scrolling example in Actionscript 3



A while ago I found this great resource for pseudo 3d racing games by Louis Gorenfeld. Unfortunately, the page is more of a general guide than a complete tutorial. I created the example above, the *.swf is locked at 6 fps so you can see the scrolling very clearly.

You can expand it further if you want (I might try so too in the future):
Main.as

// Main.as
package 
{
   import flash.display.Sprite;
   import flash.events.Event;
   import flash.display.Bitmap;
   import flash.display.BitmapData;
   import flash.display.StageDisplayState;
   import flash.utils.Timer;
   import flash.events.TimerEvent;
   
   [SWF(width = "320", height = "240")]
	
   /**
    * Pseudo 3d racer example
    * based on Louis Gorenfeld's explanations (http://www.extentofthejam.com/pseudo/).
    * 
    * Adapted to Actionscript 3 by Kees from www.kcnhgames.com
    */
    public class Main extends Sprite
    {
        // Colours
        private const SKY:Number = 0xFF228dcb;
        private const GRASS_LIGHT:Number = 0xFF00c500;
        private const GRASS_DARK:Number = 0xFF009a00;
        private const ROAD_LIGHT:Number = 0xFF8e8c8e;
        private const ROAD_DARK:Number = 0xFF656765;
        private const STRIPES:Number = 0xFFFFFFFF;
        private const MARKINGS:Number = 0xFFff2e00;
		
        // Bitmap
        private var _bd:BitmapData;
        // Width of bitmap
        private var _bdWidth:int = 320;
        // Height of bitmap
        private var _bdHeight:int = 240;
        // Horizon y
        private var _hor:int = 100;
        // Rotation
        private var _light:Boolean = true;
        // Z value
        private var _z:int = 0;
        private var _dz:int = 0;
        // ddz remains constant
        private var _ddz:int = 1;
        public function Main():void
        {
                super();
			
                // Add bitmap to stage
                _bd = new BitmapData (_bdWidth, _bdHeight, false, SKY);
                var bmp:Bitmap = new Bitmap (_bd);
                addChild(bmp);
			
                stage.addEventListener(Event.ENTER_FRAME, render);
        }
        /**
         * Render all the pixels on the bitmap
         * @param e
         */
        private function render(e:Event):void
        {
                updateBG();
        }
        /**
         * Update the background
         */
        private function updateBG():void
        {
                _z = 0;
                _dz = 0;
			
                var colour:Number = GRASS_LIGHT;
                var tY:int = 0;
			
                for (var y:int = _hor; y < _bdHeight; y++)
                {
                        // Draw line
                        for (var x:int = 0; x < _bdWidth; x++)
                        {
                                if (_light)
                                {
                                        colour = GRASS_LIGHT;
                                }
                                else
                                {
                                        colour = GRASS_DARK;
                                }
					
                                _bd.setPixel(x, y, colour);
                        }
				
                        // Update dark/light lines
                        if (_z <= tY)
                        {
                                if (_light)
                                {
                                        _light = false
                                }
                                else
                                {
                                        _light = true;
                                }
                                _dz += _ddz;
                                _z += _dz;
                        }
                        tY++;
                }
        }
    }
}

Letter for Mimi 2 – wip #22

letter for mimi 2 editor mockup

After thinking about what I wrote in the previous update, I have decided to redo the Letter for Mimi 2 editor. Instead of just diving in, I am working on creating all the *.xml manipulating functionality first. Meanwhile I have also started on making mock-ups of how I want the menu’s to look like, which you can see above.

Letter for Mimi 2 – wip #21

Letter for Mimi  2 editor 2

In the screenshot above you can see the current state of the editor. For the GUI I used the tkinter package for Python, but it is a bit unintuitive to use which makes progress slow. I am in doubt if I should continue with this version or just start over and maybe use a different approach. This started out as a quick test to see how easy it is to make a GUI in Python, but now it has turned into a lot of spagetti code. Perhaps I will restart and first make all the functions necessary to manipulate the *.xml, and then make the GUI.

Letter for Mimi 2 – wip #18

Letter for Mimi 2 editor

In the screenshot above you can see the current progress for the Letter for Mimi 2 editor. The editor is able to create and export *.xml files, which can be used in the game engine. I am planning to be able to have enough functionality in the editor so I can create content fast en easily without having to hardcode things. A previous attempt was made to create an editor in Flash. Since creating desktop applications in standard Flash is not very easy, I decided to switch to Python for the editor.

The ‘game’ currently loaded in the editor corresponds with the xml below:

<?xml version='1.0' encoding='utf-8'?>
<worlds>
  <world id="newLevel" />
  <world id="Another level" />
</worlds>

It’s a start.