1. Rogue Ahoy! 0.0.1a - Put A Bird On It

    I found SquidLib, which includes some FOV and LOS algorithms and doesn’t suffer from the problem of seeing walls diagonal from other walls. The results are much nicer.



    As a bonus it comes with a bunch of LOS algorithms and a conic FOV.

     
  2. Found a FOV library whose API fit very nicely with my own and popped it in last night/this morning. Results are OK. It’s showing walls that are behind walls though, so I think I’ll have to switch out the algorithm (which the library makes very easy) or dig in and tweak it. Eventually I’d like to learn more about writing my own FOV and LOS stuff, but for now I’m fine using 3rd party stuff.



    Next up:

    - Organize the code into actual game screens and libgdx scene2d components
    - Add some basic player stats, mostly so that I can render them
    - Add some basic UI stuff. This part is going to be annoying, so I want to get some structure in place for it right away
    - Add some static enemies
    - Add basic melee combat

    And more!

     
  3. I made a couple small tweaks this morning that produce slightly more pleasing results:

     
  4. Finished the room filling code the other night when I couldn’t sleep.



    I’m not entirely happy with the results since it seems like rooms tend to fill up the partitions, but I think that’s just a matter of playing around with min/max partition and room sizes.

    Next up is getting the corridors in. It will be nice to have this part done so I can get back to working on other parts of the game.

     
  5. Woop woop. After spending way too much time trying to connect up my BSP tree naively without resorting to any highfalutin pathfinding algorithms and endlessly wringing my hands over silly corner cases I finally said screw it and put in proper A* pathfinding to join up the partitions. I’m mostly happy with the results:



    The dungeons still have a tendency to be too linear, but this is just because of how I join up the non-leaf nodes in the BSP tree (by taking the lefmost and rightmost grandchildren if the right and left trees). The rest is just a matter of tweaking either the BSP tree settings (min/max partition, room size, etc.) or A* heuristics.

    Next up is to throw the PC into the actual dungeons, clean up some of the code (it got a little mangled while getting dungeon generation to work) and then move on to FOV I think.

     
  6. Rogue Ahoy! A terrible roguelike.

    This is a project log that I started elsewhere, and figured I’d start cross posting here.

    Background

    Rogue Ahoy is my attempt to finally see a game project through to something resembling completion. It is the most recent in a long line of aborted hobby game projects, but this time it’s different (just like every other time)! I’m hoping this log will help me actually see things through.

    Scope

    The scope for Rogue Ahoy is deliberately very narrow. I’m hoping that a narrow, well-defined scope will help me actually finish the damn thing. The goal is to create a very simple roguelike game that does nothing unique or interesting, but has all the trappings of the genre:

    - Randomly generated dungeons, however simple.
    - A mostly complete turn-based combat system with melee combat, ranged combat and a spell system.
    - A variety of level appropriate enemies.
    - Some form of simple enemy AI. Enemies that sleep, wander or seek out the player.
    - Basic stat system and combat modifiers.
    - Hunger system.
    - Field of view and fog of war.

    And so on. Nothing special. I have ideas for interesting things that I’d like to implement some day, but for now I just want to see a simple game through to completion.

    Technology

    I’ve decided to go with a tile based engine (written on top of Java/libgdx) from the very beginning, mostly because I already know how to do sprite based stuff reasonably well and screwing around with some terminal emulator or curses-esque library doesn’t sound like much fun to me. I’m using an ASCII tileset to simulate the terminal experience. I went with Java because it’s what I’m most familiar with, it’s cross platform, and I didn’t want to waste a lot of time wrestling with a language or development environment I’m less familiar with, which has stalled projects in the past.

    Current Status

    The project is still very much in its infancy. So far I have:

    - Simple world rendering. Able to render a world consisting of floor tiles and wall tiles.
    - PC movement and rendering.
    - The skeleton of a turn based system. PC movement is currently resolved through turns.
    - A simple scrolling game log to show game events.

    And in GIF form:



    Wow, that @ can really move.

    Next Up

    I’m currently working on some basic dungeon generation. I just implemented a basic binary space partitioning algorithm, but it seems to have a few bugs that I need to hammer out. This morning I whipped up a simple visualization applet for my BSP to help debug it, since it was impossible to just look at the list of partitions and see if anything was going wrong.

    Here it is in GIF form running through a bunch of iterations.



    Wow, look at all those squares. Just after typing this up I managed to fix a dumb bug in the generation. Now to fill the partitions with rooms and throw them into the game itself.