mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-05-11 19:54:07 +00:00
ru:: a few more levels
This commit is contained in:
parent
7629b89245
commit
4aa1b971a6
@ -1,11 +1,13 @@
|
||||
namespace rogue_unlike {
|
||||
|
||||
/** a helper structure to mass to powerfun */
|
||||
struct data {
|
||||
int keystate;
|
||||
double d;
|
||||
ld modv;
|
||||
ld moda;
|
||||
int dx;
|
||||
struct power *p;
|
||||
};
|
||||
|
||||
using powerfun = hr::function<void(data&)>;
|
||||
@ -13,12 +15,15 @@ using powerfun = hr::function<void(data&)>;
|
||||
struct power {
|
||||
int key;
|
||||
string name;
|
||||
string xname;
|
||||
string desc;
|
||||
string glyph;
|
||||
color_t color;
|
||||
flagtype flags;
|
||||
powerfun pf;
|
||||
int id_status;
|
||||
power(int key, string name, string desc, string glyph, color_t color, flagtype f, powerfun pf) : key(key), name(name), desc(desc), glyph(glyph), color(color), flags(f), pf(pf) {
|
||||
id_status = 0;
|
||||
}
|
||||
};
|
||||
|
||||
@ -132,9 +137,7 @@ struct entity {
|
||||
|
||||
virtual double grav() { return 0.1; }
|
||||
|
||||
bool on_floor;
|
||||
bool fallthru;
|
||||
bool on_ice;
|
||||
bool on_floor, fallthru, on_ice, wallhug, on_bounce;
|
||||
|
||||
bool destroyed;
|
||||
void kino();
|
||||
@ -156,6 +159,11 @@ struct man : public entity {
|
||||
int facing;
|
||||
int attack_facing;
|
||||
int attack_when;
|
||||
|
||||
int on_floor_when;
|
||||
int jump_control, next_jump_control;
|
||||
int coyote_time, next_coyote_time;
|
||||
|
||||
man() { facing = 1; attack_facing = 1; }
|
||||
double sx() override { return 12; }
|
||||
double sy() override { return 12; }
|
||||
@ -176,13 +184,15 @@ struct sage : public entity {
|
||||
|
||||
struct item : public entity {
|
||||
int id;
|
||||
string pickup_message;
|
||||
double sx() override { return 12; }
|
||||
double sy() override { return 12; }
|
||||
string glyph() override { return powers[id].glyph; }
|
||||
color_t color() override { return powers[id].color; }
|
||||
void act() override {
|
||||
kino();
|
||||
if(intersect(get_pixel_bbox(), m.get_pixel_bbox())) {
|
||||
addMessage("You pick up the " + powers[id].name + ".");
|
||||
addMessage(pickup_message);
|
||||
destroyed = true;
|
||||
}
|
||||
}
|
||||
|
@ -30,6 +30,8 @@ void entity::apply_grav() {
|
||||
void entity::kino() {
|
||||
on_floor = false;
|
||||
on_ice = false;
|
||||
wallhug = false;
|
||||
on_bounce = false;
|
||||
|
||||
// ld modv = 60. / game_fps;
|
||||
|
||||
@ -45,8 +47,9 @@ void entity::kino() {
|
||||
for(int x = obb.minx; x < obb.maxx; x++) for(int y = obb.maxy; y < jbb.maxy; y++) {
|
||||
eWall b = current_room->at(x, y);
|
||||
if(walls[b].flags & blocking) {
|
||||
if(walls[b].flags & W_BOUNCY) { vel_y = -vel_y; on_bounce = true; goto again; }
|
||||
on_floor = true;
|
||||
if(b == wFrozen) on_ice = true;
|
||||
if(walls[b].flags & W_FROZEN) on_ice = true;
|
||||
vel_y /= 2;
|
||||
if(abs(vel_y) < 1e-6) vel_y = 0;
|
||||
if(freezing()) {
|
||||
@ -85,6 +88,7 @@ void entity::kino() {
|
||||
if(walls[b].flags & W_BLOCK) {
|
||||
if(freezing()) { hit_wall(); }
|
||||
vel_x = (vel_x - max<ld>(vel_y, 0)/10) / 2;
|
||||
wallhug = true;
|
||||
goto again;
|
||||
}
|
||||
}
|
||||
@ -98,6 +102,7 @@ void entity::kino() {
|
||||
if(walls[b].flags & W_BLOCK) {
|
||||
if(freezing()) { hit_wall(); }
|
||||
vel_x = (vel_x + max<ld>(vel_y, 0)/10) / 2;
|
||||
wallhug = true;
|
||||
goto again;
|
||||
}
|
||||
}
|
||||
|
@ -58,16 +58,18 @@ flagtype W_TRANS = 2;
|
||||
flagtype W_PLATFORM = 4;
|
||||
flagtype W_STAIRCASE = 8;
|
||||
flagtype W_PAIN = 16;
|
||||
flagtype W_BOUNCY = 32;
|
||||
flagtype W_FROZEN = 64;
|
||||
|
||||
constexpr int qwall = 14;
|
||||
|
||||
ruwall walls[qwall] = {
|
||||
{"air", ".", 0x40404080, W_TRANS},
|
||||
{"wall", "#", 0xFFFFFFFF, W_BLOCK},
|
||||
{"bouncy wall", "#", 0x80FF80FF, W_BLOCK},
|
||||
{"bouncy wall", "#", 0x80FF80FF, W_BLOCK | W_BOUNCY},
|
||||
{"spike", "^", 0xC08080FF, W_BLOCK | W_TRANS},
|
||||
{"water", "~", 0x0000FFFF, W_BLOCK | W_TRANS},
|
||||
{"frozen water", "#", 0xC0C0FFFF, W_BLOCK},
|
||||
{"frozen water", "#", 0xC0C0FFFF, W_BLOCK | W_FROZEN},
|
||||
{"door", "+", 0xC06000FF, W_BLOCK},
|
||||
{"smashed door", "'", 0xC06000FF, W_TRANS},
|
||||
{"magic fountain", "!", 0x8080C0FF, W_TRANS},
|
||||
|
@ -11,15 +11,21 @@ void man::act() {
|
||||
dat.moda = dat.modv * dat.modv;
|
||||
dat.dx = 0;
|
||||
|
||||
coyote_time = next_coyote_time; next_coyote_time = 0;
|
||||
jump_control = next_jump_control; next_jump_control = 0;
|
||||
|
||||
if(on_floor) on_floor_when = gframeid;
|
||||
|
||||
fallthru = false;
|
||||
|
||||
handle_powers(dat);
|
||||
|
||||
if(on_floor && !on_ice) {
|
||||
if((on_floor || jump_control || wallhug) && !on_ice) {
|
||||
vel_x = dat.dx * dat.d * dat.modv * 2.5;
|
||||
}
|
||||
else {
|
||||
vel_x += dat.dx * dat.d * .05 * dat.moda;
|
||||
|
||||
if(on_bounce) {
|
||||
vel_x += dat.dx * dat.d * dat.modv * 0.02;
|
||||
}
|
||||
|
||||
if(dat.dx) facing = dat.dx;
|
||||
|
@ -2,43 +2,43 @@ ROOM Red Rooster Inn
|
||||
# wall
|
||||
+ door
|
||||
- platform
|
||||
s staircase
|
||||
A staircase
|
||||
. air
|
||||
MAP
|
||||
...................##.............................+-...-+..---...##.............
|
||||
...................##.............................+-....+..---...##.............
|
||||
..................##################################----############............
|
||||
.................##.....................#.............s.......#....##...........
|
||||
................##......................#............s........#.....##..........
|
||||
...............##.......................#...........s.........#......##.........
|
||||
..............##........................#..........s..........#.......##........
|
||||
.............##.........................#.........s...........#........##.......
|
||||
............##..........................+........s............+.........##......
|
||||
...........##...........................+.......s.............+..........##.....
|
||||
..........############################################----##################....
|
||||
.........###........................................##.s............##....##....
|
||||
..........#b........................................#b..s...........#b....#b....
|
||||
..........##........................................##...s..........##....##....
|
||||
..........#b....---------..----------..----------...#b....s.........#b....#b....
|
||||
..........##........................................##.....s........##....##....
|
||||
..........#b........................................#b......s.......#b....#b....
|
||||
..........##........................................##.......s......##....##....
|
||||
..........#b....---------..----------..----------...#b........s.....#b....#b....
|
||||
..........##........................................##.........s....##....##....
|
||||
..........#b........................................#b..........s...#b....#b....
|
||||
..........##........................................##...........s..+.....##....
|
||||
..........#b........................................#b............s.+.....#b....
|
||||
..........##....---------..----------..----------...##...........s##########....
|
||||
..........#b........................................#b..........s...#b....#b....
|
||||
..........##........................................##.........s....##....##....
|
||||
..........#b........................................#b........s.....#b....#b....
|
||||
..........##....---------..----------..----------...##.......s......##....##....
|
||||
..........#b........................................#b......s.......#b....#b....
|
||||
..........##........................................##.....s........##....##....
|
||||
..........#b........................................#b....s.........#b....#b....
|
||||
..........++....---------..----------..----------...++...s..........##....##....
|
||||
..........+b........................................+b..s...........#b....#b....
|
||||
..........++........................................++.s............++....##....
|
||||
..........+b........................................+bs.............+b....#b....
|
||||
.................##.....................#..............A......#....##...........
|
||||
................##......................#.............A.......#.....##..........
|
||||
...............##.......................#............A........#......##.........
|
||||
..............##........................#...........A.........#.......##........
|
||||
.............##.........................#..........A..........#........##.......
|
||||
............##..........................+.........A...........+.........##......
|
||||
...........##...........................+........A............+..........##.....
|
||||
..........############################################------################....
|
||||
.........###........................................##.A..................##....
|
||||
--........#b........................................#b..A.................#b....
|
||||
..........##........................................##...A................##....
|
||||
..........#b.....--------...--------...--------.....#b....A...............#b....
|
||||
..........##........................................##.....A..............##....
|
||||
..........#b........................................#b......A.............#b....
|
||||
..........##........................................##.......A............##....
|
||||
--........#b....---------...--------...---------....#b........A...........#b....
|
||||
..........##........................................##.........A..........##....
|
||||
..........#b........................................#b..........A.........#b....
|
||||
..........##........................................##...........A........##....
|
||||
..........#b....---------...--------...---------....#b............A.......#b....
|
||||
..........##........................................##.............#------##....
|
||||
..........#b........................................#b...................A#b....
|
||||
..........##........................................##..................A.##....
|
||||
..........#b...----------..----------..----------...#b.................A..#b....
|
||||
..........##........................................##................A...##....
|
||||
..........#b........................................#b...............A....#b....
|
||||
..........##........................................##..............A.....##....
|
||||
..........#b...----------..----------..----------...#b.............A......#b....
|
||||
..........++........................................++............A.......##....
|
||||
..........+b........................................+b...........A........#b....
|
||||
..........++........................................++..........A.........##....
|
||||
..........+b........................................+b.........A..........#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
|
||||
################################################################################
|
||||
@ -90,13 +90,14 @@ 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......................
|
||||
START 344 274
|
||||
ITEM 382 287
|
||||
dagger
|
||||
You collect your trusty dagger from the drawer.
|
||||
OK
|
||||
|
||||
MOVE 1 Red Rooster Inn
|
||||
@ -144,6 +145,9 @@ 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
|
||||
ITEM 484 123
|
||||
steel ring
|
||||
You notice a crow nest. There is a shiny ring inside!
|
||||
OK
|
||||
|
||||
MOVE 2 Red Rooster Inn
|
||||
@ -194,6 +198,9 @@ 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
|
||||
ITEM 279 65
|
||||
furry ring
|
||||
Someone lost a small, weird ring here. Hopefully it will be useful to you.
|
||||
OK
|
||||
|
||||
MOVE 2 Forest Path
|
||||
@ -387,6 +394,9 @@ 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
|
||||
ITEM 380 131
|
||||
strange blue crystal ball
|
||||
What a shiny crystal ball!
|
||||
OK
|
||||
|
||||
MOVE 2 Dungeon Entrance
|
||||
@ -436,3 +446,254 @@ 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
|
||||
OK
|
||||
|
||||
MOVE 3 Dungeons of Doom
|
||||
ROOM First Magic Fountain Cave
|
||||
! magic fountain
|
||||
# wall
|
||||
- staircase
|
||||
. air
|
||||
A platform
|
||||
MAP
|
||||
###################.-###########################################################
|
||||
###################.-###########################################################
|
||||
###################.-###########################################################
|
||||
###################.-###########################################################
|
||||
###################.-###########################################################
|
||||
################....-.........##############################.......#############
|
||||
##############......-...........#########################............###########
|
||||
############........-.............######################..............##########
|
||||
###########.........-................################..................#########
|
||||
##########..........-..................###########.....................#########
|
||||
##########..........-.....................######.......................#########
|
||||
#########...........-..................................................#########
|
||||
#########...........-..................................................#########
|
||||
##########..........-..................................................#########
|
||||
##########..........-..................................................#########
|
||||
##########..........-..................................................#########
|
||||
###########.........-.................................................##########
|
||||
############..........................................................##########
|
||||
##############.......................................................###########
|
||||
################....###..............................................###########
|
||||
##########################..........................................############
|
||||
###############################..-..................................############
|
||||
################################.-.................................#############
|
||||
#################################-................................##############
|
||||
#################################-..............................################
|
||||
###############################..-.............................#################
|
||||
##############################...-........!!.................###################
|
||||
###############################..-........!b...............#####################
|
||||
################################........######...........#######################
|
||||
###################################.....#b#b#b....##AAAA########################
|
||||
####################################################----########################
|
||||
####################################################-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#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 3 First Magic Fountain Cave
|
||||
ROOM Watery Death
|
||||
# wall
|
||||
- staircase
|
||||
. air
|
||||
A platform
|
||||
^ spike
|
||||
~ water
|
||||
MAP
|
||||
#################################################################--#############
|
||||
#################################################################--#############
|
||||
#################################################################AA#############
|
||||
#################################################################--#############
|
||||
.................................................................--.........####
|
||||
.................................................................--..........###
|
||||
.................................................................--..........###
|
||||
.............................................................................###
|
||||
.............................................................................###
|
||||
..##################################################################.........###
|
||||
..######################........................###################..........###
|
||||
..#####################..........................#################...........###
|
||||
.######################............................#####.....................###
|
||||
.######################.............................####.....................###
|
||||
.######################..............................###.....................###
|
||||
#######################....############.....##........##........##...........###
|
||||
#######################....#############..............##.......####..........###
|
||||
#######################....#####......##...............#.......####..........###
|
||||
#######################....#####......##......##.......#......######.........###
|
||||
#######################....#####......##...............#......######.........###
|
||||
#######################.....####--##..##...............#......######.........###
|
||||
#######################.......##-b##..##...............#......######.........###
|
||||
#######################........#--##..##......##..............######.........###
|
||||
#######################........#-b##..##......................######.........###
|
||||
#######################........#--##..##......................######~~~~~~~~~###
|
||||
#######################....#####-b##..###.....................######^^^^^^^^^###
|
||||
#######################....#####--##..####AA####################################
|
||||
#######################....#####-b##...###..####################################
|
||||
#######################....#####--##....##AA####################################
|
||||
#######################....#####-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#b#b#b#b#b#b#b#b#b#b#b
|
||||
OK
|
||||
|
||||
MOVE 2 Watery Death
|
||||
ROOM Jumping Course
|
||||
# wall
|
||||
- platform
|
||||
. air
|
||||
A bouncy wall
|
||||
^ spike
|
||||
MAP
|
||||
################################################################################
|
||||
################################################################################
|
||||
################################################################################
|
||||
################################################################################
|
||||
...............################.....#####################.......................
|
||||
................########.............#..........................................
|
||||
.....................................#..........................................
|
||||
.....................................#..........................................
|
||||
###########....---------.............#..........................................
|
||||
###########................####......#........................................##
|
||||
###########...................###....#^.......................................##
|
||||
###########..........................#........................................##
|
||||
###########..........................#^......................................###
|
||||
###########................--------..#.......................................###
|
||||
###########..................................................................###
|
||||
###########...............................-------...........................####
|
||||
###########....----.........................................................####
|
||||
###########.................................................................####
|
||||
###########.........................................-......................#####
|
||||
###########.......-........................................................#####
|
||||
###########................................................................#####
|
||||
###########............................................######.............######
|
||||
###########..........AAAAAA..####....#....................................######
|
||||
###########...............................................................######
|
||||
###########..............................................................#######
|
||||
###########..................................................##..........#######
|
||||
###########..............................................................#######
|
||||
############............................................................########
|
||||
############...................................###.............##.......########
|
||||
#############.............................#########.....................########
|
||||
###############......................##################.................########
|
||||
###############AAAAAAAAAAAAAAAAAAAAAA#####################.............#########
|
||||
################################################################################
|
||||
################################################################################
|
||||
################################################################################
|
||||
#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#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b
|
||||
OK
|
||||
|
||||
MOVE 2 Jumping Course
|
||||
ROOM Treasure Cave
|
||||
# wall
|
||||
- staircase
|
||||
. 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#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
|
||||
ITEM 324 198
|
||||
Golden Shoelaces
|
||||
Hopefully these golden shoelaces are valuable.
|
||||
OK
|
||||
|
||||
MOVE 3 Watery Death
|
||||
ROOM Second Magic Fountain
|
||||
! magic fountain
|
||||
# wall
|
||||
- staircase
|
||||
. 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#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b
|
||||
OK
|
||||
|
||||
|
@ -2,9 +2,12 @@ namespace rogue_unlike {
|
||||
|
||||
flagtype STARTING = Flag(1);
|
||||
flagtype WHILE_PAUSED = Flag(2);
|
||||
flagtype TOGGLEABLE = Flag(4);
|
||||
flagtype ACTIVE = Flag(8);
|
||||
flagtype NEEDS_IDENTIFY = Flag(16);
|
||||
|
||||
vector<power> powers = {
|
||||
power('1', "Potion of Extra Life",
|
||||
power('1', "Potion of Extra Life",
|
||||
"You are really proud of this potion, which, after you die, will let you return to the moment of time when you drank it. "
|
||||
"Unfortunately it still requires an ingredient found only in the magical fountains of the Dungeons of Alchemy.\n\n"
|
||||
"You can only drink this potion when at a magical fountain. To protect yourself from dying permanently, it is drank "
|
||||
@ -13,28 +16,33 @@ vector<power> powers = {
|
||||
[] (data& d) { }
|
||||
),
|
||||
|
||||
power('d', "move right",
|
||||
power('d', "move right",
|
||||
"A special power of human beings, and most other animals, that they earn early in their life.",
|
||||
">", 0xFF0000FF, STARTING,
|
||||
[] (data& d) { if(d.keystate & 1) d.dx += 1; }
|
||||
),
|
||||
|
||||
power('a', "move left",
|
||||
power('a', "move left",
|
||||
"Moving to the right was a mistake? If so, this special power can be used to ignore the consequences. In most cases, at least...",
|
||||
"<", 0xFF0000FF, STARTING,
|
||||
[] (data& d) { if(d.keystate & 1) d.dx -= 1; }
|
||||
),
|
||||
|
||||
power('w', "jump",
|
||||
power('w', "jump",
|
||||
"This power can be used to reach higher parts of the world. Its power is quite limited compared to move left and right, but "
|
||||
"you expect to find some ways to make it more powerful.",
|
||||
"^", 0xFF0000FF, STARTING,
|
||||
[] (data& d) {
|
||||
if((d.keystate & 1) && m.on_floor) m.vel_y = -(non_hyperbolic ? 3 : 5) * d.d * d.modv;
|
||||
if(d.keystate & 1) {
|
||||
bool can_jump = m.on_floor;
|
||||
println(hlog, "on_floor_when = ", m.on_floor_when, " gframeid = ", gframeid, " coyote_time = ", m.coyote_time);
|
||||
if(gframeid <= m.on_floor_when + m.coyote_time) can_jump = true;
|
||||
if(can_jump) m.vel_y = -(non_hyperbolic ? 3 : 5) * d.d * d.modv, m.on_floor_when = -1000;
|
||||
}
|
||||
}
|
||||
),
|
||||
|
||||
power('s', "fall",
|
||||
power('s', "fall",
|
||||
"If you are on a platform, this ability can be used to drop down.",
|
||||
"v", 0xFF0000FF, STARTING,
|
||||
[] (data& d) {
|
||||
@ -42,7 +50,7 @@ vector<power> powers = {
|
||||
}
|
||||
),
|
||||
|
||||
power('p', "pause",
|
||||
power('p', "pause",
|
||||
"Becoming an alchemist requires intelligence: thinking quickly to react to surprising effects of experiments. "
|
||||
"To reflect this, you can use this power at any time to give yourself more time to think about the situation.",
|
||||
"-", 0xFF0000FF, STARTING | WHILE_PAUSED,
|
||||
@ -50,7 +58,7 @@ vector<power> powers = {
|
||||
if(d.keystate == 1) cmode = mode::paused;
|
||||
}),
|
||||
|
||||
power(' ', "dagger",
|
||||
power(' ', "dagger",
|
||||
"This sharp dagger is very useful during the preparation of alchemical ingredients, but it works as a basic weapon too.",
|
||||
")", 0xFFFFFFFF, 0,
|
||||
[] (data& d) {
|
||||
@ -67,28 +75,113 @@ vector<power> powers = {
|
||||
}
|
||||
}),
|
||||
|
||||
power('o', "Poincaré's Crystal Ball",
|
||||
"This crystal ball will not let you predict the future or see things elsewhere, but will let you easily map the "
|
||||
"parts of the world you have seen so far. This artifact is rumored to have been actually created by Beltrami, but "
|
||||
"it was bought and presented to people by the famous wizard Poincaré, and people thought it was Poincaré's creation.",
|
||||
"o", 0x00FF00FF, WHILE_PAUSED,
|
||||
power('o', "strange blue crystal ball", "You feel an urge to look into it.",
|
||||
"o", 0x00FF00FF, WHILE_PAUSED | NEEDS_IDENTIFY,
|
||||
[] (data& d) {
|
||||
if(!(d.p->flags & NEEDS_IDENTIFY))
|
||||
d.p->name = "Poincaré's Crystal Ball",
|
||||
d.p->desc =
|
||||
"This crystal ball will not let you predict the future or see things elsewhere, but will let you easily map the "
|
||||
"parts of the world you have seen so far. This artifact is rumored to have been actually created by Beltrami, but "
|
||||
"it was bought and presented to people by the famous wizard Poincaré, and people thought it was Poincaré's creation.";
|
||||
if(d.keystate != 1) return;
|
||||
d.p->flags &=~ NEEDS_IDENTIFY;
|
||||
switch_mapmode_to(cmapmode == mapmode::poincare ? mapmode::standard : mapmode::poincare);
|
||||
}
|
||||
),
|
||||
|
||||
power('b', "Beltrami's Crystal Ball",
|
||||
"Created by the ancient wizard Beltrami, this crystal ball will not let you predict the future or see things elsewhere, "
|
||||
"but will let you easily map the parts of the world you have seen so far. Contrary to Poincaré's ball, straight lines are "
|
||||
"mapped faithfully.",
|
||||
"o", 0x00FFFFFF, WHILE_PAUSED,
|
||||
power('b', "strange cyan crystal ball", "You feel an urge to look into it.",
|
||||
"o", 0x00FFFFFF, WHILE_PAUSED | NEEDS_IDENTIFY,
|
||||
[] (data& d) {
|
||||
if(!(d.p->flags & NEEDS_IDENTIFY))
|
||||
d.p->name = "Beltrami's Crystal Ball",
|
||||
d.p->desc =
|
||||
"Created by the ancient wizard Beltrami, this crystal ball will not let you predict the future or see things elsewhere, "
|
||||
"but will let you easily map the parts of the world you have seen so far. Contrary to Poincaré's ball, straight lines are "
|
||||
"mapped faithfully.";
|
||||
if(d.keystate != 1) return;
|
||||
d.p->flags &=~ NEEDS_IDENTIFY;
|
||||
switch_mapmode_to(cmapmode == mapmode::klein ? mapmode::standard : mapmode::klein);
|
||||
}
|
||||
),
|
||||
|
||||
power('c', "furry ring",
|
||||
"This strange ring is too small to put on your finger, but maybe you could put it on your small toe?",
|
||||
"=", 0xe1cbbeFF, TOGGLEABLE | NEEDS_IDENTIFY,
|
||||
[] (data& d) {
|
||||
if(!(d.p->flags & NEEDS_IDENTIFY))
|
||||
d.p->name = "Toe Ring of the Coyote",
|
||||
d.p->desc =
|
||||
"This ring, worn on a toe, will let you still jump after running off a platform. Just make sure that you run off with the foot that you are wearing this ring on!";
|
||||
if(d.keystate == 1) {
|
||||
d.p->flags ^= ACTIVE;
|
||||
if(d.p->flags & ACTIVE) addMessage("You put the " + d.p->name + " on your toe.");
|
||||
else addMessage("You remove the " + d.p->name + " from your toe.");
|
||||
}
|
||||
if(d.p->flags & ACTIVE) m.next_coyote_time += 30;
|
||||
if((d.p->flags & NEEDS_IDENTIFY) && (gframeid <= m.on_floor_when + m.coyote_time) && !m.on_floor) {
|
||||
d.p->flags &=~ NEEDS_IDENTIFY;
|
||||
addMessage("You feel a strange magical force wanting to hold your foot from below.");
|
||||
}
|
||||
}
|
||||
),
|
||||
|
||||
power('g', "Golden Shoelaces",
|
||||
"These shoelaces might bind you into place or give you freedom... or they could just be mundane shoelaces for rich people... one way to tell.",
|
||||
"=", 0xFFD500FF, TOGGLEABLE,
|
||||
[] (data& d) {
|
||||
if(!(d.p->flags & NEEDS_IDENTIFY))
|
||||
d.p->desc =
|
||||
"Normally you cannot control your jumps while you are flying. These shoelaces allow you some control over your jumps.";
|
||||
if(d.keystate == 1) {
|
||||
d.p->flags ^= ACTIVE;
|
||||
if(d.p->flags & ACTIVE) addMessage("You put the Golden Shoelaces on your boots.");
|
||||
else addMessage("You remove the Golden Shoelaces from your boots.");
|
||||
}
|
||||
if(d.p->flags & ACTIVE) {
|
||||
m.next_jump_control++;
|
||||
auto& ids = d.p->id_status;
|
||||
bool id_up = (!!m.on_floor) == !!(ids & 1);
|
||||
if(id_up) {
|
||||
ids++;
|
||||
if(ids == 2) {
|
||||
addMessage("Something felt strange during this jump.");
|
||||
}
|
||||
if(ids == 4) {
|
||||
addMessage("This jump was strange too.");
|
||||
}
|
||||
if(ids == 6) {
|
||||
addMessage("You feel in control of the laws of physics.");
|
||||
}
|
||||
if(ids == 8) {
|
||||
addMessage("You feel able to control your jumps while flying.");
|
||||
}
|
||||
if(ids == 10) {
|
||||
d.p->flags |= NEEDS_IDENTIFY;
|
||||
addMessage("This control originates from your golden shoelaces.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
),
|
||||
|
||||
power('r', "steel ring",
|
||||
"Is it safe to put this ring on?",
|
||||
"=", 0xC04040FF, TOGGLEABLE | NEEDS_IDENTIFY,
|
||||
[] (data& d) {
|
||||
if(!(d.p->flags & NEEDS_IDENTIFY))
|
||||
d.p->name = "Ring of Strength",
|
||||
d.p->desc =
|
||||
"This will raise your strength!";
|
||||
if(d.keystate == 1) {
|
||||
d.p->flags ^= ACTIVE;
|
||||
d.p->flags &=~ NEEDS_IDENTIFY;
|
||||
if(d.p->flags & ACTIVE) addMessage("You put the Ring of Strength on your finger.");
|
||||
else addMessage("You remove the Ring of Strength from your finger.");
|
||||
}
|
||||
}
|
||||
),
|
||||
|
||||
};
|
||||
|
||||
void handle_powers(data& d) {
|
||||
@ -97,6 +190,7 @@ void handle_powers(data& d) {
|
||||
d.keystate = 0;
|
||||
if(keyheld(p.key)) d.keystate |= 1;
|
||||
if(keywasheld(p.key)) d.keystate |= 2;
|
||||
d.p = &p;
|
||||
p.pf(d);
|
||||
}
|
||||
}
|
||||
|
@ -80,6 +80,7 @@ void editmap_frame() {
|
||||
dialog::display();
|
||||
});
|
||||
if(keypressed('f')) floodfill(mousepx / block_x, mousepy / block_y);
|
||||
if(keypressed('t')) { m.where_x = mousepx; m.where_y = mousepy; m.vel_x = 0; m.vel_y = 0; }
|
||||
}
|
||||
|
||||
void playing_frame() {
|
||||
@ -198,7 +199,7 @@ void run() {
|
||||
if(cmode == mode::playing) sync_map();
|
||||
render_the_map();
|
||||
if(cmode == mode::editmap) dialog::add_key_action('p', [] { println(hlog, "p pressed"); switch_mapmode_to(mapmode::poincare); });
|
||||
if(cmode == mode::editmap) mouseovers = format("coordinates: %d %d", mousepx, mousepy);
|
||||
if(cmode == mode::editmap) mouseovers = format("coordinates: %d %d (%.2lf)", mousepx, mousepy, double(get_scale_at(mousepy)));
|
||||
break;
|
||||
|
||||
case mode::inventory:
|
||||
|
@ -115,6 +115,7 @@ void load_room(fhstream& f, cell *c) {
|
||||
b->id = -1;
|
||||
for(int i=0; i<isize(powers); i++) if(powers[i].name == s) b->id = i;
|
||||
if(b->id == -1) println(hlog, "error: unknown item name ", s), b->id = 0;
|
||||
b->pickup_message = scanline_noblank(f);
|
||||
r.entities.emplace_back(std::move(b));
|
||||
}
|
||||
else println(hlog, "unknown mapline ", s);
|
||||
|
Loading…
x
Reference in New Issue
Block a user