diff -uprN src/act.informative.c circle/src/act.informative.c --- src/act.informative.c Sun Jan 03 19:10:01 1999 +++ circle/src/act.informative.c Wed Jan 06 00:21:23 1999 @@ -51,6 +51,7 @@ extern char *race_abbrevs[]; extern char *room_bits[]; extern char *spells[]; extern char *sector_types[]; +extern char *bridges[]; extern char *pc_class_types[]; extern char *pc_race_types[]; @@ -463,12 +466,15 @@ void look_at_room(struct char_data * ch, send_to_char(CCCYN(ch, C_NRM), ch); if (PRF_FLAGGED(ch, PRF_ROOMFLAGS)) { sprintbit((long) ROOM_FLAGS(ch->in_room), room_bits, buf); -/* sprintf(buf2, "[%5d] %s [ %s]", world[ch->in_room].number, - world[ch->in_room].name, buf); */ sprinttype(SECT(ch->in_room), sector_types, buf1); + sprinttype(BRIDGE(ch->in_room), bridges, buf3); - sprintf(buf2, "[%5d] %s [ %s] [ %s ]", world[ch->in_room].number, - world[ch->in_room].name, buf, buf1); + if (BRIDGE(ch->in_room) > 0) + sprintf(buf2, "[%5d] %s [ %s] [ %s ] [ %s ]", world[ch->in_room].number, + world[ch->in_room].name, buf, buf1, buf3); + else + sprintf(buf2, "[%5d] %s [ %s] [ %s ]", world[ch->in_room].number, + world[ch->in_room].name, buf, buf1); send_to_char(buf2, ch); } else send_to_char(world[ch->in_room].name, ch); diff -uprN src/act.movement.c circle/src/act.movement.c --- src/act.movement.c Sun Jan 03 18:02:31 1999 +++ circle/src/act.movement.c Wed Jan 06 09:45:37 1999 @@ -30,6 +30,7 @@ extern struct index_data *obj_index; extern int rev_dir[]; extern char *dirs[]; extern char *sector_types[]; +extern char *bridges[]; extern int movement_loss[]; /* external functs */ @@ -64,7 +65,26 @@ int has_boat(struct char_data *ch) return 0; } - + +void damagerolls(struct char_data * ch) +{ + int dam; + + if (IS_AFFECTED(ch, AFF_SANCTUARY)) { + dam = MIN(dam, 18); /* Max 18 damage when sanctuary */ + send_to_char("Your sanctuary eases some of the blow!\r\n", ch); + } + dam = MIN(dam, 100); /* no more than 100 hp per round */ + dam = MAX(dam, 0); /* no less than 0 hp per round */ + /* You can't damage an immortal! */ + if ((GET_LEVEL(ch) >= LVL_IMMORT) && !IS_NPC(ch)) + dam = 0; + GET_MAX_HIT(ch) -= dam; + GET_HIT(ch) = GET_MAX_HIT(ch); + sprintf(buf, "You've permanently lost %d hitpoints due to the damage caused!\r\n", dam); + send_to_char(buf, ch); +} + /* do_simple_move assumes * 1. That there is no master and no followers. @@ -131,7 +151,6 @@ int do_simple_move(struct char_data *ch, } } - /* move points needed is avg. move loss for src and destination sect type */ need_movement = (movement_loss[SECT(ch->in_room)] + movement_loss[SECT(EXIT(ch, dir)->to_room)]) >> 1; @@ -168,7 +187,7 @@ int do_simple_move(struct char_data *ch, return 0; } } - + if ((riding || ridden_by) && IS_SET(ROOM_FLAGS(EXIT(ch, dir)->to_room), ROOM_TUNNEL)) { send_to_char("There isn't enough room there, while mounted.\r\n", ch); return 0; @@ -245,6 +264,14 @@ int do_simple_move(struct char_data *ch, if (ch->desc != NULL) look_at_room(ch, 0); + + /* Okies, did they bridge it? */ + if (((BRIDGE(ch->in_room) == BRIDGE_SMALL) && (GET_WEIGHT(ch) >= 100)) || + ((BRIDGE(ch->in_room) == BRIDGE_MEDIUM) && (GET_WEIGHT(ch) >= 150)) || + ((BRIDGE(ch->in_room) == BRIDGE_LARGE) && (GET_WEIGHT(ch) >= 200))) { + send_to_char("Uh oh, you're too heavy and fall off the bridge!\r\n", ch); + damagerolls(ch); + } // DT! (Hopefully these are rare in your MUD) -dak if (IS_SET(ROOM_FLAGS(ch->in_room), ROOM_DEATH)) { diff -uprN src/constants.c circle/src/constants.c --- src/constants.c Sun Jan 03 22:04:03 1999 +++ circle/src/constants.c Tue Jan 05 21:14:57 1999 @@ -93,6 +93,18 @@ const char *sector_types[] = { }; +/* BRIDGE_ */ +/* Make SURE you change the BUFFER (buf3) in redit.c and act.informative.c * + * if the text here is enlargened. JB 04/01/99 */ +const char *bridges[] = { + "None", + "Small", + "Medium", + "Large", + "\n" +}; + + /* SEX_x */ const char *genders[] = { diff -uprN src/db.c circle/src/db.c --- src/db.c Sun Jan 03 22:04:43 1999 +++ circle/src/db.c Mon Jan 04 22:33:15 1999 @@ -733,13 +733,14 @@ void parse_room(FILE * fl, int virtual_n world[room_nr].name = fread_string(fl, buf2); world[room_nr].description = fread_string(fl, buf2); - if (!get_line(fl, line) || sscanf(line, " %d %s %d ", t, flags, t + 2) != 3) { + if (!get_line(fl, line) || sscanf(line, " %d %s %d %d ", t, flags, t + 2, t + 3) != 4) { fprintf(stderr, "SYSERR: Format error in room #%d\n", virtual_nr); exit(1); } /* t[0] is the zone number; ignored with the zone-file system */ world[room_nr].room_flags = asciiflag_conv(flags); world[room_nr].sector_type = t[2]; + world[room_nr].bridge = t[3]; world[room_nr].func = NULL; world[room_nr].contents = NULL; diff -uprN src/db.h circle/src/db.h --- src/db.h Thu Dec 24 00:45:41 1998 +++ circle/src/db.h Mon Jan 04 22:44:17 1999 @@ -215,11 +215,13 @@ struct ban_list_element { char buf[MAX_STRING_LENGTH]; char buf1[MAX_STRING_LENGTH]; char buf2[MAX_STRING_LENGTH]; +char buf3[MAX_STRING_LENGTH]; char arg[MAX_STRING_LENGTH]; #else extern char buf[MAX_STRING_LENGTH]; extern char buf1[MAX_STRING_LENGTH]; extern char buf2[MAX_STRING_LENGTH]; +extern char buf3[MAX_STRING_LENGTH]; extern char arg[MAX_STRING_LENGTH]; #endif diff -uprN src/olc.h circle/src/olc.h --- src/olc.h Sun Dec 27 00:12:05 1998 +++ circle/src/olc.h Mon Jan 04 22:15:27 1999 @@ -32,13 +32,14 @@ #define NUM_ROOM_FLAGS 18 /* Indoors, Death, etc */ #define NUM_ROOM_SECTORS 13 /* Fly, Underwater, etc */ +#define NUM_BRIDGES 4 /* Bridge types */ #define NUM_MOB_FLAGS 21 /* Nobash, Sentinel, etc */ #define NUM_OBJAFF_FLAGS 22 #define NUM_ATTACK_TYPES 15 -#define NUM_ITEM_TYPES 33 /* Weapon, Note, etc */ -#define NUM_ITEM_FLAGS 30 /* Glow, hum, etc */ +#define NUM_ITEM_TYPES 32 /* Weapon, Note, etc */ +#define NUM_ITEM_FLAGS 32 /* Glow, hum, etc */ #define NUM_ITEM_WEARS 18 /* Wield, Hold, etc */ #define NUM_AFF_FLAGS 24 /* Affects */ #define NUM_APPLIES 28 /* Regen, Hitroll, etc */ @@ -215,6 +216,7 @@ extern struct olc_save_info *olc_save_li #define REDIT_EXTRADESC_MENU 14 #define REDIT_EXTRADESC_KEY 15 #define REDIT_EXTRADESC_DESCRIPTION 16 +#define REDIT_BRIDGE 17 /* * Submodes of ZEDIT connectedness. diff -uprN src/redit.c circle/src/redit.c --- src/redit.c Wed Oct 21 20:28:27 1998 +++ circle/src/redit.c Mon Jan 04 22:43:47 1999 @@ -30,6 +30,7 @@ extern struct obj_data *obj_proto; extern struct char_data *mob_proto; extern char *room_bits[]; extern char *sector_types[]; +extern char *bridges[]; extern char *exit_bits[]; extern struct zone_data *zone_table; extern sh_int r_mortal_start_room; @@ -51,6 +52,7 @@ void redit_disp_exit_menu(struct descrip void redit_disp_exit_flag_menu(struct descriptor_data *d); void redit_disp_flag_menu(struct descriptor_data *d); void redit_disp_sector_menu(struct descriptor_data *d); +void redit_disp_bridge_menu(struct descriptor_data *d); void redit_disp_menu(struct descriptor_data *d); void redit_parse(struct descriptor_data *d, char *arg); void redit_setup_new(struct descriptor_data *d); @@ -351,10 +354,10 @@ void redit_save_to_disk(int zone_num) /* * Forget making a buffer, lets just write the thing now. */ - fprintf(fp, "#%d\n%s~\n%s~\n%d %d %d\n", counter, + fprintf(fp, "#%d\n%s~\n%s~\n%d %d %d %d\n", counter, room->name ? room->name : "undefined", buf1, zone_table[room->zone].number, - room->room_flags, room->sector_type); + room->room_flags, room->sector_type, room->bridge); /* * Handle exits. @@ -499,6 +502,7 @@ void redit_disp_extradesc_menu(struct de OLC_MODE(d) = REDIT_EXTRADESC_MENU; } + /* * For exits. */ @@ -600,6 +604,26 @@ void redit_disp_sector_menu(struct descr OLC_MODE(d) = REDIT_SECTOR; } + +/* + * For bridges. + */ +void redit_disp_bridge_menu(struct descriptor_data *d) +{ + int counter, columns = 0; + +#if defined(CLEAR_SCREEN) + send_to_char("[H[J", d->character); +#endif + for (counter = 0; counter < NUM_BRIDGES; counter++) { + sprintf(buf, "%s%2d%s) %-20.20s %s", grn, counter, nrm, + bridges[counter], !(++columns % 2) ? "\r\n" : ""); + send_to_char(buf, d->character); + } + send_to_char("\r\nEnter bridge type : ", d->character); + OLC_MODE(d) = REDIT_BRIDGE; +} + /* * The main menu. */ @@ -612,6 +636,7 @@ void redit_disp_menu(struct descriptor_d sprintbit((long)room->room_flags, room_bits, buf1); sprinttype(room->sector_type, sector_types, buf2); + sprinttype(room->bridge, bridges, buf3); sprintf(buf, #if defined(CLEAR_SCREEN) "[H[J" @@ -627,10 +652,7 @@ void redit_disp_menu(struct descriptor_d "%s8%s) Exit west : %s%d\r\n" "%s9%s) Exit up : %s%d\r\n" "%sA%s) Exit down : %s%d\r\n" -/* "%sB%s) Exit northeast : %s%d\r\n" - "%sC%s) Exit northwest : %s%d\r\n" - "%sD%s) Exit southeast : %s%d\r\n" - "%sE%s) Exit southwest : %s%d\r\n" */ + "%sB%s) Bridge Data : %s%s\r\n" "%sF%s) Extra descriptions menu\r\n" "%sS%s) Script : %s%s\r\n" "%sQ%s) Quit\r\n" @@ -660,19 +682,8 @@ void redit_disp_menu(struct descriptor_d grn, nrm, cyn, room->dir_option[DOWN] && room->dir_option[DOWN]->to_room != -1 ? world[room->dir_option[DOWN]->to_room].number : -1, -/* grn, nrm, cyn, - room->dir_option[NORTHEAST] && room->dir_option[NORTHEAST]->to_room != -1 ? - world[room->dir_option[NORTHEAST]->to_room].number : -1, - grn, nrm, cyn, - room->dir_option[NORTHWEST] && room->dir_option[NORTHWEST]->to_room != -1 ? - world[room->dir_option[NORTHWEST]->to_room].number : -1, - grn, nrm, cyn, - room->dir_option[SOUTHEAST] && room->dir_option[SOUTHEAST]->to_room != -1 ? - world[room->dir_option[SOUTHEAST]->to_room].number : -1, - grn, nrm, cyn, - room->dir_option[SOUTHWEST] && room->dir_option[SOUTHWEST]->to_room != -1 ? - world[room->dir_option[SOUTHWEST]->to_room].number : -1, */ - grn, nrm, + grn, nrm, cyn, buf3, + grn, nrm, grn, nrm, cyn, room->proto_script?"Set.":"Not Set.", grn, nrm ); @@ -780,26 +791,10 @@ void redit_parse(struct descriptor_data OLC_VAL(d) = DOWN; redit_disp_exit_menu(d); break; -/* case 'b': + case 'b': case 'B': - OLC_VAL(d) = NORTHEAST; - redit_disp_exit_menu(d); - break; - case 'c': - case 'C': - OLC_VAL(d) = NORTHWEST; - redit_disp_exit_menu(d); - break; - case 'd': - case 'D': - OLC_VAL(d) = SOUTHEAST; - redit_disp_exit_menu(d); + redit_disp_bridge_menu(d); break; - case 'e': - case 'E': - OLC_VAL(d) = SOUTHWEST; - redit_disp_exit_menu(d); - break; */ case 'f': case 'F': /* @@ -867,6 +862,16 @@ void redit_parse(struct descriptor_data return; } else OLC_ROOM(d)->sector_type = number; + break; + + case REDIT_BRIDGE: + number = atoi(arg); + if (number < 0 || number >= NUM_BRIDGES) { + send_to_char("Invalid choice!", d->character); + redit_disp_bridge_menu(d); + return; + } else + OLC_ROOM(d)->bridge = number; break; case REDIT_EXIT_MENU: diff -uprN src/structs.h circle/src/structs.h --- src/structs.h Sun Jan 03 19:52:01 1999 +++ circle/src/structs.h Tue Jan 05 20:36:27 1999 @@ -80,6 +80,13 @@ #define SECT_BOOK 12 /* Inside a book */ #define SECT_ARENA 13 /* In the arena */ + +/* Bridge types: used in room_data.bridge */ +#define BRIDGE_NONE 0 /* Not a bridge */ +#define BRIDGE_SMALL 1 /* Small bridge */ +#define BRIDGE_MEDIUM 2 /* Medium bridge */ +#define BRIDGE_LARGE 3 /* Large bridge */ + /* char and mob-related defines *****************************************/ @@ -711,6 +721,7 @@ struct room_data { room_vnum number; /* Rooms number (vnum) */ sh_int zone; /* Room zone (for resetting) */ int sector_type; /* sector type (move/hide) */ + int bridge; /* bridge type (small/medium/large) */ char *name; /* Rooms name 'You are ...' */ char *description; /* Shown when entered */ struct extra_descr_data *ex_description; /* for examine/look */ diff -uprN src/utils.h circle/src/utils.h --- src/utils.h Sun Dec 27 02:43:43 1998 +++ circle/src/utils.h Mon Jan 04 22:12:59 1999 @@ -213,6 +213,8 @@ void set_email(struct char_data *ch, #define SECT(room) (world[(room)].sector_type) +#define BRIDGE(room) (world[(room)].bridge) + #define IS_DARK(room) ( !world[room].light && \ (ROOM_FLAGGED(room, ROOM_DARK) || \