Fix: SE052 Problem: The ROLE_PATCH configuration switch is no longer supported (the role patch was incorpotated into the 3.3 code base). However, there are still some oddments left which depend on this switch. These need to be resolved and the switch removed from config.h. This is also the cause of role, align and gender turning up in the options list twice. Compatible with: Slash'EM 0.0.6E0F2 Author: J. Ali Harlow, ali@avrc.city.ac.uk Date: 3 Mar 2000 diff -Narc ../slashem-0.0.6E0F2/include/config.h ./include/config.h *** ../slashem-0.0.6E0F2/include/config.h Fri Feb 4 18:16:14 2000 --- ./include/config.h Fri Mar 3 18:44:21 2000 *************** *** 327,333 **** #define EATEN_MEMORY /* WAC -- Remember which monsters have been eaten */ /* Roles */ - #define ROLE_PATCH /* KMH -- Improvements to the role system */ #define DWARF /* Dwarf Patch, Osku Salerma (osku@iki.fi) */ #define TOURIST /* Tourist players with cameras and Hawaiian shirts */ #define YEOMAN /* KMH -- Yeoman class */ --- 327,332 ---- diff -Narc ../slashem-0.0.6E0F2/include/extern.h ./include/extern.h *** ../slashem-0.0.6E0F2/include/extern.h Fri Jan 21 12:02:06 2000 --- ./include/extern.h Fri Mar 3 18:44:21 2000 *************** *** 148,158 **** #ifdef SCORE_ON_BOTL E long NDECL(botl_score); #endif - #ifdef ROLE_PATCH E const char *FDECL(rank_of, (int,SHORT_P,BOOLEAN_P)); - #else - E const char *FDECL(rank_of, (int,SHORT_P,BOOLEAN_P)); - #endif E void NDECL(bot); E const char * FDECL(shorten_bot1, (const char *, int)); --- 148,154 ---- diff -Narc ../slashem-0.0.6E0F2/include/flag.h ./include/flag.h *** ../slashem-0.0.6E0F2/include/flag.h Fri Feb 4 18:16:14 2000 --- ./include/flag.h Fri Mar 3 18:44:21 2000 *************** *** 152,189 **** unsigned short amii_dripens[ 20 ]; /* DrawInfo Pens currently there are 13 in v39 */ AMII_COLOR_TYPE amii_curmap[ AMII_MAXCOLORS ]; /* colormap */ #endif - - #ifndef OLDROLES - /* KMH, role patch -- Variables used during startup. - * - * If the user wishes to select a role, gender, and/or alignment - * during startup, the choices should be recorded here. This - * might be specified through command-line options, environmental - * variables, a popup dialog box, menus, etc. - * - * These values are each an index into an array. They are not - * characters or letters, because that limits us to 26 roles. - * They are not booleans, because someday we may need a neuter - * gender. Negative values are used to indicate that the user - * hasn't yet specified that particular value. If you determine - * that the user wants a random choice, then you should set an - * appropriate random value; if you just left the negative value, - * the user would be asked again! - * - * These variables are stored here because the u structure is - * cleared during character initialization, and because the - * flags structure is restored for saved games. Thus, we can - * use the same parameters to build the role entry for both - * new and restored games. - * - * These variables should not be referred to after the character - * is initialized or restored. - */ - int irole; /* Starting role (index into roles[]) */ - int igend; /* Starting gender (index into genders[]) */ - int ialign; /* Starting alignment (index into aligns[]) */ - /* int irace; /* Starting race (index into races[]) */ - #endif }; /* --- 152,157 ---- diff -Narc ../slashem-0.0.6E0F2/src/artifact.c ./src/artifact.c *** ../slashem-0.0.6E0F2/src/artifact.c Mon Jan 17 13:29:48 2000 --- ./src/artifact.c Fri Mar 3 18:44:44 2000 *************** *** 58,65 **** { struct artifact *art; int alignmnt = aligns[flags.initalign].value; - int u_align = aligns[flags.ialign].value; - /* Fix up the alignments of "gift" artifacts */ for (art = artilist+1; art->otyp; art++) --- 58,63 ---- *************** *** 73,83 **** #if 0 /* Fix up the gifts */ if (urole.gift1arti) { ! artilist[urole.gift1arti].alignment = u_align; artilist[urole.gift1arti].role = Role_switch; } if (urole.gift2arti) { ! artilist[urole.gift2arti].alignment = u_align; artilist[urole.gift2arti].role = Role_switch; } #endif --- 71,81 ---- #if 0 /* Fix up the gifts */ if (urole.gift1arti) { ! artilist[urole.gift1arti].alignment = alignmnt; artilist[urole.gift1arti].role = Role_switch; } if (urole.gift2arti) { ! artilist[urole.gift2arti].alignment = alignmnt; artilist[urole.gift2arti].role = Role_switch; } #endif *************** *** 1379,1389 **** obj->age = 0; return 0; } - #ifdef ROLE_PATCH - b_effect = obj->blessed && (!oart->role || oart->role == Role_switch); - #else b_effect = obj->blessed && (Role_switch == oart->role || !oart->role); - #endif recharge(otmp, b_effect ? 1 : obj->cursed ? -1 : 0); break; } --- 1377,1383 ---- diff -Narc ../slashem-0.0.6E0F2/src/botl.c ./src/botl.c *** ../slashem-0.0.6E0F2/src/botl.c Mon Jan 17 13:29:48 2000 --- ./src/botl.c Fri Mar 3 18:44:21 2000 *************** *** 60,105 **** } #endif - - #ifdef ROLE_PATCH - const char * - rank_of(lev, monnum, female) - int lev; - short monnum; - boolean female; - { - register struct Role *role; - register int i; - - - /* Find the role */ - for (role = (struct Role *) roles; role->name.m; role++) - if (monnum == role->malenum || monnum == role->femalenum) - break; - if (!role->name.m) - role = &urole; - - /* Find the rank */ - for (i = xlev_to_rank((int)lev); i >= 0; i--) { - if (female && role->rank[i].f) return (role->rank[i].f); - if (role->rank[i].m) return (role->rank[i].m); - } - - /* Try the role name, instead */ - if (female && role->name.f) return (role->name.f); - else if (role->name.m) return (role->name.m); - return ("Player"); - } - - - STATIC_OVL const char * - rank() - { - return(rank_of(u.ulevel, Role_switch, flags.female)); - } - - - #else /* !ROLE_PATCH */ const char * rank_of(lev, monnum, female) int lev; --- 60,65 ---- *************** *** 135,169 **** { return(rank_of(u.ulevel, Role_switch, flags.female)); } - #endif /* !ROLE_PATCH */ - int title_to_mon(str, rank_indx, title_length) const char *str; int *rank_indx, *title_length; { - #ifdef ROLE_PATCH - register int i, j; - - - /* Loop through each of the roles */ - for (i = 0; roles[i].name.m; i++) - for (j = 0; j < 9; j++) { - if (roles[i].rank[j].m && !strncmpi(str, - roles[i].rank[j].m, strlen(roles[i].rank[j].m))) { - if (rank_indx) *rank_indx = j; - if (title_length) *title_length = strlen(roles[i].rank[j].m); - return roles[i].malenum; - } - if (roles[i].rank[j].f && !strncmpi(str, - roles[i].rank[j].f, strlen(roles[i].rank[j].f))) { - if (rank_indx) *rank_indx = j; - if (title_length) *title_length = strlen(roles[i].rank[j].f); - return (roles[i].femalenum ? roles[i].femalenum : roles[i].malenum); - } - } - #else register int i, j; --- 95,106 ---- *************** *** 184,190 **** roles[i].femalenum : roles[i].malenum); } } - #endif return NON_PM; } --- 121,126 ---- *************** *** 197,217 **** register int i, r, maxr = 0; - #ifdef ROLE_PATCH for (i = 0; i < 9; i++) { - if (urole.rank[i].m && (r = strlen(urole.rank[i].m)) > maxr) maxr = r; - if (urole.rank[i].f && (r = strlen(urole.rank[i].f)) > maxr) maxr = r; - } - mrank_sz = maxr; - return; - #else - for (i = 0; i < 9; i++) { if (urole.rank[i].m && (r = strlen(urole.rank[i].m)) > maxr) maxr = r; if (urole.rank[i].f && (r = strlen(urole.rank[i].f)) > maxr) maxr = r; ! } ! mrank_sz = maxr; return; - #endif } #endif /* OVLB */ --- 133,144 ---- register int i, r, maxr = 0; for (i = 0; i < 9; i++) { if (urole.rank[i].m && (r = strlen(urole.rank[i].m)) > maxr) maxr = r; if (urole.rank[i].f && (r = strlen(urole.rank[i].f)) > maxr) maxr = r; ! } ! mrank_sz = maxr; return; } #endif /* OVLB */ diff -Narc ../slashem-0.0.6E0F2/src/eat.c ./src/eat.c *** ../slashem-0.0.6E0F2/src/eat.c Mon Jan 17 13:29:48 2000 --- ./src/eat.c Fri Mar 3 18:44:21 2000 *************** *** 960,995 **** case PM_MIND_FLAYER: { #if 0 int temp; - #ifdef ROLE_PATCH temp = urole.attrmax[A_INT]; - #else - switch (pl_character[0]) { - case 'A': temp = CLASS_A(A_INT); break; - case 'B': temp = CLASS_B(A_INT); break; - case 'C': temp = CLASS_C(A_INT); break; - case 'D': temp = CLASS_D(A_INT); break; - case 'E': temp = CLASS_E(A_INT); break; - case 'F': temp = CLASS_F(A_INT); break; - case 'G': temp = CLASS_G(A_INT); break; - case 'H': temp = CLASS_H(A_INT); break; - case 'I': temp = CLASS_I(A_INT); break; - case 'K': temp = CLASS_K(A_INT); break; - case 'L': temp = CLASS_L(A_INT); break; - case 'M': temp = CLASS_M(A_INT); break; - case 'N': temp = CLASS_N(A_INT); break; - case 'P': temp = CLASS_P(A_INT); break; - case 'R': temp = CLASS_R(A_INT); break; - case 'S': temp = CLASS_S(A_INT); break; - #ifdef TOURIST - case 'T': temp = CLASS_T(A_INT); break; - #endif - case 'U': temp = CLASS_U(A_INT); break; - case 'V': temp = CLASS_V(A_INT); break; - case 'W': temp = CLASS_W(A_INT); break; - default: /* unknown type */ - temp = CLASS_A(A_INT); break; - } - #endif #endif if (ABASE(A_INT) < ATTRMAX(A_INT)) { if (!rn2(2)) { --- 960,966 ---- diff -Narc ../slashem-0.0.6E0F2/src/exper.c ./src/exper.c *** ../slashem-0.0.6E0F2/src/exper.c Mon Jan 17 13:29:48 2000 --- ./src/exper.c Fri Mar 3 18:44:21 2000 *************** *** 166,176 **** return; } if(u.ulevel > 1) { - #ifdef ROLE_PATCH pline("%s level %d.", Goodbye(), u.ulevel--); - #else - pline("%s level %d.", Goodbye(), u.ulevel--); - #endif /* remove intrinsic abilities */ adjabil(u.ulevel + 1, u.ulevel); reset_rndmonst(NON_PM); /* new monster selection */ --- 166,172 ---- diff -Narc ../slashem-0.0.6E0F2/src/hack.c ./src/hack.c *** ../slashem-0.0.6E0F2/src/hack.c Mon Jan 17 13:29:51 2000 --- ./src/hack.c Fri Mar 3 18:44:21 2000 *************** *** 1401,1411 **** break; case DELPHI: if(monstinroom(&mons[PM_ORACLE], roomno)) - #ifdef ROLE_PATCH verbalize("%s, %s, welcome to Delphi!", Hello(), plname); - #else - verbalize("%s, %s, welcome to Delphi!", Hello(), plname); - #endif break; case TEMPLE: intemple(roomno + ROOMOFFSET); --- 1401,1407 ---- diff -Narc ../slashem-0.0.6E0F2/src/mail.c ./src/mail.c *** ../slashem-0.0.6E0F2/src/mail.c Mon Jan 17 13:30:14 2000 --- ./src/mail.c Fri Mar 3 18:44:21 2000 *************** *** 382,392 **** if (!md_rush(md, stop.x, stop.y)) goto go_back; message_seen = TRUE; - #ifdef ROLE_PATCH verbalize("%s, %s! %s.", Hello(), plname, info->display_txt); - #else - verbalize("%s, %s! %s.", Hello(), plname, info->display_txt); - #endif if (info->message_typ) { struct obj *obj = mksobj(SCR_MAIL, FALSE, FALSE); --- 382,388 ---- diff -Narc ../slashem-0.0.6E0F2/src/mklev.c ./src/mklev.c *** ../slashem-0.0.6E0F2/src/mklev.c Mon Jan 17 13:29:49 2000 --- ./src/mklev.c Fri Mar 3 18:44:21 2000 *************** *** 634,644 **** makemaz("minefill"); return; } else if (In_quest(&u.uz)) { - #ifdef ROLE_PATCH char fillname[16]; s_level *loc_lev; - Sprintf(fillname, "%s-loca", urole.filecode); loc_lev = find_level(fillname); --- 634,642 ---- *************** *** 647,669 **** (u.uz.dlevel < loc_lev->dlevel.dlevel) ? "a" : "b"); makemaz(fillname); return; - #else - char fillname[9]; - s_level *loc_lev; - char quest_ch; - - quest_ch = pl_character[0]; - if (Role_if(PM_DROW) /*&& u.uelf_drow*/) quest_ch = 'Q'; - Sprintf(fillname, "%c-locate", quest_ch); - - loc_lev = find_level(fillname); - - Sprintf(fillname, "%c-fill", quest_ch); - Strcat(fillname, - (u.uz.dlevel < loc_lev->dlevel.dlevel) ? "a" : "b"); - makemaz(fillname); - return; - #endif } else if(In_hell(&u.uz) || (rn2(5) && u.uz.dnum == medusa_level.dnum && depth(&u.uz) > depth(&medusa_level))) { --- 645,650 ---- diff -Narc ../slashem-0.0.6E0F2/src/options.c ./src/options.c *** ../slashem-0.0.6E0F2/src/options.c Fri Feb 4 18:16:14 2000 --- ./src/options.c Fri Mar 3 18:44:21 2000 *************** *** 438,449 **** flags.end_around = 2; iflags.msg_history = 20; - #ifdef ROLE_PATCH /* KMH, role patch -- new way to specify start options */ - flags.irole = -1; - flags.igend = -1; - flags.ialign = -1; - #endif - /* Use negative indices to indicate not yet selected */ flags.initrole = -1; flags.initrace = -1; --- 438,443 ---- *************** *** 843,851 **** if(!initial && flags.female == negated) pline("That is not anatomically possible."); else - #ifdef ROLE_PATCH - flags.igend = - #endif flags.initgend = flags.female = !negated; return; } --- 837,842 ---- *************** *** 854,862 **** if(!initial && flags.female != negated) pline("That is not anatomically possible."); else - #ifdef ROLE_PATCH - flags.igend = - #endif flags.initgend = flags.female = negated; return; } --- 845,850 ---- *************** *** 1890,1903 **** MENU_UNSELECTED); /* non-modifiable compounds; deliberately put `name' first */ doset_add_menu(tmpwin, "name", plname, 0); - #ifdef ROLE_PATCH - doset_add_menu(tmpwin, "role", (flags.irole < 0) ? "(none)" : - roles[flags.irole].name.m, 0); - doset_add_menu(tmpwin, "align", (flags.ialign < 0) ? "(none)" : - aligns[flags.ialign].adj, 0); - doset_add_menu(tmpwin, "gender", (flags.igend < 0) ? "(none)" : - genders[flags.igend].adj, 0); - #endif doset_add_menu(tmpwin, "badgername", badgername[0] ? badgername : "(null)", 0); doset_add_menu(tmpwin, "batname", batname[0] ? batname : "(null)", 0); doset_add_menu(tmpwin, "role", (flags.initrole < 0) ? "(none)" : --- 1878,1883 ---- diff -Narc ../slashem-0.0.6E0F2/src/shk.c ./src/shk.c *** ../slashem-0.0.6E0F2/src/shk.c Mon Jan 17 13:29:50 2000 --- ./src/shk.c Fri Mar 3 18:44:21 2000 *************** *** 524,543 **** } else if (eshkp->robbed) { pline("%s mutters imprecations against shoplifters.", shkname(shkp)); } else { - #ifdef ROLE_PATCH - verbalize("%s, %s! Welcome%s to %s %s!", - Hello(), - plname, - eshkp->visitct++ ? " again" : "", - s_suffix(shkname(shkp)), - shtypes[rt - SHOPBASE].name); - #else verbalize("%s, %s! Welcome%s to %s %s!", Hello(), plname, eshkp->visitct++ ? " again" : "", s_suffix(shkname(shkp)), shtypes[rt - SHOPBASE].name); - #endif } /* can't do anything about blocking if teleported in */ if (!inside_shop(u.ux, u.uy)) { --- 524,534 ---- diff -Narc ../slashem-0.0.6E0F2/src/spell.c ./src/spell.c *** ../slashem-0.0.6E0F2/src/spell.c Mon Jan 17 13:29:50 2000 --- ./src/spell.c Fri Mar 3 18:44:21 2000 *************** *** 96,140 **** * still have an effect, except helm of brilliance, which is designed * to permit magic-use). */ - #ifndef ROLE_PATCH - static struct sptmp { - char class; /* key */ - int splcaster; /* base spellcasting ability */ - int special; /* healing spell bonus */ - int uarmsbon; /* penalty for wearing a (small) shield */ - int uarmbon; /* penalty for wearing metal armour */ - int statused; /* which stat is used */ - int specspel; /* spell the class excels at */ - int specbon; /* bonus when casting specspel */ - } cl_sptmp[] = { - { 'A', 9, 2, 2, 10, A_INT, SPE_MAGIC_MAPPING, -4 }, - { 'B', 17, 2, 0, 8, A_INT, SPE_HASTE_SELF, -4 }, - { 'C', 17, 2, 1, 8, A_INT, SPE_DIG, -4 }, - { 'D', 9, 2, 0, 10, A_INT, SPE_POLYMORPH, -4 }, - { 'E', 9, 2, 1, 10, A_INT, SPE_DETECT_UNSEEN, -4 }, - { 'F', 5, 2, 2, 10, A_INT, SPE_FIREBALL, -4 }, - { 'G', 11, 2, 2, 10, A_INT, SPE_CAUSE_FEAR, -4 }, - { 'H', 7,-2, 2, 10, A_WIS, SPE_CURE_SICKNESS, -4 }, - { 'I', 5, 2, 2, 10, A_INT, SPE_CONE_OF_COLD, -4 }, - { 'K', 13,-2, 0, 9, A_WIS, SPE_TURN_UNDEAD, -4 }, - { 'L', 17, 2, 0, 10, A_INT, SPE_CREATE_FAMILIAR, -4 }, - { 'M', 9,-2, 2, 20, A_WIS, SPE_RESTORE_ABILITY, -4 }, - { 'N', 5, 2, 2, 10, A_INT, SPE_SUMMON_UNDEAD, -4 }, - { 'P', 7,-2, 2, 10, A_WIS, SPE_REMOVE_CURSE, -4 }, - { 'R', 13, 2, 2, 9, A_INT, SPE_DETECT_TREASURE, -4 }, - { 'S', 17, 2, 0, 8, A_INT, SPE_CLAIRVOYANCE, -4 }, - #ifdef TOURIST - { 'T', 9, 2, 2, 10, A_INT, SPE_CHARM_MONSTER, -4 }, - #endif - { 'U', 13,-2, 0, 9, A_WIS, SPE_TURN_UNDEAD, -4 }, - { 'V', 13,-2, 0, 9, A_WIS, SPE_LIGHTNING, -4 }, - { 'W', 5, 0, 3, 10, A_INT, SPE_MAGIC_MISSILE, -4 }, - #ifdef YEOMAN - { 'Y', 13,-2, 0, 9, A_WIS, SPE_KNOCK, -4 }, - #endif - { 0, 10, 0, 0, 4, A_INT, 0, -3 } - }; - #endif #define uarmhbon 4 /* Metal helmets interfere with the mind */ #define uarmgbon 6 /* Casting channels through the hands */ --- 96,101 ---- diff -Narc ../slashem-0.0.6E0F2/src/u_init.c ./src/u_init.c *** ../slashem-0.0.6E0F2/src/u_init.c Mon Jan 17 13:29:50 2000 --- ./src/u_init.c Fri Mar 3 18:44:21 2000 *************** *** 1715,1751 **** if (AMAX(A_STR) > 18) { temp = (18 + d((AMAX(A_STR) - 18), 10) + (2 * (AMAX(A_STR) - 18))); - #ifdef ROLE_PATCH temp2 = urole.attrmax[A_STR]; - #else - switch (pc) { - case 'A': temp2 = CLASS_A(A_STR); break; - case 'B': temp2 = CLASS_B(A_STR); break; - case 'C': temp2 = CLASS_C(A_STR); break; - case 'D': temp2 = CLASS_D(A_STR); break; - case 'E': temp2 = CLASS_E(A_STR); break; - case 'F': temp2 = CLASS_F(A_STR); break; - case 'G': temp2 = CLASS_G(A_STR); break; - case 'H': temp2 = CLASS_H(A_STR); break; - case 'I': temp2 = CLASS_I(A_STR); break; - case 'K': temp2 = CLASS_K(A_STR); break; - case 'L': temp2 = CLASS_L(A_STR); break; - case 'M': temp2 = CLASS_M(A_STR); break; - case 'N': temp2 = CLASS_N(A_STR); break; - case 'P': temp2 = CLASS_P(A_STR); break; - case 'R': temp2 = CLASS_R(A_STR); break; - case 'S': temp2 = CLASS_S(A_STR); break; - #ifdef TOURIST - case 'T': temp2 = CLASS_T(A_STR); break; - #endif - case 'U': temp2 = CLASS_U(A_STR); break; - case 'V': temp2 = CLASS_V(A_STR); break; - case 'W': temp2 = CLASS_W(A_STR); break; - default: /* unknown type */ - temp2 = CLASS_A(A_STR); break; - } - #endif - if (temp > temp2) temp = temp2; ABASE(A_STR) = temp; AMAX(A_STR) = temp; --- 1715,1721 ---- diff -Narc ../slashem-0.0.6E0F2/util/makedefs.c ./util/makedefs.c *** ../slashem-0.0.6E0F2/util/makedefs.c Mon Jan 17 13:30:13 2000 --- ./util/makedefs.c Fri Mar 3 18:44:21 2000 *************** *** 688,696 **** #ifdef REINCARNATION "rogue level", #endif - #ifdef ROLE_PATCH - "support for more than 26 roles", - #endif #ifdef STEED "saddles and riding", #endif --- 688,693 ----