Giter Club home page Giter Club logo

omegarpg's Introduction

Omega

A text-based roguelike game

Build Status Run on Repl.it

Building

Tools for building the game are located in the build directory.

OS X/Linux/Cygwin

The Makefile is located in build/unix. Running make in that directory will build everything.

Windows

Visual Studio solution/project files are located in build/win32. Since these files are typically incompatible with older versions of VS, each Visual Studio version has its own subfolder. Either:

Choose the subfolder appropriate to your version and open the OmegaRPG.sln file therein, or run the build_debug.bat file to automatically build the game.

About the Game

David Kinder sums it up pretty well:

Omega is a game written by Laurence Brothers in the late 1980s for Unix workstations. It derives principally from the tradition of earlier games such as Rogue and Hack, where the player explores a labyrinth of dungeons and monsters through the medium of an ASCII map display.

Omega is interesting as it was one of the first such games to show the influence of more story and quest led games, particularly the Ultima series that were released commercially by Origin Systems for various micros during the 1980s. Rather than simply wandering round a dungeon, in Omega the player has various paths open to them to appease the gods of Omega's world.

About this Project

Omega is a unique part of roguelike history, and deserves to be preserved.

The primary goal of this project is to make the codebase more maintainable. To that end, the code will be cleaned up and refactored from pure C to object-oriented C++. This will be no small task, but once accomplished, will greatly ease the barrier of entry for developers who might wish to contribute.

Future goals include extensibility by way of a popular scripting language such as Python or Lua (an apparently dead fork already exists that added a Scheme interpreter for certain components), a tile-based renderer (a la David Kinder's port), and of course an expanded game world with new gameplay elements.

omegarpg's People

Contributors

cwc avatar cyberfox avatar geozop avatar scoder12 avatar southernllama avatar vsrz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

omegarpg's Issues

Fast move appears to turn off randomly

Zipping down a long stretch of road will randomly (or erroneously) stop the player for no reason despite having no random events, doors, or NPC's adjacent to the player.

order of paladins in guild2.cpp does not update hitpoints on screen immediately after heal

order of paladins in guild2.cpp does not update hitpoints on screen immediately after heal, "Your wounds are treated by a medic." The code needs dataprint(); after Player.hp = Player.maxhp;

This is the code, in guild2.cpp:
if ((Player.hp < Player.maxhp) || (Player.status[DISEASED]) ||
(Player.status[POISONED]))
print1("Your wounds are treated by a medic.");
cleanse(0);
Player.hp = Player.maxhp;
dataprint(); //This is the fix, dataprint(); needs to be added after Player.hp = Player.maxhp;
if ( Player.food <= 40 )
{
Player.food = 40;
print2("You get a hot meal from the refectory.");
}

GameState object class refactor

Do you have any issues with refactoring game state into its own class? I'd like to track game milestones here; anything that calls gamestatusp or like functions in defs.h.

The idea for this came when trying to design the object classes. I'd like to use it to keep track of the creation of unique objects rather than inside the object struct which wouldn't work in the current design.

Finally I'd need to figure out how to save this object to the safe file.

Doesn't build properly on Windows

Since you've moved the folders the project doesn't build properly. Even after fixing the solution files and adding the additional header dependencies needed (errno.h, io.h, fcntl.h, and process.h) I'm still getting link errors.

When linking libcurses, I get _clrgen_init referenced in function _initgraf error. Did I miss something?

Implement Undead Guards

Undead guards in Rampart appears to be in the back end code but there's no way to reach that state.

Monster::transcribe_monster_actions() does not behave as expected

Basically there are 3 closely related problems, but a little bit of explanation is required before we can get to those.

Monsters with '?' in their meleestr are expected to cheat when it comes to their combat actions. In transcribe_monster_actions() it tallies up the total number of times the player blocks and attacks each location (high, center, or low) using 2 different int arrays p_blocks and p_attacks. Whichever location the player blocks the least is where a monster with "A?" in it's meleestr will attack (assuming it passes it's check. Otherwise it attacks a random location). It stands to reason that we should also expect "B?" to result in the monster blocking whichever location the player attacks the most. This leads us to the 2 bugs:

  1. Instead of blocking the location the player attacks the most, it actually blocks the location the player attacks the least. I believe this is the result of a simple copy/paste error by a previous dev for the project (possibly Laurence Brothers himself). Simply flipping from < to > in the relevant if-statements solves this.
  2. The game fails to accurately tally up the number of player attacks for each location. The reason it fails is because it only looks for 'A' or 'L' in Player.meleestr. However, as far as I know, 'A' will never be found in Player.meleestr. When the player sets their combat actions (in tacoptions() found in command3.cpp), 'A' gets turned into 'C' or 'T' in Player.meleestr depending on the type of weapon wielded by the player.
  3. This one may not actually be a real bug, but it kinda smells like one. transcribe_monster_actions() only checks for uppercase characters in Player.meleestr. I haven't checked every location that Player.meleestr is set in the source, but I do know that in goberserk() it sets Player.meleestr to "lLlClH". However, I do think it's' possible it uses lowercase on purpose in this instance in order to avoid having "B?" monsters cheat against the player. As a result of this, the monster will always block low (when it passes it's checks) because of the order of the if-statements it uses to determine which location has the least number of incoming attacks.

Convert individual objects to subclasses of Object

Depends on #8

Initial idea is for Object to define a virtual use method that takes various parameters such as a user and target (depending on the context they might be the same, or one might be null - potentially tricky but can probably be worked around), then the use method is overridden by each item to provide specific functionality.

Polymorph crashes game

Using a wand of polymorph or the spell generally seems to cause bad things to happen. Corpse appears in the top left corner of the map, the mob is invulnerable and invisible, etc. This happens in dungeons and in the city.

I can reproduce the problem both in Linux 2.6 and Win32 so I'm pretty sure it's not a curses issue.

A couple bugs

Eating a jelly belly crashes the game.

Loading a save file seems to reset the character's HP back to its level 0 amount of HP.

Dynamic NPC loading

  • Define format for NPC description files
  • Define directory structure (e.g. data/npcs)
  • Convert generic hardcoded NPCs to the dynamic system

This is not a task for current development. Until assigned to a real milestone, this is just a placeholder for planning and discussion.

Convert individual monsters to subclasses of Monster

  • Each monster should have its own class (e.g. MonsterHornet.cpp)
  • The Monster class should be made more generic (i.e. have virtual methods for attacking the player that will be overridden)
  • Each monster should subclass Monster in order to provide e.g. specialized attacks, movement behavior, etc.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.