7DRL – RogueAgent Day 4

What a slog! Today was some hard-won improvements. The engine is now real-time (60 FPS+) with two game simulation ticks per second. This lets you animate things independently from the game simulation.

The idea behind this was to have something approaching a modern roguelike. I don’t want to play this over a TTY, I want things to look nice. An idea I had was you start outside an evil base. You’re on a sandy beach and that’s signalled by slightly undulating water, rather than just a ragged yellow area with a blue area next to it. Or you know when you’ve tripped the alarms because lights pulse red (even though you have all the time in the world between movements to strategise).

The system is also much more modular and has a primitive window system. So when I want to put some UI on, it won’t be too much of a pain… hopefully! Also I could do lighting and shadow in another pass, but I’m staying well away from that at the moment.

There’s some fundamental flaw in how I’m doing rendering and I can either have humans moving around nicely overlayed on the background, or I can have opaque objects (like the ticker display). I want both, but the way that the console blitting system works, it’s broken. Only very late did I realize that a cell with the blit-transparent chroma key is completely ignored, and not just the background. Basically I was hoping to green-screen some characters and I cut them out entirely.

I’ve started a BUGS list because I’m painfully aware of some goofy stuff in the code already. I added code for scrolling the screen if your guy moves too close to the edge of the screen. That’s broken for some dumb reason. Coding is hard!

I also pushed some magic constants out to configuration files.

I also did a bunch of chores around the house and watched 3 episodes of Mr Robot.

I have an idea to fix my transparency problem tomorrow. Then after some social outings, I might try to quickly fix the graphics problems and then declare graphics done. I’m sick of graphics! I need gameplay!

I have about 20K of code so far, with 750 lines of code.

Changelog

## [0.0.4] - 2017-03-11

The huge graphical update! Lots of rewriting of almost everything.

### Added

- Primitive Windowing system

### Changed

- The entire graphical stack.
    - Slipped in a GUI layer
    - Objects manage their own little render maps
    - Scope for a lighting layer

## [0.0.3] - 2017-03-11

### Added

- Keybindings interface.
- BUGS list
- Engine configuration file

### Changed

- Game loop is now real-time, 2 updates per second, and 60 FPS rendering.
    - GameObjects are given timestamps to adjust rendering.
- Engine controls screenshots.

### Fixed

- Screenshot key now works.

## [0.0.2] - 2017-03-09

### Added

- Generic GameMap code
- `maps/` now contains different maps.
- Filled rectangles utility code
- HQ Map
- Take screenshots with PrintScreen
- Nifty scrolling ticker screen

### Changed

- Maps and GameObjects now render themselves onto a console. This
  allows them to be multi-tile and do things like (fake) glow.
- Tiles now store their own colour
- Test map code moved to its own GameMap
- Player and NPC are now Human objects
- GameObject is very lean

## [0.0.1] - 2017-03-08

### Added

- Core TCOD engine
    - Game loop
    - Clean exit on ESC or Ctrl-C
- Base World functionality (stores a map, a PC and a list of NPCs)
- Base Viewport functionality
    - Walls and floor
    - PCs and NPCs
- Base Object functionality
    - Movement
    - Wall blocking movement
    - Rendering
- Base Map functionality
    - Custom map with some walls
- Utilities
    - Box-drawing (AABB, origin+(width,height), centered)