Halfway Across
Inspired by my love of slow-paced revisionist westerns like Jeremiah Johnson and The Assassination of
Jesse James by the Coward
Robert Ford, this parser-based interactive fiction game—enhanced with artwork and sound—follows a man
adjusting to life
as a mountain man in the late 1800s. I created this project to explore Object-Oriented Programming in C++ and
GUI
development with Qt.
Tech Stack
| Category |
Technology Used |
| Language |
C++ |
| Compiler |
GCC |
| Build System |
CMake |
| Framework |
Qt |
| Operating System |
Linux, Windows |
| License |
GNU General Public License V2 |
Gameplay Mechanics
- Crafting: Use resources to make items that can aid in your survival
- Hunting: Obtain raw food and other resources by hunting animals in the valley
- Ice Fishing: Obtain raw food by catching fish at the lake
- Resource Management: Weigh the costs and benefits of keeping an item on your person during
your
travels
- Social Interaction: Converse and trade with travelers, knowing that your dialogue choices
will
impact how they perceive you
Challenges & Solutions
- Complex Entities: It became clear while planning the project that several aspects of the
game
would have many attributes (e.g.
entities, player, and world state), this made them ideal candidates for implementing as objects
- Commands & Aliases: Early in development, I didn't have a concrete idea of what commands
and
aliases would be essential to make the game
intuitive. My solution to this was to periodically have friends and family members play the game while I
noted
where
unsupported commands were encountered for later implementation. This testing also revealed that an
individual's
manner of speaking can influence what filler words they might try to enter, so the game filters those out
- Ambiguous Navigation: The visual style is intentionally hazy and lo-fi, which doesn't make
it
clear what directions the player can move from their current position. I found that the best solution was to
add
a compass to the UI that displays which directions are accessible
Lessons Learned
- Header Guards: I discovered the importance of header guards when dealing with multiple
source
files, which I had not needed in my
simpler C/C++ projects
- Interpreter Architecture: As a text adventure is essentially a specialized interpreter,
writing
one introduced me to concepts like
Read-Eval-Print Loops and lexical tokenization
- Modular Design: This project required me to develop a sense of when something should be
modularized, as the projects that I built
before this weren't expansive enough to warrant splitting into multiple header and source
files
Future Plans
Although my focus has shifted toward systems programming and reverse engineering throughout my education, I
intend
to return to this
project occasionally to expand on its mechanics and narrative.
Further Reading
View Source Code on
Github