Our mission is to maintain an up to date CircleMUD codebase for all to enjoy and learn from.

When the world seems to be out of control the only thing to do is connect

Join us to...

Learn about the latest changes happening to the The Builder Academy codebase.
Easily create your new account on the tbaMUD.com site, and ask questions in the forum.
Play your part in creating the next version of the tbaMUD codebase.
Read the latest in MUD development techniques, building, coding, quest creation and scripting.
Scan your eyes through the quick and easy script and code examples available.
Get inspired by the creative writing examples from the world builders here at The Builder Academy.

What is The Builder Academy

TBA is a low stress, no deadline, training environment where anyone with motivation can work at their own pace to learn as much or as little as they desire about building on the tbaMUD codebase (formerly known as CircleMUD). TBA is a MUDding resource dedicated to improving the MUDding community.TBA has been operating since 2000 and has trained 1000's of builders.

Minimalistic tbaMUD 3.57

Since it will assuredly be requested and has been for every release so far here's an alternate download of tbaMUD 3.57 with only zones 0, 12, and 30. Also removed are the special procedure assignments for the zones that were removed and the file castle.c was entirely removed as all it contains is special procedures for the zone "King Welmar's Castle". Also the zones 0 and 30 were modified to no longer reference scripts, objects and mobs from zones 1 and 31 so that there are no errors at bootup.

EDIT: Realized the Port # wasn't 4000 any longer in the autorun because I'd booted it on slayn where I only have access to ports 8000-8002, now reverted.

tbaMUD 3.57

Download tbaMUD 3.57 here!
http://www.tbamud.com/filebrowser/patches/releases

Many bug fixes and more code clean-up!

Full changelog: tbaMUD 3.57
[Aug 11 2008] - Rumble
Updated World and files for 3.57 release.
[Aug 10 2008] - Fizban
Added sanity checks to zedit new. (Can no longer make zones that include negative vnums, also get the proper message when you have 3 of the 4 arguments.)
You can now put objects in and remove objects from closed containers as an imm with nohassle.
You can now walk through closed doors as an imm with nohassle on.
You can now open locked containers and doors without unlocking them as an immortal with nohassle.
You can now examine the contents of closed containers as an imm with nohassle.
Made zedit new added the .qst file to the index file.
Fixed various qedit related bugs. (thanks Mirad and Jamdog)
Removed deprecated "murder" code.
When pkill is on players can now order charmed mobs to attack other players.
Fixed 'toggle automap'.
Added a sacrifice command instead of their being autosac only. Also replaced Zizazat's name with more generic "The Gods" as it had obviously been ported from CWG previously.
Fixed Warning relating to Automap.
[Aug 03 2008] - Rumble
You can now see your own communications while sleeping for gos, auc, gra, etc. (thanks Drefs)
changed str_and_map to use target_room instead of IN_ROOM(ch). (thanks Vatiken)
[Aug 02 2008] - Welcor
Fixed a one-line bug in act.movement.c - caused crashes when moving into FLIGHT rooms.
[Jul 26 2008] - Rumble
Fixed autosplit to properly award gold to the person delivering the killing blow and then split it with the group. (thanks Maclir)
Added checks to qedit for questmaster not being set. (thanks Jamdog)
[Jul 08 2008] - Rumble
Removed duplicate questpoints listing in stat char. (thanks Mirad)
Fix to qedit for deleting all quests. (thanks Jamdog)
[Jul 06 2008] - Rumble
Changed sedit no trade with from undefined to nobits. (thanks Mirad)
[Jul 03 2008] - Rumble
Fixed lib/messages to properly display skill, spell, and damage messages. (thanks Tink)
[Jun 28 2008] - Rumble
Added player ability to cancel queued commands. i.e. player spammed kick while fighting but needs to flee so they type '--' to cancel so they can flee. (thanks Jamdog)
[Jun 28 2008] - Fizban
Merged Jamdog's moblist code into the pre-existing mlist command. (thanks Jamdog)
[Jun 14 2008] - Rumble
Made immortals immune to blinding.
Fixed bug in qedit where quest completion would try to load an object with vnum NOTHING. (thanks Jamdog)
Fixed log when builder tries to edit a zone without permission.
[Jun 12 2008] - Rumble
Fixed toggle quest to toggle correctly.
Fixed bug in dg find_replacement to call text_processed at the beginning, regardless of whether something matching the variable is found or not. (thanks Laoris)
Fixed log error that was using rnum instead of vnum. (thanks Jamdog)
[Jun 11 2008] - Rumble
Added notification via prompt for new MOTD and news entries. (thanks Jamdog)
Added all option to the restore command. (thanks Jamdog)
Added new trigger variable hasattached. (thanks Fizban)
[Jun 10 2008] - Rumble
Added spec proc type under stat. (thanks Jamdog)
Only allow immortals to talk while invis and be displayed as "someone." (thanks Frenze)
[May 27 2008] - Rumble
Fixed list_obj_to_char from only checking invisibility on first object of the same vnum. (thanks Laoris)
Added object stacking when looking at a character's inventory. (thanks Jamdog)
[May 22 2008] - Rumble
Added zone name to where command. (thanks Jamdog)
[May 21 2008] - Rumble
Rewrite of void script_vlog to prevent possible crash bug on some OS's. (thanks Jamdog)
[May 17 2008] - Rumble
Fixed a possible crash bug in qedit. (thanks Jamdog)
Bug fix: Page command was paging when the character was not found and sending a NOPERSON message when he was found.
[May 15 2008] - Rumble
Fixed a bug where deleting the last quest in qedit caused a crash. (thanks Jamdog)
Updated autorun to fix a random syslog numbering bug. (thanks Zizazat)
[May 10 2008] - Rumble
Fixed another typo, added a check for !NPC do_gen_comm, and changed do_return to only run autowiz if level changes. (thanks Fizban)
[May 08 2008] - Rumble
Cleaned up numerous warnings found by adding -Wextra -Wcast-qual -Wshadow -Wno-unused flags.
[May 05 2008] - Rumble
Changed command do_list_llog_entries to normal function, it was not being used as a command. (thanks Rhade)
Removed several useless if checks. (thanks Elanthis)
Fixed zmalloc to work on 64 bit machines.
[May 04 2008] - Rumble
Fixed numerous warnings for gcc -g -O2 -W -Wshadow -Wcast-qual flags.
Fixed zpurge mudlog to use zone vnum not rnum. (thanks Jamdog)
Fix to parse_mobile conversion to 128 bits. (thanks Jamdog)
Changed autorun.sh from 9091 to 4000. (thanks John Smith)
[Apr 27 2008] - Rumble
Removed some defunct gemote code. (thanks Fizban)
[Apr 26 2008] - Rumble
Added README.BSD. (thanks Blix)
Cleaned up act.comm.c, mobs can now use comm channels. (thanks Rhade)

On Vacation

My turn for a vacation, I'll be gone for one week. Checking in occasionally. As usual email myself and Welcor if there are any problems with the server or the game is down. Shamra is in charge with Fizban and Tink to back him up when he is not around. Have a good week everyone. tbaMUD 3.57 will be coming in August.

Difference between CircleMUD

This question came up again so here is an incomplete list of differences between stock CircleMUD 3.1 and tbaMUD: http://www.tbamud.com/files/changelog.txt

Updated Fishing Snippet

Introduction

I was looking to add in fishing on the new AstoriaTBA port, to help bide some time with the conversion, so I Googled for some snippets.

I came up with an old snippet, which I've seen done on some other MUDs, and figured why not. The snippet I found and modified here.

I wrote this guide to help people add in basic fishing for players. It is not meant to be a guide for advanced fishing and I am not claiming the original idea for it, nor even the code. It is written, tested, and works on stock tbaMUD. It may or may not work if your game is heavily modified or from an older version of CWG.

FIXES

send_to_chars were backwards.
Example: send_to_char("You need to be holding a fishing pole first.\r\n", ch);
should be:
send_to_char(ch, "You need to be holding a fishing pole first.\r\n");

number should be rand_number
Example: bite = number(1, 10);
should be:
bite = rand_number(1, 10);

Changed sprintf to send_to_char
Example: sprintf(buf, "You reel in %s! Nice catch!\r\n", fish->short_description);
should be:
send_to_char(ch, "You reel in %s! Nice catch!\r\n", fish->short_description);

Added in some things to interpreter.c and act.h as well

So here it is, revised, with all of the fixes. (Much thanks go to Fizban for helping squash several of the errors. His scripting website is here if anyone has any script related questions.)

Fishing Snippet

*** In structs.h, with all your player flags, add this to the bottom.

    #define PLR_CRYO             15   /**< Player is cryo-saved (purge prog) */
    #define PLR_NOTDEADYET       16   /**< (R) Player being extracted        */
+   #define PLR_FISHING          17   /**< Player has a line in the water    */
+   #define PLR_FISH_ON          18   /**< Player has a fish on their line   */


*** In structs.h, with your item types, add this to the bottom.

  #define ITEM_FOUNTAIN     23               /**< Item is a fountain         */
+ #define ITEM_POLE         24               /**< Item is a fishing pole     */


*** Be sure to increase #define NUM_ITEM_TYPES by one.

+ #define NUM_ITEM_TYPES    25


*** In structs.h, with your flags, add this to the bottom. Be sure to
*** increase NUM_ROOM_FLAGS by one.

  #define ROOM_BFS_MARK            15   /**< (R) breath-first srch mrk */
  #define ROOM_WORLDMAP            16   /**< World-map style maps here */
+ #define ROOM_SALTWATER_FISH      17   /**< Fish are saltwater        */
+ #define ROOM_FRESHWATER_FISH     18   /**< Fish are freshwater       */


*** In constants.c, add to const char *room_bits[] at bottom,
*** before "\n".

   "WORLDMAP",
+  "SALTWATER_FISH",
+  "FRESHWATER_FISH",
  "\n"


*** In constants.c, add to const char *player_bits[] at bottom, 
*** before "\n"

   "UNUSED5",
+  "FISHING",
+  "FISH_ON",
   "\n"


*** In constants.c, add to const char *item_types[] at bottom,
*** before "\n"
   "FOUNTAIN",
+  "FISHING POLE",
   "\n"


*** In act.item.c add at the bottom.

 ACMD(do_castout)
 {
   struct obj_data *pole;
   int fail;
 
   if (PLR_FLAGGED(ch, PLR_FISHING)) {
     send_to_char(ch, "You are already fishing!\r\n");
     return;
   }
   if (!(pole = GET_EQ(ch, WEAR_HOLD)) ||
       (GET_OBJ_TYPE(pole) != ITEM_POLE)) {
     send_to_char(ch, "You need to be holding a fishing pole first.\r\n");
     return;
   }
   if (!ROOM_FLAGGED(ch->in_room, ROOM_SALTWATER_FISH) &&
       !ROOM_FLAGGED(ch->in_room, ROOM_FRESHWATER_FISH)) {
     send_to_char(ch, "This is not a good place to fish, you'll want to find a "
                      "better spot.\r\n");
     return;
   }
  fail = rand_number(1, 10);
   if (fail <= 3) {
    send_to_char(ch, "You pull your arm back and try to cast out your line, but "
                     "it gets all tangled up.\r\nTry again.\r\n");
     act("$n pulls $s arm back, trying to cast $s fishing line out into the "
         "water,\r\nbut ends up just a bit tangled.\r\n",
          FALSE, ch, 0, 0, TO_ROOM);
     return;
   }
   /* Ok, now they've gone through the checks, now set them fishing */
   SET_BIT_AR(PLR_FLAGS(ch), PLR_FISHING);
   send_to_char(ch, "You cast your line out into the water, hoping for a bite.\r\n");
   act("$n casts $s line out into the water, hoping to catch some food.\r\n",
        FALSE, ch, 0, 0, TO_ROOM);
   return;
 }
 
 ACMD(do_reelin)
 {
   int success, f_num, fish_num;
   struct obj_data *fish;
 
   if (!PLR_FLAGGED(ch, PLR_FISHING)) {
    send_to_char(ch, "You aren't even fishing!\r\n");
     return;
   }
   if (!PLR_FLAGGED(ch, PLR_FISH_ON)) {
    send_to_char(ch, "You reel in your line, but alas... nothing on the end.\r\n"
                     "Better luck next time.\r\n");
     REMOVE_BIT_AR(PLR_FLAGS(ch), PLR_FISHING);
     act("$n reels $s line in, but with nothing on the end.\r\n",
         FALSE, ch, 0, 0, TO_ROOM);
     return;
   }
 
   /* Ok, they are fishing and have a fish on */
   success = rand_number(1, 10);
 
   REMOVE_BIT_AR(PLR_FLAGS(ch), PLR_FISHING);
   REMOVE_BIT_AR(PLR_FLAGS(ch), PLR_FISH_ON);
 
   if (success <= 6) {
    send_to_char(ch, "You reel in your line, putting up a good fight, but you "
                     "lose him!\r\nTry again?\r\n");

     act("$n reels $s line in, fighting with whatever is on the end, but loses "
         "the catch.\r\n", FALSE, ch, 0, 0, TO_ROOM);
     return;
   }
 
   /* We used object vnums 10030-10050 for our fish that people could
    * catch. The below numbers reflect that use. If you wish to change
    * the vnums of the fish, just change the numbers below. You can
    * see that we seperated the type of fish by freshwater and salt
    * water.
    */
   if (ROOM_FLAGGED(ch->in_room, ROOM_SALTWATER_FISH)) {
     fish_num = rand_number(10030, 10039);
     f_num = real_object(fish_num);
     fish = read_object(f_num, REAL);
     send_to_char(ch, "You reel in %s! Nice catch!\r\n",fish->short_description);
     act("Wow! $n reels in a helluva catch! Looks like $p!\r\n",
         FALSE, ch, fish, 0, TO_ROOM);
     obj_to_char(fish, ch);
     return;
   } else
   if (ROOM_FLAGGED(ch->in_room, ROOM_FRESHWATER_FISH)) {
     fish_num = rand_number(10040, 10050);
     f_num = real_object(fish_num);
     fish = read_object(f_num, REAL);
    send_to_char(ch, "You reel in %s! Nice catch!\r\n", fish->short_description);
   act("Wow! $n reels in a helluva catch! Looks like a $p!\r\n",
       FALSE, ch, fish, 0, TO_ROOM);
     obj_to_char(fish, ch);
     return;
   } else
   send_to_char(ch, "You should never see this message, please report it.\r\n");
   return;
 }


*** Now, in comm.c add to your voids at the top of the file.

  void check_fishing();


*** In comm.c in, before PULSE_DG_SCRIPT, add:

   if (!(pulse % (40 * PASSES_PER_SEC)))
     check_fishing();


*** In weather.c at the bottom, add:

void check_fishing() {

  struct descriptor_data *d;
  int bite;

  for (d = descriptor_list; d; d = d->next) {
    if (d->connected) continue;

    if (PLR_FLAGGED(d->character, PLR_FISHING) &&
      (!ROOM_FLAGGED(d->character->in_room, ROOM_SALTWATER_FISH) &&
       !ROOM_FLAGGED(d->character->in_room, ROOM_FRESHWATER_FISH)))
      REMOVE_BIT_AR(PLR_FLAGS(d->character), PLR_FISHING);

    if (PLR_FLAGGED(d->character, PLR_FISHING) &&
       !PLR_FLAGGED(d->character, PLR_FISH_ON)) {

     bite = rand_number(1, 10);

      if (bite >= 7 && bite <= 8) {
       send_to_char(d->character, "Time goes by... not even a nibble.\r\n");
      } else if (bite >= 6) {
        send_to_char(d->character, "You feel a slight jiggle on your line.\r\n");
      } else if (bite >= 4) {
        send_to_char(d->character, "You feel a very solid pull on your line!\r\n");
       SET_BIT_AR(PLR_FLAGS(d->character), PLR_FISH_ON);
      } else if (bite >= 2) {
        send_to_char(d->character, "Your line suddenly jumps to life, FISH ON!!!\r\n");
       SET_BIT_AR(PLR_FLAGS(d->character), PLR_FISH_ON);
      }
    }
  }
}


*** In act.movement.c, in do_simple_move add the below snippet just 
*** above char_from_room:

  if ((ROOM_FLAGGED(ch->in_room, ROOM_SALTWATER_FISH) ||
       ROOM_FLAGGED(ch->in_room, ROOM_FRESHWATER_FISH)) &&
      (PLR_FLAGGED(ch, PLR_FISHING) || PLR_FLAGGED(ch, PLR_FISH_ON))) {
    REMOVE_BIT_AR(PLR_FLAGS(ch), PLR_FISHING);
    REMOVE_BIT_AR(PLR_FLAGS(ch), PLR_FISH_ON);
    send_to_char(ch, "\r\nYou pack up your fishing gear and move on.\r\n\r\n");
  }


*** In fight.c in void damage, just under the Sanctuary check, add:

   /* Cut damage in half if victim has sanct, to a minimum 1 */
   if (AFF_FLAGGED(victim, AFF_SANCTUARY) && dam >= 2)
     dam /= 2;
 
  /* Player Fishing */
+    if (PLR_FLAGGED(victim, PLR_FISHING) && dam >= 4)
+        dam = ((float) dam * 1.5);


*** New: In interpreter.c under "cast" add:

   { "cast"     , "c"       , POS_SITTING , do_cast     , 1, 0 },
+  { "castout"  , "castout" , POS_SITTING , do_castout  , 0, 0 },


*** New! In interpreter.c under "receive" add:

   { "receive"  , "rece"    , POS_STANDING, do_not_here , 1, 0 },
+  { "reelin"   , "reelin"  , POS_SITTING , do_reelin   , 0, 0 },


*** New! In act.h add this below the other ACMD's of functions without subcommands:

    ACMD(do_rescue);
    /* Fishing */
+ ACMD(do_castout);
+ ACMD(do_reelin);


Fishing Help File

FISHING CASTOUT REELIN

Usage: castout
reelin

To fish, you must be near water, in a room specified as such. Also, you
must be holding a fishing pole. If you move from your original place of
fishing, you automatically pack up your gear and move on.

Anyone can fish, all you need is a fishing pole and patience.

Note: If you are fishing and get attacked, your fighting skills are
severely impeded, and you will take more than your average
damage until you reel your line in.

Happy fishing everyone!

New lib/messages

Thanks to Tink from Astoria for pointing out that spell messages were not working properly. Corrected messages file attached below. It turns out I did a find and replace (sed) to get rid of several ^M's leftover from MSDOS formatting. It also stripped the required M prior to every block of messages.

tbaMUD MUD's

I just wanted to take the time to welcome Astoria on to the tbaMUD band wagon. Jamdog is a major contributor to the tbaMUD codebase. Tink and Detta have been helping builders for years on TBA. I am looking forward to our continued joint ventures!

tbaMUD's:
The Builder Academy
Astoria
CrackWhip
Paragon
AderonMud
Azereth
Dragonball Fate
Smallville Untold Stories
Dragonball Awakening
Sermon MUD
Twilight's Failings

Let me know what tbaMUD's I missed.

tbaMUD codebase on TMC

The Mudconnector recently added the tbaMUD codebase to its list of MUD codebases. Those of you using tbaMUD can now update your TMC listing to show the proper codebase.

Syndicate content