mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2026-05-19 12:32:07 +00:00
ru:: attacked now has an information about power used
This commit is contained in:
@@ -316,7 +316,7 @@ struct entity {
|
||||
|
||||
virtual void draw();
|
||||
|
||||
virtual void attacked(int s) {}
|
||||
virtual void attacked(int s, power *p) {}
|
||||
|
||||
virtual void spiked() {
|
||||
reduce_hp(10);
|
||||
@@ -564,7 +564,7 @@ struct enemy : public located_entity {
|
||||
if(!avoided) score();
|
||||
}
|
||||
virtual void hs(stater& s) override { located_entity::hs(s); s.only_full().act("kills", num_kills, 0); s.act("avoided", avoided, false); }
|
||||
void attacked(int s) override;
|
||||
void attacked(int s, power *p) override;
|
||||
virtual int base_xp() { return 0; }
|
||||
bool hit_by_missile(missile *m) override { return true; }
|
||||
enemy* as_enemy() override { return this; }
|
||||
@@ -610,7 +610,7 @@ struct boar : public enemy {
|
||||
string glyph() override { return "B"; }
|
||||
color_t color() override { return 0x804000FF; }
|
||||
void act() override;
|
||||
void attacked(int s) override;
|
||||
void attacked(int s, power *p) override;
|
||||
string get_name() override { return "giant boar"; }
|
||||
string get_help() override { return "Beware their tusks."; }
|
||||
int base_xp() { return 60; }
|
||||
@@ -625,7 +625,7 @@ struct frog : public enemy {
|
||||
ld maxrange() { return 50; }
|
||||
color_t color() override { return 0x208020FF; }
|
||||
void act() override;
|
||||
void attacked(int s) override;
|
||||
void attacked(int s, power *p) override;
|
||||
string get_name() override { return "frog"; }
|
||||
string get_help() override { return "What a nice frog."; }
|
||||
int base_xp() { return 30; }
|
||||
@@ -668,7 +668,7 @@ struct snake : public enemy {
|
||||
string glyph() override { return "S"; }
|
||||
color_t color() override { return 0x20D020FF; }
|
||||
void act() override;
|
||||
void attacked(int s) override;
|
||||
void attacked(int s, power *p) override;
|
||||
string get_name() override { return "snake"; }
|
||||
string get_help() override { return "A nasty dungeon snake."; }
|
||||
int base_xp() override { return 10; }
|
||||
@@ -704,7 +704,7 @@ struct naga_warrior : public snake {
|
||||
int max_hp() override { return 500; }
|
||||
xy siz() override { return {25, 25}; }
|
||||
void act() override;
|
||||
void attacked(int s) override;
|
||||
void attacked(int s, power *p) override;
|
||||
void draw() override;
|
||||
virtual int chop() { return 32; }
|
||||
};
|
||||
@@ -715,7 +715,7 @@ struct kestrel : public enemy {
|
||||
string glyph() override { return "K"; }
|
||||
color_t color() override { return 0xD0A0A0FF; }
|
||||
void act() override;
|
||||
void attacked(int s) override;
|
||||
void attacked(int s, power *p) override;
|
||||
string get_name() override { return "kestrel"; }
|
||||
string get_help() override { return "A standard dungeon kestrel."; }
|
||||
int base_xp() { return 30; }
|
||||
@@ -753,7 +753,7 @@ struct bat : public enemy {
|
||||
string glyph() override { return "B"; }
|
||||
color_t color() override { return 0xD0A0A0FF; }
|
||||
void act() override;
|
||||
void attacked(int s) override;
|
||||
void attacked(int s, power *p) override;
|
||||
string get_name() override { return "bat"; }
|
||||
string get_help() override { return "A cave bat."; }
|
||||
int base_xp() { return 10; }
|
||||
@@ -770,7 +770,7 @@ struct guineapig : public enemy {
|
||||
string glyph() override { return "G"; }
|
||||
color_t color() override { return 0xD0A0A0FF; }
|
||||
void act() override;
|
||||
void attacked(int s) override;
|
||||
void attacked(int s, power *p) override;
|
||||
string get_name() override { return "guinea pig"; }
|
||||
string get_help() override { return "A standard dungeon guinea pig."; }
|
||||
int base_xp() { return 30; }
|
||||
|
||||
+16
-16
@@ -349,7 +349,7 @@ void missile::act() {
|
||||
if(freezing() && e->as_missile() && e->burning()) { destroyed = true; e->destroyed = true; }
|
||||
hit_list.insert(&*e);
|
||||
e->invinc_end = 0;
|
||||
e->attacked(power);
|
||||
e->attacked(power, burning() ? fire_power : freezing() ? ice_power : nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -425,15 +425,15 @@ void boar::act() {
|
||||
}
|
||||
}
|
||||
|
||||
void enemy::attacked(int dmg) {
|
||||
void enemy::attacked(int dmg, power *p) {
|
||||
current_target = this;
|
||||
if(reduce_hp(dmg)) {
|
||||
if(!existing) addMessage("You kill the " + hal()->get_name() + "."); else addMessage("You hit the " + hal()->get_name() + ".");
|
||||
}
|
||||
}
|
||||
|
||||
void boar::attacked(int dmg) {
|
||||
enemy::attacked(dmg);
|
||||
void boar::attacked(int dmg, power *p) {
|
||||
enemy::attacked(dmg, p);
|
||||
auto dat = get_dat();
|
||||
int s = where.x < m.where.x ? -1 : 1;
|
||||
if(on_floor) vel.x = dat.d * dat.modv * s * 2, vel.y = -dat.d * dat.modv * 2.5;
|
||||
@@ -486,8 +486,8 @@ void frog::act() {
|
||||
}
|
||||
}
|
||||
|
||||
void frog::attacked(int dmg) {
|
||||
enemy::attacked(dmg);
|
||||
void frog::attacked(int dmg, power *p) {
|
||||
enemy::attacked(dmg, p);
|
||||
auto dat = get_dat();
|
||||
int s = where.x < m.where.x ? -1 : 1;
|
||||
if(on_floor) vel.x = dat.d * dat.modv * s * 2, vel.y = -dat.d * dat.modv * 2.5;
|
||||
@@ -526,8 +526,8 @@ void snake::act() {
|
||||
}
|
||||
}
|
||||
|
||||
void snake::attacked(int dmg) {
|
||||
enemy::attacked(dmg);
|
||||
void snake::attacked(int dmg, power *p) {
|
||||
enemy::attacked(dmg, p);
|
||||
dir *= -1;
|
||||
if(where.x < m.where.x) vel.x = -abs(vel.x);
|
||||
if(where.x > m.where.x) vel.x = +abs(vel.x);
|
||||
@@ -571,8 +571,8 @@ void naga_warrior::draw() {
|
||||
}
|
||||
}
|
||||
|
||||
void naga_warrior::attacked(int dmg) {
|
||||
enemy::attacked(dmg); // do not reverse on being attacked!
|
||||
void naga_warrior::attacked(int dmg, power *p) {
|
||||
enemy::attacked(dmg, p); // do not reverse on being attacked!
|
||||
}
|
||||
|
||||
void hint::act() {
|
||||
@@ -884,8 +884,8 @@ void guineapig::act() {
|
||||
falling = true; vel = xy(0, 0);
|
||||
}
|
||||
|
||||
void guineapig::attacked(int dmg) {
|
||||
enemy::attacked(dmg);
|
||||
void guineapig::attacked(int dmg, power *p) {
|
||||
enemy::attacked(dmg, p);
|
||||
spindir *= -1;
|
||||
}
|
||||
|
||||
@@ -904,14 +904,14 @@ void vtrap::act() {
|
||||
}
|
||||
}
|
||||
|
||||
void kestrel::attacked(int dmg) {
|
||||
enemy::attacked(dmg);
|
||||
void kestrel::attacked(int dmg, power *p) {
|
||||
enemy::attacked(dmg, p);
|
||||
if(where.x < m.where.x) vel.x = -abs(vel.x);
|
||||
if(where.x > m.where.x) vel.x = +abs(vel.x);
|
||||
}
|
||||
|
||||
void bat::attacked(int dmg) {
|
||||
enemy::attacked(dmg);
|
||||
void bat::attacked(int dmg, power *p) {
|
||||
enemy::attacked(dmg, p);
|
||||
if(where.x < m.where.x) vel.x = -abs(vel.x);
|
||||
if(where.x > m.where.x) vel.x = +abs(vel.x);
|
||||
if(where.y < m.where.y) vel.y = -abs(vel.y);
|
||||
|
||||
@@ -198,4 +198,7 @@ string unspace(const string& s);
|
||||
string respace(const string& s);
|
||||
|
||||
extern map<string, entity*> entity_by_id;
|
||||
|
||||
extern power *fire_power, *ice_power, *thief_power;
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -201,7 +201,7 @@ void man::launch_attack(power *p, int fac, boxfun f) {
|
||||
if(e->existing && intersect(e->get_pixel_bbox(), pb)) {
|
||||
int sav = e->invinc_end;
|
||||
int dam = (m.current.stats[stat::str] + 1) * 3 / 2;
|
||||
e->attacked(dam);
|
||||
e->attacked(dam, p);
|
||||
for(auto& md: p->mods) md.action(&*e, dam, sav);
|
||||
}
|
||||
for(int y=bb.miny; y<bb.maxy; y++)
|
||||
|
||||
@@ -302,6 +302,7 @@ power& gen_power(int key, int shifted, string name, string desc, string glyph, c
|
||||
power *extra_life;
|
||||
int gold_id;
|
||||
power *dexmode;
|
||||
power *fire_power, *ice_power, *thief_power;
|
||||
|
||||
void power_death_revert(power& p) {
|
||||
add_revert(death_revert, {"ITEM", p.id, its(p.qty_filled), its(p.qty_owned)});
|
||||
@@ -425,7 +426,7 @@ void gen_powers() {
|
||||
"]", 0xC0C0C0FF,
|
||||
[] (data& d) {}).be_armor({{"a chain shirt", "plate armor"}, {"an iron cap", "an iron helmet"}, {"an iron gorget"}, {"bracers"}, {"gauntlets"}, {"iron-shod boots"}, {"greaves"}}),
|
||||
|
||||
gen_power('t', 1, "thief garments",
|
||||
thief_power = &gen_power('t', 1, "thief garments",
|
||||
"This outfit makes it harder for enemies to notice or hit you.",
|
||||
"]", 0xC08000FF,
|
||||
[] (data& d) {}).be_armor({{"a leather vest"}, {"a hood"}, {"comfortable boots", "muffled boots", "boots of dodging"}, {"a cloak", "chameleon cloak"}, {"leather gloves"}, {"leather pants"}}),
|
||||
@@ -587,7 +588,7 @@ void gen_powers() {
|
||||
random_potion_act
|
||||
).be_potion(),
|
||||
|
||||
gen_power('4', 0, "fire",
|
||||
fire_power = &gen_power('4', 0, "fire",
|
||||
"This will let you produce fire, in some way.",
|
||||
"!", 0xFFFF00FF,
|
||||
random_potion_act
|
||||
|
||||
@@ -84,6 +84,7 @@ randeff trap_disarm("Disarm traps", "Lets you see all traps on the level for a s
|
||||
e->existing = false;
|
||||
addMessage("You have disarmed a "+e->hal()->get_name()+".");
|
||||
}
|
||||
e->invinc_end = sav; e->attacked(0, thief_power);
|
||||
},
|
||||
[] (int x, int y) {
|
||||
int b = current_room->at(x, y);
|
||||
@@ -197,7 +198,7 @@ randeff fire_weapon("Fiery Weapon", "Attacks with your [weapon] set things on fi
|
||||
[] (color_t& col) { col = gradient(0xFFFF00FF, 0xFF0000FF, -1, sin(ticks/100), 1); },
|
||||
[] (string& s) { s = "burning " + s; },
|
||||
[] (entity *e, int dam, int sav) {
|
||||
e->invinc_end = sav; e->attacked(2 * m.current.stats[stat::wis] + 1e-6);
|
||||
e->invinc_end = sav; e->attacked(2 * m.current.stats[stat::wis] + 1e-6, fire_power);
|
||||
},
|
||||
[] (int x, int y) {
|
||||
int b = current_room->at(x, y);
|
||||
@@ -217,7 +218,7 @@ randeff ice_weapon("Chill Weapon", "Attacks with your [weapon] freeze things.",
|
||||
[] (color_t& col) { col = 0x8080FFFF; },
|
||||
[] (string& s) { s = "freezing " + s; },
|
||||
[] (entity *e, int dam, int sav) {
|
||||
e->invinc_end = sav; e->attacked(2 * m.current.stats[stat::wis] + 1e-6);
|
||||
e->invinc_end = sav; e->attacked(2 * m.current.stats[stat::wis] + 1e-6, ice_power);
|
||||
},
|
||||
[] (int x, int y) {
|
||||
int b = current_room->at(x, y);
|
||||
|
||||
Reference in New Issue
Block a user