The Knife of Accuracy should probably be turned into an unrandart.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@7673 c06c8d41-db1a-0410-9941-cceddc491573
LY7DLLD7IKL6ZQPVROLDJ46XRM5CMAAEBRFDKJ4M53CPC5GFCGSQC
DUOVSVYLZG2W4KHAPD57Z2OTWZUYHY46TLGJLI5R7YALOKZCTGFAC
YJ4Q65CCPG2R3O2CFICU6WS27ISYEHQGWIHNOOYPN2TIPKNXVX7QC
TJN537N2F5J7JWBCT2Z4VSTNXIMFCMEXTKTY7N2UCXIVUUQ3XJBQC
IP4A3VRYFYIVLRUAU4DF4KDNP6E4UISWJX3LI2F4EGSSMIJYRJXAC
GA7RSKRL2B7OYL4NWCCMULF2QXJ27NALF7KWTSVXY272NS5KFGJQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
XI7X6SNTHG67D4NQWM75HWB6TVRXVFDPGNSQLTXN6JAZBZIVZXIQC
2DORUQ4B574MDOOMRYWGU5I72AKHMCSTZ6B3VSHQBUQOZYHRC7FAC
EJKHYV2Z6UPRVYUAL4WRW33GBNHYBFPMPA57HMBX2LQKXHIUO5VQC
IXLNOTBJGHKESBCTME6QAR6XVWFNCHYGMS62V62ZJEA7VLQHXO2QC
UVJBHQ5KGUIEFRHKTYQPKSXYDUDKTRAXINUXGJJJ6QGNCR6JO7ZAC
DTO3EUKWHZ5RJNGNCFYXSOVTIPVXPP637F2W7WFGYKJ7JK7VNKNQC
TZ2SH2SPO5TFSFL2OCV5A32P2X4CRHEKEK7ENUFCBVF3RKUWAD4AC
4GGNXCX2CLKWQZIZT543LXFFKFRD4PY5XPJFLGWKW4ACKYZNLVPQC
VNHFP63ZLLZU3A3PLXP4BITX57DUIYDHFOHQYK3BOBHV3S64G26QC
LDBTCT5WIPLJPZWXS2RUQ26QKISCUUTLO77M464WOE6VSYSNPKYAC
SL4H3NXHK4VIROWPSQDGO7YIYDKDWZWMUDGH5U7Y6NG63MUQXRPAC
6GDKXNFXPKQ6AVNOSMJECN7CLELM2KCMVRM2A7BARLK2NNILN6SAC
VCG3BRIYRTNNWYC3LOXD6KFGXOX37HAFW2HNV7WXVG2V7EUHLDZQC
CIPVRZGLOZHCERK6YPOBV3P2E4IAB4H6D5EHLRQE2O5E4P4VCBUAC
SHSIZVHSB4RPTLGMFJXUDVHF3FTEZZYCRIH4CBZP4MXOBR3HC4QAC
EHP6PYCIPYQ3KF4JFGBTZXEUQHN3FVAH4NUWEOWDDNKGPYVOTOJQC
HHTFZV7UCVSE332T2FMAS2UHWSP6OZ2PSLEJ7D47QTSBTFTUFTNAC
QDTVLBRGHDTRUVT7I3O72K6TMOYAUSAJBZUHGOEFU2RKJNUPWZSQC
WFMQVPMMOPG5SBJD5LUBOIYWRMXVWK3FXENK7SAEGZ5T6XWFKERQC
struct fixedart_setting
{
int which;
const char* name;
const char* appearance;
object_class_type base;
int subtype;
int acc;
int dam;
int colour;
bool curse;
};
const fixedart_setting fixedarts[] = {
{
SPWPN_SINGING_SWORD,
"Singing Sword",
"golden long sword",
OBJ_WEAPONS,
WPN_LONG_SWORD,
7,
7,
YELLOW,
false
},
{
SPWPN_WRATH_OF_TROG,
"Wrath of Trog",
"bloodstained battleaxe",
OBJ_WEAPONS,
WPN_BATTLEAXE,
3,
11,
RED,
false
},
{
SPWPN_SCYTHE_OF_CURSES,
"Scythe of Curses",
"warped scythe",
OBJ_WEAPONS,
WPN_SCYTHE,
13,
13,
DARKGREY,
true
},
{
SPWPN_MACE_OF_VARIABILITY,
"Mace of Variability",
"shimmering mace",
OBJ_WEAPONS,
WPN_MACE,
random2(16) - 4,
random2(16) - 4,
random_colour(),
false
},
{
SPWPN_GLAIVE_OF_PRUNE,
"Glaive of Prune",
"purple glaive",
OBJ_WEAPONS,
WPN_GLAIVE,
0,
12,
MAGENTA,
false
},
{
SPWPN_SCEPTRE_OF_TORMENT,
"Sceptre of Torment",
"jewelled golden mace",
OBJ_WEAPONS,
WPN_MACE,
7,
6,
YELLOW,
false
},
{
SPWPN_SWORD_OF_ZONGULDROK,
"Sword of Zonguldrok",
"bone long sword",
OBJ_WEAPONS,
WPN_LONG_SWORD,
9,
9,
LIGHTGREY,
false
},
{
SPWPN_SWORD_OF_POWER,
"Sword of Power",
"chunky great sword",
OBJ_WEAPONS,
WPN_GREAT_SWORD,
0, // set on wield
0, // set on wield
RED,
false
},
{
SPWPN_KNIFE_OF_ACCURACY,
"Knife of Accuracy",
"thin dagger",
OBJ_WEAPONS,
WPN_DAGGER,
27,
-1,
LIGHTCYAN,
false
},
{
SPWPN_STAFF_OF_OLGREB,
"Staff of Olgreb",
"green glowing staff",
OBJ_WEAPONS,
WPN_QUARTERSTAFF,
0, // set on wield
0, // set on wield
GREEN,
false
},
{
SPWPN_VAMPIRES_TOOTH,
"Vampire's Tooth",
"ivory dagger",
OBJ_WEAPONS,
WPN_DAGGER,
3,
4,
WHITE,
false
},
{
SPWPN_STAFF_OF_WUCAD_MU,
"Staff of Wucad Mu",
"ephemeral quarterstaff",
OBJ_WEAPONS,
WPN_QUARTERSTAFF,
0, // set on wield
0, // set on wield
BROWN,
false
},
{
SPWPN_SWORD_OF_CEREBOV,
"Sword of Cerebov",
"great serpentine sword",
OBJ_WEAPONS,
WPN_GREAT_SWORD,
6,
6,
YELLOW,
true
},
{
SPWPN_STAFF_OF_DISPATER,
"Staff of Dispater",
"golden staff",
OBJ_WEAPONS,
WPN_QUARTERSTAFF,
4,
4,
YELLOW,
false
},
{
SPWPN_SCEPTRE_OF_ASMODEUS,
"Sceptre of Asmodeus",
"ruby sceptre",
OBJ_WEAPONS,
WPN_QUARTERSTAFF,
7,
7,
RED,
false
}
};
static const char* _get_fixedart_name(const item_def &item)
{
// Find the appropriate fixed artefact.
for (unsigned int i = 0; i < ARRAYSZ(fixedarts); ++i)
{
if (fixedarts[i].which == item.special)
{
const fixedart_setting *fixed = &fixedarts[i];
return (item_type_known(item) ? fixed->name : fixed->appearance);
}
}
return (item_type_known(item) ? "Unnamed Artefact" : "buggy fixedart");
}
case SPWPN_SINGING_SWORD:
item.base_type = OBJ_WEAPONS;
item.sub_type = WPN_LONG_SWORD;
item.plus = 7;
item.plus2 = 7;
break;
case SPWPN_WRATH_OF_TROG:
item.base_type = OBJ_WEAPONS;
item.sub_type = WPN_BATTLEAXE;
item.plus = 3;
item.plus2 = 11;
break;
case SPWPN_SCYTHE_OF_CURSES:
item.base_type = OBJ_WEAPONS;
item.sub_type = WPN_SCYTHE;
item.plus = 13;
item.plus2 = 13;
break;
case SPWPN_MACE_OF_VARIABILITY:
item.base_type = OBJ_WEAPONS;
item.sub_type = WPN_MACE;
item.plus = random2(16) - 4;
item.plus2 = random2(16) - 4;
break;
case SPWPN_GLAIVE_OF_PRUNE:
item.base_type = OBJ_WEAPONS;
item.sub_type = WPN_GLAIVE;
item.plus = 0;
item.plus2 = 12;
break;
case SPWPN_SCEPTRE_OF_TORMENT:
item.base_type = OBJ_WEAPONS;
item.sub_type = WPN_MACE;
item.plus = 7;
item.plus2 = 6;
break;
case SPWPN_SWORD_OF_ZONGULDROK:
item.base_type = OBJ_WEAPONS;
item.sub_type = WPN_LONG_SWORD;
item.plus = 9;
item.plus2 = 9;
break;
case SPWPN_SWORD_OF_POWER:
item.base_type = OBJ_WEAPONS;
item.sub_type = WPN_GREAT_SWORD;
item.plus = 0; // set on wield
item.plus2 = 0; // set on wield
break;
if (fixedarts[i].which == which)
{
fixedart = &fixedarts[i];
break;
}
}
case SPWPN_KNIFE_OF_ACCURACY:
item.base_type = OBJ_WEAPONS;
item.sub_type = WPN_DAGGER;
item.plus = 27;
item.plus2 = -1;
break;
// None found?
if (fixedart == NULL)
{
#ifdef DEBUG_DIAGNOSTICS
mprf(MSGCH_ERROR, "Couldn't find fixed artefact %d", which);
#endif
return (false);
}
case SPWPN_STAFF_OF_OLGREB:
item.base_type = OBJ_WEAPONS;
item.sub_type = WPN_QUARTERSTAFF;
item.plus = 0; // set on wield
item.plus2 = 0; // set on wield
break;
// If we get here, we've made the artefact
item.base_type = fixedart->base;
item.sub_type = fixedart->subtype;
item.plus = fixedart->acc;
item.plus2 = fixedart->dam;
item.colour = fixedart->colour;
item.special = which;
item.quantity = 1;
case SPWPN_VAMPIRES_TOOTH:
item.base_type = OBJ_WEAPONS;
item.sub_type = WPN_DAGGER;
item.plus = 3;
item.plus2 = 4;
break;
// get true artefact name
ASSERT(!item.props.exists( RANDART_NAME_KEY ));
item.props[RANDART_NAME_KEY].get_string() = fixedart->name;
case SPWPN_STAFF_OF_WUCAD_MU:
item.base_type = OBJ_WEAPONS;
item.sub_type = WPN_QUARTERSTAFF;
item.plus = 0; // set on wield
item.plus2 = 0; // set on wield
break;
case SPWPN_SWORD_OF_CEREBOV:
item.base_type = OBJ_WEAPONS;
item.sub_type = WPN_GREAT_SWORD;
item.plus = 6;
item.plus2 = 6;
item.colour = YELLOW;
do_curse_item( item );
break;
case SPWPN_STAFF_OF_DISPATER:
item.base_type = OBJ_WEAPONS;
item.sub_type = WPN_QUARTERSTAFF;
item.plus = 4;
item.plus2 = 4;
item.colour = YELLOW;
break;
// get artefact appearance
ASSERT(!item.props.exists( RANDART_APPEAR_KEY ));
item.props[RANDART_APPEAR_KEY].get_string() = fixedart->appearance;
if (is_fixed_artefact( item ))
{
switch (item.special)
{
case SPWPN_SINGING_SWORD:
case SPWPN_SCEPTRE_OF_TORMENT:
item.colour = YELLOW;
break;
case SPWPN_WRATH_OF_TROG:
case SPWPN_SWORD_OF_POWER:
item.colour = RED;
break;
case SPWPN_SCYTHE_OF_CURSES:
item.colour = DARKGREY;
break;
case SPWPN_MACE_OF_VARIABILITY:
item.colour = random_colour();
break;
case SPWPN_GLAIVE_OF_PRUNE:
item.colour = MAGENTA;
break;
case SPWPN_SWORD_OF_ZONGULDROK:
item.colour = LIGHTGREY;
break;
case SPWPN_KNIFE_OF_ACCURACY:
item.colour = LIGHTCYAN;
break;
case SPWPN_STAFF_OF_OLGREB:
item.colour = GREEN;
break;
case SPWPN_VAMPIRES_TOOTH:
item.colour = WHITE;
break;
case SPWPN_STAFF_OF_WUCAD_MU:
item.colour = BROWN;
break;
}
break;
}
static const char* fixed_artefact_name( const item_def& item, bool ident )
{
if (ident)
{
switch (item.special)
{
case SPWPN_SINGING_SWORD: return "Singing Sword";
case SPWPN_WRATH_OF_TROG: return "Wrath of Trog";
case SPWPN_SCYTHE_OF_CURSES: return "Scythe of Curses";
case SPWPN_MACE_OF_VARIABILITY: return "Mace of Variability";
case SPWPN_GLAIVE_OF_PRUNE: return "Glaive of Prune";
case SPWPN_SCEPTRE_OF_TORMENT: return "Sceptre of Torment";
case SPWPN_SWORD_OF_ZONGULDROK: return "Sword of Zonguldrok";
case SPWPN_SWORD_OF_CEREBOV: return "Sword of Cerebov";
case SPWPN_STAFF_OF_DISPATER: return "Staff of Dispater";
case SPWPN_SCEPTRE_OF_ASMODEUS: return "Sceptre of Asmodeus";
case SPWPN_SWORD_OF_POWER: return "Sword of Power";
case SPWPN_KNIFE_OF_ACCURACY: return "Knife of Accuracy";
case SPWPN_STAFF_OF_OLGREB: return "Staff of Olgreb";
case SPWPN_VAMPIRES_TOOTH: return "Vampire's Tooth";
case SPWPN_STAFF_OF_WUCAD_MU: return "Staff of Wucad Mu";
default: return "Brodale's Buggy Bola";
}
}
else
{
switch (item.special)
{
case SPWPN_SINGING_SWORD: return "golden long sword";
case SPWPN_WRATH_OF_TROG: return "bloodstained battleaxe";
case SPWPN_SCYTHE_OF_CURSES: return "warped scythe";
case SPWPN_MACE_OF_VARIABILITY: return "shimmering mace";
case SPWPN_GLAIVE_OF_PRUNE: return "purple glaive";
case SPWPN_SCEPTRE_OF_TORMENT: return "jewelled golden mace";
case SPWPN_SWORD_OF_ZONGULDROK: return "bone long sword";
case SPWPN_SWORD_OF_CEREBOV: return "great serpentine sword";
case SPWPN_STAFF_OF_DISPATER: return "golden staff";
case SPWPN_SCEPTRE_OF_ASMODEUS: return "ruby sceptre";
case SPWPN_SWORD_OF_POWER: return "chunky great sword";
case SPWPN_KNIFE_OF_ACCURACY: return "thin dagger";
case SPWPN_STAFF_OF_OLGREB: return "green glowing staff";
case SPWPN_VAMPIRES_TOOTH: return "ivory dagger";
case SPWPN_STAFF_OF_WUCAD_MU: return "ephemeral quarterstaff";
default: return "buggy bola";
}
}
}
if (is_fixed_artefact( *this ) && !dbname)
{
buff << fixed_artefact_name( *this, know_type );
break;
}
pbolt.name = zinfo->name;
pbolt.flavour = zinfo->flavour;
pbolt.colour = zinfo->colour;
pbolt.type = dchar_glyph(zinfo->glyph);
pbolt.name = zinfo->name;
pbolt.flavour = zinfo->flavour;
pbolt.colour = zinfo->colour;
pbolt.type = dchar_glyph(zinfo->glyph);