mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2026-03-12 16:19:43 +00:00
the naga warrior now gives an axe as loot
This commit is contained in:
@@ -660,6 +660,20 @@ struct disnake : public snake {
|
||||
virtual void hs(stater& s) override { snake::hs(s); s.act("respawn", respawn, {0, 0}); }
|
||||
};
|
||||
|
||||
struct naga_warrior : public snake {
|
||||
string glyph() override { return "N"; }
|
||||
color_t color() override { return 0x20D020FF; }
|
||||
string get_name() override { return "naga warrior"; }
|
||||
string get_help() override { return "A nasty snake, wielding an axe."; }
|
||||
int base_xp() override { return 200; }
|
||||
int max_hp() override { return 500; }
|
||||
xy siz() override { return {25, 25}; }
|
||||
void act() override;
|
||||
void attacked(int s) override;
|
||||
void draw() override;
|
||||
virtual int chop() { return 32; }
|
||||
};
|
||||
|
||||
struct kestrel : public enemy {
|
||||
xy respawn_vel;
|
||||
xy siz() override { return {10, 10}; }
|
||||
|
||||
@@ -533,6 +533,48 @@ void snake::attacked(int dmg) {
|
||||
if(where.x > m.where.x) vel.x = +abs(vel.x);
|
||||
}
|
||||
|
||||
void naga_warrior::act() {
|
||||
stay_on_screen();
|
||||
kino();
|
||||
if(on_floor) {
|
||||
auto dat = get_dat();
|
||||
if(abs(vel.x) < 1e-6) {
|
||||
dir = -dir;
|
||||
}
|
||||
vel.x = zero_vel.x + dat.d * dat.modv * dir;
|
||||
}
|
||||
if(gmod(gframeid, 100) == 0) {
|
||||
bbox b = get_pixel_bbox_at(xy{where.x + dir * dsiz().x, where.y});
|
||||
if(intersect(b, m.get_pixel_bbox()) && gframeid > invinc_end) {
|
||||
if(m.reduce_hp(chop())) addMessage("The " + get_name() + " chops you!");
|
||||
}
|
||||
}
|
||||
if(intersect(get_pixel_bbox(), m.get_pixel_bbox()) && gframeid > invinc_end) {
|
||||
if(m.reduce_hp(bite())) addMessage("The " + get_name() + " bites you!");
|
||||
}
|
||||
}
|
||||
|
||||
void naga_warrior::draw() {
|
||||
entity::draw();
|
||||
|
||||
int t = gmod(gframeid, 100);
|
||||
if(t <= 50) {
|
||||
bbox b = get_pixel_bbox_at(xy{where.x + dir * (1-0.01 * t) * dsiz().x, where.y});
|
||||
auto col = 0xFFFFFFFF;
|
||||
auto& alpha = part(col, 0);
|
||||
alpha = max<int> (0, alpha - 5 * t);
|
||||
asciiletter(
|
||||
b.minx, b.miny,
|
||||
b.maxx, b.maxy,
|
||||
dir == -1 ? "(" : ")", col
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void naga_warrior::attacked(int dmg) {
|
||||
enemy::attacked(dmg); // do not reverse on being attacked!
|
||||
}
|
||||
|
||||
void hint::act() {
|
||||
bool cur = intersect(get_pixel_bbox(), m.get_pixel_bbox());
|
||||
if(gframeid < 300) cur = 0;
|
||||
|
||||
@@ -274,6 +274,12 @@ void load_room(fhstream& f, cell *c) {
|
||||
b->respawn_dir = get_int();
|
||||
r.entities.emplace_back(std::move(b));
|
||||
}
|
||||
else if(cap == "NAGA") {
|
||||
auto b = std::make_unique<naga_warrior>(); nam(*b);
|
||||
b->respawn = get_xy();
|
||||
b->respawn_dir = get_int();
|
||||
r.entities.emplace_back(std::move(b));
|
||||
}
|
||||
else if(cap == "FERRIS") {
|
||||
ld cx = get_ld(), cy = get_ld(), radius = get_ld(); int qty = get_int();
|
||||
|
||||
|
||||
@@ -2828,7 +2828,10 @@ MAP
|
||||
#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b
|
||||
################################################################################
|
||||
#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b
|
||||
SNAKE Axeman 300 200 1
|
||||
NAGA Axer 300 200 1
|
||||
LOOT 1
|
||||
axe
|
||||
This axe is a powerful weapon!
|
||||
OK
|
||||
|
||||
MOVE 4 Guinea Pig Pen
|
||||
|
||||
@@ -207,6 +207,7 @@ void init_scales() {
|
||||
letterscales[')'] = euscale(2.5, 1);
|
||||
letterscales['('] = euscale(2.5, 1);
|
||||
letterscales['F'] = euscale(2.1, 1.3);
|
||||
letterscales['N'] = euscale(1.6, 1.3);
|
||||
letterscales['C'] = euscale(1.8, 1.3);
|
||||
letterscales['f'] = euscale(2.5, 1.3);
|
||||
letterscales['/'] = euscale(4, 1.2);
|
||||
|
||||
Reference in New Issue
Block a user