Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

Visual concept.

For the game engine, I am planning to have a two-screen system, where one screen is for the debugger, that is testing the game made, and another for the editor, where the programming and other things are done. I think I might also add a third screen for editing ASCII art for the game, but that would happen only later, after the other screens are implemented properly. For now, I am thinking only about the visual aspects of the engine. But I might later plan on adding audios and sound effects. But it will most likely have to wait until most of the core features of the game engine are done.

Technical concepts.

Game loop.

A game loop is certainly among the most important aspects of a game or a game engine. Since this is an ASCII game engine, where updates need not be at 60 frames per second, I plan on implementing a very simple game loop using a 'forever()' command. The idea is that this command will run forever and the user can pass in a delay value, which is the amount of time in seconds the engine will wait before executing the next loop. Pretty simple concept. I might also let users change the wait time while the loop is running. That might be helpful.

The screen.

So, the screen is where the game actually takes place. I plan it to be a two-dimensional array of characters into which the user can write characters using the engine. There are two ways to write into the screen array. The first is where the user writes directly into the screen, manually changing the value/s of specific cell/s in the array. The other would be handled mostly by the engine itself. This method would use something called 'Blocks'.

Blocks.

Blocks are essentially just another two-dimensional array, like an image made of pixels, but instead of pixels Blocks use ASCII/Unicode characters to create an ASCII image. These can be pasted on top of the screen by the engine at a specific position that the user wants, when the user calls a 'draw()' function. There are two main advantages to the block system. The first is that it allows the user to group together a two-dimensional array of characters and operate on them as a whole and treat them like a single entity. This would be immensely helpful while making games. The second is that since each block has a position assigned to it, it can exist outside the screen array. This means that the user can draw a block at a position, say (250,250) in a screen array of size, say (100,100). The object can then exist outside the bounds of the screen array and only the parts of the object which overlaps with the screen array will be rendered by the engine.

The programming language.

Let us discuss about the programming language itself, or at least, a pseudo programming language. ASCIILang (Name change considered) is supposed to be an interpreted language, reading the statements line by line and executing them. So I will have to build a pseudo interpreter for this language. The language will offer facilities for basic arithmetic and logical operations as well as simple control statements like if, else, elif and maybe switch as well as basic loops. But perhaps the most important among these would be jump statements. ASCIILang would rely heavily on 'Labels', which are kind of like functions. They are segments of code which can be executed when called. Jump statements like goto, break, etc. would be crucial for handling labels. Maybe the labels can return a value too. At that point, it would be just better to call them functions. Anyway, I like to keep the scope simple for ASCIILang.

How I plan to implement these.

Godot. I'm not sure how stupid that sounds. Anyone with basic programming experience might use languages like C, C++ or Rust for these king of projects. And they would be right, these languages are GREAT for system level programming. They are fast, efficient and gives way more access to system hardware. The reasons why I am using Godot might sound stupid. It is because Godot has great UI designing, it is used by some people to build some pretty low-level tools, I have built a tool in it before and because I know GDscript better than any other language in the world, except Java. Those two are also my favorite languages. Hope I won't get crucified for saying Java is a favorite.