diff --git a/rogueviz/ru/classes.cpp b/rogueviz/ru/classes.cpp index 630705fd..5e09ce03 100644 --- a/rogueviz/ru/classes.cpp +++ b/rogueviz/ru/classes.cpp @@ -39,7 +39,7 @@ struct power { power& while_paused(); power& while_dead(); power& identified_name(string, string); - power& be_wearable(string wear_effect, string remove_effect); + power& be_wearable(string wear_effect, string remove_effect, string worn = " (worn)"); power& be_jewelry(string jtype, string desc); power& be_potion(); }; diff --git a/rogueviz/ru/map.ru b/rogueviz/ru/map.ru index 82dd3e27..0f6969ea 100644 --- a/rogueviz/ru/map.ru +++ b/rogueviz/ru/map.ru @@ -238,7 +238,7 @@ HINT 564 256 60 60 Hint: to read signs, stay near them for a second. NPC 564 256 0 @Forest Sign -The sign reads, BEWARE THE WILD BOARS\n\nThis forest path feels somehow hostile indeed. You feel you will need to use your figthing skills soon.\n\nFights may be difficult if you try to handle them at the same speed as exploration. Press [key:dexmode] to slow down time when expecting combat. If you want to resume quick exploration, press [key:dexmode] again. +The sign reads, BEWARE THE WILD BOARS\n\nThis forest path feels somehow hostile indeed. You feel you will need to use your figthing skills soon.\n\nFights may be difficult if you try to handle them at the same speed as exploration. Press [key:chill time] to slow down time when expecting combat. If you want to resume quick exploration, press [key:chill time] again. OK MOVE 2 Forest Path diff --git a/rogueviz/ru/powers.cpp b/rogueviz/ru/powers.cpp index 3d210d39..9afdf68b 100644 --- a/rogueviz/ru/powers.cpp +++ b/rogueviz/ru/powers.cpp @@ -71,11 +71,11 @@ power& power::be_jewelry(string jtype, string xdesc) { return self; } -power& power::be_wearable(string wear_effect, string remove_effect) { +power& power::be_wearable(string wear_effect, string remove_effect, string worn) { auto gn = get_name; - get_name = [this, gn] { + get_name = [this, gn, worn] { string s = gn(); - if(flags & ACTIVE) s += " (worn)"; + if(flags & ACTIVE) s += worn; return s; }; auto ac = act; @@ -145,6 +145,7 @@ power& gen_power(int key, string name, string desc, string glyph, color_t color, power *extra_life; int gold_id; +power *dexmode; void power_death_revert(power& p) { int q0 = p.qty_filled; @@ -242,13 +243,20 @@ void gen_powers() { ).is_starting(), gen_power('p', "pause", - "Becoming an alchemist requires intelligence: thinking quickly to react to surprising effects of experiments. " + "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, [] (data& d) { if(d.keystate == 1) cmode = (cmode == mode::paused ? mode::playing : mode::paused); }).is_starting().while_paused(), + dexmode = &gen_power('c', "chill time", + "Concentrate to make the timing of your moves perfect.\n\n" + "From the player's point of view, this makes the game run slower.\n\nThe higher your Dexterity, the slower the game becomes.", + "-", 0xFF0000FF, + [] (data& d) { + }).is_starting().while_paused().be_wearable("You concentrate.", "You calm down.", " (on)"), + gen_power(' ', "dagger", "This sharp dagger is very useful during the preparation of alchemical ingredients, but it works as a basic weapon too.", ")", 0xFFFFFFFF, diff --git a/rogueviz/ru/ru.cpp b/rogueviz/ru/ru.cpp index 00972770..1efb49bf 100644 --- a/rogueviz/ru/ru.cpp +++ b/rogueviz/ru/ru.cpp @@ -409,7 +409,12 @@ void add_platf_hooks() { }); rogueviz::rv_hook(shmup::hooks_turn, 90, [=] (int d) { - gtime += d; + + ld tscale = 1; + if(dexmode->flags & ACTIVE) + tscale *= 10. / (10 + m.current_stats[stat::dex]); + + gtime += d * tscale; while(gtime > 1000. / game_fps) { gtime -= 1000. / game_fps; diff --git a/rogueviz/ru/stats.cpp b/rogueviz/ru/stats.cpp index ef6f4f3a..5c72f2cd 100644 --- a/rogueviz/ru/stats.cpp +++ b/rogueviz/ru/stats.cpp @@ -10,10 +10,10 @@ statarray statdata; void draw_stats() { - statdata[stat::str] = {'s', "Strength", "Affects the strength of your mundane melee attacks."}; + statdata[stat::str] = {'s', "Strength", "Affects the strength of your physical attacks."}; statdata[stat::con] = {'t', "Toughness", "Affects the amount of hitpoints you have."}; statdata[stat::wis] = {'w', "Wisdom", "Affects the power of your alchemy."}; - statdata[stat::dex] = {'d', "Dexterity", "Affects the strength of your mundane missile attacks."}; + statdata[stat::dex] = {'d', "Dexterity", "Improves your 'chill time' power."}; render_the_map(); draw_inventory_frame();