Lycadican CRPG

Design Specifications

Graphics
  • 2D Isometric, diablo style.
  • Full Screen.
  • Min resolution, 800x600 funning full screen at min 256 color, standard should be 16bit.
Atmosphere:dark and sinister or Normal (Ultima Online look)
Libraries:
  • Imlib
  • Gtk+
Language:C++
Engine
  • Multiplayer
  • Plugable modules (world modules)
  • Independent game engine
  • C++, Java for networking and multiplayer.

Make a game engine completely open, without any traces of a story in it, and make it use different modules (I'll call the 'world modules') in which the map, story, etc. will be included.

This way, it will be in every sense like a traditional RPG (Fiddler on the roof again :) ): the game engine would be like the game itself, the world modules would act as the campaigns, and every person willing to create a new world module would be like a Dungeon Master. A game like this would be absolutely open and expandable without limits.

We could also make it networkable, so that different characters could play in the same world and collaborate (or fight) if they want to, but you could also load a module and play it all alone if that's what you want.

Finally, everybody on the Internet could write their own world modules. This would make it an incredible game, always growing. We have configuration file that defines the modules that are currently installed.

We have configuration file that defines the modules that are currently installed.

The init code would go through this list, and add a module object to a stack one by one. The module objects would be derived from a pure abstract class that defines functions that must be present, like Init, PlaceCreatures(x,y, possibly z and t), PlaceTreasure, IncrementTimeIndex, etc..

Whenever something needs to be done:
pseudo-code:

for (i=0; i< StackObject.length(); i++)
      StackObject(i).PlaceCreatures(x,y,z,t)

If a module doesn't have anything to do at the specific time (if this is a forward going story, some elements may not be available until a certain time has past, like a war or something), or at the specific location, it will pretty much immediately return.

Possibly another module object method, SizeLoc <or whatever we want to call it>, that returns not only the location of the module (if it is a new island or something), but the size. That way the main code can use this to determine the minimum size of the map that has to be generated/tracked, and still encompass all of the modules.

Character Class

ReadOnlyResourceLoader
        .retrieve()
        .exists()
ReadWriteResourceLoader extends ReadOnlyResourceLoader
        .store()

ResourceLoader implements ReadOnlyResourceLoader, 

                 ReadWriteResourceLoader
ImageResourceLoader extends ResourceLoader Dialog Sound Map Character data, Critter Item data Saved games (however we want to tackle that) User settings Magike info Game tables for combat/character creation. and, Character/NPC dialog.

modifiers

  • data
    • magnitude
    • target (what modifies)
    • scope (when active)
    • source (where it comes from)
  • methods/functions
    • boolean checkScope() // does this modifier apply here
    • getScope() // get the situation that the modifier applies in
    • getSource() // get where the modifer comes from
    • getTarget() // get what the modifier applies to
    • getMagnitude() // get the magnintude of the modifier +- X
    • setMagnitude() // you can figure these out
    • setScope()

In regards to modifiers we need to know what is being modified for each character, what the original value is and how much it is being modified by.

Each character will have a collection of modifier objects. One object per modifier.

There are a few ways we could get a characters current state with all modifiers applied:

We could have a master modifier object (more of a caching function of the engine) that totals all of the modifiers for each target (statistic) that a character has. It would have the same functions with the exception of getScope (as it would be global) It would need to know when any of the modifiers below it changed. Thus it would need a registry of all modifier objects
OR:
We could just iterate through all of the modifers adding them up.
OR:
Each stat. that may have modifiers would have a collection of modifier objects therefore eliminating the need to find the target. The problem is finding the scope and the fact that you can be in multiple scopes at any time.


Breakdown of needed character data:

Here is the character data that I could think of off the top of my head, The character class needs to be event driven, especially for modifiers. We need to track:

  • modifier objects for every modifier a character has.
  • skills
  • weapon abilities
  • abilities
  • powers

and the initial cost of each. and level of each. and if they go up levels or are static.

  • racial attributes and modifiers
  • attributes
  • healthpoint distribution
  • health die
  • defence rating (Natural)
  • base defence rating (according to level)
  • natural resistances
  • Body parts, what ones do you have
  • Flight class if applicable
  • alignment
  • tendency
  • social class
  • quirks
  • flaws
  • personality traits
  • appearance
  • handedness
  • wealth and wealth modifier
  • equiptment
  • age
  • height and weight
  • movement points
  • magike stats (a whole new ball game)
    • psychi points
    • spiritual life points
    • magikeal aspect skills
    • magikeal law skills
    • arcane art skills
      • need to cache
      • thresholds
      • spells
    • volatile percentage.
  • character development points
  • resistances
  • experience points cumulative
  • soul strength
  • life points
  • location of character Waato' si
  • diseases, curses and conditions( conditions overall and per body area)

We also need lookup tables on the games static tables.

Join Lycadican Developers