forked from github/server
Moving all item definitions to XML where they belong.
This commit is contained in:
parent
fde595c7f7
commit
1a2c3942f1
|
@ -1428,11 +1428,6 @@ allocate_resource(unit * u, const resource_type * rtype, int want)
|
|||
}
|
||||
}
|
||||
}
|
||||
} else if (itype == olditemtype[I_IRON] && btype == bt_find("mine")) {
|
||||
++skill;
|
||||
}
|
||||
else if (itype == olditemtype[I_STONE] && btype == bt_find("quarry")) {
|
||||
++skill;
|
||||
}
|
||||
}
|
||||
amount = skill * u->number;
|
||||
|
|
|
@ -570,9 +570,9 @@ give_horses(const unit * s, const unit * d, const item_type * itype, int n, stru
|
|||
#define LASTLUXURY (I_INCENSE +1)
|
||||
#define MAXLUXURIES (LASTLUXURY - FIRSTLUXURY)
|
||||
|
||||
item_type * olditemtype[MAXITEMS+1];
|
||||
resource_type * oldresourcetype[MAXRESOURCES+1];
|
||||
potion_type * oldpotiontype[MAXPOTIONS+1];
|
||||
const item_type * olditemtype[MAXITEMS+1];
|
||||
const resource_type * oldresourcetype[MAXRESOURCES+1];
|
||||
const potion_type * oldpotiontype[MAXPOTIONS+1];
|
||||
|
||||
/*** alte items ***/
|
||||
|
||||
|
@ -635,7 +635,7 @@ use_tacticcrystal(region * r, unit * u, int amount, struct order * ord)
|
|||
}
|
||||
|
||||
typedef struct t_item {
|
||||
const char *name[4];
|
||||
const char *name;
|
||||
/* [0]: Einzahl für eigene; [1]: Mehrzahl für eigene;
|
||||
* [2]: Einzahl für Fremde; [3]: Mehrzahl für Fremde */
|
||||
boolean is_resource;
|
||||
|
@ -647,100 +647,13 @@ typedef struct t_item {
|
|||
void (*benutze_funktion) (struct region *, struct unit *, int amount, struct order *);
|
||||
} t_item;
|
||||
|
||||
static t_item itemdata[MAXITEMS] = {
|
||||
/* name[4]; typ; sk; minskill; material[6]; gewicht; preis;
|
||||
* benutze_funktion; */
|
||||
{ /* I_IRON */
|
||||
{"Eisen", "Eisen", "Eisen", "Eisen"},
|
||||
true, SK_MINING, 1, 500, 0, FL_ITEM_NOTLOST, NULL
|
||||
},
|
||||
{ /* I_STONE */
|
||||
{"Stein", "Steine", "Stein", "Steine"},
|
||||
true, SK_QUARRYING, 1, 6000, 0, FL_ITEM_NOTLOST, NULL
|
||||
},
|
||||
{ /* I_HORSE */
|
||||
{"Pferd", "Pferde", "Pferd", "Pferde"},
|
||||
true, SK_HORSE_TRAINING, 1, 5000, 0, FL_ITEM_MOUNT | FL_ITEM_ANIMAL | FL_ITEM_NOTINBAG, NULL
|
||||
},
|
||||
{ /* I_AMULET_OF_HEALING */
|
||||
{"Amulett der Heilung", "Amulette der Heilung", "Amulett", "Amulette"},
|
||||
0, NOSKILL, 0, 0, 0, 0, NULL
|
||||
},
|
||||
{ /* I_AMULET_OF_TRUE_SEEING 22 */
|
||||
{"Amulett des wahren Sehens", "Amulette des wahren Sehens", "Amulett",
|
||||
"Amulette"},
|
||||
0, NOSKILL, 0, 0, 0, 0, NULL
|
||||
},
|
||||
{ /* I_RING_OF_INVISIBILITY 24 */
|
||||
{"Ring der Unsichtbarkeit", "Ringe der Unsichtbarkeit", "", ""},
|
||||
0, NOSKILL, 0, 0, 0, 0, NULL
|
||||
},
|
||||
{ /* I_RING_OF_POWER 25 */
|
||||
{"Ring der Macht", "Ringe der Macht", "", ""},
|
||||
0, NOSKILL, 0, 0, 0, 0, NULL
|
||||
},
|
||||
{ /* I_CHASTITY_BELT 34 */
|
||||
{"Amulett der Keuschheit", "Amulette der Keuschheit",
|
||||
"Amulett", "Amulette"},
|
||||
0, NOSKILL, 0, 0, 0, 0, NULL
|
||||
},
|
||||
{ /* I_LAEN 41 */
|
||||
{"Laen", "Laen", "Laen", "Laen"},
|
||||
true, SK_MINING, 7, 200, 0, 0, NULL
|
||||
},
|
||||
{ /* I_FEENSTIEFEL 60 */
|
||||
{"Feenstiefel", "Feenstiefel", "Feenstiefel", "Feenstiefel"},
|
||||
0, NOSKILL, 0, 0, 0, 0, NULL
|
||||
},
|
||||
{ /* I_BIRTHDAYAMULET 69 */
|
||||
{"Katzenamulett", "Katzenamulette", "Amulett", "Amulette"},
|
||||
0, NOSKILL, 0, 100, 0, 0, &use_birthdayamulet
|
||||
},
|
||||
{ /* I_PEGASUS 60 */
|
||||
{"Pegasus", "Pegasi", "Pegasus", "Pegasi" },
|
||||
0, NOSKILL, 0, 5000, 0, FL_ITEM_ANIMAL | FL_ITEM_NOTINBAG | FL_ITEM_NOTLOST, NULL
|
||||
},
|
||||
{ /* I_UNICORN 61 */
|
||||
{"Elfenpferd", "Elfenpferde", "Elfenpferd", "Elfenpferde"},
|
||||
0, NOSKILL, 0, 5000, 0, FL_ITEM_ANIMAL | FL_ITEM_NOTINBAG | FL_ITEM_NOTLOST, NULL
|
||||
},
|
||||
{ /* I_DOLPHIN 62 */
|
||||
{"Delphin", "Delphine", "Delphin", "Delphine"},
|
||||
0, NOSKILL, 0, 5000, 0, FL_ITEM_ANIMAL | FL_ITEM_NOTINBAG | FL_ITEM_NOTLOST, NULL
|
||||
},
|
||||
{ /* I_RING_OF_NIMBLEFINGER 64 */
|
||||
{"Ring der flinken Finger", "Ringe der flinken Finger", "", ""},
|
||||
0, NOSKILL, 0, 0, 0, 0, NULL
|
||||
},
|
||||
{ /* I_TROLLBELT 65 */
|
||||
{"Gürtel der Trollstärke", "Gürtel der Trollstärke", "", ""},
|
||||
0, NOSKILL, 0, 0, 0, 0, NULL
|
||||
},
|
||||
{ /* I_PRESSCARD 67 */
|
||||
{"Akkredition des Xontormia-Expreß", "Akkreditionen des Xontormia-Expreß",
|
||||
"Akkredition des Xontormia-Expreß", "Akkreditionen des Xontormia-Expreß"},
|
||||
0, NOSKILL, 0, 0, 0, FL_ITEM_CURSED, NULL
|
||||
},
|
||||
{ /* I_AURAKULUM 69 */
|
||||
{"Aurafocus", "Aurafocuse", "Amulett", "Amulette"},
|
||||
0, NOSKILL, 0, 100, 0, 0, NULL
|
||||
},
|
||||
{ /* I_SPHERE_OF_INVISIBILITY */
|
||||
{"Sphäre der Unsichtbarkeit", "Sphären der Unsichtbarkeit", "", ""},
|
||||
0, NOSKILL, 0, 100, 0, 0, NULL
|
||||
},
|
||||
{ /* I_BAG_OF_HOLDING */
|
||||
{"Zauberbeutel", "Zauberbeutel", "Zauberbeutel", "Zauberbeutel"},
|
||||
0, NOSKILL, 0, 100, 0, FL_ITEM_NOTINBAG|FL_ITEM_NOTLOST, NULL
|
||||
},
|
||||
{ /* I_SACK_OF_CONSERVATION */
|
||||
{"Magischer Kräuterbeutel", "Magische Kräuterbeutel", "", ""},
|
||||
0, NOSKILL, 0, 100, 0, 0, NULL
|
||||
},
|
||||
{ /* I_TACTICCRYSTAL 71 */
|
||||
{"Traumauge", "Traumaugen", "", ""},
|
||||
0, NOSKILL, 0, 100, 0, 0, &use_tacticcrystal
|
||||
},
|
||||
const char * itemnames[MAXITEMS] = {
|
||||
"iron", "stone", "horse", "aoh",
|
||||
"aots", "roi", "rop", "ao_chastity",
|
||||
"laen", "fairyboot", "aoc", "pegasus",
|
||||
"elvenhorse", "dolphin", "roqf", "trollbelt",
|
||||
"presspass", "aurafocus", "sphereofinv", "magicbag",
|
||||
"magicherbbag", "dreameye"
|
||||
};
|
||||
|
||||
#include "movement.h"
|
||||
|
@ -780,19 +693,6 @@ produce_oldresource(region * r, const resource_type * rtype, int norders)
|
|||
}
|
||||
}
|
||||
|
||||
static int
|
||||
use_olditem(struct unit * user, const struct item_type * itype, int amount, struct order * ord)
|
||||
{
|
||||
item_t it;
|
||||
for (it=0;it!=MAXITEMS;++it) {
|
||||
if (olditemtype[it]==itype) {
|
||||
itemdata[it].benutze_funktion(user->region, user, amount, ord);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return EUNUSABLE;
|
||||
}
|
||||
|
||||
typedef const char* translate_t[5];
|
||||
static translate_t translation[] = {
|
||||
{ "Delphin", "dolphin", "dolphin_p", "dolphin", "dolphin_p" },
|
||||
|
@ -833,103 +733,41 @@ static translate_t translation[] = {
|
|||
{ NULL, NULL, NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
static int
|
||||
item_score(item_t i)
|
||||
{
|
||||
switch (i) {
|
||||
case I_AMULET_OF_HEALING:
|
||||
case I_AMULET_OF_TRUE_SEEING:
|
||||
case I_RING_OF_INVISIBILITY:
|
||||
case I_RING_OF_POWER:
|
||||
case I_CHASTITY_BELT:
|
||||
case I_TROLLBELT:
|
||||
case I_RING_OF_NIMBLEFINGER:
|
||||
case I_FEENSTIEFEL:
|
||||
return 6000;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
init_olditems(void)
|
||||
{
|
||||
item_t i;
|
||||
#if 0
|
||||
resource_type * rtype;
|
||||
|
||||
const struct locale * lang = find_locale("de");
|
||||
assert(lang);
|
||||
#endif
|
||||
|
||||
for (i=0; i!=MAXITEMS; ++i) {
|
||||
int iflags = ITF_NONE;
|
||||
int rflags = RTF_ITEM|RTF_POOLED;
|
||||
const char * name[2];
|
||||
const char * appearance[2];
|
||||
int weight = itemdata[i].gewicht;
|
||||
int capacity = 0;
|
||||
item_type * itype;
|
||||
/* item is defined in XML file, but IT_XYZ enum still in use */
|
||||
const item_type * itype = it_find(itemnames[i]);
|
||||
|
||||
if (itemdata[i].flags & FL_ITEM_CURSED) iflags |= ITF_CURSED;
|
||||
if (itemdata[i].flags & FL_ITEM_NOTLOST) iflags |= ITF_NOTLOST;
|
||||
if (itemdata[i].flags & FL_ITEM_NOTINBAG) iflags |= ITF_BIG;
|
||||
if (itemdata[i].flags & FL_ITEM_ANIMAL) iflags |= ITF_ANIMAL;
|
||||
|
||||
name[0]=NULL;
|
||||
{
|
||||
int ci;
|
||||
for (ci=0;translation[ci][0];++ci) {
|
||||
if (!strcmp(translation[ci][0], itemdata[i].name[0])) {
|
||||
name[0] = translation[ci][1];
|
||||
name[1] = translation[ci][2];
|
||||
appearance[0] = translation[ci][3];
|
||||
appearance[1] = translation[ci][4];
|
||||
}
|
||||
}
|
||||
}
|
||||
if (name[0]==NULL) {
|
||||
name[0] = reverse_lookup(lang, itemdata[i].name[0]);
|
||||
name[1] = reverse_lookup(lang, itemdata[i].name[1]);
|
||||
appearance[0] = reverse_lookup(lang, itemdata[i].name[2]);
|
||||
appearance[1] = reverse_lookup(lang, itemdata[i].name[3]);
|
||||
}
|
||||
rtype = new_resourcetype(name, appearance, rflags);
|
||||
itype = new_itemtype(rtype, iflags, weight, capacity);
|
||||
|
||||
switch (i) {
|
||||
case I_HORSE:
|
||||
case I_UNICORN:
|
||||
itype->capacity = HORSECAPACITY;
|
||||
itype->give = give_horses;
|
||||
break;
|
||||
case I_BAG_OF_HOLDING:
|
||||
itype->capacity = BAGCAPACITY;
|
||||
break;
|
||||
case I_TROLLBELT:
|
||||
/* This is wrong. according to the item description it multiplies
|
||||
* the strength of the wearer by a factor of
|
||||
* 50 (STRENGTHMULTIPLIER), not add a fixed 50000 */
|
||||
/* only used in battle.c for items of type ITF_ANIMAL */
|
||||
itype->capacity = STRENGTHCAPACITY;
|
||||
break;
|
||||
default:
|
||||
if (itemdata[i].flags & FL_ITEM_MOUNT) itype->capacity = HORSECAPACITY;
|
||||
}
|
||||
|
||||
if (itemdata[i].is_resource) {
|
||||
attrib * a = a_add(&rtype->attribs, a_new(&at_resourcelimit));
|
||||
resource_limit * rdata = (resource_limit*)a->data.v;
|
||||
rtype->flags |= RTF_LIMITED;
|
||||
if (i==I_HORSE) {
|
||||
rdata->limit = limit_oldresource;
|
||||
rdata->produce = produce_oldresource;
|
||||
}
|
||||
if (i==I_LAEN || i==I_IRON) rdata->guard |= GUARD_MINING;
|
||||
}
|
||||
if (itemdata[i].benutze_funktion) {
|
||||
itype->use = use_olditem;
|
||||
}
|
||||
assert(itype);
|
||||
olditemtype[i] = itype;
|
||||
oldresourcetype[i] = rtype;
|
||||
}
|
||||
|
||||
for (i=0; i!=MAXITEMS; ++i) {
|
||||
if (itemdata[i].skill!=NOSKILL) {
|
||||
construction * con = calloc(sizeof(construction), 1);
|
||||
item_type * itype = olditemtype[i];
|
||||
|
||||
con->minskill = itemdata[i].minskill;
|
||||
if (i==I_LAEN && SkillCap(SK_QUARRYING)) {
|
||||
/* at least 4 levels on which you can mine laen */
|
||||
con->minskill = SkillCap(SK_QUARRYING)-3;
|
||||
}
|
||||
con->skill = itemdata[i].skill;
|
||||
con->maxsize = -1;
|
||||
con->reqsize = 1;
|
||||
con->improvement = NULL;
|
||||
itype->construction = con;
|
||||
}
|
||||
oldresourcetype[i] = itype->rtype;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1208,40 +1046,6 @@ static const char * names[] = {
|
|||
"unit", "unit_p"
|
||||
};
|
||||
|
||||
static int
|
||||
item_score(item_t i)
|
||||
{
|
||||
switch (i) {
|
||||
case I_IRON:
|
||||
case I_STONE:
|
||||
case I_HORSE:
|
||||
return 10;
|
||||
case I_LAEN:
|
||||
return 100;
|
||||
case I_AMULET_OF_HEALING:
|
||||
case I_AMULET_OF_TRUE_SEEING:
|
||||
case I_RING_OF_INVISIBILITY:
|
||||
case I_RING_OF_POWER:
|
||||
case I_CHASTITY_BELT:
|
||||
case I_TROLLBELT:
|
||||
case I_RING_OF_NIMBLEFINGER:
|
||||
case I_FEENSTIEFEL:
|
||||
return 6000;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
init_oldscores(void)
|
||||
{
|
||||
item_t i;
|
||||
|
||||
for (i = 0;olditemtype[i];i++) {
|
||||
item_type * itype = olditemtype[i];
|
||||
itype->score = item_score(i);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
init_resources(void)
|
||||
{
|
||||
|
@ -1273,7 +1077,6 @@ init_resources(void)
|
|||
/* alte typen registrieren: */
|
||||
init_olditems();
|
||||
init_oldpotions();
|
||||
init_oldscores();
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -1444,10 +1247,9 @@ register_resources(void)
|
|||
register_function((pf_generic)res_changehp, "changehp");
|
||||
register_function((pf_generic)res_changeaura, "changeaura");
|
||||
|
||||
register_function((pf_generic)use_olditem, "useolditem");
|
||||
register_function((pf_generic)use_potion, "usepotion");
|
||||
register_function((pf_generic)use_tacticcrystal, "usetacticcrystal");
|
||||
register_function((pf_generic)use_birthdayamulet, "usebirthdayamulet");
|
||||
register_function((pf_generic)use_tacticcrystal, "use_tacticcrystal");
|
||||
register_function((pf_generic)use_birthdayamulet, "use_birthdayamulet");
|
||||
register_function((pf_generic)use_warmthpotion, "usewarmthpotion");
|
||||
register_function((pf_generic)use_bloodpotion, "usebloodpotion");
|
||||
register_function((pf_generic)use_healingpotion, "usehealingpotion");
|
||||
|
|
|
@ -315,9 +315,9 @@ enum {
|
|||
NORESOURCE = -1
|
||||
};
|
||||
|
||||
extern struct potion_type * oldpotiontype[];
|
||||
extern struct item_type * olditemtype[];
|
||||
extern struct resource_type * oldresourcetype[];
|
||||
extern const struct potion_type * oldpotiontype[];
|
||||
extern const struct item_type * olditemtype[];
|
||||
extern const struct resource_type * oldresourcetype[];
|
||||
|
||||
int get_item(const struct unit *, item_t);
|
||||
int set_item(struct unit *, item_t, int);
|
||||
|
|
|
@ -1,6 +1,120 @@
|
|||
<?xml version="1.0"?>
|
||||
<resources>
|
||||
|
||||
<resource name="aoh" appearance="amulet">
|
||||
<item weight="0" score="6000"/>
|
||||
</resource>
|
||||
|
||||
<resource name="aots" appearance="amulet">
|
||||
<item weight="0" score="6000"/>
|
||||
</resource>
|
||||
|
||||
<resource name="roi" appearance="">
|
||||
<item weight="0" score="6000"/>
|
||||
</resource>
|
||||
|
||||
<resource name="rop" appearance="">
|
||||
<item weight="0" score="6000"/>
|
||||
</resource>
|
||||
|
||||
<resource name="roqf" appearance="">
|
||||
<item weight="0" score="6000"/>
|
||||
</resource>
|
||||
|
||||
<resource name="trollbelt">
|
||||
<item weight="0" score="6000"/>
|
||||
</resource>
|
||||
|
||||
<resource name="presspass" cursed="yes">
|
||||
<item weight="0" score="6000"/>
|
||||
</resource>
|
||||
|
||||
<resource name="aurafocus">
|
||||
<item weight="100" score="6000"/>
|
||||
</resource>
|
||||
|
||||
<resource name="sphereofinv">
|
||||
<item weight="100" score="6000"/>
|
||||
</resource>
|
||||
|
||||
<resource name="magicbag">
|
||||
<item big="yes" notlost="yes" weight="100" score="6000"/>
|
||||
</resource>
|
||||
|
||||
<resource name="magicherbbag" appearance="">
|
||||
<item weight="100" score="6000"/>
|
||||
</resource>
|
||||
|
||||
<resource name="ao_chastity" appearance="amulet">
|
||||
<item weight="0" score="6000"/>
|
||||
</resource>
|
||||
|
||||
<resource name="fairyboot" appearance="amulet">
|
||||
<item weight="0" score="6000"/>
|
||||
</resource>
|
||||
|
||||
<resource name="aoc" appearance="amulet">
|
||||
<item weight="100">
|
||||
<function name="use" value="use_birthdayamulet"/>
|
||||
</item>
|
||||
</resource>
|
||||
|
||||
<resource name="dreameye">
|
||||
<item weight="100">
|
||||
<function name="use" value="use_tacticcrystal"/>
|
||||
</item>
|
||||
</resource>
|
||||
|
||||
<resource name="pegasus">
|
||||
<item weight="5000" notlost="yes" big="yes" score="6000" capacity="7000"/>
|
||||
</resource>
|
||||
|
||||
<resource name="elvenhorse">
|
||||
<item weight="5000" notlost="yes" big="yes" score="6000" capacity="7000"/>
|
||||
</resource>
|
||||
|
||||
<resource name="dolphin">
|
||||
<item weight="5000" notlost="yes" big="yes" score="6000" capacity="7000"/>
|
||||
</resource>
|
||||
|
||||
<resource name="iron" limited="yes">
|
||||
<item weight="500" score="10">
|
||||
<construction skill="mining" minskill="1" reqsize="1"/>
|
||||
</item>
|
||||
<resourcelimit>
|
||||
<modifier building="mine" type="skill" value="1"/>
|
||||
<guard flag="mining"/>
|
||||
</resourcelimit>
|
||||
</resource>
|
||||
|
||||
<resource name="laen" limited="yes">
|
||||
<item weight="200" score="100">
|
||||
<construction skill="mining" minskill="7" reqsize="1"/>
|
||||
</item>
|
||||
<resourcelimit>
|
||||
<guard flag="mining"/>
|
||||
</resourcelimit>
|
||||
</resource>
|
||||
|
||||
<resource name="stone" limited="yes">
|
||||
<item weight="6000" score="10" big="yes" animal="yes">
|
||||
<construction skill="quarrying" minskill="1" reqsize="1"/>
|
||||
</item>
|
||||
<resourcelimit>
|
||||
<modifier building="quarry" type="skill" value="1"/>
|
||||
</resourcelimit>
|
||||
</resource>
|
||||
|
||||
<resource name="horse" limited="yes">
|
||||
<item weight="5000" score="10" capacity="7000">
|
||||
<construction skill="training" minskill="1" reqsize="1"/>
|
||||
</item>
|
||||
<resourcelimit>
|
||||
<function name="produce" value="lua_produceresource"/>
|
||||
<function name="limit" value="lua_limitresource"/>
|
||||
</resourcelimit>
|
||||
</resource>
|
||||
|
||||
<resource name="seaserpenthead">
|
||||
<item weight="500" score="400"/>
|
||||
</resource>
|
||||
|
|
|
@ -29,6 +29,19 @@ function hp_changeresource(u, delta)
|
|||
return hp
|
||||
end
|
||||
|
||||
function horse_limit(r)
|
||||
return r:get_resource("horse")
|
||||
end
|
||||
|
||||
function horse_produce(r, n)
|
||||
local horses = r:get_resource("horse")
|
||||
if horses>=n then
|
||||
r:set_resource("horse", horses-n)
|
||||
else
|
||||
r:set_resource("horse", 0)
|
||||
end
|
||||
end
|
||||
|
||||
function log_limit(r)
|
||||
if r:get_flag(1) then -- RF_MALLORN
|
||||
return 0
|
||||
|
|
Loading…
Reference in New Issue