mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-06-26 15:12:48 +00:00
ru:: cat/capybara morphs (do not unmorph correctly yet)
This commit is contained in:
parent
6fa502c4e9
commit
ec90291da5
@ -303,6 +303,7 @@ struct man : public entity {
|
|||||||
int attack_facing;
|
int attack_facing;
|
||||||
int attack_when;
|
int attack_when;
|
||||||
int on_floor_when;
|
int on_floor_when;
|
||||||
|
entity *morphed = nullptr;
|
||||||
|
|
||||||
int last_action;
|
int last_action;
|
||||||
|
|
||||||
@ -319,9 +320,18 @@ struct man : public entity {
|
|||||||
next.reset(); current.reset();
|
next.reset(); current.reset();
|
||||||
postfix();
|
postfix();
|
||||||
}
|
}
|
||||||
xy siz() override { return {12, 12}; }
|
xy siz() override {
|
||||||
string glyph() override { return "@"; }
|
if(morphed) return morphed->siz();
|
||||||
color_t color() override { return 0xFF8080FF; }
|
return {12, 12};
|
||||||
|
}
|
||||||
|
string glyph() override {
|
||||||
|
if(morphed) return morphed->glyph();
|
||||||
|
return "@";
|
||||||
|
}
|
||||||
|
color_t color() override {
|
||||||
|
if(morphed) return morphed->color();
|
||||||
|
return 0xFF8080FF;
|
||||||
|
}
|
||||||
void act() override;
|
void act() override;
|
||||||
void draw() override;
|
void draw() override;
|
||||||
virtual bool hurt_by_spikes() { return true; }
|
virtual bool hurt_by_spikes() { return true; }
|
||||||
@ -446,6 +456,33 @@ struct vtrap : public entity {
|
|||||||
string get_help() override { return "A deadly but invisible trap."; }
|
string get_help() override { return "A deadly but invisible trap."; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct cat_color {
|
||||||
|
string name;
|
||||||
|
color_t col;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct cat : public enemy {
|
||||||
|
cat_color col;
|
||||||
|
cat();
|
||||||
|
xy siz() override { return {5, 5}; }
|
||||||
|
string glyph() override { return "f"; }
|
||||||
|
color_t color() override { return col.col; }
|
||||||
|
string get_name() override { return col.name + " cat"; }
|
||||||
|
string get_help() override { return "Do not fight cats!"; }
|
||||||
|
int base_xp() { return 10; }
|
||||||
|
int max_hp() { return 20; }
|
||||||
|
};
|
||||||
|
|
||||||
|
struct capybara : public enemy {
|
||||||
|
xy siz() override { return {6, 6}; }
|
||||||
|
string glyph() override { return "C"; }
|
||||||
|
color_t color() override { return 0xC08040FF; }
|
||||||
|
string get_name() override { return "capybara"; }
|
||||||
|
string get_help() override { return "Do not fight capybaras!"; }
|
||||||
|
int base_xp() { return 15; }
|
||||||
|
int max_hp() { return 40; }
|
||||||
|
};
|
||||||
|
|
||||||
struct boar : public enemy {
|
struct boar : public enemy {
|
||||||
xy siz() override { return {18, 18}; }
|
xy siz() override { return {18, 18}; }
|
||||||
string glyph() override { return "B"; }
|
string glyph() override { return "B"; }
|
||||||
|
@ -658,4 +658,14 @@ void bat::attacked(int dmg) {
|
|||||||
if(where.y > m.where.y) vel.y = +abs(vel.y);
|
if(where.y > m.where.y) vel.y = +abs(vel.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vector<cat_color> cat_colors = {
|
||||||
|
cat_color{"red", 0xC04040FF},
|
||||||
|
cat_color{"black", 0x505060FF},
|
||||||
|
cat_color{"white", 0xF0F0F0FF}
|
||||||
|
};
|
||||||
|
|
||||||
|
cat::cat() {
|
||||||
|
col = hrand_elt(cat_colors);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -87,9 +87,35 @@ randeff fire_weapon("Fiery Weapon", "Attacks with your [weapon] set things on fi
|
|||||||
m.next.mods.emplace_back(d.re->which_weapon, mod::burning, 2 * m.current.stats[stat::wis] + 1e-6);
|
m.next.mods.emplace_back(d.re->which_weapon, mod::burning, 2 * m.current.stats[stat::wis] + 1e-6);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
cat_color morph_cat_color;
|
||||||
|
|
||||||
// morph powers
|
// morph powers
|
||||||
randeff morph_cat("Cat", "Turns you into a cat.", "You turn into a cat!", [] (data &d) { });
|
randeff morph_cat("Cat", "Turns you into a cat.", "You turn into a cat!", [] (data &d) {
|
||||||
randeff morph_capy("Capybara", "Turns you into a capybara.", "You turn into a capybara!", [] (data &d) { });
|
if(d.mode == rev::start || (d.mode == rev::active && d.keystate == 1) || (d.mode == rev::stop && m.morphed)) {
|
||||||
|
if(m.morphed) {
|
||||||
|
delete(m.morphed), m.morphed = nullptr;
|
||||||
|
addMessage("You morph back into a human.");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
auto mcat = new cat;
|
||||||
|
mcat->col = morph_cat_color;
|
||||||
|
m.morphed = mcat;
|
||||||
|
addMessage("You morph into a " + m.morphed->get_name() + "!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
randeff morph_capy("Capybara", "Turns you into a capybara.", "You turn into a capybara!", [] (data &d) {
|
||||||
|
if(d.mode == rev::start || (d.mode == rev::active && d.keystate == 1) || (d.mode == rev::stop && m.morphed)) {
|
||||||
|
if(m.morphed) {
|
||||||
|
delete(m.morphed), m.morphed = nullptr;
|
||||||
|
addMessage("You morph back into a human.");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m.morphed = new capybara;
|
||||||
|
addMessage("You morph into a lovely capybara!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
vector<power*> all_weapons() {
|
vector<power*> all_weapons() {
|
||||||
vector<power*> res;
|
vector<power*> res;
|
||||||
@ -115,6 +141,7 @@ void assign_potion_powers() {
|
|||||||
find_power("reach").randeffs = relist{ pick(&jump_double, &jump_high, &jump_bubble, &jump_light), random_powers[3] };
|
find_power("reach").randeffs = relist{ pick(&jump_double, &jump_high, &jump_bubble, &jump_light), random_powers[3] };
|
||||||
find_power("fire").randeffs = relist{ pick(&fire_spit, &fire_weapon), random_powers[4] };
|
find_power("fire").randeffs = relist{ pick(&fire_spit, &fire_weapon), random_powers[4] };
|
||||||
find_power("mystery").randeffs = relist{ random_powers[5], random_powers[6], random_powers[7] };
|
find_power("mystery").randeffs = relist{ random_powers[5], random_powers[6], random_powers[7] };
|
||||||
|
morph_cat_color = hrand_elt(cat_colors);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -209,6 +209,8 @@ void init_scales() {
|
|||||||
letterscales[')'] = euscale(2.5, 1);
|
letterscales[')'] = euscale(2.5, 1);
|
||||||
letterscales['('] = euscale(2.5, 1);
|
letterscales['('] = euscale(2.5, 1);
|
||||||
letterscales['F'] = euscale(2.1, 1.3);
|
letterscales['F'] = euscale(2.1, 1.3);
|
||||||
|
letterscales['C'] = euscale(1.8, 1.3);
|
||||||
|
letterscales['f'] = euscale(2.5, 1.3);
|
||||||
}
|
}
|
||||||
|
|
||||||
void asciiletter(ld minx, ld miny, ld maxx, ld maxy, const string& ch, color_t col) {
|
void asciiletter(ld minx, ld miny, ld maxx, ld maxy, const string& ch, color_t col) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user