Created an initial README.
This commit is contained in:
parent
68d8bdce12
commit
aadf15e439
2 changed files with 87 additions and 6 deletions
91
README.md
91
README.md
|
@ -1,12 +1,95 @@
|
||||||
# roguish
|
# An Homage to Rogue
|
||||||
|
|
||||||
The next little game in the series where I make a fancy rogue game.
|
When I was a kid I played a game that used only text characters in a terminal called [Rogue](https://en.wikipedia.org/wiki/Rogue_(video_game). This game ran in my little MSDOS computer using only the ASCII characters the computer supported. No graphics and I think no sound but I can't remember. Despite this very low quality graphical experience the game delivered an amazing game experience. Even today the term "roguelike" denotes certain qualities that come from the original _Rogue_:
|
||||||
|
|
||||||
# OSX Build Notes
|
* Dying is permanent but each time you restart you'll retain some previous skills or equipment so
|
||||||
|
the next run is easier.
|
||||||
|
* However, it's only easier to the point where you previously died, as each level through the
|
||||||
|
dungeon gets more and more difficult.
|
||||||
|
* A randomly generated world (dungeon) that features a new experience every time.
|
||||||
|
* A focus on mechanics rather than graphics, but creative use of the limited graphical characters to
|
||||||
|
make the game playable.
|
||||||
|
* This lack of graphics weirdly makes the game _more_ imaginative because you have to fill in what's
|
||||||
|
going on with your own imagination, similar to a game of Dungeons and Dragons.
|
||||||
|
|
||||||
|
This is why I chose Rogue as the basis for my first actual game in C++.
|
||||||
|
|
||||||
|
## A "Classical" Game Development Education
|
||||||
|
|
||||||
|
In the world of art there's a concept of a "classical education," which means you learn to paint and
|
||||||
|
draw using old methods meant to teach a realistic style. These methods are hundreds--maybe even
|
||||||
|
thousands--of years old and work very well...assuming you have the patience. Learning to paint and
|
||||||
|
draw like this is almost an art history lesson since not many people do art using these techniques
|
||||||
|
anymore.
|
||||||
|
|
||||||
|
I'm planning to do my study of game development in the same way by making games in historic order.
|
||||||
|
Rather than run off and start using Unreal Engine immediately I'm going to make an homage to each
|
||||||
|
kind of game I played when I was younger. Each game I make will hopefully teach me both the history
|
||||||
|
of Game Development and also a technique that's either very useful or long forgotten.
|
||||||
|
|
||||||
|
My little Rogue game is the first entry in this series.
|
||||||
|
|
||||||
|
## It's Not 1980 Anymore
|
||||||
|
|
||||||
|
My goal is to maintain the constraint of "Text Only, but not Terminal Only." What I mean by this is
|
||||||
|
I'll use only text glyphs for the graphics in the game but I won't restrict myself to the textual
|
||||||
|
grid, layout, or traditional Terminal constraints. I'm rendering these characters using modern
|
||||||
|
graphics capabilities that allow me to create a more fun experience.
|
||||||
|
|
||||||
|
For example, I code the whole UI in a Terminal UI (TUI) library named [FTXUI](https://github.com/ArthurSonzogni/FTXUI) but I render the ANSI terminal output of FTXUI into an [SFML](https://www.sfml-dev.org/) window using an [ANSI Code Parser](https://git.learnjsthehardway.com/learn-code-the-hard-way/roguish/src/branch/main/ansi_parser.rl) that renders to a [Render Pipeline](https://git.learnjsthehardway.com/learn-code-the-hard-way/roguish/src/branch/main/render.cpp). This lets me render full Text UIs at one scale while rendering the map in a different scale and allow zooming.
|
||||||
|
|
||||||
|
I also use a full true color encoding so I can implement things like lighting effects and complex
|
||||||
|
color changes. I even have sounds, simple camera shake effects when you take damage, and other
|
||||||
|
things found in top-down games.
|
||||||
|
|
||||||
|
In addition to that, I'm not limited to _one character per cell_. Since I'm only treating
|
||||||
|
characters as sprites I'm actually able to layer them in the same cell, so I can show weapons being
|
||||||
|
held, damage effects, and other changes using character on the player or other entities.
|
||||||
|
|
||||||
|
## Why Not Just Use Pixel Art?
|
||||||
|
|
||||||
|
I mean...I am...it just looks like text. An Homage doesn't mean you copy something exactly. It
|
||||||
|
means you create something that's your own, but references or takes things from another artist's
|
||||||
|
work. It's a respectful copy that doesn't really steal but instead pays respects to those who came
|
||||||
|
before while still creating something new for the future.
|
||||||
|
|
||||||
|
In my game I'm using the constraint of "Text Only, not Terminal Only" to give me an artistic
|
||||||
|
constraint and to keep the game an homage to all the Rogues that came before.
|
||||||
|
|
||||||
|
But also, I mean c'mon folks, it's 2025. We do have sound now.
|
||||||
|
|
||||||
|
## Where's the LICENSE?
|
||||||
|
|
||||||
|
You don't need a LICENSE that gives everything away to thieving corporations just to publish your
|
||||||
|
works online. Nobody makes artists, musicians, painters, photographers, or sculptors get a license
|
||||||
|
before posting online, so why do programmers need one? You worried you'll get sued? Ok, so just put
|
||||||
|
a disclaimer but why do you _also_ have to give your hard work away for anyone to steal and profit
|
||||||
|
from just so they don't sue you?
|
||||||
|
|
||||||
|
You don't, and no matter what the OSI says, nobody can sue you if they steal your code and cause a
|
||||||
|
plane to crash. _They_ would get sued for stealing your code and putting it in a plane, not you.
|
||||||
|
Requiring _only_ programmers to release their code with a license to avoid lawsuits creates a
|
||||||
|
[Chilling Effect](https://www.thefire.org/research-learn/chilling-effect-overview) on programmer free speech and that violates the First Amendment.
|
||||||
|
|
||||||
|
So this code isn't licensed, it's copyright by default. I'm publishing it using my free speech
|
||||||
|
rights to express myself and that means you can look at it the same as if I posted a painting or an
|
||||||
|
essay on my blog. I obviously can't sue you for just looking at it and playing the game because I
|
||||||
|
published it so you can, but _that doesn't mean you own shit._ You can't resell it, fork it,
|
||||||
|
nothing.
|
||||||
|
|
||||||
|
Just grab the code and play it. That's it. Tell people about it. Fair use says you can even record
|
||||||
|
videos reviewing it and talking about it.
|
||||||
|
|
||||||
|
See? That's how Free Speech works. You don't need a LICENSE.
|
||||||
|
|
||||||
|
## Build Instructions
|
||||||
|
|
||||||
|
Coming soon, but I do know it builds on OSX and Linux. I primarily work on Windows.
|
||||||
|
|
||||||
|
## OSX Build Notes
|
||||||
|
|
||||||
* Quite a bad experience. Need to install Python, cmake, meson, and ninja all which are in homebrew but if you don't use homebrew then this is a problem.
|
* Quite a bad experience. Need to install Python, cmake, meson, and ninja all which are in homebrew but if you don't use homebrew then this is a problem.
|
||||||
* You need to run the .command script in Application/your python that updates the SSL certs.
|
* You need to run the .command script in Application/your python that updates the SSL certs.
|
||||||
* You have to give iTerm access to your keystrokes...because wtf it already has them?
|
* You have to give iTerm access to your keystrokes...because wtf it already has them?
|
||||||
* This points out a problem that I'm getting the keys using FTXUI but should either get them from SFML _or_ connect FTXUI to SFML's keyboard input events instead.
|
* This points out a problem that I'm getting the keys using FTXUI but should either get them from SFML _or_ connect FTXUI to SFML's keyboard input events instead.
|
||||||
* Takes forever to load on older computers, and I've got no idea why SFML is like that. It seems the sound system is a pig that takes forever to load, so am I using it wrong?
|
|
||||||
* No actually this first run delay seems to be related to the security feature that blocks keyboard access on iTerm, so probably fixing that would speed it up.
|
* No actually this first run delay seems to be related to the security feature that blocks keyboard access on iTerm, so probably fixing that would speed it up.
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
TODAY'S GOAL:
|
TODAY'S GOAL:
|
||||||
* Neighbors needs a rewrite
|
* Neighbors needs a rewrite
|
||||||
* Neighbors algo isn't using greater parameter
|
* Neighbors algo isn't using greater parameter
|
||||||
* How do we do coverage reports in C++?
|
|
||||||
* Better tests and more coverage.
|
|
||||||
* Clean up and document as much code as possible.
|
* Clean up and document as much code as possible.
|
||||||
* Doxygen? Other docs tool?
|
* Doxygen? Other docs tool?
|
||||||
* Add a method to render.cpp that sets terminal true color.
|
* Add a method to render.cpp that sets terminal true color.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue