This is the beginnings of the homepage for ConceptMUD, a MUD for coders,
builders, Imps, and munchkins. This is where I attempt to:
- Begin fresh with my own codebase!
- Make a sane runtime DB.
- Use SQL rather then flatfiles/binary files to store everything.
- Reboot on segfault, preserving descriptors. More on reboot here
- Disallow direct structure writes. Everything must go through accessor functions.
Progress? You expect actual progress?
Ok, well:
- Dropped Diku core and began on a clean base... I might want to get paid someday.
I'm using the experience from working on diku/Circle to guide me in what to/not to do.
Apr 11 2000 -- Actually begin updating the page again.
- Finished core SQL abstraction layer.
- db.c: db_boot_places -- Load places/exit info from SQL
- db.c: created reference abstractions to force code to request/release objects.
- db.h: GET_X_Y()/SET_X_Y() macros to operate on opaque objects.
June 6 2000 -- another milestone.
- commlib. Created a now working communications library. This handles
accpeting new sockets, listeners, _AND_ allows you to give it a descriptor
that it otherwise wouldn't know how to handle. Very good stuff here.
- util.[ch]: Log, Error, etc macros. Basic but useful.
- ringbuffer: nice concept, and works. Too many layers right now. Need to take a
lot of the memory management logic out and put it in a seperate file (Vectors,
owners of memory chunks and refcounts. Better handled via malloc.c)
- created preliminary socket hooks for accept/read/close
Snippets available:
- sql.c/sql.h v0.1 in gzipped tarball here.
In progress now:
- Rebuilding DB to eliminate extra structures.
- Creating new person/place/thing structures and attributes.
- Creating a small 'world' to test with.
- Creating more of the runtime DB.
- Turning the interpreter system into a _FAST_ and dynamically-updatable hash table!
Near term TODO:
- Socket IO. -- Done
- to_char() functions.
- Basic interpreter
- Movement
- Character creation
- object saving to SQL.
- Create some basic skills.
Long term projects:
- Async SQL calls (so if the SQL server dies, the only player-noticible effect will be the inability to load characters.)
- OLC -- easy due to SQL backend.
- Making an actual sane hierarchy of skills/spells.
- Sanitizing keywords and object selection (all.dagger, 2.bag, shiny-helmet)
- Linked skills! (See the page on the new skill system)
Brainstorming.
- Open ended skills via a sliding scale. Percent difference is figured, and
looked up on a table (not quite linear) Designed that equal=50%
- Death is perminant. Re-incarnate with a decaying bonus to their original
skill level (past life memory) Make lots of ways to avoid death.
- Victory dosn't have to equal death.
- If you do some major task, NPCs may know about it. Slaying an evil dragon
or rescuing a unicorn. This goes beyond faction alignment and into true reputation.
World persistance is required.
- Item drop percentages... bad idea. Economy model, everything must be generated
somewhere. If an orc has an elven sword, there's an elf corpse somewhere.
- Item damage is also interesting. Prevention of said is based on your skills.
If you know how to wield your sword, it's less likely to be damaged.
- Subset of previous: damage thresholds. If you can't do N damage to something,
it dosn't take any. You're not gonna kill a dragon with a spitball gun.
- armor and weapon values... percent or absolute? Percent hurts the newbies,
absolute hurts the better players. Tough call.
- Guild ranks... various classes of guilds. But a GM in one should be comparable
to a GM in another. Should the guildleader be a player? Eventually.
- How do I sanely handle player training? What IS training, anyway?
- Offline actions. When you're not here, what should you be doing? Merchanting,
teaching? Studying?
- Limiting the addiction factor... skill training takes both practice and time
to set in. Time can be offline... both decay on each other. Skills advance
without practice (reflecting on what you've learned) and without time (pure practice)
but each has decaying returns. Idealy, you need to login for a few hours a few times
a week. (For a decent subset of skills)
- Going along with that, you can only reflect on one thing at a time, so let them
prioritize their learning (to an extent) while offline.
- Bluesky here, merchanting and teaching... let them teach, possibly for-profit.
merchanting is easy. Other professions? Risk/Reward? Can you die while offline?
can you lose posessions offline? Things to think about.
- The economy is going to take some thought. I'd ideally like to have an economy that
expands rather then inflates. Inter-player trading shouldn't be a completely different
economy then player-NPC trades.
- Come up with a good way for non-local communication. I'm thinking magic crystals,
myself. Earrings would be nice.
- Reptutation hints. When talking to someone, be able to find what your character's
memory of their reputation is. Not Events, just general reputation. For events,
gossip with NPCs
- Finally, a description engine. Base the results on your perception and various
factors on them... what stands out, etc. scars, piercings, glowing magic items,
etc. factor in new details if you look at them again. (limited list of people you've
looked at, depending on your memory.)