About this blog
Old-school dungeon crawling
Entries in this blog
The problem with me creating stuff, generally, is that I am a perfectionist. And that doesn't only apply to the outcome but also the process of making something. Countless times I've looked at my projects and thought to myself; "That's a complete mess.." even though it was probably just fine. And this project is not an exception.
I've redesigned and restructured the game code quite a few times, trying different ways I can put together namespaces, projects and classes to achieve a structure I'm genuinely satisfied with. And I've come to the conclusion that that is a total time waster (newsflash). So moving from XNA to MonoGame, or being even more ambitious and moving to SharpDX, will be the time I think the structure through thoroughly and just stick with it.
As XNA's future doesn't look too bright I've decided to migrate to MonoGame, which also gives me the opportunity to port to Linux and a variety of other platforms as well when the time comes, or SharpDX which will be a lot tougher but might give me a bit more insight into DirectX development. So the current milestone I'm facing is just moving the game over to MonoGame or SharpDX and get it up and running. If I decide to go with MonoGame I will try to check out what has to be done to get it running on Linux and Mac and see if it's worth the work right now.
In other news, I actually got some very... dull I guess, screenshots to show off.
All graphics (except the message list) is courtesy of Oryx (http://oryxdesignlab.com/).
Hopefully, next time I've moved over to MonoGame / SharpDX and have settled down on a code structure and can get into adding some real features!
Oh yes, this weekend has been filled with work. I've deviated a little bit from the tile and tile manager to do some more general stuff. I restructured a lot of my project and I feel I have most of my code where I want it and under control. GitHub's issues and milestones have really helped me get myself motivated, I've been up late nights just closing one more issue.
I decided to go with the Nuclex Framework's TrueType processor and the Bitstream Vera Sans Mono font which I think renders just perfectly. I also made up my mind to go with Oryx's Lofi Fantasy sprites during the development.
Some new features added are a debug overlay which shows the current FPS and the running game states. I also implemented the ability to load and save configuration options to an external file. Currently this only comprises of screen resolution, fullscreen option and keybindings though.
There's not a lot to show at the moment, the source code is now up to date on GitHub if anyone would want to look at it. I'm planning on importing one of my old goes at a tile system the comming days and then gradually modify it into what I'm looking for. Then there will be a lot more to show off.
I've just been soaked in work last week but it's clearing up. Some spare time has shown itself allowing me to work a little bit on my game though. Some stuff has been changed around and I've finally gotten around to learn Git and got myself a GitHub account set up. I have decided to publish my code there in a public repository, for the time being at least.
I got a small GameState system up and running and started with the message box as Ashaman73 pointed out would be smart in my last entry. After a bit of thinking I got the message box worked out just the way I want.
I'm not really satisfied by the font rendering in XNA. I created my own SpriteFont texture of the Consolas font but it's not really there yet. I might try out some different font processors (such as the VectorFont processor in Nuclex Framework) and see if there's any difference for the better.
Here's a demonstration of the message box in the current state: You can set different colours to every single letter, scroll through all the messages and they automaticly wrap depending on the width of the message box.
The next step is the tiles and tile manager. I'm not the greatest artist so I will probably start out using some free sprites to spend the most time actually developing the game. Maybe Oryx's famous Lofi Fantasy set. I would probably be stuck forever trying to create some sprites as I'm pretty much a perfectionist.
If anyone is interested in the source code you could look at it on GitHub. (EDIT: The repository is currently out of date as I'm shifting around some stuff in the project).
I've done a lot of experimenting with tiles before so hopefully this next step will be a fairly quick and painless milestone
So here I am again, a week later.. I did not really follow up my goals from last time. I have a hard time putting all my ideas on paper so I've decided to instead of writing a long and complicated design document I'm going to develop the game as it comes and instead make lists of features I want to implement and then create a planning to introduce them. So below follows first a little more describing image of my vision and a list of "steps" which will gradually build upon the game. These are a bit technical and doesn't really delve a lot into gameplay, as there's not a lot of it in these early stages.
"RPG4 is a hard, yet forgiving, strategic dungeon crawler similar to a rougelike. Turn and tile based with planning required in order to be successful. The game will be filled with interesting skills, spells, abilities and items you can flesh out you character with as you descend through the either handmade or procedurally generated dungeons RPG4 will have to offer."
Since I was very small I've always loved role-playing games, computer games as well as tabletop games such as Dungeons & Dragons. I've been interested in game development for a very long time too, and done rather a lot of programming.
- The first step is creating the tile manager and the tile. The tile class is abstract and will be extended with different type of tiles. This step will be capable of displaying tiles on the screen with different textures, animations, depths, alpha values (different extensions of the Tile class). The tiles that will be available in this step: wall, floor, blood ("decoration"), rock and water. These tiles will be able to demonstrate the capabilities above. Some tiles have their texture determined depending on the surrounding tiles. The user will also be able to scroll around the map by holder the right mouse button and moving the mouse around.
- This step will implement the actor and the player class. The actor class will be abstract and currently only exist for the player class to inherit from. The player class will be able to move around the map using the arrow keys and using the mouse by clicking on a tile next to the player. The player cannot walk upon some tiles, such as the wall and water tiles.
- This step will refactor the player class moving anything that is not player class-specific to the actor class. The NPC class will be implemented and extending the actor class. The concept of turns will also be introduced. All the actors will be enumerated upon allowing them to update. On the player's turn it will wait for user input. All NPCs will each tick arbitrarily either move or just stand still for the time being.
- This step will add the ability to interact with tiles and NPCs. Each Tile and NPC will have different actions when interacting with it. For the time being though, interacting with tiles will only cause the tile to change texture and interacting with an NPC will only cause the NPC to turn towards you.
- This step will expand on the interaction with tiles. A list of Tiles will will also be added to the Tile class. This list will be the "targets" of a Tile. When the player interacts with a tile, each tile in the "targets" list will also be indirectly interacted with. This will allow for remotely interacting with tiles via another tile. This step will implement the switch and door tiles to demonstrate this.
- This step will make it possible to save the map to an external file and load it. The maps will be saved as plain text for the time being. As the game will be a single player game, the only one being hurt by cheating is the player, therefore encrypting the maps might not be needed.
- This step will add fog of war to the game. The whole map will be covered in fog of war and only the tiles closest to the player's starting area will be uncovered. As the player explores more of the map will be revealed. Only the closest tiles to the player and tiles within the players sight will be illuminated as the player moves around. Other uncovered tiles will be darkened but still visible, other actors on these Tiles will not be visible though.
- This step will add a mini map to the game. This is the first GUI step. The tiles will be drawn a whole lot smaller in the mini map and tiles with special interactions will be highlighted. What the user sees on the main screen will be shown with a rectangle on the mini map.
- This step will add a message box at the bottom of the screen. It will display important messages, what actors say and other valuable information to the player. This message box will also be used to interact with some tiles and actors. The player will not be able to type in the message box but mearly select options presented to the player.
- This step will add dialogues to NPCs. The message box will be used to talk to actors. The player can select different options with responses in the message box to hold a conversation.
I think this kind of list of steps and implementations is just what I need to keep my mind clear and work on one specific task at a time. I've also decided to go down the route of C# and XNA. This is the language and framework I know best and with the ability to easily port it to Mono and MonoGame later on, possibilities of Mac and Linux ports are not far away.
As I am not really familiar with presenting ideas such as these to other people it's easy for me to presume you know what I'm talking about. I just discovered I didn't even tell you what platform the game would be for in the last entry so if there's any unclarities or questions you have I'd be glad to answer them as that also helps me develop the skill of presenting ideas to a totally new person that doesn't know anything about it.
That's all for now, I'll have a lot of other stuff to do the following week so I do not think a lot of time will be spent developing my game but the week after that I think I'll get to some programming!
There's been one thing that's been preventing me from developing my very own game though, and that is motivation. As soon as I'd hit a climbable brick wall I would hide and put my project down, sometimes for a long time until spiders would spin webs on them and they're all covered in dust, ready for the trash can. Now I have decided to finally overcome this problem of mine and produce my own game. So I've set up, what I find, to be a pretty reasonable project for my self that I am pretty confident I can overcome, with some quite hefty problems to solve. I will set deadlines for myself at the end of each week and hopefully update this journal with what's been accomplished during the past week.
In lack of a better name, I've come up with a project name out of the blue: RPG4. To describe this blank canvas, here's a small list of features which I would like to implement into this game.
- Turn-based movement and combat with a lot of strategic planning and ingenious use of your resources.
- Randomly generated maps along with handmade maps and the ability to create your own maps.
- An extensive skill and ability system, allowing you to advance your character in a range of branches. Not just some arbitrary increase in a stat, but skills and abilities that actually do something unique and gives your character... well, character.
- Permanent death. Although the game will be quite hard, dying will not be the first escape you can take. I don't want to cater the game to just hardcore players, but casual players as well that might not think dying of unexpected and / or random causes is very fun. Being able to escape death with other penalties some times also allows me to include a more skills and items to equip your character to the teeth with.
These are some of the features that I think would fit good into the game. To give a more general overlook of the game, some perfect examples of games that I might find inspiration from would be Baldur's Gate, Morrowind and Dungeons of Dredmor.
My goals until next week
- Write a comprehensive design document of the fundamental inner workings of the game, such as how the maps and movement will work.
- Set up a loose plan for the following weeks on what should be done.
- Not start coding something that's not really thought through...
I hope this will be an interesting journey for both me and whoever might decide to follow this journal, and I hope I will be able to produce something that will bring joy to at least some people.