Screenshots (and other graphics) -
This section hosts screenshots (all 4 of them!) from development.

Working background system and demo sprite -
Screenshot, click for full
(Click for full image)
As shown in the above, the background system works. That shot was done using the following:

Since the "detail tiles" (rocks/flowers) are offset and repeat at different rates, the background can theoretically scroll into near-infinity and never have precisely the same details on it. This way each "page" (oo, I'm using more lingo!) is different.

Isometric toggle switch (bool cam_order_y) -
Animated Image of Isometric View
Above is an animated image showing our beloved Bob navigating a forest dense with THREE tree sprites! Notice how he circles first behind and then infront of the tree on the right. Pure "cam_order_y = true;" action, baby. The code for this entire demo:

#include <SDL.h>
#include "cpengine2d.h"
#include "cpengineinput.h"

using namespace cpe;

int main() {
  CPInputKeyboard kb; //Declare the keyboard input handler.
  fill_color = 2794048; //Set the fill/wipe (background, really) to an off-green.
  cam_order_y = 1; //Turn on isometric ordering.
  init(150, 150, 32, 0, 100); //Initialize the engine and SDL.
  load_surface("graphics/sprites/bob.png", 0, 1); //Load bob.
  load_surface("graphics/terrain/tree1.png", 1, 1); //Load the tree.
  add_sprite(&w_sprites, get_surface(0), 0, 0, 0, 0, 0); //Add Bob as a sprite.
  add_sprite(&w_sprites, get_surface(1), 0, 30, 0, 1, 0); //Add a tree.
  add_sprite(&w_sprites, get_surface(1), 30, 20, 0, 1, 0); //Add another.
  add_sprite(&w_sprites, get_surface(1), 20, 10, 0, 1, 0); //And another.
  do {
    if (waitframe(30)) {
      if (kb.KeyIn(SDLK_q)) { break; }
      if (kb.KeyDown(SDLK_w)) { *get_sprite(&w_sprites, 0)->y -= 5; } //Move bob up.
      if (kb.KeyDown(SDLK_s)) { *get_sprite(&w_sprites, 0)->y += 5; } //Move bob down.
      if (kb.KeyDown(SDLK_a)) { *get_sprite(&w_sprites, 0)->x -= 5; } //Move bob left.
      if (kb.KeyDown(SDLK_d)) { *get_sprite(&w_sprites, 0)->x += 5; } //Move bob right.
      render(); //Update the screen.
  } while(true);
  return 0;
Isn't SDL fun?

(Shoddily done) Forest layer, over the demo sprite -
Screenshot, click for full
(Click for full image)
Here you can see that the sprite is ontop of the grass background but appears under the forest background. There is even functionality in the engine to coerce world sprites (including backgrounds) to render above screen sprites, though that was not used here.

Sample washing using edit_colorto() and edit_colorrangeto() -
Screenshot, click for full
(Click for full image)
Now for this shot I used edit_colorto() to wash the grass surface with 255,255,255 (white). Notice how the luminance levels are preserved.
Then, for the forest surface(s) (there are two of them) I washed only the green tree tops with edit_colorrangeto(). Although I washed with 0,255,255 (teal), the luminance levels are preserved to match. Excellent! The operation was fast and CPU painless.

Login prompt theory using CPE_input -
Screenshot, click for full
(Click for full image)
In the above shot there is a splash screen with basic login prompt. Instructions are printed in the "messages pane." Once you hit enter there is a pretty little fade to black, then the world fades into view.

I'm working on the graphics... by myself -
I haven't invested much time into these graphics because I'm busy programming instead. My priorities have drawing listed below code development.

And Counter-Strike listed above all.

Built using:
SDL logo CPE logo