statue gender

Reported on the newsgroup (a few weeks ago in the middle of a post about
something else): someone turned Perseus to flesh and found out he was female.
This commit is contained in:
arromdee
2003-03-24 02:02:08 +00:00
parent 1d99476847
commit b7fea371b6
6 changed files with 17 additions and 7 deletions
+2 -2
View File
@@ -53,7 +53,7 @@ BRANCH:levregion(01,00,79,20),(30,06,46,13)
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(30,06,46,13) NON_DIGGABLE:(30,06,46,13)
# Objects # Objects
CONTAINER:'`',"statue",(36,10),uncursed,"knight",1,"Perseus" CONTAINER:'`',"statue",(36,10),uncursed,"knight",3,"Perseus"
OBJECT[75%]:'[',"shield of reflection",contained,cursed,+0 OBJECT[75%]:'[',"shield of reflection",contained,cursed,+0
OBJECT[25%]:'[',"levitation boots",contained,random,+0 OBJECT[25%]:'[',"levitation boots",contained,random,+0
OBJECT[50%]:')',"scimitar",contained,blessed,+2 OBJECT[50%]:')',"scimitar",contained,blessed,+2
@@ -151,7 +151,7 @@ BRANCH:levregion(01,00,79,20),(59,01,73,17)
NON_DIGGABLE:(01,02,06,17) NON_DIGGABLE:(01,02,06,17)
NON_DIGGABLE:(60,02,73,17) NON_DIGGABLE:(60,02,73,17)
# Objects # Objects
CONTAINER:'`',"statue",(68,10),uncursed,"knight",1,"Perseus" CONTAINER:'`',"statue",(68,10),uncursed,"knight",3,"Perseus"
OBJECT[25%]:'[',"shield of reflection",contained,cursed,+0 OBJECT[25%]:'[',"shield of reflection",contained,cursed,+0
OBJECT[75%]:'[',"levitation boots",contained,random,+0 OBJECT[75%]:'[',"levitation boots",contained,random,+0
OBJECT[50%]:')',"scimitar",contained,blessed,+2 OBJECT[50%]:')',"scimitar",contained,blessed,+2
+1
View File
@@ -23,6 +23,7 @@ putting gold in a container on the shop floor wasn't credited the way
avoid integer division rounding error when calculating carrying capacity avoid integer division rounding error when calculating carrying capacity
don't lock/unlock a door while in a pit, to be consistent with door opening don't lock/unlock a door while in a pit, to be consistent with door opening
infravision should not make invisible player "visible" (it doesn't for monsters) infravision should not make invisible player "visible" (it doesn't for monsters)
Perseus statue should always be male
Platform- and/or Interface-Specific Fixes Platform- and/or Interface-Specific Fixes
+5 -1
View File
@@ -33,7 +33,11 @@ struct obj {
marks your eggs, spinach tins marks your eggs, spinach tins
royal coffers for a court ( == 2) royal coffers for a court ( == 2)
tells which fruit a fruit is tells which fruit a fruit is
special for uball and amulet %% BAH */ special for uball and amulet
historic and gender for statues */
#define STATUE_HISTORIC 0x01
#define STATUE_MALE 0x02
#define STATUE_FEMALE 0x04
char oclass; /* object class */ char oclass; /* object class */
char invlet; /* designation in inventory */ char invlet; /* designation in inventory */
char oartifact; /* artifact array index */ char oartifact; /* artifact array index */
+2 -2
View File
@@ -367,7 +367,7 @@ register struct obj *obj;
case ROCK_CLASS: case ROCK_CLASS:
if (typ == STATUE) if (typ == STATUE)
Sprintf(buf, "%s%s of %s%s", Sprintf(buf, "%s%s of %s%s",
(Role_if(PM_ARCHEOLOGIST) && obj->spe) ? "historic " : "" , (Role_if(PM_ARCHEOLOGIST) && (obj->spe & STATUE_HISTORIC)) ? "historic " : "" ,
actualn, actualn,
type_is_pname(&mons[obj->corpsenm]) ? "" : type_is_pname(&mons[obj->corpsenm]) ? "" :
(mons[obj->corpsenm].geno & G_UNIQ) ? "the " : (mons[obj->corpsenm].geno & G_UNIQ) ? "the " :
@@ -2507,7 +2507,7 @@ typfnd:
case STATUE: otmp->corpsenm = mntmp; case STATUE: otmp->corpsenm = mntmp;
if (Has_contents(otmp) && verysmall(&mons[mntmp])) if (Has_contents(otmp) && verysmall(&mons[mntmp]))
delete_contents(otmp); /* no spellbook */ delete_contents(otmp); /* no spellbook */
otmp->spe = ishistoric; otmp->spe = ishistoric ? STATUE_HISTORIC : 0;
break; break;
case SCALE_MAIL: case SCALE_MAIL:
/* Dragon mail - depends on the order of objects */ /* Dragon mail - depends on the order of objects */
+6 -1
View File
@@ -409,7 +409,7 @@ int *fail_reason;
struct monst *mon = 0; struct monst *mon = 0;
struct obj *item; struct obj *item;
coord cc; coord cc;
boolean historic = (Role_if(PM_ARCHEOLOGIST) && !flags.mon_moving && statue->spe); boolean historic = (Role_if(PM_ARCHEOLOGIST) && !flags.mon_moving && (statue->spe & STATUE_HISTORIC));
if (statue->oxlth && statue->oattached == OATTACHED_MONST) { if (statue->oxlth && statue->oattached == OATTACHED_MONST) {
cc.x = x, cc.y = y; cc.x = x, cc.y = y;
@@ -440,6 +440,11 @@ int *fail_reason;
return (struct monst *)0; return (struct monst *)0;
} }
/* allow statues to be of a specific gender */
if (statue->spe & STATUE_MALE)
mon->female = FALSE;
else if (statue->spe & STATUE_FEMALE)
mon->female = TRUE;
/* if statue has been named, give same name to the monster */ /* if statue has been named, give same name to the monster */
if (statue->onamelth) if (statue->onamelth)
mon = christen_monst(mon, ONAME(statue)); mon = christen_monst(mon, ONAME(statue));
+1 -1
View File
@@ -3755,7 +3755,7 @@ register struct obj *obj;
obj_extract_self(item); obj_extract_self(item);
place_object(item, obj->ox, obj->oy); place_object(item, obj->ox, obj->oy);
} }
if (Role_if(PM_ARCHEOLOGIST) && !flags.mon_moving && obj->spe) { if (Role_if(PM_ARCHEOLOGIST) && !flags.mon_moving && (obj->spe & STATUE_HISTORIC)) {
You_feel("guilty about damaging such a historic statue."); You_feel("guilty about damaging such a historic statue.");
adjalign(-1); adjalign(-1);
} }