mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-06-26 15:12:48 +00:00
ru:: frogs and giant frogs and giant frog cave
This commit is contained in:
parent
742f5f02b7
commit
b0d52f4aee
@ -381,6 +381,31 @@ struct boar : public enemy {
|
|||||||
int max_hp() { return 60; }
|
int max_hp() { return 60; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct frog : public enemy {
|
||||||
|
int jphase, jump_at;
|
||||||
|
xy siz() override { return {10, 10}; }
|
||||||
|
string glyph() override { return "F"; }
|
||||||
|
virtual ld maxvel() { return 3; }
|
||||||
|
ld maxrange() { return 50; }
|
||||||
|
color_t color() override { return 0x208020FF; }
|
||||||
|
void act() override;
|
||||||
|
void attacked(int s) override;
|
||||||
|
string get_name() override { return "frog"; }
|
||||||
|
string get_help() override { return "What a nice frog."; }
|
||||||
|
int base_xp() { return 30; }
|
||||||
|
int max_hp() { return 30; }
|
||||||
|
};
|
||||||
|
|
||||||
|
struct giantfrog : public frog {
|
||||||
|
int jphase, jump_at;
|
||||||
|
xy siz() override { return {36, 36}; }
|
||||||
|
string get_name() override { return "giant frog"; }
|
||||||
|
string get_help() override { return "Beware their jumps."; }
|
||||||
|
int base_xp() { return 200; }
|
||||||
|
int max_hp() { return 200; }
|
||||||
|
ld maxvel() { return 5; }
|
||||||
|
};
|
||||||
|
|
||||||
struct ghost : public enemy {
|
struct ghost : public enemy {
|
||||||
int xp, hp;
|
int xp, hp;
|
||||||
bool flipped;
|
bool flipped;
|
||||||
|
@ -320,6 +320,60 @@ void boar::attacked(int dmg) {
|
|||||||
if(on_floor) vel.x = dat.d * dat.modv * s * 2, vel.y = -dat.d * dat.modv * 2.5;
|
if(on_floor) vel.x = dat.d * dat.modv * s * 2, vel.y = -dat.d * dat.modv * 2.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void frog::act() {
|
||||||
|
stay_on_screen();
|
||||||
|
kino();
|
||||||
|
if(intersect(get_pixel_bbox(), m.get_pixel_bbox())) {
|
||||||
|
int s = where.x < m.where.x ? -1 : 1;
|
||||||
|
if(m.reduce_hp(20)) addMessage("The giant frog crushes you!");
|
||||||
|
auto dat = get_dat();
|
||||||
|
auto mdat = m.get_dat();
|
||||||
|
if(m.on_floor) m.vel.x = mdat.d * mdat.modv * -s * 1.5, m.vel.y = -mdat.d * mdat.modv * 2;
|
||||||
|
if(on_floor) vel.x = dat.d * dat.modv * s * 1.5;
|
||||||
|
}
|
||||||
|
if(on_floor) {
|
||||||
|
vel.x = 0;
|
||||||
|
if(gframeid > invinc_end) {
|
||||||
|
auto dat = get_dat();
|
||||||
|
if(jphase == 0 && gframeid >= jump_at && intersect(extend(get_pixel_bbox(), 100 * dat.d, 100 * dat.d, 20 * dat.d, 20 * dat.d), m.get_pixel_bbox())) {
|
||||||
|
vel.y = -2 * dat.modv;
|
||||||
|
jphase = 1;
|
||||||
|
}
|
||||||
|
else if(jphase == 1) {
|
||||||
|
auto p = where;
|
||||||
|
ld v = maxvel();
|
||||||
|
array<xy, 2> fp;
|
||||||
|
for(int i=0; i<2; i++) {
|
||||||
|
where = p, vel.x = (i ? v : -v) * dat.modv, vel.y = -v * dat.modv;
|
||||||
|
int it = 0;
|
||||||
|
do { stay_on_screen(); kino(); } while(!on_floor && it++ < 5000);
|
||||||
|
fp[i] = where;
|
||||||
|
}
|
||||||
|
ld dist = max(abs(fp[0].x - p.x), abs(fp[1].x - p.x));
|
||||||
|
where = p;
|
||||||
|
jphase = 2;
|
||||||
|
println(hlog, tuple(fp[0].x, fp[0].y, fp[1].x, fp[1].y));
|
||||||
|
vel.y = -v * dat.modv;
|
||||||
|
if(dist == 0) return;
|
||||||
|
ld il = (m.where.x - where.x) / dist;
|
||||||
|
if(il > 1) il = 1 - (rand() % 100) / 1000;
|
||||||
|
if(il < -1) il = -1 + (rand() % 100) / 1000;
|
||||||
|
vel.x = il * v * dat.modv;
|
||||||
|
}
|
||||||
|
else if(jphase == 2) {
|
||||||
|
jphase = 0; jump_at = gframeid + game_fps * (maxvel() > 4 ? 2 : 0) + rand() % game_fps;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void frog::attacked(int dmg) {
|
||||||
|
enemy::attacked(dmg);
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
void ghost::act() {
|
void ghost::act() {
|
||||||
hyperpoint g = to_hyper(where);
|
hyperpoint g = to_hyper(where);
|
||||||
hyperpoint h = to_hyper(m.where);
|
hyperpoint h = to_hyper(m.where);
|
||||||
|
@ -1274,3 +1274,105 @@ BAT 300 220
|
|||||||
BAT 400 220
|
BAT 400 220
|
||||||
BAT 500 220
|
BAT 500 220
|
||||||
OK
|
OK
|
||||||
|
|
||||||
|
MOVE 2 Bat Cave
|
||||||
|
ROOM Frog Fountain
|
||||||
|
# wall
|
||||||
|
. air
|
||||||
|
! magic fountain
|
||||||
|
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#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b
|
||||||
|
OK
|
||||||
|
|
||||||
|
MOVE 2 Frog Fountain
|
||||||
|
ROOM Frog Cave
|
||||||
|
# wall
|
||||||
|
. air
|
||||||
|
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#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b
|
||||||
|
FROG 245 154
|
||||||
|
FROG 345 154
|
||||||
|
FROG 445 154
|
||||||
|
GIANTFROG 145 154
|
||||||
|
LOOT 1
|
||||||
|
fire
|
||||||
|
The giant frog extract will let you produce fire! But you need to take it to a magic fountain first.
|
||||||
|
OK
|
||||||
|
@ -208,6 +208,7 @@ void init_scales() {
|
|||||||
letterscales['~'] = eupush(0, -0.4) * euscale(1.5, 1.2);
|
letterscales['~'] = eupush(0, -0.4) * euscale(1.5, 1.2);
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
||||||
|
@ -168,6 +168,18 @@ void load_room(fhstream& f, cell *c) {
|
|||||||
b->respawn = b->where; b->postfix();
|
b->respawn = b->where; b->postfix();
|
||||||
r.entities.emplace_back(std::move(b));
|
r.entities.emplace_back(std::move(b));
|
||||||
}
|
}
|
||||||
|
else if(cap == "GIANTFROG") {
|
||||||
|
auto b = std::make_unique<giantfrog>();
|
||||||
|
sscanf(param.c_str(), "%lf%lf", &b->where.x, &b->where.y);
|
||||||
|
b->respawn = b->where; b->postfix();
|
||||||
|
r.entities.emplace_back(std::move(b));
|
||||||
|
}
|
||||||
|
else if(cap == "FROG") {
|
||||||
|
auto b = std::make_unique<frog>();
|
||||||
|
sscanf(param.c_str(), "%lf%lf", &b->where.x, &b->where.y);
|
||||||
|
b->respawn = b->where; b->postfix();
|
||||||
|
r.entities.emplace_back(std::move(b));
|
||||||
|
}
|
||||||
else if(cap == "BAT") {
|
else if(cap == "BAT") {
|
||||||
auto b = std::make_unique<bat>();
|
auto b = std::make_unique<bat>();
|
||||||
sscanf(param.c_str(), "%lf%lf", &b->where.x, &b->where.y);
|
sscanf(param.c_str(), "%lf%lf", &b->where.x, &b->where.y);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user