parent
6b9c67beec
commit
55feff23fb
@ -1,15 +1,134 @@ |
|||||||
# Simple Raycaster Study |
# The Artisinal Handcrafted Retro-Future "3D" Dungeon Crawler |
||||||
|
|
||||||
This is a study project for me to learn the raycasting technique. It's an older technique that's |
Welcome to my latest obsession, and turn based dungeon crawler in the style of old school raycasted |
||||||
not really used much but I'm learning game dev historically and it's definitely been used in the |
games like _Wizardry_, _Might and Magic_, _Ultima_, and similar games. The game uses SFML 3.x as |
||||||
past (Doom). |
it's "cross platform layer" but other than that everything is hand coded by me. It's fully |
||||||
|
artisinal, created manually, with nothing but a terminal and vim. No LSPs, AI, or anything. |
||||||
|
|
||||||
## Don't Study This Code |
This code is truly a work of art. Like an espresso at that Speakeasy Coffee bar in Brooklyn nobody |
||||||
|
talks about. You know the one? You don't? Oh sorry, I thought you were cool. |
||||||
|
|
||||||
This code is mostly a tech study and demo, not an actual game. It _could_ be a game but it will |
## STATUS |
||||||
require a significant cleanup to improve the layout and design. It's also the culmination of |
|
||||||
studying about 6 different tutorials on raycasting so it has a weird mix-match code style as I |
|
||||||
brought ideas over from other tutorials. |
|
||||||
|
|
||||||
Eventually this will be more understandable, but for now just browse it casually and ignore the |
Currently it's only officially tested on Windows, but I'm not really using anything OS specific (I |
||||||
inconsistent style and kind of stupid structure. |
think). |
||||||
|
|
||||||
|
## 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 it._ 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 |
||||||
|
|
||||||
|
On all platforms you'll need these components: |
||||||
|
|
||||||
|
* [Meson](https://mesonbuild.com/) -- which needs Python. |
||||||
|
* C++ Compiler -- Tested with Clang and G++. You can use my [Windows C++ Setup Guide](https://git.learnjsthehardway.com/learn-code-the-hard-way/lcthw-windows-installers) which features an automated installer for Windows. |
||||||
|
* [GNU make](https://www.gnu.org/software/make/) -- For the convenience Makefile. On Windows you should have this if you used my setup scripts. Otherwise `winget install ezwinports.make` will set you up. |
||||||
|
* [git](https://git-scm.com/) -- Which should be on almost every platform, and is installed by default with my Windows setup scripts. |
||||||
|
|
||||||
|
### Windows Instructions |
||||||
|
|
||||||
|
I primarily develop in Windows using the above setup, so this should work the best. Open [Windows |
||||||
|
Terminal](https://github.com/microsoft/terminal) and run these commands _one at a time_. Don't |
||||||
|
copy-past bomb this: |
||||||
|
|
||||||
|
```shell |
||||||
|
git clone https://git.learnjsthehardway.com/learn-code-the-hard-way/raycaster.git |
||||||
|
|
||||||
|
cd raycaster |
||||||
|
|
||||||
|
# ignore the errors the first time |
||||||
|
./scripts/reset_build.ps1 |
||||||
|
|
||||||
|
# first compile takes a while |
||||||
|
make |
||||||
|
|
||||||
|
# this copies the binary so you can run it |
||||||
|
make run |
||||||
|
``` |
||||||
|
|
||||||
|
After that the game should be running. It'll be in different states depending on how far I've |
||||||
|
pushed it, but you should at least have a few enemies, some loot, and rooms light in it. Go find them. |
||||||
|
|
||||||
|
## Linux and OSX |
||||||
|
|
||||||
|
Linux and OSX have the same requirements as Windows and almost the same install steps. The only |
||||||
|
difference is that once you get your developer tools installed then you only need [Meson](https://mesonbuild.com/). Linux and OSX should have everything else you need or there's a package for it. |
||||||
|
|
||||||
|
Once you have that installed you can run these commands: |
||||||
|
|
||||||
|
```shell |
||||||
|
git clone https://git.learnjsthehardway.com/learn-code-the-hard-way/raycaster.git |
||||||
|
|
||||||
|
cd raycaster |
||||||
|
|
||||||
|
# ignore the errors the first time |
||||||
|
./scripts/reset_build.sh |
||||||
|
|
||||||
|
# first compile takes a while |
||||||
|
make |
||||||
|
|
||||||
|
./builddir/raycaster |
||||||
|
``` |
||||||
|
|
||||||
|
You don't need `make run` because Linux and OSX are sane operating systems that don't lock every |
||||||
|
damn thing a process touches. |
||||||
|
|
||||||
|
### Other Platforms |
||||||
|
|
||||||
|
No testing done on other platforms but let me know if you get it to build somewhere fun and I'll |
||||||
|
mention it. |
||||||
|
|
||||||
|
## Development Guide |
||||||
|
|
||||||
|
You can look in the `notes.txt` file for my informal TODO list of things to fix and make. I'm not |
||||||
|
really accepting contributions from others, but if you want to follow along then that's what I'm |
||||||
|
doing. |
||||||
|
|
||||||
|
If you're just starting out in C++ or programming then the project is designed to be readable by |
||||||
|
someone who knows very little. Every file is small and should be easy to read. I don't use any |
||||||
|
insane tricks or weird C++ idioms. I also try to avoid too many external libraries so I'll use |
||||||
|
plain old [std::vector]() and [std::unordered_map]() rather than external libraries that might be |
||||||
|
faster. This is done _on purpose_ so people (myself included) can learn about the basics of C++ and |
||||||
|
the STL. |
||||||
|
|
||||||
|
I also don't do a lot of performance tuning or obsession over _THE CACHE_. Clean, simple, readable |
||||||
|
code is more important than squeezing 4% performance out of the code. I do however attempt to |
||||||
|
design things so that it doesn't do useless work because the fastest thing you can do in a computer |
||||||
|
is nothing. If I can architect away a performance issue and not make the code too complex then I'll |
||||||
|
do that instead. |
||||||
|
|
||||||
|
That means if you have a suggestion for a micro-benchmark improvement that will dramatically boost |
||||||
|
performance, but the code is convoluted and hard to understand, then it won't work. If your |
||||||
|
suggestion is interesting and provides a massive boost then let me know and I'll check it out. But, |
||||||
|
I would also like statistics that show it's better, not just your word. |
||||||
|
|
||||||
|
## Known Bugs |
||||||
|
|
||||||
|
It's early so probably a bunch of bugs. |
||||||
|
|
||||||
|
## 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. |
||||||
|
* 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? |
||||||
|
Loading…
Reference in new issue