1
0
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:
Zeno Rogue
2026-03-31 15:49:48 +02:00
parent b111bd84d5
commit 8d3717e0f2
6 changed files with 35 additions and 30 deletions
+9 -9
View File
@@ -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
View File
@@ -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);
+3
View File
@@ -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
View File
@@ -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++)
+3 -2
View File
@@ -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
+3 -2
View File
@@ -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);