From d15a83d2b4791b8a8ec16963c694a8c158b0f44f Mon Sep 17 00:00:00 2001 From: acidia Date: Thu, 24 May 2018 20:07:23 -0400 Subject: [PATCH 01/56] Added age_grow to monster evolution --- src/monstergenerator.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/monstergenerator.cpp b/src/monstergenerator.cpp index 83ab079e4a4df..523110847880f 100644 --- a/src/monstergenerator.cpp +++ b/src/monstergenerator.cpp @@ -626,6 +626,7 @@ void mtype::load( JsonObject &jo, const std::string &src ) } else if( jo.has_member( "upgrades" ) ) { JsonObject up = jo.get_object( "upgrades" ); optional( up, was_loaded, "half_life", half_life, -1 ); + optional( up, was_loaded, "age_grow", age_grow, -1 ); optional( up, was_loaded, "into_group", upgrade_group, auto_flags_reader {}, mongroup_id::NULL_ID() ); optional( up, was_loaded, "into", upgrade_into, auto_flags_reader {}, @@ -916,8 +917,9 @@ void MonsterGenerator::check_monster_definitions() const } if( mon.upgrades ) { - if( mon.half_life < 0 ) { - debugmsg( "half_life %d (< 0) of monster %s is invalid", mon.half_life, mon.id.c_str() ); + if( mon.half_life < 0 && mon.age_grow < 0) { + debugmsg( "half_life %d and age_grow %d (<0) of monster %s is invalid", + mon.half_life, mon.age_grow, mon.id.c_str() ); } if( !mon.upgrade_into && !mon.upgrade_group ) { debugmsg( "no into nor into_group defined for monster %s", mon.id.c_str() ); From 468973764848a070c4fb56da138b2f9563027d5a Mon Sep 17 00:00:00 2001 From: acidia Date: Thu, 24 May 2018 20:08:15 -0400 Subject: [PATCH 02/56] Added age_grow to monster evolution --- src/mtype.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mtype.h b/src/mtype.h index 34eca4d1a29db..18b923f3bdb33 100644 --- a/src/mtype.h +++ b/src/mtype.h @@ -263,6 +263,7 @@ struct mtype { // Monster upgrade variables bool upgrades; int half_life; + int age_grow; mtype_id upgrade_into; mongroup_id upgrade_group; mtype_id burn_into; From a7523b3edfa1f53f30efa6e3470d94576c3c75e8 Mon Sep 17 00:00:00 2001 From: acidia Date: Thu, 24 May 2018 20:09:01 -0400 Subject: [PATCH 03/56] Added age_grow to monster evolution --- src/mtype.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mtype.cpp b/src/mtype.cpp index 9ab1ee1b6bc49..3276ab4d78691 100644 --- a/src/mtype.cpp +++ b/src/mtype.cpp @@ -22,6 +22,7 @@ mtype::mtype() def_chance = 0; upgrades = false; half_life = -1; + age_grow = -1; upgrade_into = mtype_id::NULL_ID(); upgrade_group = mongroup_id::NULL_ID(); burn_into = mtype_id::NULL_ID(); From 2697a119a9efc11f63e9649aa6f429f10b65b964 Mon Sep 17 00:00:00 2001 From: acidia Date: Thu, 24 May 2018 20:16:11 -0400 Subject: [PATCH 04/56] Added age_grow to evolution --- src/monster.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/monster.cpp b/src/monster.cpp index ab0edfc5c7a34..c68799cf56f73 100644 --- a/src/monster.cpp +++ b/src/monster.cpp @@ -185,7 +185,7 @@ monster::monster( const mtype_id& id ) : monster() morale = type->morale; faction = type->default_faction; ammo = type->starting_ammo; - upgrades = type->upgrades && type->half_life; + upgrades = type->upgrades && (type->half_life || type->age_grow); } monster::monster( const mtype_id& id, const tripoint &p ) : monster(id) @@ -257,6 +257,9 @@ void monster::hasten_upgrade() { // This will disable upgrades in case max iters have been reached. // Checking for return value of -1 is necessary. int monster::next_upgrade_time() { + if ( type->age_grow > 0){ + return type->age_grow; + } const int scaled_half_life = type->half_life * get_option( "MONSTER_UPGRADE_FACTOR" ); int day = scaled_half_life; for( int i = 0; i < UPGRADE_MAX_ITERS; i++ ) { @@ -277,15 +280,15 @@ void monster::try_upgrade(bool pin_time) { return; } - const int current_day = to_days( calendar::time_of_cataclysm - calendar::turn ); - + const int current_day = to_days( calendar::turn - calendar::time_of_cataclysm ); + //This should only occur when a monster is created or upgraded to a new form if (upgrade_time < 0) { upgrade_time = next_upgrade_time(); if (upgrade_time < 0) { return; } - if (pin_time) { - // offset by today + if (pin_time || type->age_grow > 0) { + // offset by today, always true for growing creatures upgrade_time += current_day; } else { // offset by starting season From b18d637b992acaf06e20519bbb622a5e6b09c7e1 Mon Sep 17 00:00:00 2001 From: acidia Date: Thu, 24 May 2018 20:27:39 -0400 Subject: [PATCH 05/56] Move creatures to own species jsons --- data/json/monsters.json | 420 ---------------------------------------- 1 file changed, 420 deletions(-) diff --git a/data/json/monsters.json b/data/json/monsters.json index ac9d81b80fa54..b65c17c2f1eb5 100644 --- a/data/json/monsters.json +++ b/data/json/monsters.json @@ -567,32 +567,6 @@ "burn_into": "mon_zombie_scorched", "flags": [ "HEARS", "SMELLS", "STUMBLES", "WARM", "BASHES", "GROUP_BASH", "POISON", "NO_BREATHE", "REVIVES", "BONES", "PUSH_MON" ] }, - { - "id": "mon_biollante", - "type": "MONSTER", - "name": "biollante", - "description": "A drooped, quivering plant with a thick stalk adorned by a purple flower. Its petals are closed, and pulsate ominously.", - "default_faction": "triffid", - "species": [ "PLANT" ], - "diff": 20, - "size": "LARGE", - "hp": 120, - "speed": 100, - "material": [ "veggy" ], - "symbol": "F", - "color": "magenta", - "aggression": 100, - "morale": 100, - "melee_cut": 0, - "special_attacks": [ [ "SPIT_SAP", 2 ] ], - "death_drops": { - "subtype": "collection", - "groups": [ [ "biollante", 8 ] ], - "//": "80% chance of an item from group biollante" - }, - "death_function": [ "NORMAL" ], - "flags": [ "NOHEAD", "IMMOBILE" ] - }, { "id": "mon_black_rat", "type": "MONSTER", @@ -1069,31 +1043,6 @@ "death_function": [ "MELT" ], "flags": [ "SEES", "HEARS", "SMELLS", "STUMBLES", "WARM", "BASHES", "GROUP_BASH", "NOGIB", "BONES", "POISON" ] }, - { - "id": "mon_chicken", - "type": "MONSTER", - "name": "chicken", - "description": "A domesticated descendant of junglefowl, it may still be the most numerous bird in the world. Before the Cataclysm, it was raised by humans as a source of meat, eggs, and early morning wakeup calls.", - "default_faction": "small_animal", - "categories": [ "WILDLIFE" ], - "species": [ "BIRD" ], - "diff": 10, - "size": "TINY", - "hp": 8, - "speed": 80, - "material": [ "flesh" ], - "symbol": "v", - "color": "white", - "aggression": -99, - "morale": -8, - "melee_skill": 1, - "melee_dice": 1, - "melee_dice_sides": 1, - "melee_cut": 1, - "dodge": 4, - "death_function": [ "NORMAL" ], - "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "FLIES", "BONES", "FEATHER", "FAT" ] - }, { "id": "mon_chickenbot", "type": "MONSTER", @@ -1387,75 +1336,6 @@ "death_function": [ "NORMAL" ], "flags": [ "SEES", "HEARS", "SMELLS", "WARM", "BASHES", "GROUP_BASH", "POISON", "HUMAN", "LEATHER", "BONES" ] }, - { - "id": "mon_creeper_hub", - "type": "MONSTER", - "name": "creeper hub", - "description": "A thick stalk, rooted to the ground. It rapidly sprouts thorny vines in all directions.", - "default_faction": "triffid", - "species": [ "PLANT" ], - "diff": 16, - "size": "MEDIUM", - "hp": 100, - "speed": 100, - "material": [ "veggy" ], - "symbol": "V", - "color": "green", - "aggression": 100, - "morale": 100, - "melee_cut": 0, - "armor_bash": 8, - "special_attacks": [ [ "GROW_VINE", 2 ] ], - "death_function": [ "KILL_VINES" ], - "flags": [ "NOHEAD", "IMMOBILE" ] - }, - { - "id": "mon_creeper_vine", - "type": "MONSTER", - "name": "creeper vine", - "description": "A thorny vine, twisting wildly as it grows with incredible speed.", - "default_faction": "triffid", - "species": [ "PLANT" ], - "diff": 4, - "size": "TINY", - "hp": 2, - "speed": 75, - "material": [ "veggy" ], - "symbol": "v", - "color": "green", - "aggression": 100, - "morale": 100, - "melee_cut": 0, - "armor_bash": 2, - "special_attacks": [ [ "VINE", 5 ] ], - "death_function": [ "VINE_CUT" ], - "flags": [ "NOHEAD", "HARDTOSHOOT", "PLASTIC", "IMMOBILE" ] - }, - { - "id": "mon_crow", - "type": "MONSTER", - "name": "crow", - "description": "A small, elegant black bird, famous for its distinctive call. An intelligent bird, there is a glitter of mischief behind its eyes.", - "default_faction": "small_animal", - "categories": [ "WILDLIFE" ], - "species": [ "BIRD" ], - "diff": 1, - "size": "TINY", - "hp": 4, - "speed": 140, - "material": [ "flesh" ], - "symbol": "v", - "color": "dark_gray", - "aggression": -99, - "morale": -8, - "melee_dice": 1, - "melee_dice_sides": 1, - "melee_cut": 0, - "dodge": 4, - "fear_triggers": [ "PLAYER_CLOSE" ], - "death_function": [ "NORMAL" ], - "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "FLIES", "BONES", "FEATHER" ] - }, { "id": "mon_dark_wyrm", "type": "MONSTER", @@ -1810,31 +1690,6 @@ "death_function": [ "NORMAL" ], "flags": [ "SEES", "SMELLS", "FLIES", "HIT_AND_RUN", "CHITIN" ] }, - { - "id": "mon_duck", - "type": "MONSTER", - "name": "duck", - "description": "A mallard duck, often seen around rivers and other bodies of water. It feeds primarily on insects, seeds, roots, and, pre-cataclysm, bread scraps.", - "default_faction": "small_animal", - "categories": [ "WILDLIFE" ], - "species": [ "BIRD" ], - "diff": 1, - "size": "TINY", - "hp": 4, - "speed": 140, - "material": [ "flesh" ], - "symbol": "v", - "color": "brown", - "aggression": -99, - "morale": -8, - "melee_dice": 1, - "melee_dice_sides": 1, - "melee_cut": 0, - "dodge": 4, - "fear_triggers": [ "SOUND", "PLAYER_CLOSE" ], - "death_function": [ "NORMAL" ], - "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "FLIES", "BONES", "FEATHER", "FAT" ] - }, { "id": "mon_eyebot", "type": "MONSTER", @@ -2094,52 +1949,6 @@ "death_function": [ "FUNGUS" ], "flags": [ "HEARS", "GOODHEARING", "NOHEAD", "POISON", "IMMOBILE", "NO_BREATHE" ] }, - { - "id": "mon_fungal_fighter", - "type": "MONSTER", - "name": "fungal fighter", - "description": "A stout woody plant that can dig through the ground and flick spines from its branches. The thorns carry a fungicidal compound with paralytic effects.", - "default_faction": "triffid", - "species": [ "PLANT" ], - "diff": 8, - "size": "SMALL", - "hp": 60, - "speed": 50, - "material": [ "veggy" ], - "symbol": "F", - "color": "green", - "aggression": 10, - "morale": 10, - "melee_skill": 6, - "melee_dice": 1, - "melee_dice_sides": 6, - "melee_cut": 4, - "armor_bash": 4, - "armor_cut": 6, - "attack_effs": [ - { - "id": "paralyzepoison", - "//": "applying this multiple times makes intensity go up by 3 instead of 1", - "duration": 33 - }, - { - "id": "paralyzepoison", - "duration": 33 - }, - { - "id": "paralyzepoison", - "duration": 33 - } - ], - "special_attacks": [ [ "PARA_STING", 10 ] ], - "death_drops": { - "subtype": "collection", - "groups": [ [ "fungal_sting", 80 ] ], - "//": "80% chance of an item from group fungal_sting" - }, - "death_function": [ "NORMAL" ], - "flags": [ "HEARS", "SMELLS", "NOHEAD", "CAN_DIG" ] - }, { "id": "mon_fungal_hedgerow", "type": "MONSTER", @@ -2442,59 +2251,6 @@ "death_function": [ "GAMEOVER" ], "flags": [ "NOHEAD", "ACIDPROOF", "IMMOBILE" ] }, - { - "id": "mon_giant_cockroach", - "type": "MONSTER", - "name": "giant cockroach", - "description": "A mutant cockroach the size of a small dog.", - "default_faction": "roach", - "species": [ "INSECT" ], - "diff": 7, - "size": "SMALL", - "hp": 40, - "speed": 100, - "material": [ "iflesh" ], - "symbol": "a", - "color": "brown", - "aggression": 30, - "morale": 60, - "melee_skill": 5, - "melee_dice": 1, - "melee_dice_sides": 6, - "melee_cut": 3, - "dodge": 1, - "armor_bash": 5, - "armor_cut": 10, - "vision_day": 5, - "vision_night": 5, - "death_function": [ "NORMAL" ], - "flags": [ "SEES", "HEARS", "SMELLS", "CHITIN", "CLIMBS" ] - }, - { - "id": "mon_giant_cockroach_nymph", - "type": "MONSTER", - "name": "giant cockroach nymph", - "description": "A baby mutant cockroach about the size of a rat.", - "default_faction": "roach", - "species": [ "INSECT" ], - "diff": 3, - "size": "TINY", - "hp": 10, - "speed": 50, - "material": [ "iflesh" ], - "symbol": "a", - "color": "brown", - "aggression": 100, - "morale": 100, - "melee_skill": 3, - "melee_dice": 2, - "melee_dice_sides": 3, - "melee_cut": 0, - "vision_day": 10, - "vision_night": 3, - "death_function": [ "NORMAL" ], - "flags": [ "SEES", "HEARS", "SMELLS", "CHITIN", "CLIMBS" ] - }, { "id": "mon_giant_crayfish", "type": "MONSTER", @@ -3451,34 +3207,6 @@ "death_function": [ "ACID" ], "flags": [ "SEES", "HEARS", "SMELLS", "GOODHEARING", "NOHEAD", "POISON", "VENOM", "WARM", "GUILT" ] }, - { - "id": "mon_pregnant_giant_cockroach", - "type": "MONSTER", - "name": "pregnant giant cockroach", - "description": "A mutant cockroach the size of a small dog. It's abdomen is heavily swollen.", - "default_faction": "roach", - "species": [ "INSECT" ], - "diff": 8, - "size": "SMALL", - "hp": 40, - "speed": 100, - "material": [ "iflesh" ], - "symbol": "a", - "color": "brown", - "aggression": 30, - "morale": 60, - "melee_skill": 5, - "melee_dice": 1, - "melee_dice_sides": 6, - "melee_cut": 3, - "dodge": 1, - "armor_bash": 5, - "armor_cut": 10, - "vision_day": 5, - "vision_night": 5, - "death_function": [ "NORMAL", "PREG_ROACH" ], - "flags": [ "SEES", "HEARS", "SMELLS", "CHITIN", "CLIMBS" ] - }, { "id": "mon_rabbit", "type": "MONSTER", @@ -4444,103 +4172,6 @@ "death_function": [ "MELT" ], "flags": [ "SMELLS", "HEARS", "NOHEAD", "BASHES", "GROUP_BASH", "SWIMS", "ATTACKMON", "PLASTIC", "ACIDPROOF", "NOGIB", "CLIMBS" ] }, - { - "id": "mon_triffid", - "type": "MONSTER", - "name": "triffid", - "description": "A creeping animate plant, growing as tall as a moose. It has a single bark-covered stalk supporting a flowery head with a paralyzing sting concealed within.", - "default_faction": "triffid", - "species": [ "PLANT" ], - "diff": 16, - "size": "MEDIUM", - "hp": 80, - "speed": 50, - "material": [ "veggy" ], - "symbol": "F", - "color": "light_green", - "aggression": 20, - "morale": 100, - "melee_skill": 5, - "melee_dice": 2, - "melee_dice_sides": 4, - "melee_cut": 6, - "armor_bash": 10, - "armor_cut": 4, - "death_function": [ "NORMAL" ], - "flags": [ "SEES", "SMELLS", "BASHES", "GROUP_BASH", "NOHEAD", "PARALYZEVENOM" ] - }, - { - "id": "mon_triffid_heart", - "type": "MONSTER", - "name": "triffid heart", - "description": "A knot of tubular roots, flowing with sap and beating like a heart. Strands of vascular tissue reach out to the surrounding root walls.", - "default_faction": "triffid", - "species": [ "PLANT" ], - "diff": 50, - "size": "HUGE", - "hp": 500, - "speed": 100, - "material": [ "veggy" ], - "symbol": "T", - "color": "red", - "aggression": 100, - "morale": 100, - "melee_cut": 0, - "armor_bash": 12, - "armor_cut": 16, - "special_attacks": [ [ "TRIFFID_HEARTBEAT", 5 ] ], - "death_function": [ "TRIFFID_HEART" ], - "flags": [ "NOHEAD", "IMMOBILE", "QUEEN" ] - }, - { - "id": "mon_triffid_queen", - "type": "MONSTER", - "name": "triffid queen", - "description": "A ponderous and particularly arborescent triffid. It has enormous red petals surrounded by a haze of spores, and two thick barbed vines stick out from the stems like wary harpoons.", - "default_faction": "triffid", - "species": [ "PLANT" ], - "diff": 28, - "size": "LARGE", - "hp": 280, - "speed": 85, - "material": [ "veggy" ], - "symbol": "F", - "color": "red", - "aggression": 100, - "morale": 200, - "melee_skill": 7, - "melee_dice": 2, - "melee_dice_sides": 8, - "melee_cut": 8, - "armor_bash": 12, - "armor_cut": 8, - "special_attacks": [ [ "GROWPLANTS", 2 ] ], - "death_function": [ "NORMAL" ], - "flags": [ "HEARS", "SMELLS", "BASHES", "NOHEAD", "PARALYZEVENOM" ] - }, - { - "id": "mon_triffid_young", - "type": "MONSTER", - "name": "triffid sprout", - "description": "A small triffid, only a few feet tall. It has not yet developed bark, but its sting is still sharp and deadly.", - "default_faction": "triffid", - "species": [ "PLANT" ], - "diff": 8, - "size": "SMALL", - "hp": 40, - "speed": 50, - "material": [ "veggy" ], - "symbol": "1", - "color": "light_green", - "morale": 10, - "melee_skill": 3, - "melee_dice": 1, - "melee_dice_sides": 4, - "melee_cut": 4, - "special_attacks": [ [ "TRIFFID_GROWTH", 28800 ] ], - "death_function": [ "NORMAL" ], - "flags": [ "HEARS", "SMELLS", "NOHEAD", "PARALYZEVENOM" ] - }, { "id": "mon_tripod", "type": "MONSTER", @@ -4574,32 +4205,6 @@ "death_function": [ "BROKEN" ], "flags": [ "SEES", "HEARS", "GOODHEARING", "BASHES", "NO_BREATHE", "ELECTRONIC", "CLIMBS", "PRIORITIZE_TARGETS" ] }, - { - "id": "mon_turkey", - "type": "MONSTER", - "name": "turkey", - "description": "A large and colorful game bird native to the forests of North America. Its head and beak are covered in fleshy protuberances.", - "default_faction": "small_animal", - "categories": [ "WILDLIFE" ], - "species": [ "BIRD" ], - "diff": 10, - "size": "SMALL", - "hp": 15, - "speed": 140, - "material": [ "flesh" ], - "symbol": "v", - "color": "brown", - "aggression": -80, - "morale": -8, - "melee_dice": 1, - "melee_dice_sides": 1, - "melee_cut": 0, - "dodge": 3, - "vision_day": 50, - "fear_triggers": [ "PLAYER_CLOSE", "FRIEND_DIED" ], - "death_function": [ "NORMAL" ], - "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "FLIES", "BONES", "FEATHER", "FAT" ] - }, { "id": "mon_turret_searchlight", "type": "MONSTER", @@ -4655,31 +4260,6 @@ "death_function": [ "NORMAL" ], "flags": [ "SEES", "HEARS", "GOODHEARING", "POISON", "HUMAN", "LEATHER", "CLIMBS" ] }, - { - "id": "mon_vinebeast", - "type": "MONSTER", - "name": "vine beast", - "description": "An animated mass of roots and vines, creeping along the ground with alarming speed. The tangle is thick enough that the center from which they grow is concealed.", - "default_faction": "triffid", - "species": [ "PLANT" ], - "diff": 14, - "size": "LARGE", - "hp": 100, - "speed": 100, - "material": [ "veggy" ], - "symbol": "V", - "color": "light_green", - "aggression": 60, - "morale": 40, - "melee_skill": 8, - "melee_dice": 2, - "melee_dice_sides": 10, - "melee_cut": 0, - "dodge": 4, - "armor_bash": 18, - "death_function": [ "NORMAL" ], - "flags": [ "HEARS", "GOODHEARING", "NOHEAD", "HARDTOSHOOT", "GRABS", "SWIMS", "PLASTIC" ] - }, { "id": "mon_vortex", "type": "MONSTER", From d81c4480640696e2d3243d887e7363a6343940e0 Mon Sep 17 00:00:00 2001 From: acidia Date: Thu, 24 May 2018 20:28:35 -0400 Subject: [PATCH 06/56] Added species jsons from monsters.json --- data/json/monsters/bird.json | 195 +++++++++++++++++++++++++ data/json/monsters/insect.json | 172 ++++++++++++++++++++++ data/json/monsters/triffid.json | 248 ++++++++++++++++++++++++++++++++ 3 files changed, 615 insertions(+) create mode 100644 data/json/monsters/bird.json create mode 100644 data/json/monsters/insect.json create mode 100644 data/json/monsters/triffid.json diff --git a/data/json/monsters/bird.json b/data/json/monsters/bird.json new file mode 100644 index 0000000000000..0d0eeb79dd38a --- /dev/null +++ b/data/json/monsters/bird.json @@ -0,0 +1,195 @@ +[ + { + "id": "mon_chicken", + "type": "MONSTER", + "name": "chicken", + "description": "A domesticated descendant of junglefowl, it may still be the most numerous bird in the world. Before the Cataclysm, it was raised by humans as a source of meat, eggs, and early morning wakeup calls.", + "default_faction": "small_animal", + "categories": [ "WILDLIFE" ], + "species": [ "BIRD" ], + "diff": 10, + "size": "TINY", + "hp": 8, + "speed": 80, + "material": [ "flesh" ], + "symbol": "v", + "color": "white", + "aggression": -99, + "morale": -8, + "melee_skill": 1, + "melee_dice": 1, + "melee_dice_sides": 1, + "melee_cut": 1, + "dodge": 4, + "death_function": [ "NORMAL" ], + "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "FLIES", "BONES", "FEATHER", "FAT" ] + }, + { + "id": "mon_grouse", + "type": "MONSTER", + "copy-from": "mon_chicken", + "name": "grouse", + "description": "A very common game bird, these creatures remind you of what a wild chicken must have been like.", + "hp": 5, + "speed": 110, + "color": "brown" + }, + { + "id": "mon_crow", + "type": "MONSTER", + "name": "crow", + "description": "A small, elegant black bird, famous for its distinctive call. An intelligent bird, there is a glitter of mischief behind its eyes.", + "default_faction": "small_animal", + "categories": [ "WILDLIFE" ], + "species": [ "BIRD" ], + "diff": 1, + "size": "TINY", + "hp": 4, + "speed": 140, + "material": [ "flesh" ], + "symbol": "v", + "color": "dark_gray", + "aggression": -99, + "morale": -8, + "melee_dice": 1, + "melee_dice_sides": 1, + "melee_cut": 0, + "dodge": 4, + "fear_triggers": [ "PLAYER_CLOSE" ], + "death_function": [ "NORMAL" ], + "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "FLIES", "BONES", "FEATHER" ] + }, + { + "id": "mon_duck", + "type": "MONSTER", + "name": "duck", + "description": "A mallard duck, often seen around rivers and other bodies of water. It feeds primarily on insects, seeds, roots, and, pre-cataclysm, bread scraps.", + "default_faction": "small_animal", + "categories": [ "WILDLIFE" ], + "species": [ "BIRD" ], + "diff": 1, + "size": "TINY", + "hp": 4, + "speed": 140, + "material": [ "flesh" ], + "symbol": "v", + "color": "brown", + "aggression": -99, + "morale": -8, + "melee_dice": 1, + "melee_dice_sides": 1, + "melee_cut": 0, + "dodge": 4, + "fear_triggers": [ "SOUND", "PLAYER_CLOSE" ], + "death_function": [ "NORMAL" ], + "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "FLIES", "BONES", "FEATHER", "FAT" ] + }, + { + "id": "mon_goose_canadian", + "type": "MONSTER", + "copy-from": "mon_duck", + "name": "goose", + "description": "A canadian goose, a common waterfowl that regrets leaving Canada.", + "hp": 8, + "dodge": 3 + }, + { + "id": "mon_turkey", + "type": "MONSTER", + "name": "turkey", + "description": "A large and colorful game bird native to the forests of North America. Its head and beak are covered in fleshy protuberances.", + "default_faction": "small_animal", + "categories": [ "WILDLIFE" ], + "species": [ "BIRD" ], + "diff": 10, + "size": "SMALL", + "hp": 15, + "speed": 140, + "material": [ "flesh" ], + "symbol": "v", + "color": "brown", + "aggression": -80, + "morale": -8, + "melee_dice": 1, + "melee_dice_sides": 1, + "melee_cut": 0, + "dodge": 3, + "vision_day": 50, + "fear_triggers": [ "PLAYER_CLOSE", "FRIEND_DIED" ], + "death_function": [ "NORMAL" ], + "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "FLIES", "BONES", "FEATHER", "FAT" ] + }, + { + "id": "mon_pheasant", + "type": "MONSTER", + "copy-from": "mon_turkey", + "name": "pheasant", + "description": "A medium sized game bird that can have bright feathers depending on the sex and species.", + "size": "TINY", + "hp": 6, + "speed": 130, + "dodge": 4 + }, + { + "id": "mon_chicken_chick", + "type": "MONSTER", + "name": "yellow chick", + "description": "A tiny yellow and brown chick, it could be from a number of different species.", + "default_faction": "small_animal", + "categories": [ "WILDLIFE" ], + "species": [ "BIRD" ], + "diff": 10, + "size": "TINY", + "hp": 1, + "speed": 40, + "material": [ "flesh" ], + "symbol": "v", + "color": "yellow", + "aggression": -99, + "morale": -8, + "melee_skill": 1, + "melee_dice": 1, + "melee_dice_sides": 1, + "melee_cut": 1, + "dodge": 1, + "death_function": [ "NORMAL" ], + "upgrades": { "age_grow": 14, "into": "mon_chicken" }, + "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM" ] + }, + { + "id": "mon_grouse_chick", + "type": "MONSTER", + "copy-from": "mon_chicken_chick", + "name": "brown chick", + "upgrades": { "age_grow": 10, "into": "mon_grouse" } + }, + { + "id": "mon_turkey_chick", + "type": "MONSTER", + "copy-from": "mon_chicken_chick", + "name": "brown chick", + "upgrades": { "age_grow": 18, "into": "mon_turkey" } + }, + { + "id": "mon_pheasant_chick", + "type": "MONSTER", + "copy-from": "mon_chicken_chick", + "name": "brown chick", + "upgrades": { "age_grow": 14, "into": "mon_pheasant" } + }, + { + "id": "mon_duck_chick", + "type": "MONSTER", + "copy-from": "mon_chicken_chick", + "name": "waterfowl chick", + "description": "A tiny yellow and brown waterfowl chick, it could be from a number of different species.", + "upgrades": { "age_grow": 12, "into": "mon_duck" } + }, + { + "id": "mon_goose_canadian_chick", + "type": "MONSTER", + "copy-from": "mon_duck_chick", + "upgrades": { "age_grow": 16, "into": "mon_goose_canadian" } + } +] + diff --git a/data/json/monsters/insect.json b/data/json/monsters/insect.json new file mode 100644 index 0000000000000..2b4ea843944ff --- /dev/null +++ b/data/json/monsters/insect.json @@ -0,0 +1,172 @@ +[ + { + "id": "mon_skittering_plague", + "type": "MONSTER", + "name": "skittering plague", + "description": "A giant infected roach, it has been feeding on the undead.", + "default_faction": "roach", + "species": [ "INSECT" ], + "diff": 7, + "size": "SMALL", + "hp": 30, + "speed": 120, + "material": [ "iflesh" ], + "symbol": "a", + "color": "brown", + "aggression": -99, + "morale": -8, + "melee_skill": 4, + "melee_dice": 1, + "melee_dice_sides": 6, + "melee_cut": 3, + "dodge": 1, + "armor_bash": 5, + "armor_cut": 7, + "vision_day": 5, + "vision_night": 5, + "upgrades": { "age_grow": 7, "into": "mon_plague_vector" }, + "anger_triggers": [ "FRIEND_ATTACKED", "PLAYER_WEAK" ], + "death_function": [ "NORMAL" ], + "flags": [ "SEES", "HEARS", "SMELLS", "CHITIN", "CLIMBS", "POISON", "STUMBLES" ] + }, + { + "id": "mon_plague_nymph", + "type": "MONSTER", + "name": "plague nymph", + "description": "An infected mutant cockroach about the size of a rat.", + "default_faction": "roach", + "species": [ "INSECT", "ZOMBIE" ], + "diff": 3, + "size": "TINY", + "hp": 3, + "speed": 100, + "material": [ "iflesh" ], + "symbol": "a", + "color": "brown", + "aggression": -99, + "morale": -8, + "melee_skill": 1, + "melee_dice": 1, + "melee_dice_sides": 3, + "dodge": 3, + "melee_cut": 0, + "vision_day": 10, + "vision_night": 3, + "upgrades": { "age_grow": 7, "into": "mon_skittering_plague" }, + "death_function": [ "NORMAL" ], + "special_attacks": [ [ "DERMATIK_GROWTH", 1000 ] ], + "flags": [ "SEES", "HEARS", "SMELLS", "CHITIN", "CLIMBS", "POISON", "LARVA", "STUMBLES" ] + }, + { + "id": "mon_plague_vector", + "type": "MONSTER", + "name": "plague vector", + "description": "This infected roach has been feeding on the undead and started to mutate chaotically. Extra limbs and growths sprout from its thorax.", + "default_faction": "roach", + "species": [ "INSECT" ], + "diff": 712, + "size": "SMALL", + "hp": 70, + "speed": 100, + "material": [ "iflesh" ], + "symbol": "a", + "color": "brown", + "aggression": 50, + "morale": 60, + "melee_skill": 5, + "melee_dice": 2, + "melee_dice_sides": 6, + "melee_cut": 7, + "dodge": 1, + "armor_bash": 5, + "armor_cut": 10, + "vision_day": 5, + "vision_night": 5, + "anger_triggers": [ "FRIEND_ATTACKED", "PLAYER_WEAK" ], + "death_function": [ "NORMAL" ], + "flags": [ "SEES", "HEARS", "SMELLS", "CHITIN", "CLIMBS", "POISON", "STUMBLES" ] + }, + { + "id": "mon_giant_cockroach", + "type": "MONSTER", + "name": "giant cockroach", + "description": "A mutant cockroach the size of a small dog.", + "default_faction": "roach", + "species": [ "INSECT" ], + "diff": 7, + "size": "SMALL", + "hp": 40, + "speed": 100, + "material": [ "iflesh" ], + "symbol": "a", + "color": "brown", + "aggression": 30, + "morale": 60, + "melee_skill": 5, + "melee_dice": 1, + "melee_dice_sides": 6, + "melee_cut": 3, + "dodge": 1, + "armor_bash": 5, + "armor_cut": 10, + "vision_day": 5, + "vision_night": 5, + "upgrades": { "age_grow": 7, "into": "mon_pregnant_giant_cockroach" }, + "death_function": [ "NORMAL" ], + "flags": [ "SEES", "HEARS", "SMELLS", "CHITIN", "CLIMBS" ] + }, + { + "id": "mon_giant_cockroach_nymph", + "type": "MONSTER", + "name": "giant cockroach nymph", + "description": "A baby mutant cockroach about the size of a rat.", + "default_faction": "roach", + "species": [ "INSECT" ], + "diff": 3, + "size": "TINY", + "hp": 10, + "speed": 50, + "material": [ "iflesh" ], + "symbol": "a", + "color": "brown", + "aggression": 100, + "morale": 100, + "melee_skill": 3, + "melee_dice": 2, + "melee_dice_sides": 3, + "melee_cut": 0, + "vision_day": 10, + "vision_night": 3, + "upgrades": { "age_grow": 7, "into": "mon_giant_cockroach" }, + "death_function": [ "NORMAL" ], + "flags": [ "SEES", "HEARS", "SMELLS", "CHITIN", "CLIMBS" ] + }, + { + "id": "mon_pregnant_giant_cockroach", + "type": "MONSTER", + "name": "pregnant giant cockroach", + "description": "A mutant cockroach the size of a small dog. It's abdomen is heavily swollen.", + "default_faction": "roach", + "species": [ "INSECT" ], + "diff": 8, + "size": "SMALL", + "hp": 40, + "speed": 100, + "material": [ "iflesh" ], + "symbol": "a", + "color": "brown", + "aggression": 30, + "morale": 60, + "melee_skill": 5, + "melee_dice": 1, + "melee_dice_sides": 6, + "melee_cut": 3, + "dodge": 1, + "armor_bash": 5, + "armor_cut": 10, + "vision_day": 5, + "vision_night": 5, + "death_function": [ "NORMAL", "PREG_ROACH" ], + "flags": [ "SEES", "HEARS", "SMELLS", "CHITIN", "CLIMBS" ] + } +] diff --git a/data/json/monsters/triffid.json b/data/json/monsters/triffid.json new file mode 100644 index 0000000000000..f9ddc14196e01 --- /dev/null +++ b/data/json/monsters/triffid.json @@ -0,0 +1,248 @@ +[ + { + "id": "mon_biollante", + "type": "MONSTER", + "name": "biollante", + "description": "A drooped, quivering plant with a thick stalk adorned by a purple flower. Its petals are closed, and pulsate ominously.", + "default_faction": "triffid", + "species": [ "PLANT" ], + "diff": 20, + "size": "LARGE", + "hp": 120, + "speed": 100, + "material": [ "veggy" ], + "symbol": "F", + "color": "magenta", + "aggression": 100, + "morale": 100, + "melee_cut": 0, + "special_attacks": [ [ "SPIT_SAP", 2 ] ], + "death_drops": { "subtype": "collection", "groups": [ [ "biollante", 8 ] ], "//": "80% chance of an item from group biollante" }, + "death_function": [ "NORMAL" ], + "flags": [ "NOHEAD", "IMMOBILE" ] + }, + { + "id": "mon_creeper_hub", + "type": "MONSTER", + "name": "creeper hub", + "description": "A thick stalk, rooted to the ground. It rapidly sprouts thorny vines in all directions.", + "default_faction": "triffid", + "species": [ "PLANT" ], + "diff": 16, + "size": "MEDIUM", + "hp": 100, + "speed": 100, + "material": [ "veggy" ], + "symbol": "V", + "color": "green", + "aggression": 100, + "morale": 100, + "melee_cut": 0, + "armor_bash": 8, + "special_attacks": [ [ "GROW_VINE", 2 ] ], + "death_function": [ "KILL_VINES" ], + "flags": [ "NOHEAD", "IMMOBILE" ] + }, + { + "id": "mon_creeper_vine", + "type": "MONSTER", + "name": "creeper vine", + "description": "A thorny vine, twisting wildly as it grows with incredible speed.", + "default_faction": "triffid", + "species": [ "PLANT" ], + "diff": 4, + "size": "TINY", + "hp": 2, + "speed": 75, + "material": [ "veggy" ], + "symbol": "v", + "color": "green", + "aggression": 100, + "morale": 100, + "melee_cut": 0, + "armor_bash": 2, + "special_attacks": [ [ "VINE", 5 ] ], + "death_function": [ "VINE_CUT" ], + "flags": [ "NOHEAD", "HARDTOSHOOT", "PLASTIC", "IMMOBILE" ] + }, + { + "id": "mon_triffid_sprig", + "type": "MONSTER", + "name": "triffid sprig", + "description": "A teeny-tiny triffid that has recently germinated. Like a house cat, you know it wants to eat you but it just can't figure out how.", + "default_faction": "triffid", + "species": [ "PLANT" ], + "diff": 2, + "size": "TINY", + "hp": 3, + "speed": 50, + "material": [ "veggy" ], + "symbol": "1", + "color": "light_green", + "aggression": -99, + "morale": -8, + "melee_skill": 1, + "melee_dice": 1, + "melee_dice_sides": 1, + "melee_cut": 1, + "upgrades": { "age_grow": 14, "into": "mon_triffid_young" }, + "death_function": [ "NORMAL" ], + "flags": [ "HEARS", "SMELLS", "NOHEAD", "STUMBLES" ] + }, + { + "id": "mon_triffid_young", + "type": "MONSTER", + "name": "triffid sprout", + "description": "A small triffid, only a few feet tall. It has not yet developed bark, but its sting is still sharp and deadly.", + "default_faction": "triffid", + "species": [ "PLANT" ], + "diff": 8, + "size": "SMALL", + "hp": 40, + "speed": 50, + "material": [ "veggy" ], + "symbol": "1", + "color": "light_green", + "morale": 10, + "melee_skill": 3, + "melee_dice": 1, + "melee_dice_sides": 4, + "melee_cut": 4, + "upgrades": { "age_grow": 14, "into": "mon_triffid" }, + "special_attacks": [ [ "TRIFFID_GROWTH", 28800 ] ], + "death_function": [ "NORMAL" ], + "flags": [ "HEARS", "SMELLS", "NOHEAD", "PARALYZEVENOM" ] + }, + { + "id": "mon_triffid", + "type": "MONSTER", + "name": "triffid", + "description": "A creeping animate plant, growing as tall as a moose. It has a single bark-covered stalk supporting a flowery head with a paralyzing sting concealed within.", + "default_faction": "triffid", + "species": [ "PLANT" ], + "diff": 16, + "size": "MEDIUM", + "hp": 80, + "speed": 50, + "material": [ "veggy" ], + "symbol": "F", + "color": "light_green", + "aggression": 20, + "morale": 100, + "melee_skill": 5, + "melee_dice": 2, + "melee_dice_sides": 4, + "melee_cut": 6, + "armor_bash": 10, + "armor_cut": 4, + "death_function": [ "NORMAL" ], + "flags": [ "SEES", "SMELLS", "BASHES", "GROUP_BASH", "NOHEAD", "PARALYZEVENOM" ] + }, + { + "id": "mon_triffid_queen", + "type": "MONSTER", + "name": "triffid queen", + "description": "A ponderous and particularly arborescent triffid. It has enormous red petals surrounded by a haze of spores, and two thick barbed vines stick out from the stems like wary harpoons.", + "default_faction": "triffid", + "species": [ "PLANT" ], + "diff": 28, + "size": "LARGE", + "hp": 280, + "speed": 85, + "material": [ "veggy" ], + "symbol": "F", + "color": "red", + "aggression": 100, + "morale": 200, + "melee_skill": 7, + "melee_dice": 2, + "melee_dice_sides": 8, + "melee_cut": 8, + "armor_bash": 12, + "armor_cut": 8, + "special_attacks": [ [ "GROWPLANTS", 2 ] ], + "death_function": [ "NORMAL" ], + "flags": [ "HEARS", "SMELLS", "BASHES", "NOHEAD", "PARALYZEVENOM" ] + }, + { + "id": "mon_vinebeast", + "type": "MONSTER", + "name": "vine beast", + "description": "An animated mass of roots and vines, creeping along the ground with alarming speed. The tangle is thick enough that the center from which they grow is concealed.", + "default_faction": "triffid", + "species": [ "PLANT" ], + "diff": 14, + "size": "LARGE", + "hp": 100, + "speed": 100, + "material": [ "veggy" ], + "symbol": "V", + "color": "light_green", + "aggression": 60, + "morale": 40, + "melee_skill": 8, + "melee_dice": 2, + "melee_dice_sides": 10, + "melee_cut": 0, + "dodge": 4, + "armor_bash": 18, + "death_function": [ "NORMAL" ], + "flags": [ "HEARS", "GOODHEARING", "NOHEAD", "HARDTOSHOOT", "GRABS", "SWIMS", "PLASTIC" ] + }, + { + "id": "mon_fungal_fighter", + "type": "MONSTER", + "name": "fungal fighter", + "description": "A stout woody plant that can dig through the ground and flick spines from its branches. The thorns carry a fungicidal compound with paralytic effects.", + "default_faction": "triffid", + "species": [ "PLANT" ], + "diff": 8, + "size": "SMALL", + "hp": 60, + "speed": 50, + "material": [ "veggy" ], + "symbol": "F", + "color": "green", + "aggression": 10, + "morale": 10, + "melee_skill": 6, + "melee_dice": 1, + "melee_dice_sides": 6, + "melee_cut": 4, + "armor_bash": 4, + "armor_cut": 6, + "attack_effs": [ + { "id": "paralyzepoison", "//": "applying this multiple times makes intensity go up by 3 instead of 1", "duration": 33 }, + { "id": "paralyzepoison", "duration": 33 }, + { "id": "paralyzepoison", "duration": 33 } + ], + "special_attacks": [ [ "PARA_STING", 10 ] ], + "death_drops": { "subtype": "collection", "groups": [ [ "fungal_sting", 80 ] ], "//": "80% chance of an item from group fungal_sting" }, + "death_function": [ "NORMAL" ], + "flags": [ "HEARS", "SMELLS", "NOHEAD", "CAN_DIG" ] + }, + { + "id": "mon_triffid_heart", + "type": "MONSTER", + "name": "triffid heart", + "description": "A knot of tubular roots, flowing with sap and beating like a heart. Strands of vascular tissue reach out to the surrounding root walls.", + "default_faction": "triffid", + "species": [ "PLANT" ], + "diff": 50, + "size": "HUGE", + "hp": 500, + "speed": 100, + "material": [ "veggy" ], + "symbol": "T", + "color": "red", + "aggression": 100, + "morale": 100, + "melee_cut": 0, + "armor_bash": 12, + "armor_cut": 16, + "special_attacks": [ [ "TRIFFID_HEARTBEAT", 5 ] ], + "death_function": [ "TRIFFID_HEART" ], + "flags": [ "NOHEAD", "IMMOBILE", "QUEEN" ] + } +] + From e1a125e07d91d2c65717c1f03b2e623c906f5b38 Mon Sep 17 00:00:00 2001 From: acidia Date: Thu, 24 May 2018 20:34:53 -0400 Subject: [PATCH 07/56] Added updated carrion spawns for chicks --- data/json/monstergroups.json | 64 ++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/data/json/monstergroups.json b/data/json/monstergroups.json index 148ffc67e04c6..791738297f1d5 100644 --- a/data/json/monstergroups.json +++ b/data/json/monstergroups.json @@ -1562,5 +1562,69 @@ { "monster" : "mon_zombie_brute_shocker", "freq" : 5, "cost_multiplier" : 40 }, { "monster" : "mon_zombie_runner", "freq" : 20, "cost_multiplier" : 5, "pack_size": [1,4] } ] + }, + { + "name": "GROUP_CARRION_INFECTED", + "type": "monstergroup", + "default": "mon_plague_nymph", + "monsters": [ + { "monster": "mon_plague_nymph", "freq": 100, "cost_multiplier": 1 }, + { "monster": "mon_skittering_plague", "freq": 20, "cost_multiplier": 1 }, + { "monster": "mon_plague_vector", "freq": 5, "cost_multiplier": 1 }, + { "monster": "mon_biollante", "freq": 5, "cost_multiplier": 1 }, + { "monster": "mon_triffid_sprig", "freq": 5, "cost_multiplier": 1 } + ] + }, + { + "name": "GROUP_CARRION", + "type": "monstergroup", + "default": "mon_giant_cockroach_nymph", + "monsters": [ + { "monster": "mon_giant_cockroach", "freq": 100, "cost_multiplier": 1 }, + { "monster": "mon_biollante", "freq": 5, "cost_multiplier": 1 }, + { "monster": "mon_triffid_sprig", "freq": 30, "cost_multiplier": 1 } + ] + }, + { + "name": "GROUP_ROTTING_PLANT", + "type": "monstergroup", + "default": "mon_giant_cockroach_nymph", + "monsters": [ + { "monster": "mon_giant_cockroach", "freq": 30, "cost_multiplier": 1 }, + { "monster": "mon_crow", "freq": 30, "cost_multiplier": 1 } + ] + }, + { + "name": "GROUP_EGG_BIRD_WILD", + "type": "monstergroup", + "default": "mon_grouse_chick", + "monsters": [ + { "monster": "mon_grouse_chick", "freq": 50, "cost_multiplier": 1 }, + { "monster": "mon_chicken_chick", "freq": 100, "cost_multiplier": 1 }, + { "monster": "mon_turkey_chick", "freq": 250, "cost_multiplier": 1 }, + { "monster": "mon_pheasant_chick", "freq": 250, "cost_multiplier": 1 }, + { "monster": "mon_duck_chick", "freq": 150, "cost_multiplier": 1 }, + { "monster": "mon_goose_canadian_chick", "freq": 100, "cost_multiplier": 1 }, + { "monster": "mon_rattlesnake", "freq": 75, "cost_multiplier": 1 } + ] + }, + { + "name": "GROUP_EGG_SNAKE", + "type": "monstergroup", + "default": "mon_rattlesnake", + "monsters": [ + { "monster": "mon_grouse_chick", "freq": 30, "cost_multiplier": 1 }, + { "monster": "mon_rattlesnake", "freq": 100, "cost_multiplier": 1 } + ] + }, + { + "name": "GROUP_ROTTING_TRIFFID_FAVOR", + "type": "monstergroup", + "default": "mon_triffid_sprig", + "monsters": [ + { "monster": "mon_triffid_sprig", "freq": 100, "cost_multiplier": 1 }, + { "monster": "mon_biollante", "freq": 30, "cost_multiplier": 1 }, + { "monster": "mon_giant_cockroach", "freq": 30, "cost_multiplier": 1 } + ] } ] From 1ef1c408ba4d8185a8f145c365f4e1f264777cee Mon Sep 17 00:00:00 2001 From: acidia Date: Sat, 26 May 2018 22:55:19 -0400 Subject: [PATCH 08/56] Update for "reproduction" demo --- data/json/monsters/bird.json | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/data/json/monsters/bird.json b/data/json/monsters/bird.json index 0d0eeb79dd38a..81a5279df1e52 100644 --- a/data/json/monsters/bird.json +++ b/data/json/monsters/bird.json @@ -21,6 +21,11 @@ "melee_dice_sides": 1, "melee_cut": 1, "dodge": 4, + "reproduction": { + "baby_egg": "egg_bird", + "baby_count": 1, + "baby_timer": 7 + }, "death_function": [ "NORMAL" ], "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "FLIES", "BONES", "FEATHER", "FAT" ] }, @@ -32,7 +37,13 @@ "description": "A very common game bird, these creatures remind you of what a wild chicken must have been like.", "hp": 5, "speed": 110, - "color": "brown" + "color": "brown", + "reproduction": { + "baby_egg": "null", + "baby_monster": "mon_grouse_chick", + "baby_count": 2, + "baby_timer": 14 + } }, { "id": "mon_crow", @@ -192,4 +203,3 @@ "upgrades": { "age_grow": 16, "into": "mon_goose_canadian" } } ] - From 3e25b7714de913e94b95b177d41b10c8f2e96f73 Mon Sep 17 00:00:00 2001 From: acidia Date: Sat, 26 May 2018 22:57:35 -0400 Subject: [PATCH 09/56] Added "reproduction" variables --- src/mtype.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/mtype.h b/src/mtype.h index 18b923f3bdb33..7c70f9ff1af42 100644 --- a/src/mtype.h +++ b/src/mtype.h @@ -268,6 +268,13 @@ struct mtype { mongroup_id upgrade_group; mtype_id burn_into; + // Monster reproduction variables + bool reproduces; + int baby_timer; + int baby_count; + mtype_id baby_monster; + itype_id baby_egg; + // Monster's ability to destroy terrain and vehicles int bash_skill; From 76c2595805547d467df206912a2bea677d66a212 Mon Sep 17 00:00:00 2001 From: acidia Date: Sat, 26 May 2018 22:58:45 -0400 Subject: [PATCH 10/56] Added "reproduction" variables --- src/mtype.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/mtype.cpp b/src/mtype.cpp index 3276ab4d78691..a53acdb343d7f 100644 --- a/src/mtype.cpp +++ b/src/mtype.cpp @@ -25,6 +25,13 @@ mtype::mtype() age_grow = -1; upgrade_into = mtype_id::NULL_ID(); upgrade_group = mongroup_id::NULL_ID(); + + reproduces = false; + baby_timer = -1; + baby_count = -1; + baby_monster = mtype_id::NULL_ID(); + baby_egg = "null"; + burn_into = mtype_id::NULL_ID(); dies.push_back( &mdeath::normal ); sp_defense = nullptr; From 19528ac88a6612268092103d32d32ab6ecfee22e Mon Sep 17 00:00:00 2001 From: acidia Date: Sat, 26 May 2018 23:26:19 -0400 Subject: [PATCH 11/56] Added reproduction functionality --- src/monster.cpp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/monster.cpp b/src/monster.cpp index c68799cf56f73..cd313586e2ff6 100644 --- a/src/monster.cpp +++ b/src/monster.cpp @@ -169,6 +169,8 @@ monster::monster() upgrades = false; upgrade_time = -1; last_updated = 0; + baby_timer = -1; + last_baby = 0; } monster::monster( const mtype_id& id ) : monster() @@ -186,6 +188,7 @@ monster::monster( const mtype_id& id ) : monster() faction = type->default_faction; ammo = type->starting_ammo; upgrades = type->upgrades && (type->half_life || type->age_grow); + reproduces = type->reproduces && type->baby_timer; } monster::monster( const mtype_id& id, const tripoint &p ) : monster(id) @@ -235,6 +238,7 @@ void monster::poly( const mtype_id& id ) } faction = type->default_faction; upgrades = type->upgrades; + reproduces = type->reproduces; } bool monster::can_upgrade() { @@ -280,6 +284,7 @@ void monster::try_upgrade(bool pin_time) { return; } + //const int current_day = to_days( calendar::time_of_cataclysm - calendar::turn ); const int current_day = to_days( calendar::turn - calendar::time_of_cataclysm ); //This should only occur when a monster is created or upgraded to a new form if (upgrade_time < 0) { @@ -328,6 +333,38 @@ void monster::try_upgrade(bool pin_time) { } } +void monster::try_reproduce() { + if( !reproduces ) { + return; + } + + const int current_day = to_days( calendar::turn - calendar::time_of_cataclysm ); + if (baby_timer < 0) { + baby_timer = type->baby_timer; + if (baby_timer < 0) { + return; + } + baby_timer += current_day; + } + + while (true) { + if (baby_timer > current_day) { + return; + } + if( type->baby_monster ) { + g->m.add_spawn(type->baby_monster, type->baby_count, pos().x, pos().y); + } else { + g->m.add_item_or_charges(pos(), item( type->baby_egg, DAYS(baby_timer), type->baby_count), true); + } + + const int next_baby = type->baby_timer; + if (next_baby < 0) { + return; + } + baby_timer += next_baby; + } +} + void monster::spawn(const tripoint &p) { position = p; From 213e2dbd77781343c92a361aed8d9fcf4e821687 Mon Sep 17 00:00:00 2001 From: acidia Date: Sat, 26 May 2018 23:28:57 -0400 Subject: [PATCH 12/56] Added reproduction functionality --- src/monstergenerator.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/monstergenerator.cpp b/src/monstergenerator.cpp index 523110847880f..b7a5b94e16a77 100644 --- a/src/monstergenerator.cpp +++ b/src/monstergenerator.cpp @@ -634,6 +634,18 @@ void mtype::load( JsonObject &jo, const std::string &src ) upgrades = true; } + //Reproduction + if( jo.has_member( "reproduction" ) ) { + JsonObject repro = jo.get_object( "reproduction" ); + optional( repro, was_loaded, "baby_count", baby_count, -1 ); + optional( repro, was_loaded, "baby_timer", baby_timer, -1 ); + optional( repro, was_loaded, "baby_monster", baby_monster, auto_flags_reader {}, + mtype_id::NULL_ID() ); + optional( repro, was_loaded, "baby_egg", baby_egg, auto_flags_reader {}, + "null" ); + reproduces = true; + } + optional( jo, was_loaded, "burn_into", burn_into, auto_flags_reader {}, mtype_id::NULL_ID() ); @@ -936,5 +948,29 @@ void MonsterGenerator::check_monster_definitions() const mon.upgrade_group.c_str(), mon.id.c_str() ); } } + if( mon.reproduces ) { + if( mon.baby_timer < 1) { + debugmsg( "Time between reproductions (%d) is invalid for %s", + mon.baby_timer, mon.id.c_str() ); + } + if( mon.baby_count < 1) { + debugmsg( "Number of children (%d) is invalid for %s", + mon.baby_count, mon.id.c_str() ); + } + if( !mon.baby_monster && mon.baby_egg == "null" ) { + debugmsg( "No baby or egg defined for monster %s", mon.id.c_str() ); + } + if( mon.baby_monster && mon.baby_egg != "null") { + debugmsg( "Both an egg and a live birth baby are defined for %s", mon.id.c_str() ); + } + if( !mon.baby_monster.is_valid() ) { + debugmsg( "baby_monster %s of monster %s is not a valid monster id", + mon.baby_monster.c_str(), mon.id.c_str() ); + } + if( !item::type_is_defined( mon.baby_egg )) { + debugmsg( "item_id %s of monster %s is not a valid monster group id", + mon.baby_egg.c_str(), mon.id.c_str() ); + } + } } } From 61bf8724b9fba25e12a0a5368a45649baa7a9a50 Mon Sep 17 00:00:00 2001 From: acidia Date: Sat, 26 May 2018 23:30:48 -0400 Subject: [PATCH 13/56] Added reproduction functionality --- src/savegame_json.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/savegame_json.cpp b/src/savegame_json.cpp index 39f6571da051c..26bb1ccc5b67b 100644 --- a/src/savegame_json.cpp +++ b/src/savegame_json.cpp @@ -1384,6 +1384,9 @@ void monster::load(JsonObject &data) upgrades = data.get_bool("upgrades", type->upgrades); upgrade_time = data.get_int("upgrade_time", -1); + reproduces = data.get_bool("reproduces", type->reproduces); + baby_timer = data.get_int("baby_timer", -1); + data.read("inv", inv); if( data.has_int("ammo") && !type->starting_ammo.empty() ) { // Legacy loading for ammo. @@ -1394,6 +1397,7 @@ void monster::load(JsonObject &data) faction = mfaction_str_id( data.get_string( "faction", "" ) ); last_updated = data.get_int( "last_updated", calendar::turn ); + last_baby = data.get_int( "last_baby", calendar::turn ); data.read( "path", path ); } @@ -1440,6 +1444,9 @@ void monster::store(JsonOut &json) const json.member("upgrades", upgrades); json.member("upgrade_time", upgrade_time); json.member("last_updated", last_updated); + json.member("reproduces", reproduces); + json.member("baby_timer", baby_timer); + json.member("last_baby", last_baby); json.member( "inv", inv ); From 6d35e6595c85fc6b6e3dea5ba9d778a3c09687df Mon Sep 17 00:00:00 2001 From: acidia Date: Sat, 26 May 2018 23:32:58 -0400 Subject: [PATCH 14/56] Added reproduction variables --- src/monster.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/monster.h b/src/monster.h index 72b1b7c1c611a..7c11ca7ea07fe 100644 --- a/src/monster.h +++ b/src/monster.h @@ -81,6 +81,7 @@ class monster : public Creature bool can_upgrade(); void hasten_upgrade(); void try_upgrade( bool pin_time ); + void try_reproduce(); void spawn( const tripoint &p ); m_size get_size() const override; int get_hp( hp_part ) const override; @@ -424,6 +425,7 @@ class monster : public Creature void init_from_item( const item &itm ); int last_updated; + int last_baby; /** * Do some cleanup and caching as monster is being unloaded from map. */ @@ -448,6 +450,8 @@ class monster : public Creature int next_upgrade_time(); bool upgrades; int upgrade_time; + bool reproduces; + int baby_timer; /** Found path. Note: Not used by monsters that don't pathfind! **/ std::vector path; std::bitset effect_cache; From ee6a4ccc2795dcb231e4ab71eb8094efc755322a Mon Sep 17 00:00:00 2001 From: acidia Date: Sat, 26 May 2018 23:34:14 -0400 Subject: [PATCH 15/56] Added reproduction check --- src/game.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/game.cpp b/src/game.cpp index b6fe6bbb69fcb..09c5f9bbd6f18 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -6249,11 +6249,13 @@ bool game::add_zombie(monster &critter, bool pin_upgrade) } critter.try_upgrade(pin_upgrade); + critter.try_reproduce(); if( !pin_upgrade ) { critter.on_load(); } critter.last_updated = calendar::turn; + critter.last_baby = calendar::turn; return critter_tracker->add(critter); } From 045d023909f6eb1e406503afb1596f928927e730 Mon Sep 17 00:00:00 2001 From: acidia Date: Sat, 2 Jun 2018 20:44:23 -0400 Subject: [PATCH 16/56] Added biosignatures and baby_flags --- src/mtype.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/mtype.h b/src/mtype.h index 7c70f9ff1af42..902f14d8cde0c 100644 --- a/src/mtype.h +++ b/src/mtype.h @@ -274,6 +274,12 @@ struct mtype { int baby_count; mtype_id baby_monster; itype_id baby_egg; + std::vector baby_flags; + + // Monster biosignature variables + bool biosignatures; + int biosig_timer; + itype_id biosig_item; // Monster's ability to destroy terrain and vehicles int bash_skill; From 9f8b9c59cb7fea5035d8ce0ad262541072d54cae Mon Sep 17 00:00:00 2001 From: acidia Date: Sat, 2 Jun 2018 20:45:33 -0400 Subject: [PATCH 17/56] Added biosignatures --- src/mtype.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/mtype.cpp b/src/mtype.cpp index a53acdb343d7f..c5c96d6940dbb 100644 --- a/src/mtype.cpp +++ b/src/mtype.cpp @@ -32,6 +32,10 @@ mtype::mtype() baby_monster = mtype_id::NULL_ID(); baby_egg = "null"; + biosignatures = false; + biosig_timer = -1; + biosig_item = "null"; + burn_into = mtype_id::NULL_ID(); dies.push_back( &mdeath::normal ); sp_defense = nullptr; From a2ee8b3fa00e731861e24febcff6ede905be0a1e Mon Sep 17 00:00:00 2001 From: acidia Date: Sat, 2 Jun 2018 20:47:28 -0400 Subject: [PATCH 18/56] Added biosignatures and baby_flags --- src/monstergenerator.cpp | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/monstergenerator.cpp b/src/monstergenerator.cpp index b7a5b94e16a77..3e44b10c76380 100644 --- a/src/monstergenerator.cpp +++ b/src/monstergenerator.cpp @@ -643,9 +643,24 @@ void mtype::load( JsonObject &jo, const std::string &src ) mtype_id::NULL_ID() ); optional( repro, was_loaded, "baby_egg", baby_egg, auto_flags_reader {}, "null" ); + if( jo.has_member( "baby_flags" ) ) { + baby_flags.clear(); + JsonArray baby_tags = jo.get_array( "baby_flags" ); + while( baby_tags.has_more() ) { + baby_flags.push_back( baby_tags.next_string() ); + } + } reproduces = true; } + if( jo.has_member( "biosignature" ) ) { + JsonObject biosig = jo.get_object( "biosignature" ); + optional( biosig, was_loaded, "biosig_timer", biosig_timer, -1 ); + optional( biosig, was_loaded, "biosig_item", biosig_item, auto_flags_reader {}, + "null" ); + biosignatures = true; + } + optional( jo, was_loaded, "burn_into", burn_into, auto_flags_reader {}, mtype_id::NULL_ID() ); @@ -948,6 +963,7 @@ void MonsterGenerator::check_monster_definitions() const mon.upgrade_group.c_str(), mon.id.c_str() ); } } + if( mon.reproduces ) { if( mon.baby_timer < 1) { debugmsg( "Time between reproductions (%d) is invalid for %s", @@ -968,9 +984,23 @@ void MonsterGenerator::check_monster_definitions() const mon.baby_monster.c_str(), mon.id.c_str() ); } if( !item::type_is_defined( mon.baby_egg )) { - debugmsg( "item_id %s of monster %s is not a valid monster group id", + debugmsg( "item_id %s of monster %s is not a valid item id", mon.baby_egg.c_str(), mon.id.c_str() ); } } + + if( mon.biosignatures ) { + if( mon.biosig_timer < 1) { + debugmsg( "Time between biosignature drops (%d) is invalid for %s", + mon.biosig_timer, mon.id.c_str() ); + } + if( mon.biosig_item == "null" ) { + debugmsg( "No biosignature drop defined for monster %s", mon.id.c_str() ); + } + if( !item::type_is_defined( mon.biosig_item )) { + debugmsg( "item_id %s of monster %s is not a valid item id", + mon.biosig_item.c_str(), mon.id.c_str() ); + } + } } } From a3c9e0ef4893849e7ceba271cb454ebe8e88dacb Mon Sep 17 00:00:00 2001 From: acidia Date: Sat, 2 Jun 2018 20:48:47 -0400 Subject: [PATCH 19/56] Added biosignatures --- src/savegame_json.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/savegame_json.cpp b/src/savegame_json.cpp index 26bb1ccc5b67b..3d732299e11cd 100644 --- a/src/savegame_json.cpp +++ b/src/savegame_json.cpp @@ -1387,6 +1387,9 @@ void monster::load(JsonObject &data) reproduces = data.get_bool("reproduces", type->reproduces); baby_timer = data.get_int("baby_timer", -1); + biosignatures = data.get_bool("biosignatures", type->biosignatures); + biosig_timer = data.get_int("biosig_timer", -1); + data.read("inv", inv); if( data.has_int("ammo") && !type->starting_ammo.empty() ) { // Legacy loading for ammo. @@ -1398,6 +1401,7 @@ void monster::load(JsonObject &data) faction = mfaction_str_id( data.get_string( "faction", "" ) ); last_updated = data.get_int( "last_updated", calendar::turn ); last_baby = data.get_int( "last_baby", calendar::turn ); + last_biosig = data.get_int( "last_biosig", calendar::turn ); data.read( "path", path ); } @@ -1447,6 +1451,10 @@ void monster::store(JsonOut &json) const json.member("reproduces", reproduces); json.member("baby_timer", baby_timer); json.member("last_baby", last_baby); + json.member("biosignatures", biosignatures); + json.member("biosig_timer", biosig_timer); + json.member("last_biosig", last_biosig); + json.member( "inv", inv ); From a6a63f9d8af4ec8347e92978ec1da640752997ce Mon Sep 17 00:00:00 2001 From: acidia Date: Sat, 2 Jun 2018 20:49:52 -0400 Subject: [PATCH 20/56] Added biosignatures --- src/game.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/game.cpp b/src/game.cpp index 09c5f9bbd6f18..a0fb0941ea80d 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -6250,12 +6250,14 @@ bool game::add_zombie(monster &critter, bool pin_upgrade) critter.try_upgrade(pin_upgrade); critter.try_reproduce(); + critter.try_biosignature(); if( !pin_upgrade ) { critter.on_load(); } critter.last_updated = calendar::turn; critter.last_baby = calendar::turn; + critter.last_biosig = calendar::turn; return critter_tracker->add(critter); } From a2a244d6ad64659d1b24f86c60ea7e8133a40529 Mon Sep 17 00:00:00 2001 From: acidia Date: Sat, 2 Jun 2018 20:50:25 -0400 Subject: [PATCH 21/56] Added biosignatures --- src/monster.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/monster.h b/src/monster.h index 7c11ca7ea07fe..2484420593835 100644 --- a/src/monster.h +++ b/src/monster.h @@ -82,6 +82,7 @@ class monster : public Creature void hasten_upgrade(); void try_upgrade( bool pin_time ); void try_reproduce(); + void try_biosignature(); void spawn( const tripoint &p ); m_size get_size() const override; int get_hp( hp_part ) const override; @@ -426,6 +427,7 @@ class monster : public Creature int last_updated; int last_baby; + int last_biosig; /** * Do some cleanup and caching as monster is being unloaded from map. */ @@ -452,6 +454,8 @@ class monster : public Creature int upgrade_time; bool reproduces; int baby_timer; + bool biosignatures; + int biosig_timer; /** Found path. Note: Not used by monsters that don't pathfind! **/ std::vector path; std::bitset effect_cache; From 796fb1bda48219449867cfb779b8d46c888784a1 Mon Sep 17 00:00:00 2001 From: acidia Date: Sat, 2 Jun 2018 20:52:51 -0400 Subject: [PATCH 22/56] Added biosignatures and baby_flag (season support) --- src/monster.cpp | 64 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 60 insertions(+), 4 deletions(-) diff --git a/src/monster.cpp b/src/monster.cpp index cd313586e2ff6..799cf5e0bbf3f 100644 --- a/src/monster.cpp +++ b/src/monster.cpp @@ -171,6 +171,8 @@ monster::monster() last_updated = 0; baby_timer = -1; last_baby = 0; + biosig_timer = -1; + last_biosig = 0; } monster::monster( const mtype_id& id ) : monster() @@ -189,6 +191,7 @@ monster::monster( const mtype_id& id ) : monster() ammo = type->starting_ammo; upgrades = type->upgrades && (type->half_life || type->age_grow); reproduces = type->reproduces && type->baby_timer; + biosignatures = type->biosignatures; } monster::monster( const mtype_id& id, const tripoint &p ) : monster(id) @@ -239,6 +242,7 @@ void monster::poly( const mtype_id& id ) faction = type->default_faction; upgrades = type->upgrades; reproduces = type->reproduces; + biosignatures = type->biosignatures; } bool monster::can_upgrade() { @@ -347,14 +351,38 @@ void monster::try_reproduce() { baby_timer += current_day; } + bool season_spawn = false; + bool season_match = true; + for( auto &elem : type->baby_flags ) { + if( ( elem ) == "SUMMER" || ( elem ) == "WINTER" || ( elem ) == "SPRING" || + ( elem ) == "AUTUMN" ) { + season_spawn = true; + } + } + while (true) { if (baby_timer > current_day) { return; } - if( type->baby_monster ) { - g->m.add_spawn(type->baby_monster, type->baby_count, pos().x, pos().y); - } else { - g->m.add_item_or_charges(pos(), item( type->baby_egg, DAYS(baby_timer), type->baby_count), true); + + if (season_spawn){ + season_match = false; + for( auto &elem : type->baby_flags ) { + if( ( season_of_year( DAYS(baby_timer) ) == SUMMER && ( elem ) == "SUMMER" ) || + ( season_of_year( DAYS(baby_timer) ) == WINTER && ( elem ) == "WINTER" ) || + ( season_of_year( DAYS(baby_timer) ) == SPRING && ( elem ) == "SPRING" ) || + ( season_of_year( DAYS(baby_timer) ) == AUTUMN && ( elem ) == "AUTUMN" ) ) { + season_match = true; + } + } + } + + if (season_match){ + if( type->baby_monster ) { + g->m.add_spawn(type->baby_monster, type->baby_count, pos().x, pos().y); + } else { + g->m.add_item_or_charges(pos(), item( type->baby_egg, DAYS(baby_timer), type->baby_count), true); + } } const int next_baby = type->baby_timer; @@ -365,6 +393,34 @@ void monster::try_reproduce() { } } +void monster::try_biosignature() { + if( !biosignatures ) { + return; + } + + const int current_day = to_days( calendar::turn - calendar::time_of_cataclysm ); + if (biosig_timer < 0) { + biosig_timer = type->biosig_timer; + if (biosig_timer < 0) { + return; + } + biosig_timer += current_day; + } + + while (true) { + if (biosig_timer > current_day) { + return; + } + + g->m.add_item_or_charges(pos(), item( type->biosig_item, DAYS(biosig_timer), 1), true); + const int next_biosig = type->biosig_timer; + if (next_biosig < 0) { + return; + } + biosig_timer += next_biosig; + } +} + void monster::spawn(const tripoint &p) { position = p; From 42dc3bf3c1eeca609e675f4bf5126b434864d593 Mon Sep 17 00:00:00 2001 From: acidia Date: Sat, 2 Jun 2018 20:59:05 -0400 Subject: [PATCH 23/56] Revert additions, moved to new PR --- data/json/monstergroups.json | 64 ------------------------------------ 1 file changed, 64 deletions(-) diff --git a/data/json/monstergroups.json b/data/json/monstergroups.json index 791738297f1d5..148ffc67e04c6 100644 --- a/data/json/monstergroups.json +++ b/data/json/monstergroups.json @@ -1562,69 +1562,5 @@ { "monster" : "mon_zombie_brute_shocker", "freq" : 5, "cost_multiplier" : 40 }, { "monster" : "mon_zombie_runner", "freq" : 20, "cost_multiplier" : 5, "pack_size": [1,4] } ] - }, - { - "name": "GROUP_CARRION_INFECTED", - "type": "monstergroup", - "default": "mon_plague_nymph", - "monsters": [ - { "monster": "mon_plague_nymph", "freq": 100, "cost_multiplier": 1 }, - { "monster": "mon_skittering_plague", "freq": 20, "cost_multiplier": 1 }, - { "monster": "mon_plague_vector", "freq": 5, "cost_multiplier": 1 }, - { "monster": "mon_biollante", "freq": 5, "cost_multiplier": 1 }, - { "monster": "mon_triffid_sprig", "freq": 5, "cost_multiplier": 1 } - ] - }, - { - "name": "GROUP_CARRION", - "type": "monstergroup", - "default": "mon_giant_cockroach_nymph", - "monsters": [ - { "monster": "mon_giant_cockroach", "freq": 100, "cost_multiplier": 1 }, - { "monster": "mon_biollante", "freq": 5, "cost_multiplier": 1 }, - { "monster": "mon_triffid_sprig", "freq": 30, "cost_multiplier": 1 } - ] - }, - { - "name": "GROUP_ROTTING_PLANT", - "type": "monstergroup", - "default": "mon_giant_cockroach_nymph", - "monsters": [ - { "monster": "mon_giant_cockroach", "freq": 30, "cost_multiplier": 1 }, - { "monster": "mon_crow", "freq": 30, "cost_multiplier": 1 } - ] - }, - { - "name": "GROUP_EGG_BIRD_WILD", - "type": "monstergroup", - "default": "mon_grouse_chick", - "monsters": [ - { "monster": "mon_grouse_chick", "freq": 50, "cost_multiplier": 1 }, - { "monster": "mon_chicken_chick", "freq": 100, "cost_multiplier": 1 }, - { "monster": "mon_turkey_chick", "freq": 250, "cost_multiplier": 1 }, - { "monster": "mon_pheasant_chick", "freq": 250, "cost_multiplier": 1 }, - { "monster": "mon_duck_chick", "freq": 150, "cost_multiplier": 1 }, - { "monster": "mon_goose_canadian_chick", "freq": 100, "cost_multiplier": 1 }, - { "monster": "mon_rattlesnake", "freq": 75, "cost_multiplier": 1 } - ] - }, - { - "name": "GROUP_EGG_SNAKE", - "type": "monstergroup", - "default": "mon_rattlesnake", - "monsters": [ - { "monster": "mon_grouse_chick", "freq": 30, "cost_multiplier": 1 }, - { "monster": "mon_rattlesnake", "freq": 100, "cost_multiplier": 1 } - ] - }, - { - "name": "GROUP_ROTTING_TRIFFID_FAVOR", - "type": "monstergroup", - "default": "mon_triffid_sprig", - "monsters": [ - { "monster": "mon_triffid_sprig", "freq": 100, "cost_multiplier": 1 }, - { "monster": "mon_biollante", "freq": 30, "cost_multiplier": 1 }, - { "monster": "mon_giant_cockroach", "freq": 30, "cost_multiplier": 1 } - ] } ] From 7a47991234fe3f03d01093abd09db55e2fe502f7 Mon Sep 17 00:00:00 2001 From: acidia Date: Sat, 2 Jun 2018 21:00:37 -0400 Subject: [PATCH 24/56] Revert changes, moved to new PR --- data/json/monsters.json | 424 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 422 insertions(+), 2 deletions(-) diff --git a/data/json/monsters.json b/data/json/monsters.json index b65c17c2f1eb5..2ce9da018cbc8 100644 --- a/data/json/monsters.json +++ b/data/json/monsters.json @@ -567,6 +567,32 @@ "burn_into": "mon_zombie_scorched", "flags": [ "HEARS", "SMELLS", "STUMBLES", "WARM", "BASHES", "GROUP_BASH", "POISON", "NO_BREATHE", "REVIVES", "BONES", "PUSH_MON" ] }, + { + "id": "mon_biollante", + "type": "MONSTER", + "name": "biollante", + "description": "A drooped, quivering plant with a thick stalk adorned by a purple flower. Its petals are closed, and pulsate ominously.", + "default_faction": "triffid", + "species": [ "PLANT" ], + "diff": 20, + "size": "LARGE", + "hp": 120, + "speed": 100, + "material": [ "veggy" ], + "symbol": "F", + "color": "magenta", + "aggression": 100, + "morale": 100, + "melee_cut": 0, + "special_attacks": [ [ "SPIT_SAP", 2 ] ], + "death_drops": { + "subtype": "collection", + "groups": [ [ "biollante", 8 ] ], + "//": "80% chance of an item from group biollante" + }, + "death_function": [ "NORMAL" ], + "flags": [ "NOHEAD", "IMMOBILE" ] + }, { "id": "mon_black_rat", "type": "MONSTER", @@ -972,7 +998,7 @@ "fear_triggers": [ "SOUND", "PLAYER_CLOSE", "FRIEND_ATTACKED" ], "placate_triggers": [ "MEAT" ], "death_function": [ "NORMAL" ], - "flags": [ "SEES", "HEARS", "GOODHEARING", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "FUR", "HIT_AND_RUN", "BONES", "FAT" ] + "flags": [ "SEES", "HEARS", "GOODHEARING", "SMELLS", "ANIMAL", "CATFOOD", "PATH_AVOID_DANGER_1", "WARM", "FUR", "HIT_AND_RUN", "BONES", "FAT" ] }, { "id": "mon_centipede_giant", @@ -1043,6 +1069,31 @@ "death_function": [ "MELT" ], "flags": [ "SEES", "HEARS", "SMELLS", "STUMBLES", "WARM", "BASHES", "GROUP_BASH", "NOGIB", "BONES", "POISON" ] }, + { + "id": "mon_chicken", + "type": "MONSTER", + "name": "chicken", + "description": "A domesticated descendant of junglefowl, it may still be the most numerous bird in the world. Before the Cataclysm, it was raised by humans as a source of meat, eggs, and early morning wakeup calls.", + "default_faction": "small_animal", + "categories": [ "WILDLIFE" ], + "species": [ "BIRD" ], + "diff": 10, + "size": "TINY", + "hp": 8, + "speed": 80, + "material": [ "flesh" ], + "symbol": "v", + "color": "white", + "aggression": -99, + "morale": -8, + "melee_skill": 1, + "melee_dice": 1, + "melee_dice_sides": 1, + "melee_cut": 1, + "dodge": 4, + "death_function": [ "NORMAL" ], + "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "FLIES", "BONES", "FEATHER", "FAT" ] + }, { "id": "mon_chickenbot", "type": "MONSTER", @@ -1336,6 +1387,75 @@ "death_function": [ "NORMAL" ], "flags": [ "SEES", "HEARS", "SMELLS", "WARM", "BASHES", "GROUP_BASH", "POISON", "HUMAN", "LEATHER", "BONES" ] }, + { + "id": "mon_creeper_hub", + "type": "MONSTER", + "name": "creeper hub", + "description": "A thick stalk, rooted to the ground. It rapidly sprouts thorny vines in all directions.", + "default_faction": "triffid", + "species": [ "PLANT" ], + "diff": 16, + "size": "MEDIUM", + "hp": 100, + "speed": 100, + "material": [ "veggy" ], + "symbol": "V", + "color": "green", + "aggression": 100, + "morale": 100, + "melee_cut": 0, + "armor_bash": 8, + "special_attacks": [ [ "GROW_VINE", 2 ] ], + "death_function": [ "KILL_VINES" ], + "flags": [ "NOHEAD", "IMMOBILE" ] + }, + { + "id": "mon_creeper_vine", + "type": "MONSTER", + "name": "creeper vine", + "description": "A thorny vine, twisting wildly as it grows with incredible speed.", + "default_faction": "triffid", + "species": [ "PLANT" ], + "diff": 4, + "size": "TINY", + "hp": 2, + "speed": 75, + "material": [ "veggy" ], + "symbol": "v", + "color": "green", + "aggression": 100, + "morale": 100, + "melee_cut": 0, + "armor_bash": 2, + "special_attacks": [ [ "VINE", 5 ] ], + "death_function": [ "VINE_CUT" ], + "flags": [ "NOHEAD", "HARDTOSHOOT", "PLASTIC", "IMMOBILE" ] + }, + { + "id": "mon_crow", + "type": "MONSTER", + "name": "crow", + "description": "A small, elegant black bird, famous for its distinctive call. An intelligent bird, there is a glitter of mischief behind its eyes.", + "default_faction": "small_animal", + "categories": [ "WILDLIFE" ], + "species": [ "BIRD" ], + "diff": 1, + "size": "TINY", + "hp": 4, + "speed": 140, + "material": [ "flesh" ], + "symbol": "v", + "color": "dark_gray", + "aggression": -99, + "morale": -8, + "melee_dice": 1, + "melee_dice_sides": 1, + "melee_cut": 0, + "dodge": 4, + "fear_triggers": [ "PLAYER_CLOSE" ], + "death_function": [ "NORMAL" ], + "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "FLIES", "BONES", "FEATHER" ] + }, { "id": "mon_dark_wyrm", "type": "MONSTER", @@ -1525,7 +1645,7 @@ "anger_triggers": [ "HURT", "FRIEND_ATTACKED", "FRIEND_DIED" ], "placate_triggers": [ "MEAT" ], "death_function": [ "NORMAL" ], - "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "FUR", "HIT_AND_RUN", "KEENNOSE", "BLEED", "BONES", "FAT" ] + "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "DOGFOOD", "PATH_AVOID_DANGER_1", "WARM", "FUR", "HIT_AND_RUN", "KEENNOSE", "BLEED", "BONES", "FAT" ] }, { "id": "mon_dog_skeleton", @@ -1690,6 +1810,31 @@ "death_function": [ "NORMAL" ], "flags": [ "SEES", "SMELLS", "FLIES", "HIT_AND_RUN", "CHITIN" ] }, + { + "id": "mon_duck", + "type": "MONSTER", + "name": "duck", + "description": "A mallard duck, often seen around rivers and other bodies of water. It feeds primarily on insects, seeds, roots, and, pre-cataclysm, bread scraps.", + "default_faction": "small_animal", + "categories": [ "WILDLIFE" ], + "species": [ "BIRD" ], + "diff": 1, + "size": "TINY", + "hp": 4, + "speed": 140, + "material": [ "flesh" ], + "symbol": "v", + "color": "brown", + "aggression": -99, + "morale": -8, + "melee_dice": 1, + "melee_dice_sides": 1, + "melee_cut": 0, + "dodge": 4, + "fear_triggers": [ "SOUND", "PLAYER_CLOSE" ], + "death_function": [ "NORMAL" ], + "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "FLIES", "BONES", "FEATHER", "FAT" ] + }, { "id": "mon_eyebot", "type": "MONSTER", @@ -1949,6 +2094,52 @@ "death_function": [ "FUNGUS" ], "flags": [ "HEARS", "GOODHEARING", "NOHEAD", "POISON", "IMMOBILE", "NO_BREATHE" ] }, + { + "id": "mon_fungal_fighter", + "type": "MONSTER", + "name": "fungal fighter", + "description": "A stout woody plant that can dig through the ground and flick spines from its branches. The thorns carry a fungicidal compound with paralytic effects.", + "default_faction": "triffid", + "species": [ "PLANT" ], + "diff": 8, + "size": "SMALL", + "hp": 60, + "speed": 50, + "material": [ "veggy" ], + "symbol": "F", + "color": "green", + "aggression": 10, + "morale": 10, + "melee_skill": 6, + "melee_dice": 1, + "melee_dice_sides": 6, + "melee_cut": 4, + "armor_bash": 4, + "armor_cut": 6, + "attack_effs": [ + { + "id": "paralyzepoison", + "//": "applying this multiple times makes intensity go up by 3 instead of 1", + "duration": 33 + }, + { + "id": "paralyzepoison", + "duration": 33 + }, + { + "id": "paralyzepoison", + "duration": 33 + } + ], + "special_attacks": [ [ "PARA_STING", 10 ] ], + "death_drops": { + "subtype": "collection", + "groups": [ [ "fungal_sting", 80 ] ], + "//": "80% chance of an item from group fungal_sting" + }, + "death_function": [ "NORMAL" ], + "flags": [ "HEARS", "SMELLS", "NOHEAD", "CAN_DIG" ] + }, { "id": "mon_fungal_hedgerow", "type": "MONSTER", @@ -2251,6 +2442,59 @@ "death_function": [ "GAMEOVER" ], "flags": [ "NOHEAD", "ACIDPROOF", "IMMOBILE" ] }, + { + "id": "mon_giant_cockroach", + "type": "MONSTER", + "name": "giant cockroach", + "description": "A mutant cockroach the size of a small dog.", + "default_faction": "roach", + "species": [ "INSECT" ], + "diff": 7, + "size": "SMALL", + "hp": 40, + "speed": 100, + "material": [ "iflesh" ], + "symbol": "a", + "color": "brown", + "aggression": 30, + "morale": 60, + "melee_skill": 5, + "melee_dice": 1, + "melee_dice_sides": 6, + "melee_cut": 3, + "dodge": 1, + "armor_bash": 5, + "armor_cut": 10, + "vision_day": 5, + "vision_night": 5, + "death_function": [ "NORMAL" ], + "flags": [ "SEES", "HEARS", "SMELLS", "CHITIN", "CLIMBS" ] + }, + { + "id": "mon_giant_cockroach_nymph", + "type": "MONSTER", + "name": "giant cockroach nymph", + "description": "A baby mutant cockroach about the size of a rat.", + "default_faction": "roach", + "species": [ "INSECT" ], + "diff": 3, + "size": "TINY", + "hp": 10, + "speed": 50, + "material": [ "iflesh" ], + "symbol": "a", + "color": "brown", + "aggression": 100, + "morale": 100, + "melee_skill": 3, + "melee_dice": 2, + "melee_dice_sides": 3, + "melee_cut": 0, + "vision_day": 10, + "vision_night": 3, + "death_function": [ "NORMAL" ], + "flags": [ "SEES", "HEARS", "SMELLS", "CHITIN", "CLIMBS" ] + }, { "id": "mon_giant_crayfish", "type": "MONSTER", @@ -3207,6 +3451,34 @@ "death_function": [ "ACID" ], "flags": [ "SEES", "HEARS", "SMELLS", "GOODHEARING", "NOHEAD", "POISON", "VENOM", "WARM", "GUILT" ] }, + { + "id": "mon_pregnant_giant_cockroach", + "type": "MONSTER", + "name": "pregnant giant cockroach", + "description": "A mutant cockroach the size of a small dog. It's abdomen is heavily swollen.", + "default_faction": "roach", + "species": [ "INSECT" ], + "diff": 8, + "size": "SMALL", + "hp": 40, + "speed": 100, + "material": [ "iflesh" ], + "symbol": "a", + "color": "brown", + "aggression": 30, + "morale": 60, + "melee_skill": 5, + "melee_dice": 1, + "melee_dice_sides": 6, + "melee_cut": 3, + "dodge": 1, + "armor_bash": 5, + "armor_cut": 10, + "vision_day": 5, + "vision_night": 5, + "death_function": [ "NORMAL", "PREG_ROACH" ], + "flags": [ "SEES", "HEARS", "SMELLS", "CHITIN", "CLIMBS" ] + }, { "id": "mon_rabbit", "type": "MONSTER", @@ -4172,6 +4444,103 @@ "death_function": [ "MELT" ], "flags": [ "SMELLS", "HEARS", "NOHEAD", "BASHES", "GROUP_BASH", "SWIMS", "ATTACKMON", "PLASTIC", "ACIDPROOF", "NOGIB", "CLIMBS" ] }, + { + "id": "mon_triffid", + "type": "MONSTER", + "name": "triffid", + "description": "A creeping animate plant, growing as tall as a moose. It has a single bark-covered stalk supporting a flowery head with a paralyzing sting concealed within.", + "default_faction": "triffid", + "species": [ "PLANT" ], + "diff": 16, + "size": "MEDIUM", + "hp": 80, + "speed": 50, + "material": [ "veggy" ], + "symbol": "F", + "color": "light_green", + "aggression": 20, + "morale": 100, + "melee_skill": 5, + "melee_dice": 2, + "melee_dice_sides": 4, + "melee_cut": 6, + "armor_bash": 10, + "armor_cut": 4, + "death_function": [ "NORMAL" ], + "flags": [ "SEES", "SMELLS", "BASHES", "GROUP_BASH", "NOHEAD", "PARALYZEVENOM" ] + }, + { + "id": "mon_triffid_heart", + "type": "MONSTER", + "name": "triffid heart", + "description": "A knot of tubular roots, flowing with sap and beating like a heart. Strands of vascular tissue reach out to the surrounding root walls.", + "default_faction": "triffid", + "species": [ "PLANT" ], + "diff": 50, + "size": "HUGE", + "hp": 500, + "speed": 100, + "material": [ "veggy" ], + "symbol": "T", + "color": "red", + "aggression": 100, + "morale": 100, + "melee_cut": 0, + "armor_bash": 12, + "armor_cut": 16, + "special_attacks": [ [ "TRIFFID_HEARTBEAT", 5 ] ], + "death_function": [ "TRIFFID_HEART" ], + "flags": [ "NOHEAD", "IMMOBILE", "QUEEN" ] + }, + { + "id": "mon_triffid_queen", + "type": "MONSTER", + "name": "triffid queen", + "description": "A ponderous and particularly arborescent triffid. It has enormous red petals surrounded by a haze of spores, and two thick barbed vines stick out from the stems like wary harpoons.", + "default_faction": "triffid", + "species": [ "PLANT" ], + "diff": 28, + "size": "LARGE", + "hp": 280, + "speed": 85, + "material": [ "veggy" ], + "symbol": "F", + "color": "red", + "aggression": 100, + "morale": 200, + "melee_skill": 7, + "melee_dice": 2, + "melee_dice_sides": 8, + "melee_cut": 8, + "armor_bash": 12, + "armor_cut": 8, + "special_attacks": [ [ "GROWPLANTS", 2 ] ], + "death_function": [ "NORMAL" ], + "flags": [ "HEARS", "SMELLS", "BASHES", "NOHEAD", "PARALYZEVENOM" ] + }, + { + "id": "mon_triffid_young", + "type": "MONSTER", + "name": "triffid sprout", + "description": "A small triffid, only a few feet tall. It has not yet developed bark, but its sting is still sharp and deadly.", + "default_faction": "triffid", + "species": [ "PLANT" ], + "diff": 8, + "size": "SMALL", + "hp": 40, + "speed": 50, + "material": [ "veggy" ], + "symbol": "1", + "color": "light_green", + "morale": 10, + "melee_skill": 3, + "melee_dice": 1, + "melee_dice_sides": 4, + "melee_cut": 4, + "special_attacks": [ [ "TRIFFID_GROWTH", 28800 ] ], + "death_function": [ "NORMAL" ], + "flags": [ "HEARS", "SMELLS", "NOHEAD", "PARALYZEVENOM" ] + }, { "id": "mon_tripod", "type": "MONSTER", @@ -4205,6 +4574,32 @@ "death_function": [ "BROKEN" ], "flags": [ "SEES", "HEARS", "GOODHEARING", "BASHES", "NO_BREATHE", "ELECTRONIC", "CLIMBS", "PRIORITIZE_TARGETS" ] }, + { + "id": "mon_turkey", + "type": "MONSTER", + "name": "turkey", + "description": "A large and colorful game bird native to the forests of North America. Its head and beak are covered in fleshy protuberances.", + "default_faction": "small_animal", + "categories": [ "WILDLIFE" ], + "species": [ "BIRD" ], + "diff": 10, + "size": "SMALL", + "hp": 15, + "speed": 140, + "material": [ "flesh" ], + "symbol": "v", + "color": "brown", + "aggression": -80, + "morale": -8, + "melee_dice": 1, + "melee_dice_sides": 1, + "melee_cut": 0, + "dodge": 3, + "vision_day": 50, + "fear_triggers": [ "PLAYER_CLOSE", "FRIEND_DIED" ], + "death_function": [ "NORMAL" ], + "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "FLIES", "BONES", "FEATHER", "FAT" ] + }, { "id": "mon_turret_searchlight", "type": "MONSTER", @@ -4260,6 +4655,31 @@ "death_function": [ "NORMAL" ], "flags": [ "SEES", "HEARS", "GOODHEARING", "POISON", "HUMAN", "LEATHER", "CLIMBS" ] }, + { + "id": "mon_vinebeast", + "type": "MONSTER", + "name": "vine beast", + "description": "An animated mass of roots and vines, creeping along the ground with alarming speed. The tangle is thick enough that the center from which they grow is concealed.", + "default_faction": "triffid", + "species": [ "PLANT" ], + "diff": 14, + "size": "LARGE", + "hp": 100, + "speed": 100, + "material": [ "veggy" ], + "symbol": "V", + "color": "light_green", + "aggression": 60, + "morale": 40, + "melee_skill": 8, + "melee_dice": 2, + "melee_dice_sides": 10, + "melee_cut": 0, + "dodge": 4, + "armor_bash": 18, + "death_function": [ "NORMAL" ], + "flags": [ "HEARS", "GOODHEARING", "NOHEAD", "HARDTOSHOOT", "GRABS", "SWIMS", "PLASTIC" ] + }, { "id": "mon_vortex", "type": "MONSTER", From 54801eefe83b8fa245a47acb9929d4982ee6b81e Mon Sep 17 00:00:00 2001 From: acidia Date: Sat, 2 Jun 2018 21:01:35 -0400 Subject: [PATCH 25/56] Moved to new PR --- data/json/monsters/bird.json | 205 ----------------------------------- 1 file changed, 205 deletions(-) delete mode 100644 data/json/monsters/bird.json diff --git a/data/json/monsters/bird.json b/data/json/monsters/bird.json deleted file mode 100644 index 81a5279df1e52..0000000000000 --- a/data/json/monsters/bird.json +++ /dev/null @@ -1,205 +0,0 @@ -[ - { - "id": "mon_chicken", - "type": "MONSTER", - "name": "chicken", - "description": "A domesticated descendant of junglefowl, it may still be the most numerous bird in the world. Before the Cataclysm, it was raised by humans as a source of meat, eggs, and early morning wakeup calls.", - "default_faction": "small_animal", - "categories": [ "WILDLIFE" ], - "species": [ "BIRD" ], - "diff": 10, - "size": "TINY", - "hp": 8, - "speed": 80, - "material": [ "flesh" ], - "symbol": "v", - "color": "white", - "aggression": -99, - "morale": -8, - "melee_skill": 1, - "melee_dice": 1, - "melee_dice_sides": 1, - "melee_cut": 1, - "dodge": 4, - "reproduction": { - "baby_egg": "egg_bird", - "baby_count": 1, - "baby_timer": 7 - }, - "death_function": [ "NORMAL" ], - "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "FLIES", "BONES", "FEATHER", "FAT" ] - }, - { - "id": "mon_grouse", - "type": "MONSTER", - "copy-from": "mon_chicken", - "name": "grouse", - "description": "A very common game bird, these creatures remind you of what a wild chicken must have been like.", - "hp": 5, - "speed": 110, - "color": "brown", - "reproduction": { - "baby_egg": "null", - "baby_monster": "mon_grouse_chick", - "baby_count": 2, - "baby_timer": 14 - } - }, - { - "id": "mon_crow", - "type": "MONSTER", - "name": "crow", - "description": "A small, elegant black bird, famous for its distinctive call. An intelligent bird, there is a glitter of mischief behind its eyes.", - "default_faction": "small_animal", - "categories": [ "WILDLIFE" ], - "species": [ "BIRD" ], - "diff": 1, - "size": "TINY", - "hp": 4, - "speed": 140, - "material": [ "flesh" ], - "symbol": "v", - "color": "dark_gray", - "aggression": -99, - "morale": -8, - "melee_dice": 1, - "melee_dice_sides": 1, - "melee_cut": 0, - "dodge": 4, - "fear_triggers": [ "PLAYER_CLOSE" ], - "death_function": [ "NORMAL" ], - "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "FLIES", "BONES", "FEATHER" ] - }, - { - "id": "mon_duck", - "type": "MONSTER", - "name": "duck", - "description": "A mallard duck, often seen around rivers and other bodies of water. It feeds primarily on insects, seeds, roots, and, pre-cataclysm, bread scraps.", - "default_faction": "small_animal", - "categories": [ "WILDLIFE" ], - "species": [ "BIRD" ], - "diff": 1, - "size": "TINY", - "hp": 4, - "speed": 140, - "material": [ "flesh" ], - "symbol": "v", - "color": "brown", - "aggression": -99, - "morale": -8, - "melee_dice": 1, - "melee_dice_sides": 1, - "melee_cut": 0, - "dodge": 4, - "fear_triggers": [ "SOUND", "PLAYER_CLOSE" ], - "death_function": [ "NORMAL" ], - "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "FLIES", "BONES", "FEATHER", "FAT" ] - }, - { - "id": "mon_goose_canadian", - "type": "MONSTER", - "copy-from": "mon_duck", - "name": "goose", - "description": "A canadian goose, a common waterfowl that regrets leaving Canada.", - "hp": 8, - "dodge": 3 - }, - { - "id": "mon_turkey", - "type": "MONSTER", - "name": "turkey", - "description": "A large and colorful game bird native to the forests of North America. Its head and beak are covered in fleshy protuberances.", - "default_faction": "small_animal", - "categories": [ "WILDLIFE" ], - "species": [ "BIRD" ], - "diff": 10, - "size": "SMALL", - "hp": 15, - "speed": 140, - "material": [ "flesh" ], - "symbol": "v", - "color": "brown", - "aggression": -80, - "morale": -8, - "melee_dice": 1, - "melee_dice_sides": 1, - "melee_cut": 0, - "dodge": 3, - "vision_day": 50, - "fear_triggers": [ "PLAYER_CLOSE", "FRIEND_DIED" ], - "death_function": [ "NORMAL" ], - "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "FLIES", "BONES", "FEATHER", "FAT" ] - }, - { - "id": "mon_pheasant", - "type": "MONSTER", - "copy-from": "mon_turkey", - "name": "pheasant", - "description": "A medium sized game bird that can have bright feathers depending on the sex and species.", - "size": "TINY", - "hp": 6, - "speed": 130, - "dodge": 4 - }, - { - "id": "mon_chicken_chick", - "type": "MONSTER", - "name": "yellow chick", - "description": "A tiny yellow and brown chick, it could be from a number of different species.", - "default_faction": "small_animal", - "categories": [ "WILDLIFE" ], - "species": [ "BIRD" ], - "diff": 10, - "size": "TINY", - "hp": 1, - "speed": 40, - "material": [ "flesh" ], - "symbol": "v", - "color": "yellow", - "aggression": -99, - "morale": -8, - "melee_skill": 1, - "melee_dice": 1, - "melee_dice_sides": 1, - "melee_cut": 1, - "dodge": 1, - "death_function": [ "NORMAL" ], - "upgrades": { "age_grow": 14, "into": "mon_chicken" }, - "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM" ] - }, - { - "id": "mon_grouse_chick", - "type": "MONSTER", - "copy-from": "mon_chicken_chick", - "name": "brown chick", - "upgrades": { "age_grow": 10, "into": "mon_grouse" } - }, - { - "id": "mon_turkey_chick", - "type": "MONSTER", - "copy-from": "mon_chicken_chick", - "name": "brown chick", - "upgrades": { "age_grow": 18, "into": "mon_turkey" } - }, - { - "id": "mon_pheasant_chick", - "type": "MONSTER", - "copy-from": "mon_chicken_chick", - "name": "brown chick", - "upgrades": { "age_grow": 14, "into": "mon_pheasant" } - }, - { - "id": "mon_duck_chick", - "type": "MONSTER", - "copy-from": "mon_chicken_chick", - "name": "waterfowl chick", - "description": "A tiny yellow and brown waterfowl chick, it could be from a number of different species.", - "upgrades": { "age_grow": 12, "into": "mon_duck" } - }, - { - "id": "mon_goose_canadian_chick", - "type": "MONSTER", - "copy-from": "mon_duck_chick", - "upgrades": { "age_grow": 16, "into": "mon_goose_canadian" } - } -] From 04efdb164cbd95bf64bffe2844f76be4b48c8c26 Mon Sep 17 00:00:00 2001 From: acidia Date: Sat, 2 Jun 2018 21:01:51 -0400 Subject: [PATCH 26/56] Moved to new PR --- data/json/monsters/insect.json | 172 --------------------------------- 1 file changed, 172 deletions(-) delete mode 100644 data/json/monsters/insect.json diff --git a/data/json/monsters/insect.json b/data/json/monsters/insect.json deleted file mode 100644 index 2b4ea843944ff..0000000000000 --- a/data/json/monsters/insect.json +++ /dev/null @@ -1,172 +0,0 @@ -[ - { - "id": "mon_skittering_plague", - "type": "MONSTER", - "name": "skittering plague", - "description": "A giant infected roach, it has been feeding on the undead.", - "default_faction": "roach", - "species": [ "INSECT" ], - "diff": 7, - "size": "SMALL", - "hp": 30, - "speed": 120, - "material": [ "iflesh" ], - "symbol": "a", - "color": "brown", - "aggression": -99, - "morale": -8, - "melee_skill": 4, - "melee_dice": 1, - "melee_dice_sides": 6, - "melee_cut": 3, - "dodge": 1, - "armor_bash": 5, - "armor_cut": 7, - "vision_day": 5, - "vision_night": 5, - "upgrades": { "age_grow": 7, "into": "mon_plague_vector" }, - "anger_triggers": [ "FRIEND_ATTACKED", "PLAYER_WEAK" ], - "death_function": [ "NORMAL" ], - "flags": [ "SEES", "HEARS", "SMELLS", "CHITIN", "CLIMBS", "POISON", "STUMBLES" ] - }, - { - "id": "mon_plague_nymph", - "type": "MONSTER", - "name": "plague nymph", - "description": "An infected mutant cockroach about the size of a rat.", - "default_faction": "roach", - "species": [ "INSECT", "ZOMBIE" ], - "diff": 3, - "size": "TINY", - "hp": 3, - "speed": 100, - "material": [ "iflesh" ], - "symbol": "a", - "color": "brown", - "aggression": -99, - "morale": -8, - "melee_skill": 1, - "melee_dice": 1, - "melee_dice_sides": 3, - "dodge": 3, - "melee_cut": 0, - "vision_day": 10, - "vision_night": 3, - "upgrades": { "age_grow": 7, "into": "mon_skittering_plague" }, - "death_function": [ "NORMAL" ], - "special_attacks": [ [ "DERMATIK_GROWTH", 1000 ] ], - "flags": [ "SEES", "HEARS", "SMELLS", "CHITIN", "CLIMBS", "POISON", "LARVA", "STUMBLES" ] - }, - { - "id": "mon_plague_vector", - "type": "MONSTER", - "name": "plague vector", - "description": "This infected roach has been feeding on the undead and started to mutate chaotically. Extra limbs and growths sprout from its thorax.", - "default_faction": "roach", - "species": [ "INSECT" ], - "diff": 712, - "size": "SMALL", - "hp": 70, - "speed": 100, - "material": [ "iflesh" ], - "symbol": "a", - "color": "brown", - "aggression": 50, - "morale": 60, - "melee_skill": 5, - "melee_dice": 2, - "melee_dice_sides": 6, - "melee_cut": 7, - "dodge": 1, - "armor_bash": 5, - "armor_cut": 10, - "vision_day": 5, - "vision_night": 5, - "anger_triggers": [ "FRIEND_ATTACKED", "PLAYER_WEAK" ], - "death_function": [ "NORMAL" ], - "flags": [ "SEES", "HEARS", "SMELLS", "CHITIN", "CLIMBS", "POISON", "STUMBLES" ] - }, - { - "id": "mon_giant_cockroach", - "type": "MONSTER", - "name": "giant cockroach", - "description": "A mutant cockroach the size of a small dog.", - "default_faction": "roach", - "species": [ "INSECT" ], - "diff": 7, - "size": "SMALL", - "hp": 40, - "speed": 100, - "material": [ "iflesh" ], - "symbol": "a", - "color": "brown", - "aggression": 30, - "morale": 60, - "melee_skill": 5, - "melee_dice": 1, - "melee_dice_sides": 6, - "melee_cut": 3, - "dodge": 1, - "armor_bash": 5, - "armor_cut": 10, - "vision_day": 5, - "vision_night": 5, - "upgrades": { "age_grow": 7, "into": "mon_pregnant_giant_cockroach" }, - "death_function": [ "NORMAL" ], - "flags": [ "SEES", "HEARS", "SMELLS", "CHITIN", "CLIMBS" ] - }, - { - "id": "mon_giant_cockroach_nymph", - "type": "MONSTER", - "name": "giant cockroach nymph", - "description": "A baby mutant cockroach about the size of a rat.", - "default_faction": "roach", - "species": [ "INSECT" ], - "diff": 3, - "size": "TINY", - "hp": 10, - "speed": 50, - "material": [ "iflesh" ], - "symbol": "a", - "color": "brown", - "aggression": 100, - "morale": 100, - "melee_skill": 3, - "melee_dice": 2, - "melee_dice_sides": 3, - "melee_cut": 0, - "vision_day": 10, - "vision_night": 3, - "upgrades": { "age_grow": 7, "into": "mon_giant_cockroach" }, - "death_function": [ "NORMAL" ], - "flags": [ "SEES", "HEARS", "SMELLS", "CHITIN", "CLIMBS" ] - }, - { - "id": "mon_pregnant_giant_cockroach", - "type": "MONSTER", - "name": "pregnant giant cockroach", - "description": "A mutant cockroach the size of a small dog. It's abdomen is heavily swollen.", - "default_faction": "roach", - "species": [ "INSECT" ], - "diff": 8, - "size": "SMALL", - "hp": 40, - "speed": 100, - "material": [ "iflesh" ], - "symbol": "a", - "color": "brown", - "aggression": 30, - "morale": 60, - "melee_skill": 5, - "melee_dice": 1, - "melee_dice_sides": 6, - "melee_cut": 3, - "dodge": 1, - "armor_bash": 5, - "armor_cut": 10, - "vision_day": 5, - "vision_night": 5, - "death_function": [ "NORMAL", "PREG_ROACH" ], - "flags": [ "SEES", "HEARS", "SMELLS", "CHITIN", "CLIMBS" ] - } -] From c20196f9b4431f0dd5bded94a1ced86b1ba0335b Mon Sep 17 00:00:00 2001 From: acidia Date: Sat, 2 Jun 2018 21:02:16 -0400 Subject: [PATCH 27/56] Moved to new PR --- data/json/monsters/triffid.json | 248 -------------------------------- 1 file changed, 248 deletions(-) delete mode 100644 data/json/monsters/triffid.json diff --git a/data/json/monsters/triffid.json b/data/json/monsters/triffid.json deleted file mode 100644 index f9ddc14196e01..0000000000000 --- a/data/json/monsters/triffid.json +++ /dev/null @@ -1,248 +0,0 @@ -[ - { - "id": "mon_biollante", - "type": "MONSTER", - "name": "biollante", - "description": "A drooped, quivering plant with a thick stalk adorned by a purple flower. Its petals are closed, and pulsate ominously.", - "default_faction": "triffid", - "species": [ "PLANT" ], - "diff": 20, - "size": "LARGE", - "hp": 120, - "speed": 100, - "material": [ "veggy" ], - "symbol": "F", - "color": "magenta", - "aggression": 100, - "morale": 100, - "melee_cut": 0, - "special_attacks": [ [ "SPIT_SAP", 2 ] ], - "death_drops": { "subtype": "collection", "groups": [ [ "biollante", 8 ] ], "//": "80% chance of an item from group biollante" }, - "death_function": [ "NORMAL" ], - "flags": [ "NOHEAD", "IMMOBILE" ] - }, - { - "id": "mon_creeper_hub", - "type": "MONSTER", - "name": "creeper hub", - "description": "A thick stalk, rooted to the ground. It rapidly sprouts thorny vines in all directions.", - "default_faction": "triffid", - "species": [ "PLANT" ], - "diff": 16, - "size": "MEDIUM", - "hp": 100, - "speed": 100, - "material": [ "veggy" ], - "symbol": "V", - "color": "green", - "aggression": 100, - "morale": 100, - "melee_cut": 0, - "armor_bash": 8, - "special_attacks": [ [ "GROW_VINE", 2 ] ], - "death_function": [ "KILL_VINES" ], - "flags": [ "NOHEAD", "IMMOBILE" ] - }, - { - "id": "mon_creeper_vine", - "type": "MONSTER", - "name": "creeper vine", - "description": "A thorny vine, twisting wildly as it grows with incredible speed.", - "default_faction": "triffid", - "species": [ "PLANT" ], - "diff": 4, - "size": "TINY", - "hp": 2, - "speed": 75, - "material": [ "veggy" ], - "symbol": "v", - "color": "green", - "aggression": 100, - "morale": 100, - "melee_cut": 0, - "armor_bash": 2, - "special_attacks": [ [ "VINE", 5 ] ], - "death_function": [ "VINE_CUT" ], - "flags": [ "NOHEAD", "HARDTOSHOOT", "PLASTIC", "IMMOBILE" ] - }, - { - "id": "mon_triffid_sprig", - "type": "MONSTER", - "name": "triffid sprig", - "description": "A teeny-tiny triffid that has recently germinated. Like a house cat, you know it wants to eat you but it just can't figure out how.", - "default_faction": "triffid", - "species": [ "PLANT" ], - "diff": 2, - "size": "TINY", - "hp": 3, - "speed": 50, - "material": [ "veggy" ], - "symbol": "1", - "color": "light_green", - "aggression": -99, - "morale": -8, - "melee_skill": 1, - "melee_dice": 1, - "melee_dice_sides": 1, - "melee_cut": 1, - "upgrades": { "age_grow": 14, "into": "mon_triffid_young" }, - "death_function": [ "NORMAL" ], - "flags": [ "HEARS", "SMELLS", "NOHEAD", "STUMBLES" ] - }, - { - "id": "mon_triffid_young", - "type": "MONSTER", - "name": "triffid sprout", - "description": "A small triffid, only a few feet tall. It has not yet developed bark, but its sting is still sharp and deadly.", - "default_faction": "triffid", - "species": [ "PLANT" ], - "diff": 8, - "size": "SMALL", - "hp": 40, - "speed": 50, - "material": [ "veggy" ], - "symbol": "1", - "color": "light_green", - "morale": 10, - "melee_skill": 3, - "melee_dice": 1, - "melee_dice_sides": 4, - "melee_cut": 4, - "upgrades": { "age_grow": 14, "into": "mon_triffid" }, - "special_attacks": [ [ "TRIFFID_GROWTH", 28800 ] ], - "death_function": [ "NORMAL" ], - "flags": [ "HEARS", "SMELLS", "NOHEAD", "PARALYZEVENOM" ] - }, - { - "id": "mon_triffid", - "type": "MONSTER", - "name": "triffid", - "description": "A creeping animate plant, growing as tall as a moose. It has a single bark-covered stalk supporting a flowery head with a paralyzing sting concealed within.", - "default_faction": "triffid", - "species": [ "PLANT" ], - "diff": 16, - "size": "MEDIUM", - "hp": 80, - "speed": 50, - "material": [ "veggy" ], - "symbol": "F", - "color": "light_green", - "aggression": 20, - "morale": 100, - "melee_skill": 5, - "melee_dice": 2, - "melee_dice_sides": 4, - "melee_cut": 6, - "armor_bash": 10, - "armor_cut": 4, - "death_function": [ "NORMAL" ], - "flags": [ "SEES", "SMELLS", "BASHES", "GROUP_BASH", "NOHEAD", "PARALYZEVENOM" ] - }, - { - "id": "mon_triffid_queen", - "type": "MONSTER", - "name": "triffid queen", - "description": "A ponderous and particularly arborescent triffid. It has enormous red petals surrounded by a haze of spores, and two thick barbed vines stick out from the stems like wary harpoons.", - "default_faction": "triffid", - "species": [ "PLANT" ], - "diff": 28, - "size": "LARGE", - "hp": 280, - "speed": 85, - "material": [ "veggy" ], - "symbol": "F", - "color": "red", - "aggression": 100, - "morale": 200, - "melee_skill": 7, - "melee_dice": 2, - "melee_dice_sides": 8, - "melee_cut": 8, - "armor_bash": 12, - "armor_cut": 8, - "special_attacks": [ [ "GROWPLANTS", 2 ] ], - "death_function": [ "NORMAL" ], - "flags": [ "HEARS", "SMELLS", "BASHES", "NOHEAD", "PARALYZEVENOM" ] - }, - { - "id": "mon_vinebeast", - "type": "MONSTER", - "name": "vine beast", - "description": "An animated mass of roots and vines, creeping along the ground with alarming speed. The tangle is thick enough that the center from which they grow is concealed.", - "default_faction": "triffid", - "species": [ "PLANT" ], - "diff": 14, - "size": "LARGE", - "hp": 100, - "speed": 100, - "material": [ "veggy" ], - "symbol": "V", - "color": "light_green", - "aggression": 60, - "morale": 40, - "melee_skill": 8, - "melee_dice": 2, - "melee_dice_sides": 10, - "melee_cut": 0, - "dodge": 4, - "armor_bash": 18, - "death_function": [ "NORMAL" ], - "flags": [ "HEARS", "GOODHEARING", "NOHEAD", "HARDTOSHOOT", "GRABS", "SWIMS", "PLASTIC" ] - }, - { - "id": "mon_fungal_fighter", - "type": "MONSTER", - "name": "fungal fighter", - "description": "A stout woody plant that can dig through the ground and flick spines from its branches. The thorns carry a fungicidal compound with paralytic effects.", - "default_faction": "triffid", - "species": [ "PLANT" ], - "diff": 8, - "size": "SMALL", - "hp": 60, - "speed": 50, - "material": [ "veggy" ], - "symbol": "F", - "color": "green", - "aggression": 10, - "morale": 10, - "melee_skill": 6, - "melee_dice": 1, - "melee_dice_sides": 6, - "melee_cut": 4, - "armor_bash": 4, - "armor_cut": 6, - "attack_effs": [ - { "id": "paralyzepoison", "//": "applying this multiple times makes intensity go up by 3 instead of 1", "duration": 33 }, - { "id": "paralyzepoison", "duration": 33 }, - { "id": "paralyzepoison", "duration": 33 } - ], - "special_attacks": [ [ "PARA_STING", 10 ] ], - "death_drops": { "subtype": "collection", "groups": [ [ "fungal_sting", 80 ] ], "//": "80% chance of an item from group fungal_sting" }, - "death_function": [ "NORMAL" ], - "flags": [ "HEARS", "SMELLS", "NOHEAD", "CAN_DIG" ] - }, - { - "id": "mon_triffid_heart", - "type": "MONSTER", - "name": "triffid heart", - "description": "A knot of tubular roots, flowing with sap and beating like a heart. Strands of vascular tissue reach out to the surrounding root walls.", - "default_faction": "triffid", - "species": [ "PLANT" ], - "diff": 50, - "size": "HUGE", - "hp": 500, - "speed": 100, - "material": [ "veggy" ], - "symbol": "T", - "color": "red", - "aggression": 100, - "morale": 100, - "melee_cut": 0, - "armor_bash": 12, - "armor_cut": 16, - "special_attacks": [ [ "TRIFFID_HEARTBEAT", 5 ] ], - "death_function": [ "TRIFFID_HEART" ], - "flags": [ "NOHEAD", "IMMOBILE", "QUEEN" ] - } -] - From 65240b603fc87cb5bff7351cb6c01727d7e34cf6 Mon Sep 17 00:00:00 2001 From: OzoneH3 Date: Mon, 11 Jun 2018 12:51:40 +0200 Subject: [PATCH 28/56] Display intro() after resizing. --- src/game.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/game.cpp b/src/game.cpp index e6bd7d7e351bb..611f82170bb39 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -443,7 +443,6 @@ void game::init_ui() FULL_SCREEN_WIDTH = 80; FULL_SCREEN_HEIGHT = 24; // print an intro screen, making sure the terminal is the correct size - intro(); first_init = false; @@ -454,6 +453,8 @@ void game::init_ui() #endif // TILES } + intro(); + int sidebarWidth = narrow_sidebar ? 45 : 55; // First get TERMX, TERMY From 8967836ce95059e0aa18aad21ebface3266af75b Mon Sep 17 00:00:00 2001 From: OzoneH3 Date: Mon, 11 Jun 2018 12:52:10 +0200 Subject: [PATCH 29/56] Handle main menu resizing. --- src/main_menu.cpp | 98 +++++++++++++++++++++++++++++++---------------- src/main_menu.h | 5 ++- 2 files changed, 70 insertions(+), 33 deletions(-) diff --git a/src/main_menu.cpp b/src/main_menu.cpp index b21ad88f241f4..f75d2edf7b40e 100644 --- a/src/main_menu.cpp +++ b/src/main_menu.cpp @@ -136,6 +136,52 @@ std::vector main_menu::load_file( const std::string &path, return result; } +void main_menu::handle_input_timout( input_context &ctxt, std::string &action ) +{ + inp_mngr.set_timeout( 125 ); + + action = ctxt.handle_input(); + + if( action == "TIMEOUT" ) { + init_windows(); + } + + inp_mngr.reset_timeout(); +} + +void main_menu::init_windows() +{ + if ( LAST_TERMX == TERMX && LAST_TERMY == TERMY ) { + return; + } + + w_background = catacurses::newwin( TERMY, TERMX, 0, 0 ); + werase( w_background ); + wrefresh( w_background ); + + // main window should also expand to use available display space. + // expanding to evenly use up half of extra space, for now. + extra_w = ( ( TERMX - FULL_SCREEN_WIDTH ) / 2 ) - 1; + int extra_h = ( ( TERMY - FULL_SCREEN_HEIGHT ) / 2 ) - 1; + extra_w = ( extra_w > 0 ? extra_w : 0 ); + extra_h = ( extra_h > 0 ? extra_h : 0 ); + const int total_w = FULL_SCREEN_WIDTH + extra_w; + const int total_h = FULL_SCREEN_HEIGHT + extra_h; + + // position of window within main display + const int x0 = ( TERMX - total_w ) / 2; + const int y0 = ( TERMY - total_h ) / 2; + + w_open = catacurses::newwin( total_h, total_w, y0, x0 ); + + iMenuOffsetY = total_h - 3; + // note: if iMenuOffset is changed, + // please update MOTD and credits to indicate how long they can be. + + LAST_TERMX = TERMX; + LAST_TERMY = TERMY; +} + void main_menu::init_strings() { // ASCII Art @@ -261,29 +307,7 @@ bool main_menu::opening_screen() world_generator->set_active_world( NULL ); world_generator->init(); - w_background = catacurses::newwin( TERMY, TERMX, 0, 0 ); - werase( w_background ); - wrefresh( w_background ); - - // main window should also expand to use available display space. - // expanding to evenly use up half of extra space, for now. - extra_w = ( ( TERMX - FULL_SCREEN_WIDTH ) / 2 ) - 1; - int extra_h = ( ( TERMY - FULL_SCREEN_HEIGHT ) / 2 ) - 1; - extra_w = ( extra_w > 0 ? extra_w : 0 ); - extra_h = ( extra_h > 0 ? extra_h : 0 ); - const int total_w = FULL_SCREEN_WIDTH + extra_w; - const int total_h = FULL_SCREEN_HEIGHT + extra_h; - - // position of window within main display - const int x0 = ( TERMX - total_w ) / 2; - const int y0 = ( TERMY - total_h ) / 2; - - w_open = catacurses::newwin( total_h, total_w, y0, x0 ); - - iMenuOffsetY = total_h - 3; - // note: if iMenuOffset is changed, - // please update MOTD and credits to indicate how long they can be. - + init_windows(); init_strings(); print_menu( w_open, 0, iMenuOffsetX, iMenuOffsetY ); @@ -341,7 +365,9 @@ bool main_menu::opening_screen() catacurses::refresh(); } - std::string action = ctxt.handle_input(); + std::string action; + handle_input_timout( ctxt, action ); + std::string sInput = ctxt.get_raw_input().text; // check automatic menu shortcuts for( size_t i = 0; i < vMenuHotkeys.size(); ++i ) { @@ -422,7 +448,8 @@ bool main_menu::opening_screen() wrefresh( w_open ); catacurses::refresh(); - std::string action = ctxt.handle_input(); + std::string action; + handle_input_timout( ctxt, action ); if( action == "LEFT" ) { if( sel2 > 0 ) { sel2--; @@ -482,7 +509,8 @@ bool main_menu::opening_screen() print_menu_items( w_open, settings_subs, sel2, yoffset, xoffset - ( xlen / 4 ) ); wrefresh( w_open ); catacurses::refresh(); - std::string action = ctxt.handle_input(); + std::string action; + handle_input_timout( ctxt, action ); std::string sInput = ctxt.get_raw_input().text; for( int i = 0; i < settings_subs_to_display; ++i ) { for( auto hotkey : vSettingsHotkeys[i] ) { @@ -569,7 +597,8 @@ bool main_menu::new_character_tab() wrefresh( w_open ); catacurses::refresh(); - std::string action = ctxt.handle_input(); + std::string action; + handle_input_timout( ctxt, action ); std::string sInput = ctxt.get_raw_input().text; for( size_t i = 0; i < vNewGameHotkeys.size(); ++i ) { for( auto hotkey : vNewGameHotkeys[i] ) { @@ -664,7 +693,8 @@ bool main_menu::new_character_tab() } wrefresh( w_open ); catacurses::refresh(); - std::string action = ctxt.handle_input(); + std::string action; + handle_input_timout( ctxt, action ); if( action == "DOWN" ) { if( sel3 > 0 ) { sel3--; @@ -767,7 +797,8 @@ bool main_menu::load_character_tab() } wrefresh( w_open ); catacurses::refresh(); - const std::string action = ctxt.handle_input(); + std::string action; + handle_input_timout( ctxt, action ); if( all_worldnames.empty() && ( action == "DOWN" || action == "CONFIRM" ) ) { layer = 1; } else if( action == "DOWN" ) { @@ -824,7 +855,8 @@ bool main_menu::load_character_tab() } wrefresh( w_open ); catacurses::refresh(); - std::string action = ctxt.handle_input(); + std::string action; + handle_input_timout( ctxt, action ); if( savegames.empty() && ( action == "DOWN" || action == "CONFIRM" ) ) { layer = 2; } else if( action == "DOWN" ) { @@ -901,7 +933,8 @@ void main_menu::world_tab() wrefresh( w_open ); catacurses::refresh(); - std::string action = ctxt.handle_input(); + std::string action; + handle_input_timout( ctxt, action ); std::string sInput = ctxt.get_raw_input().text; for( size_t i = 0; i < vWorldSubItems.size(); ++i ) { for( auto hotkey : vWorldHotkeys[i] ) { @@ -994,7 +1027,8 @@ void main_menu::world_tab() wrefresh( w_open ); catacurses::refresh(); - std::string action = ctxt.handle_input(); + std::string action; + handle_input_timout( ctxt, action ); if( action == "DOWN" ) { if( sel2 > 0 ) { diff --git a/src/main_menu.h b/src/main_menu.h index b2c2d6ddc4469..adecd74721afb 100644 --- a/src/main_menu.h +++ b/src/main_menu.h @@ -54,7 +54,7 @@ class main_menu // These variables are shared between @opening_screen and the tab functions. // TODO: But this is an ugly short-term solution. input_context ctxt; - int sel1 = 1, sel2 = 1, sel3 = 1, layer = 1; + int sel1 = 1, sel2 = 1, sel3 = 1, layer = 1, LAST_TERMX = 0, LAST_TERMY = 0; catacurses::window w_open; catacurses::window w_background; int iMenuOffsetX = 0; @@ -90,6 +90,9 @@ class main_menu int iMenuOffsetY, bool bShowDDA = true ); void display_credits(); + + void init_windows(); + void handle_input_timout( input_context &ctxt, std::string &action ); }; #endif From 74253312e481e54f778ed6f6edcd2050247776db Mon Sep 17 00:00:00 2001 From: OzoneH3 Date: Mon, 11 Jun 2018 14:12:23 +0200 Subject: [PATCH 30/56] Save screen dimensions after resizing. --- src/game.cpp | 8 +++++++- src/game.h | 2 +- src/game_ui.cpp | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/game.cpp b/src/game.cpp index 611f82170bb39..d8d32dd401e3d 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -431,7 +431,7 @@ void reinitialize_framebuffer() { } #endif -void game::init_ui() +void game::init_ui( const bool resized ) { // clear the screen static bool first_init = true; @@ -461,6 +461,12 @@ void game::init_ui() #if (defined TILES || defined _WIN32 || defined __WIN32__) TERMX = get_terminal_width(); TERMY = get_terminal_height(); + + if ( resized ) { + get_options().get_option( "TERMINAL_X" ).setValue( TERMX ); + get_options().get_option( "TERMINAL_Y" ).setValue( TERMY ); + get_options().save(); + } #else TERMY = getmaxy( catacurses::stdscr ); TERMX = getmaxx( catacurses::stdscr ); diff --git a/src/game.h b/src/game.h index e58b553377cc1..426cb288f63d6 100644 --- a/src/game.h +++ b/src/game.h @@ -180,7 +180,7 @@ class game public: /** Initializes the UI. */ - void init_ui(); + void init_ui( const bool resized = false ); void setup(); /** True if the game has just started or loaded, else false. */ bool new_game; diff --git a/src/game_ui.cpp b/src/game_ui.cpp index f690d9ed6f894..ae1876d2d6610 100644 --- a/src/game_ui.cpp +++ b/src/game_ui.cpp @@ -4,5 +4,5 @@ void game_ui::init_ui() { - g->init_ui(); + g->init_ui( true ); } From b059319932df639a1227b19bdcde787a75f3f4a3 Mon Sep 17 00:00:00 2001 From: OzoneH3 Date: Mon, 11 Jun 2018 14:23:52 +0200 Subject: [PATCH 31/56] Resize window after changing screen dimensions in the options. --- src/cursesport.h | 1 + src/main_menu.cpp | 2 +- src/options.cpp | 17 +++++++++++++---- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/cursesport.h b/src/cursesport.h index d73b29a2a8928..b1dec9681c1a1 100644 --- a/src/cursesport.h +++ b/src/cursesport.h @@ -96,5 +96,6 @@ extern void handle_additional_window_clear( WINDOW *win ); void clear_window_area( const catacurses::window &win ); int projected_window_width( int column_count ); int projected_window_height( int row_count ); +bool handle_resize( int w, int h ); #endif diff --git a/src/main_menu.cpp b/src/main_menu.cpp index f75d2edf7b40e..63b72212cc7be 100644 --- a/src/main_menu.cpp +++ b/src/main_menu.cpp @@ -151,7 +151,7 @@ void main_menu::handle_input_timout( input_context &ctxt, std::string &action ) void main_menu::init_windows() { - if ( LAST_TERMX == TERMX && LAST_TERMY == TERMY ) { + if( LAST_TERMX == TERMX && LAST_TERMY == TERMY ) { return; } diff --git a/src/options.cpp b/src/options.cpp index 156aaaa5710cf..cab7d9883347a 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -1979,6 +1979,7 @@ std::string options_manager::show(bool ingame, const bool world_options_only) bool used_tiles_changed = false; bool pixel_minimap_changed = false; bool sidebar_style_changed = false; + bool termial_size_changed = true; for (auto &iter : OPTIONS_OLD) { if ( iter.second != OPTIONS[iter.first] ) { @@ -1992,17 +1993,18 @@ std::string options_manager::show(bool ingame, const bool world_options_only) || iter.first == "PIXEL_MINIMAP_RATIO" || iter.first == "PIXEL_MINIMAP_MODE" ) { pixel_minimap_changed = true; - } - if( iter.first == "SIDEBAR_STYLE" ) { + } else if( iter.first == "SIDEBAR_STYLE" ) { sidebar_style_changed = true; - } - if ( iter.first == "TILES" || iter.first == "USE_TILES" ) { + } else if ( iter.first == "TILES" || iter.first == "USE_TILES" ) { used_tiles_changed = true; } else if ( iter.first == "USE_LANG" ) { lang_changed = true; + + } else if ( iter.first == "TERMINAL_X" || iter.first == "TERMINAL_Y" ) { + termial_size_changed = true; } } } @@ -2028,6 +2030,7 @@ std::string options_manager::show(bool ingame, const bool world_options_only) } } } + if( lang_changed ) { set_language(); } @@ -2044,6 +2047,12 @@ std::string options_manager::show(bool ingame, const bool world_options_only) } } +#if (defined TILES || defined _WIN32 || defined WINDOWS) + if ( termial_size_changed ) { + handle_resize( projected_window_width( 0 ), projected_window_height( 0 ) ); + } +#endif + refresh_tiles( used_tiles_changed, pixel_minimap_changed, ingame ); return ""; From cf88aa5a7b73d6eb6bc4de7bd548441914d00d8d Mon Sep 17 00:00:00 2001 From: OzoneH3 Date: Mon, 11 Jun 2018 14:53:23 +0200 Subject: [PATCH 32/56] Fixed minimum size for linux tiles. --- src/game.cpp | 4 ++-- src/sdltiles.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/game.cpp b/src/game.cpp index d8d32dd401e3d..51095e59fb3e9 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -453,8 +453,6 @@ void game::init_ui( const bool resized ) #endif // TILES } - intro(); - int sidebarWidth = narrow_sidebar ? 45 : 55; // First get TERMX, TERMY @@ -468,6 +466,8 @@ void game::init_ui( const bool resized ) get_options().save(); } #else + intro(); + TERMY = getmaxy( catacurses::stdscr ); TERMX = getmaxx( catacurses::stdscr ); diff --git a/src/sdltiles.cpp b/src/sdltiles.cpp index 195c489bc2bb1..823d00fb80e99 100644 --- a/src/sdltiles.cpp +++ b/src/sdltiles.cpp @@ -368,8 +368,6 @@ bool WinCreate() TERMINAL_HEIGHT = WindowHeight / fontheight; } - SDL_SetWindowMinimumSize( ::window.get(), fontwidth * 80, fontheight * 24 ); - // Initialize framebuffer caches terminal_framebuffer.resize(TERMINAL_HEIGHT); for (int i = 0; i < TERMINAL_HEIGHT; i++) { @@ -418,6 +416,8 @@ bool WinCreate() } } + SDL_SetWindowMinimumSize( ::window.get(), fontwidth * 80, fontheight * 24 ); + ClearScreen(); // Errors here are ignored, worst case: the option does not work as expected, From 0a5ac1aabe3ebceb2f3cae223823e02dea12bdec Mon Sep 17 00:00:00 2001 From: OzoneH3 Date: Mon, 11 Jun 2018 15:55:49 +0200 Subject: [PATCH 33/56] Compile fix for unused parameter in curses build. --- src/game.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/game.cpp b/src/game.cpp index 51095e59fb3e9..74235b82b3f7c 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -466,6 +466,7 @@ void game::init_ui( const bool resized ) get_options().save(); } #else + (void) resized; intro(); TERMY = getmaxy( catacurses::stdscr ); From cda64df9233a77caf110f8c3adc99b0098381789 Mon Sep 17 00:00:00 2001 From: OzoneH3 Date: Mon, 11 Jun 2018 19:18:34 +0200 Subject: [PATCH 34/56] Typo and compile fix. --- src/options.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/options.cpp b/src/options.cpp index cab7d9883347a..4951b05ea925f 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -1979,7 +1979,7 @@ std::string options_manager::show(bool ingame, const bool world_options_only) bool used_tiles_changed = false; bool pixel_minimap_changed = false; bool sidebar_style_changed = false; - bool termial_size_changed = true; + bool terminal_size_changed = true; for (auto &iter : OPTIONS_OLD) { if ( iter.second != OPTIONS[iter.first] ) { @@ -2004,7 +2004,7 @@ std::string options_manager::show(bool ingame, const bool world_options_only) lang_changed = true; } else if ( iter.first == "TERMINAL_X" || iter.first == "TERMINAL_Y" ) { - termial_size_changed = true; + terminal_size_changed = true; } } } @@ -2048,9 +2048,11 @@ std::string options_manager::show(bool ingame, const bool world_options_only) } #if (defined TILES || defined _WIN32 || defined WINDOWS) - if ( termial_size_changed ) { + if ( terminal_size_changed ) { handle_resize( projected_window_width( 0 ), projected_window_height( 0 ) ); } +#else + (void) terminal_size_changed; #endif refresh_tiles( used_tiles_changed, pixel_minimap_changed, ingame ); From 8c4825a5392d96818016086cffb0acb3b6ce7905 Mon Sep 17 00:00:00 2001 From: OzoneH3 Date: Tue, 12 Jun 2018 08:33:01 +0200 Subject: [PATCH 35/56] Please the gods. RIP Tim. --- src/main_menu.cpp | 33 +++++++++++++-------------------- src/main_menu.h | 2 +- 2 files changed, 14 insertions(+), 21 deletions(-) diff --git a/src/main_menu.cpp b/src/main_menu.cpp index 63b72212cc7be..23499f0ed3b25 100644 --- a/src/main_menu.cpp +++ b/src/main_menu.cpp @@ -136,17 +136,19 @@ std::vector main_menu::load_file( const std::string &path, return result; } -void main_menu::handle_input_timout( input_context &ctxt, std::string &action ) +std::string main_menu::handle_input_timeout( input_context &ctxt ) { inp_mngr.set_timeout( 125 ); - action = ctxt.handle_input(); + std::string action = ctxt.handle_input(); if( action == "TIMEOUT" ) { init_windows(); } inp_mngr.reset_timeout(); + + return action; } void main_menu::init_windows() @@ -365,8 +367,7 @@ bool main_menu::opening_screen() catacurses::refresh(); } - std::string action; - handle_input_timout( ctxt, action ); + std::string action = handle_input_timeout( ctxt ); std::string sInput = ctxt.get_raw_input().text; // check automatic menu shortcuts @@ -448,8 +449,7 @@ bool main_menu::opening_screen() wrefresh( w_open ); catacurses::refresh(); - std::string action; - handle_input_timout( ctxt, action ); + std::string action = handle_input_timeout( ctxt ); if( action == "LEFT" ) { if( sel2 > 0 ) { sel2--; @@ -509,8 +509,7 @@ bool main_menu::opening_screen() print_menu_items( w_open, settings_subs, sel2, yoffset, xoffset - ( xlen / 4 ) ); wrefresh( w_open ); catacurses::refresh(); - std::string action; - handle_input_timout( ctxt, action ); + std::string action = handle_input_timeout( ctxt ); std::string sInput = ctxt.get_raw_input().text; for( int i = 0; i < settings_subs_to_display; ++i ) { for( auto hotkey : vSettingsHotkeys[i] ) { @@ -597,8 +596,7 @@ bool main_menu::new_character_tab() wrefresh( w_open ); catacurses::refresh(); - std::string action; - handle_input_timout( ctxt, action ); + std::string action = handle_input_timeout( ctxt ); std::string sInput = ctxt.get_raw_input().text; for( size_t i = 0; i < vNewGameHotkeys.size(); ++i ) { for( auto hotkey : vNewGameHotkeys[i] ) { @@ -693,8 +691,7 @@ bool main_menu::new_character_tab() } wrefresh( w_open ); catacurses::refresh(); - std::string action; - handle_input_timout( ctxt, action ); + std::string action = handle_input_timeout( ctxt ); if( action == "DOWN" ) { if( sel3 > 0 ) { sel3--; @@ -797,8 +794,7 @@ bool main_menu::load_character_tab() } wrefresh( w_open ); catacurses::refresh(); - std::string action; - handle_input_timout( ctxt, action ); + std::string action = handle_input_timeout( ctxt ); if( all_worldnames.empty() && ( action == "DOWN" || action == "CONFIRM" ) ) { layer = 1; } else if( action == "DOWN" ) { @@ -855,8 +851,7 @@ bool main_menu::load_character_tab() } wrefresh( w_open ); catacurses::refresh(); - std::string action; - handle_input_timout( ctxt, action ); + std::string action = handle_input_timeout( ctxt ); if( savegames.empty() && ( action == "DOWN" || action == "CONFIRM" ) ) { layer = 2; } else if( action == "DOWN" ) { @@ -933,8 +928,7 @@ void main_menu::world_tab() wrefresh( w_open ); catacurses::refresh(); - std::string action; - handle_input_timout( ctxt, action ); + std::string action = handle_input_timeout( ctxt ); std::string sInput = ctxt.get_raw_input().text; for( size_t i = 0; i < vWorldSubItems.size(); ++i ) { for( auto hotkey : vWorldHotkeys[i] ) { @@ -1027,8 +1021,7 @@ void main_menu::world_tab() wrefresh( w_open ); catacurses::refresh(); - std::string action; - handle_input_timout( ctxt, action ); + std::string action = handle_input_timeout( ctxt ); if( action == "DOWN" ) { if( sel2 > 0 ) { diff --git a/src/main_menu.h b/src/main_menu.h index adecd74721afb..e14a5c07f3719 100644 --- a/src/main_menu.h +++ b/src/main_menu.h @@ -92,7 +92,7 @@ class main_menu void display_credits(); void init_windows(); - void handle_input_timout( input_context &ctxt, std::string &action ); + std::string handle_input_timeout( input_context &ctxt ); }; #endif From 9ee4d416fe7c46fa20c093eba93c671aca081c64 Mon Sep 17 00:00:00 2001 From: OzoneH3 Date: Tue, 12 Jun 2018 15:00:33 +0200 Subject: [PATCH 36/56] Compile fix for wincurses build. --- src/cursesport.h | 4 ++-- src/options.cpp | 6 +++--- src/sdltiles.cpp | 8 ++++---- src/wincurse.cpp | 24 +++++++++++++----------- 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/cursesport.h b/src/cursesport.h index b1dec9681c1a1..34a32416e5cbc 100644 --- a/src/cursesport.h +++ b/src/cursesport.h @@ -94,8 +94,8 @@ extern void handle_additional_window_clear( WINDOW *win ); //@todo: move into cata_cursesport //used only in SDL mode for clearing windows using rendering void clear_window_area( const catacurses::window &win ); -int projected_window_width( int column_count ); -int projected_window_height( int row_count ); +int projected_window_width(); +int projected_window_height(); bool handle_resize( int w, int h ); #endif diff --git a/src/options.cpp b/src/options.cpp index 4951b05ea925f..796004d6d5853 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -1839,7 +1839,7 @@ std::string options_manager::show(bool ingame, const bool world_options_only) std::stringstream value_conversion(OPTIONS[mPageItems[iCurrentPage][iCurrentLine]].getValueName()); value_conversion >> new_terminal_x; - new_window_width = projected_window_width(new_terminal_x); + new_window_width = projected_window_width(); fold_and_print(w_options_tooltip, 0, 0, 78, c_white, ngettext("%s #%s -- The window will be %d pixel wide with the selected value.", @@ -1853,7 +1853,7 @@ std::string options_manager::show(bool ingame, const bool world_options_only) std::stringstream value_conversion(OPTIONS[mPageItems[iCurrentPage][iCurrentLine]].getValueName()); value_conversion >> new_terminal_y; - new_window_height = projected_window_height(new_terminal_y); + new_window_height = projected_window_height(); fold_and_print(w_options_tooltip, 0, 0, 78, c_white, ngettext("%s #%s -- The window will be %d pixel tall with the selected value.", @@ -2049,7 +2049,7 @@ std::string options_manager::show(bool ingame, const bool world_options_only) #if (defined TILES || defined _WIN32 || defined WINDOWS) if ( terminal_size_changed ) { - handle_resize( projected_window_width( 0 ), projected_window_height( 0 ) ); + handle_resize( projected_window_width(), projected_window_height() ); } #else (void) terminal_size_changed; diff --git a/src/sdltiles.cpp b/src/sdltiles.cpp index 823d00fb80e99..c0cce24af05b4 100644 --- a/src/sdltiles.cpp +++ b/src/sdltiles.cpp @@ -1606,14 +1606,14 @@ static int test_face_size(std::string f, int size, int faceIndex) return faceIndex; } -// Calculates the new width of the window, given the number of columns. -int projected_window_width(int) +// Calculates the new width of the window +int projected_window_width() { return get_option( "TERMINAL_X" ) * fontwidth; } -// Calculates the new height of the window, given the number of rows. -int projected_window_height(int) +// Calculates the new height of the window +int projected_window_height() { return get_option( "TERMINAL_Y" ) * fontheight; } diff --git a/src/wincurse.cpp b/src/wincurse.cpp index 30b74bce93aa3..d630c932c9aa1 100644 --- a/src/wincurse.cpp +++ b/src/wincurse.cpp @@ -113,7 +113,7 @@ bool WinCreate() 0, 0, WindowINST, NULL); if (WindowHandle == 0) return false; - + return true; }; @@ -157,10 +157,10 @@ void create_backbuffer() DeleteObject(SelectObject( backbuffer, backbit ) );//load the buffer into DC } -void handle_resize() +bool handle_resize(int, int) { if( !initialized ) { - return; + return false; } needs_resize = false; RECT WndRect; @@ -179,6 +179,8 @@ void handle_resize() } catacurses::refresh(); } + + return true; } // Copied from sdlcurses.cpp @@ -306,7 +308,7 @@ LRESULT CALLBACK ProcessMessages(HWND__ *hWnd,unsigned int Msg, lastchar = code; } return 0; - + case WM_SIZE: case WM_SIZING: needs_resize = true; @@ -382,7 +384,7 @@ inline void FillRectDIB(int x, int y, int width, int height, unsigned char color void cata_cursesport::curses_drawwindow( const catacurses::window &w ) { - + WINDOW *const win = w.get(); int i,j,drawx,drawy; wchar_t tmp; @@ -506,18 +508,18 @@ void CheckMessages() DispatchMessage(&msg); } if( needs_resize ) { - handle_resize(); + handle_resize(0, 0); } } -// Calculates the new width of the window, given the number of columns. -int projected_window_width(int) +// Calculates the new width of the window +int projected_window_width() { return get_option( "TERMINAL_X" ) * fontwidth; } -// Calculates the new height of the window, given the number of rows. -int projected_window_height(int) +// Calculates the new height of the window +int projected_window_height() { return get_option( "TERMINAL_Y" ) * fontheight; } @@ -589,7 +591,7 @@ void catacurses::init_interface() stdscr = newwin( get_option( "TERMINAL_Y" ), get_option( "TERMINAL_X" ),0,0 ); //newwin calls `new WINDOW`, and that will throw, but not return nullptr. - + initialized = true; } From 98ba076c17e7fdcfe08eea7d589e275ccc6f0c99 Mon Sep 17 00:00:00 2001 From: OzoneH3 Date: Wed, 13 Jun 2018 10:27:33 +0200 Subject: [PATCH 37/56] Display actual dodge skill after encumbrance penalties. --- src/player_display.cpp | 54 +++++++++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 9 deletions(-) diff --git a/src/player_display.cpp b/src/player_display.cpp index 76bddb580395f..dc9c4e5b5bfb7 100644 --- a/src/player_display.cpp +++ b/src/player_display.cpp @@ -153,13 +153,21 @@ std::string dodge_skill_text( double mod ) return string_format( _( "Dodge skill %+.1f. " ), mod ); } -std::string get_encumbrance_description( const player &p, body_part bp, bool combine ) + +int get_encumbrance( const player &p, body_part bp, bool combine ) { - std::string s; // Body parts that can't combine with anything shouldn't print double values on combine // This shouldn't happen, but handle this, just in case bool combines_with_other = ( int )bp_aiOther[bp] != bp; - int eff_encumbrance = p.encumb( bp ) * ( ( combine && combines_with_other ) ? 2 : 1 ); + return p.encumb( bp ) * ( ( combine && combines_with_other ) ? 2 : 1 ); +} + +std::string get_encumbrance_description( const player &p, body_part bp, bool combine ) +{ + std::string s; + + const int eff_encumbrance = get_encumbrance( p, bp, combine ); + switch( bp ) { case bp_torso: { const int melee_roll_pen = std::max( -eff_encumbrance, -80 ); @@ -550,8 +558,18 @@ Strength - 4; Dexterity - 4; Intelligence - 4; Perception - 4" ) ); if( line < skill_win_size_y + 1 ) { mvwprintz( w_skills, line, 1, text_color, "%s:", ( elem )->name().c_str() ); - mvwprintz( w_skills, line, 19, text_color, "%-2d(%2d%%)", level_num, - ( exercise < 0 ? 0 : exercise ) ); + + if( ( elem )->ident() == skill_id( "dodge" ) ) { + double actual_dodge = level.level(); + actual_dodge -= ::get_encumbrance( *this, bp_torso, false ) / 10; + actual_dodge -= ::get_encumbrance( *this, bp_leg_l, true ) / 10.0 / 4.0; + mvwprintz( w_skills, line, 15, text_color, "%-.1f/%-2d(%2d%%)", + actual_dodge, level_num, ( exercise < 0 ? 0 : exercise ) ); + } else { + mvwprintz( w_skills, line, 19, text_color, "%-2d(%2d%%)", level_num, + ( exercise < 0 ? 0 : exercise ) ); + } + line++; } } @@ -990,8 +1008,17 @@ Strength - 4; Dexterity - 4; Intelligence - 4; Perception - 4" ) ); } mvwprintz( w_skills, int( 1 + i - min ), 1, c_light_gray, " " ); mvwprintz( w_skills, int( 1 + i - min ), 1, cstatus, "%s:", aSkill->name().c_str() ); - mvwprintz( w_skills, int( 1 + i - min ), 19, cstatus, "%-2d(%2d%%)", level.level(), - ( exercise < 0 ? 0 : exercise ) ); + + if( aSkill->ident() == skill_id( "dodge" ) ) { + double actual_dodge = level.level(); + actual_dodge -= ::get_encumbrance( *this, bp_torso, false ) / 10; + actual_dodge -= ::get_encumbrance( *this, bp_leg_l, true ) / 10.0 / 4.0; + mvwprintz( w_skills, int( 1 + i - min ), 15, cstatus, "%-.1f/%-2d(%2d%%)", + actual_dodge, level.level(), ( exercise < 0 ? 0 : exercise ) ); + } else { + mvwprintz( w_skills, int( 1 + i - min ), 19, cstatus, "%-2d(%2d%%)", level.level(), + ( exercise < 0 ? 0 : exercise ) ); + } } draw_scrollbar( w_skills, line, skill_win_size_y, int( skillslist.size() ), 1 ); @@ -1034,8 +1061,17 @@ Strength - 4; Dexterity - 4; Intelligence - 4; Perception - 4" ) ); } mvwprintz( w_skills, i + 1, 1, cstatus, "%s:", thisSkill->name().c_str() ); - mvwprintz( w_skills, i + 1, 19, cstatus, "%-2d(%2d%%)", level.level(), - ( level.exercise() < 0 ? 0 : level.exercise() ) ); + + if( thisSkill->ident() == skill_id( "dodge" ) ) { + double actual_dodge = level.level(); + actual_dodge -= ::get_encumbrance( *this, bp_torso, false ) / 10; + actual_dodge -= ::get_encumbrance( *this, bp_leg_l, true ) / 10.0 / 4.0; + mvwprintz( w_skills, i + 1, 15, cstatus, "%-.1f/%-2d(%2d%%)", + actual_dodge, level.level(), ( level.exercise() < 0 ? 0 : level.exercise() ) ); + } else { + mvwprintz( w_skills, i + 1, 19, cstatus, "%-2d(%2d%%)", level.level(), + ( level.exercise() < 0 ? 0 : level.exercise() ) ); + } } wrefresh( w_skills ); line = 0; From 6408074fa014feb20e75c2e78c933bf02147eb00 Mon Sep 17 00:00:00 2001 From: Podesta <11512008+Podesta@users.noreply.github.com> Date: Tue, 12 Jun 2018 19:57:30 -0300 Subject: [PATCH 38/56] Add bike basket recipe, fix #23949 It is now a required component when installing the bike basket on a vehicle. --- data/json/items/vehicle_parts.json | 22 ++++++++++++++++++++-- data/json/recipes/recipe_others.json | 14 ++++++++++++++ data/json/vehicle_parts.json | 8 ++++++-- 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/data/json/items/vehicle_parts.json b/data/json/items/vehicle_parts.json index 8a8e3feae8b05..2a37771901ac5 100644 --- a/data/json/items/vehicle_parts.json +++ b/data/json/items/vehicle_parts.json @@ -78,7 +78,8 @@ "bashing" : 20, "category" : "veh_parts", "price" : 5500 - },{ + }, + { "type":"GENERIC", "id" : "folding_basket", "name" : "folding wire basket", @@ -93,7 +94,24 @@ "bashing" : 20, "category" : "veh_parts", "price" : 5500 - },{ + }, + { + "type":"GENERIC", + "id" : "bike_basket", + "name" : "bike basket", + "description" : "A simple bike basket. It is small and foldable.", + "weight" : 500, + "to_hit" : -5, + "color" : "cyan", + "symbol" : "]", + "material" : ["steel"], + "techniques" : ["DEF_DISARM"], + "volume" : 10, + "bashing" : 20, + "category" : "veh_parts", + "price" : 2500 + }, + { "type":"GENERIC", "id" : "frame_wood", "name" : "wooden frame", diff --git a/data/json/recipes/recipe_others.json b/data/json/recipes/recipe_others.json index 5b916c2ff0417..7f9f48fb3a0e7 100644 --- a/data/json/recipes/recipe_others.json +++ b/data/json/recipes/recipe_others.json @@ -1170,6 +1170,20 @@ "tools": [ [ [ "welder", 50 ], [ "welder_crude", 75 ], [ "toolset", 75 ], [ "oxy_torch", 10 ] ] ], "components": [ [ [ "wire", 6 ], [ "basket", 1 ] ], [ [ "scrap", 8 ] ] ] }, + { + "type": "recipe", + "result": "bike_basket", + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_PARTS", + "skill_used": "fabrication", + "difficulty": 1, + "time": 5000, + "reversible": true, + "autolearn": true, + "qualities": [ { "id": "GLARE", "level": 2 } ], + "tools": [ [ [ "welder", 20 ], [ "welder_crude", 35 ], [ "toolset", 35 ], [ "oxy_torch", 5 ] ] ], + "components": [ [ [ "wire", 1 ] ] ] + }, { "type": "recipe", "result": "foldframe", diff --git a/data/json/vehicle_parts.json b/data/json/vehicle_parts.json index 406a0447aa845..fc9f7ccb9a314 100644 --- a/data/json/vehicle_parts.json +++ b/data/json/vehicle_parts.json @@ -778,10 +778,14 @@ "durability": 75, "folded_volume": 4, "size": 60, - "item": "wire", + "item": "bike_basket", "difficulty": 1, "location": "center", - "flags": [ "CARGO", "TOOL_SCREWDRIVER", "BOARDABLE", "FOLDABLE" ] + "flags": [ "CARGO", "TOOL_SCREWDRIVER", "BOARDABLE", "FOLDABLE" ], + "requirements": { + "install": { "time": 15000, "skills": [ [ "mechanics", 0 ] ], "qualities": [ { "id": "SCREW", "level": 1 } ] }, + "repair": { "skills": [ [ "mechanics", 1 ], [ "fabrication", 1 ] ], "time": 2000, "using": [ [ "welding_standard", 1 ] ] }, + "removal": { "skills": [ [ "mechanics", 1 ] ], "qualities": [ { "id": "SCREW", "level": 1 } ] } } }, { "type": "vehicle_part", From 2a4f5c313ab9e076b1d9b70301c3a1c55bc47223 Mon Sep 17 00:00:00 2001 From: Podesta <11512008+Podesta@users.noreply.github.com> Date: Wed, 13 Jun 2018 15:36:21 -0300 Subject: [PATCH 39/56] Overhaul bike and cart baskets They are all a bit more realistic across the board. - All require welding and metal saw to make; - Bike basket uses 8 wires, weight 1.2kg and carry 20L; - Normal basket uses 40 wires, weight 6kg and carry 150L; - Foldable basket weights 1kg extra; --- data/json/items/vehicle_parts.json | 18 +++++++++--------- data/json/recipes/recipe_others.json | 28 ++++++++++++++-------------- data/json/vehicle_parts.json | 24 ++++++++++++++++-------- 3 files changed, 39 insertions(+), 31 deletions(-) diff --git a/data/json/items/vehicle_parts.json b/data/json/items/vehicle_parts.json index 2a37771901ac5..e970a5bbef5bc 100644 --- a/data/json/items/vehicle_parts.json +++ b/data/json/items/vehicle_parts.json @@ -68,48 +68,48 @@ "id" : "basket", "name" : "wire basket", "description" : "A large wire basket from a shopping cart.", - "weight" : 3000, + "weight" : 6000, "to_hit" : -5, "color" : "cyan", "symbol" : "]", "material" : ["steel"], "techniques" : ["DEF_DISARM"], - "volume" : 60, + "volume" : 90, "bashing" : 20, "category" : "veh_parts", - "price" : 5500 + "price" : 10000 }, { "type":"GENERIC", "id" : "folding_basket", "name" : "folding wire basket", "description" : "A large wire basket from a shopping cart, modified to be foldable.", - "weight" : 4000, + "weight" : 7000, "to_hit" : -5, "color" : "cyan", "symbol" : "]", "material" : ["steel"], "techniques" : ["DEF_DISARM"], - "volume" : 60, + "volume" : 90, "bashing" : 20, "category" : "veh_parts", - "price" : 5500 + "price" : 10000 }, { "type":"GENERIC", "id" : "bike_basket", "name" : "bike basket", "description" : "A simple bike basket. It is small and foldable.", - "weight" : 500, + "weight" : 1200, "to_hit" : -5, "color" : "cyan", "symbol" : "]", "material" : ["steel"], "techniques" : ["DEF_DISARM"], - "volume" : 10, + "volume" : 20, "bashing" : 20, "category" : "veh_parts", - "price" : 2500 + "price" : 3500 }, { "type":"GENERIC", diff --git a/data/json/recipes/recipe_others.json b/data/json/recipes/recipe_others.json index 7f9f48fb3a0e7..64e7cd07b57de 100644 --- a/data/json/recipes/recipe_others.json +++ b/data/json/recipes/recipe_others.json @@ -1148,13 +1148,13 @@ "category": "CC_OTHER", "subcategory": "CSC_OTHER_PARTS", "skill_used": "fabrication", - "difficulty": 1, - "time": 8000, + "difficulty": 2, + "time": 50000, "reversible": true, "autolearn": true, - "qualities": [ { "id": "GLARE", "level": 2 } ], - "tools": [ [ [ "welder", 50 ], [ "welder_crude", 75 ], [ "toolset", 75 ], [ "oxy_torch", 10 ] ] ], - "components": [ [ [ "wire", 6 ] ] ] + "using": [ [ "welding_standard", 5 ] ], + "qualities": [ { "id": "SAW_M", "level": 1} ], + "components": [ [ [ "wire", 40 ] ] ] }, { "type": "recipe", @@ -1162,13 +1162,13 @@ "category": "CC_OTHER", "subcategory": "CSC_OTHER_PARTS", "skill_used": "fabrication", - "difficulty": 1, - "time": 8000, + "difficulty": 2, + "time": 60000, "reversible": true, "autolearn": true, - "qualities": [ { "id": "GLARE", "level": 2 } ], - "tools": [ [ [ "welder", 50 ], [ "welder_crude", 75 ], [ "toolset", 75 ], [ "oxy_torch", 10 ] ] ], - "components": [ [ [ "wire", 6 ], [ "basket", 1 ] ], [ [ "scrap", 8 ] ] ] + "using": [ [ "welding_standard", 5 ] ], + "qualities": [ { "id": "SAW_M", "level": 1} ], + "components": [ [ [ "wire", 40 ], [ "basket", 1 ] ], [ [ "scrap", 8 ] ] ] }, { "type": "recipe", @@ -1177,12 +1177,12 @@ "subcategory": "CSC_OTHER_PARTS", "skill_used": "fabrication", "difficulty": 1, - "time": 5000, + "time": 35000, "reversible": true, "autolearn": true, - "qualities": [ { "id": "GLARE", "level": 2 } ], - "tools": [ [ [ "welder", 20 ], [ "welder_crude", 35 ], [ "toolset", 35 ], [ "oxy_torch", 5 ] ] ], - "components": [ [ [ "wire", 1 ] ] ] + "using": [ [ "welding_standard", 2 ] ], + "qualities": [ { "id": "SAW_M", "level": 1} ], + "components": [ [ [ "wire", 8 ] ] ] }, { "type": "recipe", diff --git a/data/json/vehicle_parts.json b/data/json/vehicle_parts.json index fc9f7ccb9a314..a47586f9f5460 100644 --- a/data/json/vehicle_parts.json +++ b/data/json/vehicle_parts.json @@ -776,15 +776,15 @@ "broken_color": "brown", "damage_modifier": 60, "durability": 75, - "folded_volume": 4, - "size": 60, + "folded_volume": 6, + "size": 80, "item": "bike_basket", "difficulty": 1, "location": "center", "flags": [ "CARGO", "TOOL_SCREWDRIVER", "BOARDABLE", "FOLDABLE" ], "requirements": { - "install": { "time": 15000, "skills": [ [ "mechanics", 0 ] ], "qualities": [ { "id": "SCREW", "level": 1 } ] }, - "repair": { "skills": [ [ "mechanics", 1 ], [ "fabrication", 1 ] ], "time": 2000, "using": [ [ "welding_standard", 1 ] ] }, + "install": { "time": 15000, "skills": [ [ "mechanics", 1 ] ], "qualities": [ { "id": "SCREW", "level": 1 } ] }, + "repair": { "skills": [ [ "mechanics", 1 ], [ "fabrication", 1 ] ], "time": 25000, "using": [ [ "welding_standard", 1 ] ] }, "removal": { "skills": [ [ "mechanics", 1 ] ], "qualities": [ { "id": "SCREW", "level": 1 } ] } } }, { @@ -797,11 +797,15 @@ "broken_color": "brown", "damage_modifier": 60, "durability": 75, - "size": 200, + "size": 600, "item": "basket", "difficulty": 1, "location": "center", - "flags": [ "CARGO", "OBSTACLE" ] + "flags": [ "CARGO", "OBSTACLE" ], + "requirements": { + "install": { "time": 45000, "skills": [ [ "mechanics", 1 ] ], "using": [ [ "welding_standard", 2 ] ] }, + "repair": { "skills": [ [ "mechanics", 1 ], [ "fabrication", 2 ] ], "time": 35000, "using": [ [ "welding_standard", 2 ] ] }, + "removal": { "skills": [ [ "mechanics", 1 ] ], "qualities": [ { "id": "SAW_M", "level": 1 } ] } } }, { "type": "vehicle_part", @@ -813,12 +817,16 @@ "broken_color": "brown", "damage_modifier": 60, "durability": 75, - "size": 200, + "size": 600, + "folded_volume": 24, "item": "folding_basket", "difficulty": 1, "location": "center", "flags": [ "CARGO", "OBSTACLE", "FOLDABLE" ], - "folded_volume": 12 + "requirements": { + "install": { "time": 45000, "skills": [ [ "mechanics", 1 ] ], "using": [ [ "welding_standard", 2 ] ] }, + "repair": { "skills": [ [ "mechanics", 1 ], [ "fabrication", 2 ] ], "time": 35000, "using": [ [ "welding_standard", 2 ] ] }, + "removal": { "skills": [ [ "mechanics", 1 ] ], "qualities": [ { "id": "SAW_M", "level": 1 } ] } } }, { "type": "vehicle_part", From 014b1bb73715e5b1f3e280a1342ff9e8113b52e5 Mon Sep 17 00:00:00 2001 From: Podesta <11512008+Podesta@users.noreply.github.com> Date: Wed, 13 Jun 2018 19:23:18 -0300 Subject: [PATCH 40/56] Add new cutting wires requirement New requirement: cutting_wire_standard --- data/json/requirements/toolsets.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/data/json/requirements/toolsets.json b/data/json/requirements/toolsets.json index dc8d88ec9f5ce..89aa1be2d5483 100644 --- a/data/json/requirements/toolsets.json +++ b/data/json/requirements/toolsets.json @@ -40,5 +40,13 @@ "type": "requirement", "//": "Soldering metal items", "tools": [ [ [ "soldering_iron", 1 ], [ "toolset", 1 ] ] ] + }, + { + "id": "cutting_wire_standard", + "type": "requirement", + "//": "Cutting wires", + "tools": [ + [ [ "hacksaw", -1 ], [ "multitool", -1 ], [ "boltcutters", -1 ], [ "toolset", -1 ] ] + ] } ] From 487c1852f1536e7eefc06bda4b44f435ec0c6905 Mon Sep 17 00:00:00 2001 From: acidia Date: Wed, 13 Jun 2018 21:32:25 -0400 Subject: [PATCH 41/56] Trying to make AStyle check pass --- src/monstergenerator.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/monstergenerator.cpp b/src/monstergenerator.cpp index 6ed0bb7c9f980..956c0db88d794 100644 --- a/src/monstergenerator.cpp +++ b/src/monstergenerator.cpp @@ -948,7 +948,7 @@ void MonsterGenerator::check_monster_definitions() const } if( mon.upgrades ) { - if( mon.half_life < 0 && mon.age_grow < 0) { + if( mon.half_life < 0 && mon.age_grow < 0 ) { debugmsg( "half_life %d and age_grow %d (<0) of monster %s is invalid", mon.half_life, mon.age_grow, mon.id.c_str() ); } @@ -969,25 +969,25 @@ void MonsterGenerator::check_monster_definitions() const } if( mon.reproduces ) { - if( mon.baby_timer < 1) { + if( mon.baby_timer < 1 ) { debugmsg( "Time between reproductions (%d) is invalid for %s", mon.baby_timer, mon.id.c_str() ); } - if( mon.baby_count < 1) { + if( mon.baby_count < 1 ) { debugmsg( "Number of children (%d) is invalid for %s", mon.baby_count, mon.id.c_str() ); } if( !mon.baby_monster && mon.baby_egg == "null" ) { debugmsg( "No baby or egg defined for monster %s", mon.id.c_str() ); } - if( mon.baby_monster && mon.baby_egg != "null") { + if( mon.baby_monster && mon.baby_egg != "null" ) { debugmsg( "Both an egg and a live birth baby are defined for %s", mon.id.c_str() ); } if( !mon.baby_monster.is_valid() ) { debugmsg( "baby_monster %s of monster %s is not a valid monster id", mon.baby_monster.c_str(), mon.id.c_str() ); } - if( !item::type_is_defined( mon.baby_egg )) { + if( !item::type_is_defined( mon.baby_egg ) ) { debugmsg( "item_id %s of monster %s is not a valid item id", mon.baby_egg.c_str(), mon.id.c_str() ); } @@ -1001,7 +1001,7 @@ void MonsterGenerator::check_monster_definitions() const if( mon.biosig_item == "null" ) { debugmsg( "No biosignature drop defined for monster %s", mon.id.c_str() ); } - if( !item::type_is_defined( mon.biosig_item )) { + if( !item::type_is_defined( mon.biosig_item ) ) { debugmsg( "item_id %s of monster %s is not a valid item id", mon.biosig_item.c_str(), mon.id.c_str() ); } From 2518d82d77722edcdcd88f6336b8d10789133160 Mon Sep 17 00:00:00 2001 From: acidia Date: Wed, 13 Jun 2018 21:38:09 -0400 Subject: [PATCH 42/56] astyle, better or worse --- src/monstergenerator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/monstergenerator.cpp b/src/monstergenerator.cpp index 956c0db88d794..716f225ef379f 100644 --- a/src/monstergenerator.cpp +++ b/src/monstergenerator.cpp @@ -994,7 +994,7 @@ void MonsterGenerator::check_monster_definitions() const } if( mon.biosignatures ) { - if( mon.biosig_timer < 1) { + if( mon.biosig_timer < 1 ) { debugmsg( "Time between biosignature drops (%d) is invalid for %s", mon.biosig_timer, mon.id.c_str() ); } From 3082b9ed70647433702ff97de82edcd26dbdddc8 Mon Sep 17 00:00:00 2001 From: acidia Date: Thu, 14 Jun 2018 07:03:00 -0400 Subject: [PATCH 43/56] Astyle, better or worse --- src/monstergenerator.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/monstergenerator.cpp b/src/monstergenerator.cpp index 716f225ef379f..621f3e630a7d8 100644 --- a/src/monstergenerator.cpp +++ b/src/monstergenerator.cpp @@ -971,11 +971,11 @@ void MonsterGenerator::check_monster_definitions() const if( mon.reproduces ) { if( mon.baby_timer < 1 ) { debugmsg( "Time between reproductions (%d) is invalid for %s", - mon.baby_timer, mon.id.c_str() ); + mon.baby_timer, mon.id.c_str() ); } if( mon.baby_count < 1 ) { debugmsg( "Number of children (%d) is invalid for %s", - mon.baby_count, mon.id.c_str() ); + mon.baby_count, mon.id.c_str() ); } if( !mon.baby_monster && mon.baby_egg == "null" ) { debugmsg( "No baby or egg defined for monster %s", mon.id.c_str() ); @@ -996,7 +996,7 @@ void MonsterGenerator::check_monster_definitions() const if( mon.biosignatures ) { if( mon.biosig_timer < 1 ) { debugmsg( "Time between biosignature drops (%d) is invalid for %s", - mon.biosig_timer, mon.id.c_str() ); + mon.biosig_timer, mon.id.c_str() ); } if( mon.biosig_item == "null" ) { debugmsg( "No biosignature drop defined for monster %s", mon.id.c_str() ); From 1169291e60615275ea76725e787bf8dec55cf962 Mon Sep 17 00:00:00 2001 From: acidia Date: Thu, 14 Jun 2018 07:31:16 -0400 Subject: [PATCH 44/56] Astyle, better or worse --- src/monstergenerator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/monstergenerator.cpp b/src/monstergenerator.cpp index 621f3e630a7d8..973707d8cc56b 100644 --- a/src/monstergenerator.cpp +++ b/src/monstergenerator.cpp @@ -950,7 +950,7 @@ void MonsterGenerator::check_monster_definitions() const if( mon.upgrades ) { if( mon.half_life < 0 && mon.age_grow < 0 ) { debugmsg( "half_life %d and age_grow %d (<0) of monster %s is invalid", - mon.half_life, mon.age_grow, mon.id.c_str() ); + mon.half_life, mon.age_grow, mon.id.c_str() ); } if( !mon.upgrade_into && !mon.upgrade_group ) { debugmsg( "no into nor into_group defined for monster %s", mon.id.c_str() ); From 3fcb3db143a7fc2e3fd41c13bbfa7dc37b609441 Mon Sep 17 00:00:00 2001 From: acidia Date: Thu, 14 Jun 2018 07:51:58 -0400 Subject: [PATCH 45/56] astyle update --- src/monster.cpp | 46 ++++++++++++++++++++++------------------------ 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/src/monster.cpp b/src/monster.cpp index 8c911f44bd451..48983fdb5cce8 100644 --- a/src/monster.cpp +++ b/src/monster.cpp @@ -265,7 +265,7 @@ void monster::hasten_upgrade() { // This will disable upgrades in case max iters have been reached. // Checking for return value of -1 is necessary. int monster::next_upgrade_time() { - if ( type->age_grow > 0){ + if( type->age_grow > 0 ){ return type->age_grow; } const int scaled_half_life = type->half_life * get_option( "MONSTER_UPGRADE_FACTOR" ); @@ -288,7 +288,6 @@ void monster::try_upgrade(bool pin_time) { return; } - //const int current_day = to_days( calendar::time_of_cataclysm - calendar::turn ); const int current_day = to_days( calendar::turn - calendar::time_of_cataclysm ); //This should only occur when a monster is created or upgraded to a new form if (upgrade_time < 0) { @@ -296,7 +295,7 @@ void monster::try_upgrade(bool pin_time) { if (upgrade_time < 0) { return; } - if (pin_time || type->age_grow > 0) { + if( pin_time || type->age_grow > 0 ) { // offset by today, always true for growing creatures upgrade_time += current_day; } else { @@ -343,9 +342,9 @@ void monster::try_reproduce() { } const int current_day = to_days( calendar::turn - calendar::time_of_cataclysm ); - if (baby_timer < 0) { + if( baby_timer < 0 ) { baby_timer = type->baby_timer; - if (baby_timer < 0) { + if( baby_timer < 0 ) { return; } baby_timer += current_day; @@ -354,39 +353,38 @@ void monster::try_reproduce() { bool season_spawn = false; bool season_match = true; for( auto &elem : type->baby_flags ) { - if( ( elem ) == "SUMMER" || ( elem ) == "WINTER" || ( elem ) == "SPRING" || - ( elem ) == "AUTUMN" ) { + if( elem == "SUMMER" || elem == "WINTER" || elem == "SPRING" || elem == "AUTUMN" ) { season_spawn = true; } } - while (true) { - if (baby_timer > current_day) { + while( true ) { + if( baby_timer > current_day ) { return; } - if (season_spawn){ + if( season_spawn ){ season_match = false; for( auto &elem : type->baby_flags ) { - if( ( season_of_year( DAYS(baby_timer) ) == SUMMER && ( elem ) == "SUMMER" ) || - ( season_of_year( DAYS(baby_timer) ) == WINTER && ( elem ) == "WINTER" ) || - ( season_of_year( DAYS(baby_timer) ) == SPRING && ( elem ) == "SPRING" ) || - ( season_of_year( DAYS(baby_timer) ) == AUTUMN && ( elem ) == "AUTUMN" ) ) { + if( ( season_of_year( DAYS( baby_timer ) ) == SUMMER && elem == "SUMMER" ) || + ( season_of_year( DAYS( baby_timer ) ) == WINTER && elem == "WINTER" ) || + ( season_of_year( DAYS( baby_timer ) ) == SPRING && elem == "SPRING" ) || + ( season_of_year( DAYS( baby_timer ) ) == AUTUMN && elem == "AUTUMN" ) ) { season_match = true; } } } - if (season_match){ + if( season_match ){ if( type->baby_monster ) { - g->m.add_spawn(type->baby_monster, type->baby_count, pos().x, pos().y); + g->m.add_spawn( type->baby_monster, type->baby_count, pos().x, pos().y ); } else { - g->m.add_item_or_charges(pos(), item( type->baby_egg, DAYS(baby_timer), type->baby_count), true); + g->m.add_item_or_charges( pos(), item( type->baby_egg, DAYS( baby_timer ), type->baby_count ), true ); } } const int next_baby = type->baby_timer; - if (next_baby < 0) { + if( next_baby < 0 ) { return; } baby_timer += next_baby; @@ -399,22 +397,22 @@ void monster::try_biosignature() { } const int current_day = to_days( calendar::turn - calendar::time_of_cataclysm ); - if (biosig_timer < 0) { + if( biosig_timer < 0 ) { biosig_timer = type->biosig_timer; - if (biosig_timer < 0) { + if( biosig_timer < 0 ) { return; } biosig_timer += current_day; } - while (true) { - if (biosig_timer > current_day) { + while( true ) { + if( biosig_timer > current_day ) { return; } - g->m.add_item_or_charges(pos(), item( type->biosig_item, DAYS(biosig_timer), 1), true); + g->m.add_item_or_charges( pos(), item( type->biosig_item, DAYS( biosig_timer ), 1 ), true ); const int next_biosig = type->biosig_timer; - if (next_biosig < 0) { + if( next_biosig < 0 ) { return; } biosig_timer += next_biosig; From 73e2242a289216fcba7c9b153463ea3b0a4819ab Mon Sep 17 00:00:00 2001 From: Night-Pryanik Date: Thu, 14 Jun 2018 16:46:45 +0400 Subject: [PATCH 46/56] Allowed use of CBMs in the pickup range --- src/iexamine.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/iexamine.cpp b/src/iexamine.cpp index 85becbcaa20b4..3586183fb8725 100644 --- a/src/iexamine.cpp +++ b/src/iexamine.cpp @@ -3515,21 +3515,23 @@ void iexamine::autodoc( player &p, const tripoint &examp ) return; } - const int bionic = g->inv_for_flag( "CBM", _( "Choose CBM to install" ) ); - if( bionic == INT_MIN ) { - p.add_msg_if_player( m_info, _( "Never mind." ) ); + const item_location bionic = g->inv_map_splice( []( const item &e ) { + return e.has_flag( "CBM" ); + }, _( "Choose CBM to install" ), PICKUP_RANGE, _( "You don't have any CBMs to install" ) ); + + if( !bionic ) { return; } - const item &it = p.i_at( bionic ); - const itype &itemtype = *it.type; - const time_duration duration = itemtype.bionic->difficulty * 20_minutes; + const item *it = bionic.get_item(); + const itype *itemtype = it->type; + const time_duration duration = itemtype->bionic->difficulty * 20_minutes; if( p.install_bionics( itemtype ) ) { p.add_msg_if_player( m_info, _( "You type data into the console, configuring Autodoc to install a CBM." ) ); p.fall_asleep( duration ); p.add_msg_if_player( m_info, _( "Autodoc injected you with anesthesia, and while you were sleeping conducted a medical operation on you." ) ); - p.i_rem( &it ); + g->m.i_rem( bionic.position(), it ); } } From 2419ff8614b55d47469186b0009b1e2b6277c5b4 Mon Sep 17 00:00:00 2001 From: Night-Pryanik Date: Thu, 14 Jun 2018 18:43:42 +0400 Subject: [PATCH 47/56] Fixed error --- src/iexamine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/iexamine.cpp b/src/iexamine.cpp index 3586183fb8725..87840c53fde8f 100644 --- a/src/iexamine.cpp +++ b/src/iexamine.cpp @@ -3526,7 +3526,7 @@ void iexamine::autodoc( player &p, const tripoint &examp ) const item *it = bionic.get_item(); const itype *itemtype = it->type; const time_duration duration = itemtype->bionic->difficulty * 20_minutes; - if( p.install_bionics( itemtype ) ) { + if( p.install_bionics( *itemtype ) ) { p.add_msg_if_player( m_info, _( "You type data into the console, configuring Autodoc to install a CBM." ) ); p.fall_asleep( duration ); p.add_msg_if_player( m_info, From 932f756bc072060c4db5caaaa06c44082330fee9 Mon Sep 17 00:00:00 2001 From: Podesta <11512008+Podesta@users.noreply.github.com> Date: Thu, 14 Jun 2018 16:54:16 -0300 Subject: [PATCH 48/56] Drop a few bricks from brick walls - see #21431 --- data/json/terrain.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/data/json/terrain.json b/data/json/terrain.json index cc71cd6d44512..f06b9ff3c924c 100644 --- a/data/json/terrain.json +++ b/data/json/terrain.json @@ -43,7 +43,10 @@ "sound": "crash!", "sound_fail": "bash!", "ter_set": "t_null", - "items": [ { "item": "rock", "count": [6, 10] } ] + "items": [ + { "item": "rock", "count": [5, 8] }, + { "item": "brick", "count": [1, 3] } + ] } },{ "type" : "terrain", @@ -61,7 +64,8 @@ "sound_fail": "bash!", "ter_set": "t_null", "items": [ - { "item": "rock", "count": [10, 20] } + { "item": "rock", "count": [8, 15] }, + { "item": "brick", "count": [2, 6] } ] } },{ From 4636fdb8d5a287ad7efd96d774aaa997828807bf Mon Sep 17 00:00:00 2001 From: Podesta <11512008+Podesta@users.noreply.github.com> Date: Wed, 13 Jun 2018 19:27:15 -0300 Subject: [PATCH 49/56] Update basket recipes to use cutting_wire_standard --- data/json/recipes/recipe_others.json | 9 +++------ data/json/requirements/toolsets.json | 4 +--- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/data/json/recipes/recipe_others.json b/data/json/recipes/recipe_others.json index 64e7cd07b57de..16b5261545be2 100644 --- a/data/json/recipes/recipe_others.json +++ b/data/json/recipes/recipe_others.json @@ -1152,8 +1152,7 @@ "time": 50000, "reversible": true, "autolearn": true, - "using": [ [ "welding_standard", 5 ] ], - "qualities": [ { "id": "SAW_M", "level": 1} ], + "using": [ [ "welding_standard", 5 ], [ "cutting_wire_standard", 1 ] ], "components": [ [ [ "wire", 40 ] ] ] }, { @@ -1166,8 +1165,7 @@ "time": 60000, "reversible": true, "autolearn": true, - "using": [ [ "welding_standard", 5 ] ], - "qualities": [ { "id": "SAW_M", "level": 1} ], + "using": [ [ "welding_standard", 5 ], [ "cutting_wire_standard", 1 ] ], "components": [ [ [ "wire", 40 ], [ "basket", 1 ] ], [ [ "scrap", 8 ] ] ] }, { @@ -1180,8 +1178,7 @@ "time": 35000, "reversible": true, "autolearn": true, - "using": [ [ "welding_standard", 2 ] ], - "qualities": [ { "id": "SAW_M", "level": 1} ], + "using": [ [ "welding_standard", 2 ], [ "cutting_wire_standard", 1 ] ], "components": [ [ [ "wire", 8 ] ] ] }, { diff --git a/data/json/requirements/toolsets.json b/data/json/requirements/toolsets.json index 89aa1be2d5483..1c6e6db0d7911 100644 --- a/data/json/requirements/toolsets.json +++ b/data/json/requirements/toolsets.json @@ -45,8 +45,6 @@ "id": "cutting_wire_standard", "type": "requirement", "//": "Cutting wires", - "tools": [ - [ [ "hacksaw", -1 ], [ "multitool", -1 ], [ "boltcutters", -1 ], [ "toolset", -1 ] ] - ] + "tools": [ [ [ "hacksaw", -1 ], [ "multitool", -1 ], [ "boltcutters", -1 ], [ "toolset", -1 ] ] ] } ] From ac06aaaa09000b91328b7d78446dd72493532256 Mon Sep 17 00:00:00 2001 From: OzoneH3 Date: Fri, 15 Jun 2018 10:59:58 +0200 Subject: [PATCH 50/56] Use existing get_dodge() function. --- src/player_display.cpp | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/src/player_display.cpp b/src/player_display.cpp index dc9c4e5b5bfb7..07dc8a93b858e 100644 --- a/src/player_display.cpp +++ b/src/player_display.cpp @@ -560,11 +560,8 @@ Strength - 4; Dexterity - 4; Intelligence - 4; Perception - 4" ) ); mvwprintz( w_skills, line, 1, text_color, "%s:", ( elem )->name().c_str() ); if( ( elem )->ident() == skill_id( "dodge" ) ) { - double actual_dodge = level.level(); - actual_dodge -= ::get_encumbrance( *this, bp_torso, false ) / 10; - actual_dodge -= ::get_encumbrance( *this, bp_leg_l, true ) / 10.0 / 4.0; mvwprintz( w_skills, line, 15, text_color, "%-.1f/%-2d(%2d%%)", - actual_dodge, level_num, ( exercise < 0 ? 0 : exercise ) ); + get_dodge(), level_num, exercise < 0 ? 0 : exercise ); } else { mvwprintz( w_skills, line, 19, text_color, "%-2d(%2d%%)", level_num, ( exercise < 0 ? 0 : exercise ) ); @@ -1010,11 +1007,8 @@ Strength - 4; Dexterity - 4; Intelligence - 4; Perception - 4" ) ); mvwprintz( w_skills, int( 1 + i - min ), 1, cstatus, "%s:", aSkill->name().c_str() ); if( aSkill->ident() == skill_id( "dodge" ) ) { - double actual_dodge = level.level(); - actual_dodge -= ::get_encumbrance( *this, bp_torso, false ) / 10; - actual_dodge -= ::get_encumbrance( *this, bp_leg_l, true ) / 10.0 / 4.0; mvwprintz( w_skills, int( 1 + i - min ), 15, cstatus, "%-.1f/%-2d(%2d%%)", - actual_dodge, level.level(), ( exercise < 0 ? 0 : exercise ) ); + get_dodge(), level.level(), exercise < 0 ? 0 : exercise ); } else { mvwprintz( w_skills, int( 1 + i - min ), 19, cstatus, "%-2d(%2d%%)", level.level(), ( exercise < 0 ? 0 : exercise ) ); @@ -1063,11 +1057,8 @@ Strength - 4; Dexterity - 4; Intelligence - 4; Perception - 4" ) ); mvwprintz( w_skills, i + 1, 1, cstatus, "%s:", thisSkill->name().c_str() ); if( thisSkill->ident() == skill_id( "dodge" ) ) { - double actual_dodge = level.level(); - actual_dodge -= ::get_encumbrance( *this, bp_torso, false ) / 10; - actual_dodge -= ::get_encumbrance( *this, bp_leg_l, true ) / 10.0 / 4.0; mvwprintz( w_skills, i + 1, 15, cstatus, "%-.1f/%-2d(%2d%%)", - actual_dodge, level.level(), ( level.exercise() < 0 ? 0 : level.exercise() ) ); + get_dodge(), level.level(), level.exercise() < 0 ? 0 : level.exercise() ); } else { mvwprintz( w_skills, i + 1, 19, cstatus, "%-2d(%2d%%)", level.level(), ( level.exercise() < 0 ? 0 : level.exercise() ) ); From 5d29c3c198ee195005d2622eeb33b45627efa759 Mon Sep 17 00:00:00 2001 From: OzoneH3 Date: Fri, 15 Jun 2018 12:08:02 +0200 Subject: [PATCH 51/56] Properly refresh sidebar after resize. --- src/game.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/game.cpp b/src/game.cpp index 74235b82b3f7c..b0601ea3af883 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -682,6 +682,11 @@ void game::init_ui( const bool resized ) werase(w_status2); liveview.init(); + + //Refresh only if ingame. Will crash on main menu + if( resized && !g->u.name.empty() ) { + g->refresh_all(); + } } void game::toggle_sidebar_style() From 0b60561733ff609c5a407bdcb18ce4fffeb624a2 Mon Sep 17 00:00:00 2001 From: OzoneH3 Date: Fri, 15 Jun 2018 12:45:31 +0200 Subject: [PATCH 52/56] Fix overmap sidebar artifacts after resize. --- src/game.cpp | 1 - src/overmap.cpp | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/game.cpp b/src/game.cpp index b0601ea3af883..ee3b19b72d981 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -4321,7 +4321,6 @@ void game::debug() void game::draw_overmap() { overmap::draw_overmap(); - refresh_all(); } void game::disp_kills() diff --git a/src/overmap.cpp b/src/overmap.cpp index 1377e2633ad35..a1563cd9345d6 100644 --- a/src/overmap.cpp +++ b/src/overmap.cpp @@ -2934,7 +2934,7 @@ tripoint overmap::draw_overmap(const tripoint &orig, const draw_data_t &data) werase(g->w_overmap); werase(g->w_omlegend); catacurses::erase(); - g->refresh_all(); + g->init_ui( true ); return ret; } From 1cf916ce4fd5172b0dd8364e750d794578991f5e Mon Sep 17 00:00:00 2001 From: Brett Dong Date: Fri, 15 Jun 2018 20:08:09 +0800 Subject: [PATCH 53/56] i18n: Translation template update as of Jun 15, 2018 --- lang/po/cataclysm-dda.pot | 182 +++++++++++++++++++++++++++++++++++--- 1 file changed, 170 insertions(+), 12 deletions(-) diff --git a/lang/po/cataclysm-dda.pot b/lang/po/cataclysm-dda.pot index b6e34e380a89e..c78680dd7b25d 100644 --- a/lang/po/cataclysm-dda.pot +++ b/lang/po/cataclysm-dda.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: cataclysm-dda 0.C\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-06-09 21:55+0800\n" +"POT-Creation-Date: 2018-06-15 19:51+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -21202,7 +21202,7 @@ msgstr[1] "" #: lang/json/COMESTIBLE_from_json.py msgid "" "A tasty collection of wild herbs including violet, sassafras, mint, clover, " -"purslane, and burdock." +"purslane, fireweed, and burdock." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -36405,6 +36405,7 @@ msgid "chicken" msgstr "" #. ~ Description for chicken +#. ~ Description for chicken chick #: lang/json/MONSTER_from_json.py msgid "" "A domesticated descendant of junglefowl, it may still be the most numerous " @@ -36702,6 +36703,19 @@ msgid "" "mayhem around it." msgstr "" +#: lang/json/MONSTER_from_json.py +msgid "zombie burner" +msgstr "" + +#. ~ Description for zombie burner +#: lang/json/MONSTER_from_json.py +msgid "" +"Realizing that bullets weren't enough, the army dispatched flamethrower " +"units to burn the walking dead. Unfortunately, there were too many zombies " +"and not enough flamers. It seems that the tank of the undead soldier you " +"see before you is damaged." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "flaming eye" msgstr "" @@ -38440,6 +38454,50 @@ msgid "" "and its eyes bulge with black goo." msgstr "" +#: lang/json/MONSTER_from_json.py +msgid "skittering plague" +msgstr "" + +#. ~ Description for skittering plague +#: lang/json/MONSTER_from_json.py +msgid "A giant infected roach, it has been feeding on the undead." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "plague nymph" +msgstr "" + +#. ~ Description for plague nymph +#: lang/json/MONSTER_from_json.py +msgid "An infected mutant cockroach about the size of a rat." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "plague vector" +msgstr "" + +#. ~ Description for plague vector +#: lang/json/MONSTER_from_json.py +msgid "" +"This infected roach has been feeding on the undead and started to mutate " +"chaotically. Extra limbs and growths sprout from its thorax." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "triffid sprig" +msgstr "" + +#. ~ Description for triffid sprig +#: lang/json/MONSTER_from_json.py +msgid "" +"A teeny-tiny triffid that has recently germinated. Like a house cat, you " +"know it wants to eat you but it just can't figure out how." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "chicken chick" +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "security bot" msgstr "" @@ -52107,6 +52165,10 @@ msgstr "" msgid "You lie down to go to sleep..." msgstr "" +#: lang/json/effects_from_json.py src/player_hardcoded_effects.cpp +msgid "You fall asleep." +msgstr "" + #: lang/json/effects_from_json.py msgid "You wake up." msgstr "" @@ -53153,12 +53215,15 @@ msgid "A road barricade. For barricading roads." msgstr "" #: lang/json/furniture_from_json.py +#: lang/json/furniture_from_json.py lang/json/terrain_from_json.py #: lang/json/terrain_from_json.py -#: src/map.cpp src/mapdata.cpp +#: lang/json/terrain_from_json.py src/map.cpp +#: src/mapdata.cpp msgid "smash!" msgstr "" #: lang/json/furniture_from_json.py +#: lang/json/furniture_from_json.py lang/json/terrain_from_json.py #: lang/json/terrain_from_json.py msgid "whump." msgstr "" @@ -53195,8 +53260,9 @@ msgid "Pin some notes for other survivors to read." msgstr "" #: lang/json/furniture_from_json.py +#: lang/json/furniture_from_json.py lang/json/terrain_from_json.py #: lang/json/terrain_from_json.py -#: lang/json/terrain_from_json.py src/iuse.cpp +#: src/iuse.cpp msgid "crunch!" msgstr "" @@ -53558,6 +53624,7 @@ msgid "glass breaking" msgstr "" #: lang/json/furniture_from_json.py +#: lang/json/furniture_from_json.py lang/json/terrain_from_json.py #: lang/json/terrain_from_json.py msgid "whack!" msgstr "" @@ -54071,6 +54138,24 @@ msgstr "" msgid "thunk!" msgstr "" +#: lang/json/furniture_from_json.py +msgid "autodoc" +msgstr "" + +#. ~ Description for autodoc +#: lang/json/furniture_from_json.py +msgid "A medical apparatus for automated diagnosis and healing." +msgstr "" + +#: lang/json/furniture_from_json.py +msgid "autodoc couch" +msgstr "" + +#. ~ Description for autodoc couch +#: lang/json/furniture_from_json.py +msgid "A special medical couch connected with the adjacent autodoc." +msgstr "" + #: lang/json/furniture_from_json.py msgid "mutated cactus" msgstr "" @@ -54489,6 +54574,16 @@ msgstr[1] "" msgid "Fake gun that fires acid globs." msgstr "" +#: lang/json/gun_from_json.py +msgid "reach bow" +msgid_plural "reach bows" +msgstr[0] "" +msgstr[1] "" + +#: lang/json/gun_from_json.py +msgid "A test item that is both a ranged weapon and a reach weapon" +msgstr "" + #: lang/json/gun_from_json.py msgid "BB gun" msgid_plural "BB guns" @@ -78423,8 +78518,8 @@ msgstr "" #: lang/json/skill_from_json.py msgid "" "Your skill in using bow weapons, from hand-carved self bows to complex " -"hunting crossbows. Quiet and effective, they require strength of body and " -"sight to wield, and are not terribly accurate over a long distance." +"compound bows. Quiet and effective, they require strength of body and sight " +"to wield, and are not terribly accurate over a long distance." msgstr "" #: lang/json/skill_from_json.py @@ -78487,7 +78582,7 @@ msgid "" "immense destructive power, but they are cumbersome and hard to manage." msgstr "" -#: lang/json/skill_from_json.py +#: lang/json/skill_from_json.py src/item_factory.cpp msgid "melee" msgstr "" @@ -97151,11 +97246,13 @@ msgstr[1] "" #: src/crafting.cpp src/game.cpp #: src/game.cpp #: src/iexamine.cpp +#: src/iexamine.cpp src/iuse.cpp #: src/iuse.cpp #: src/iuse.cpp src/iuse_actor.cpp #: src/iuse_actor.cpp +#: src/iuse_actor.cpp src/npctalk.cpp #: src/npctalk.cpp -#: src/npctalk.cpp src/pickup.cpp src/player.cpp +#: src/npctalk.cpp src/pickup.cpp #: src/player.cpp #: src/player.cpp src/veh_interact.cpp msgid "Never mind." @@ -106703,6 +106800,42 @@ msgstr "" msgid "You may have problems climbing back up. Climb down?" msgstr "" +#: src/iexamine.cpp +msgid "Autodoc Mk. XI. Status: Online. Please choose operation." +msgstr "" + +#: src/iexamine.cpp +msgid "Choose Compact Bionic Module to install." +msgstr "" + +#: src/iexamine.cpp +msgid "Do nothing." +msgstr "" + +#: src/iexamine.cpp +msgid "No connected couches found. Operation impossible. Exiting." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"No patient found located on the connected couches. Operation impossible. " +"Exiting." +msgstr "" + +#: src/iexamine.cpp +msgid "Choose CBM to install" +msgstr "" + +#: src/iexamine.cpp +msgid "You type data into the console, configuring Autodoc to install a CBM." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"Autodoc injected you with anesthesia, and while you were sleeping conducted " +"a medical operation on you." +msgstr "" + #: src/iexamine.cpp msgid "Use electrohack?" msgstr "" @@ -113864,6 +113997,16 @@ msgstr "" msgid "You fail to disarm the trap, and you set it off!" msgstr "" +#: src/map.cpp +#, c-format +msgid "Something has crawled out of the %s plants!" +msgstr "" + +#: src/map.cpp +#, c-format +msgid "Something has crawled out of the %s!" +msgstr "" + #: src/map_extras.cpp msgid "DANGER! MINEFIELD!" msgstr "" @@ -116954,6 +117097,15 @@ msgstr "" msgid "A cockroach nymph crawls out of the pregnant giant cockroach corpse." msgstr "" +#: src/mondeath.cpp +#, c-format +msgid "an explosion of tank of the %s's flamethrower!" +msgstr "" + +#: src/mondeath.cpp +msgid "I love the smell of burning zed in the morning." +msgstr "" + #: src/mondefense.cpp #, c-format msgid "Striking the %1$s shocks %2$s!" @@ -121354,6 +121506,16 @@ msgid "" "scenario requiring a city start." msgstr "" +#: src/options.cpp +msgid "Carrion spawn rate scaling factor" +msgstr "" + +#: src/options.cpp +msgid "" +"A scaling factor that determines how often creatures spawn from rotting " +"material." +msgstr "" + #: src/options.cpp msgid "( WIP feature ) Determines terrain, shops, plants, and more." msgstr "" @@ -124658,10 +124820,6 @@ msgctxt "memorial_female" msgid "Succumbed to the infection." msgstr "" -#: src/player_hardcoded_effects.cpp -msgid "You fall asleep." -msgstr "" - #: src/player_hardcoded_effects.cpp msgid "You nestle your pile of clothes for warmth." msgstr "" From 3028344fdfb0aecd36360b2b885b965e074df5ec Mon Sep 17 00:00:00 2001 From: Brett Dong Date: Fri, 15 Jun 2018 20:08:32 +0800 Subject: [PATCH 54/56] i18n: Synchronized to the latest translations as of Jun 15, 2018 --- lang/po/de.po | 29 ++++++++--- lang/po/es_AR.po | 69 ++++++++++++++++++------- lang/po/es_ES.po | 29 ++++++++--- lang/po/fr.po | 74 ++++++++++++++++++--------- lang/po/it_IT.po | 27 +++++++--- lang/po/ja.po | 34 +++++++++---- lang/po/ko.po | 129 ++++++++++++++++++++++++++++------------------- lang/po/pl.po | 113 ++++++++++++++++++++++++++++++++--------- lang/po/pt_BR.po | 38 ++++++++++---- lang/po/ru.po | 33 +++++++++--- lang/po/sr.po | 24 +++++++-- lang/po/zh_CN.po | 94 +++++++++++++++++++--------------- lang/po/zh_TW.po | 28 +++++++--- 13 files changed, 505 insertions(+), 216 deletions(-) diff --git a/lang/po/de.po b/lang/po/de.po index 24f886af9482c..91470b728a9a4 100644 --- a/lang/po/de.po +++ b/lang/po/de.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: cataclysm-dda 0.C\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-06-01 19:14-0400\n" +"POT-Creation-Date: 2018-06-09 21:55+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Nico Brandt , 2018\n" "Language-Team: German (https://www.transifex.com/cataclysm-dda-translators/teams/2217/de/)\n" @@ -123215,8 +123215,19 @@ msgstr "Dort ist ein Holzkohleofen." #: src/iexamine.cpp #, c-format -msgid "It should take %d minutes to finish burning." -msgstr "Es sollte %d Minuten brauchen, bis es mit Brennen fertig ist." +msgid "It will finish burning in about %d hour." +msgid_plural "It will finish burning in about %d hours." +msgstr[0] "Es wird mit dem Brennen in ungefähr %d Stunde fertig sein." +msgstr[1] "Es wird mit dem Brennen in ungefähr %d Stunden fertig sein." + +#: src/iexamine.cpp +msgid "It will finish burning in less than an hour." +msgstr "Es wird mit dem Brennen in weniger als einer Stunde fertig sein." + +#: src/iexamine.cpp +#, c-format +msgid "It should take about %d minutes to finish burning." +msgstr "Es sollte etwa %d Minuten brauchen, bis es mit Brennen fertig ist." #: src/iexamine.cpp msgid "You have no brew to ferment." @@ -124438,8 +124449,8 @@ msgid "Compatible magazines: " msgstr "Kompatible Magazine: " #: src/item.cpp -msgid "Mods: " -msgstr "Mods: " +msgid "Mods: " +msgstr "Mods: " #: src/item.cpp #, c-format @@ -124761,8 +124772,8 @@ msgid "Contains items with qualities:" msgstr "Enthält Gegenstände mit Eigenschaften:" #: src/item.cpp -msgid "Techniques: " -msgstr "Techniken: " +msgid "Techniques when wielded: " +msgstr "Techniken, wenn getragen: " #: src/item.cpp msgid "* This item can be used to make long reach attacks." @@ -125278,6 +125289,10 @@ msgstr "kann %s nicht haben" msgid "isn't big enough to use that mod" msgstr "ist nicht groß genug, um diese Modifikation zu verwenden" +#: src/item.cpp +msgid "can only accept small mods on that slot" +msgstr "unterstützt nur kleine Mods in diesem Slot" + #. ~ %1$s - name of the gunmod, %2$s - name of the ammo #: src/item.cpp #, c-format diff --git a/lang/po/es_AR.po b/lang/po/es_AR.po index a4724f6d27364..d727d54e9802f 100644 --- a/lang/po/es_AR.po +++ b/lang/po/es_AR.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: cataclysm-dda 0.C\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-06-01 19:14-0400\n" +"POT-Creation-Date: 2018-06-09 21:55+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Brett Dong , 2018\n" "Language-Team: Spanish (Argentina) (https://www.transifex.com/cataclysm-dda-translators/teams/2217/es_AR/)\n" @@ -22754,8 +22754,8 @@ msgid "" "Salted chips made from corn tortillas, could really use some cheese, maybe " "some beef." msgstr "" -"Son papas fritas saladas hechas con tortilla de maíz, a las que les vendría " -"bien un poco de queso, y carne también." +"Son nachos de maíz salados, a las que les vendría bien un poco de queso, y " +"carne también." #: lang/json/COMESTIBLE_from_json.py msgid "nachos with cheese" @@ -22769,8 +22769,8 @@ msgid "" "Salted chips made from corn tortillas, now with cheese. Could stand to have" " some meat." msgstr "" -"Son papas fritas saladas hechas con tortilla de maíz, ahora con queso. Le " -"vendría bien un poco de carne." +"Son nachos de maíz salados, ahora con queso. Le vendría bien un poco de " +"carne." #: lang/json/COMESTIBLE_from_json.py msgid "nachos with meat" @@ -22784,8 +22784,8 @@ msgid "" "Salted chips made from corn tortillas, now with meat. Could probably use " "some cheese, though." msgstr "" -"Son papas fritas saladas hechas con tortilla de maíz, ahora con carne. Le " -"vendría bien un poco de queso." +"Son nachos de maíz salados, ahora con carne. Le vendría bien un poco de " +"queso." #: lang/json/COMESTIBLE_from_json.py msgid "niño nachos" @@ -22799,6 +22799,8 @@ msgid "" "Salted chips made from corn tortillas, with human flesh. Some cheese might " "make it even better." msgstr "" +"Son nachos de maíz salados, con carne humana. Un poco de queso les quedaría " +"muy bien." #: lang/json/COMESTIBLE_from_json.py msgid "nachos with meat and cheese" @@ -22812,6 +22814,7 @@ msgid "" "Salted chips made from corn tortillas with ground meat and smothered in " "cheese. Delicious." msgstr "" +"Son nachos de maíz salados con carne picada y queso cremoso. Delicioso." #: lang/json/COMESTIBLE_from_json.py msgid "niño nachos with cheese" @@ -22825,6 +22828,7 @@ msgid "" "Salted chips made from corn tortillas with human flesh and smothered in " "cheese. Delicious." msgstr "" +"Son nachos de maíz salados con carne humana y queso cremoso. Delicioso." #: lang/json/COMESTIBLE_from_json.py msgid "popcorn kernels" @@ -30269,6 +30273,11 @@ msgid "" "flowers, holding gift baskets, containing a fruit basket and herbs, loose " "item storage or as an ice bucket." msgstr "" +"Es un balde galvanizado para llevar maní, vino frío, cerveza helada, " +"langostinos, patas de cangrejo, papas fritas, comida para animales, usar en " +"la granja, choripaneadas, fabricaciones, plantar flores, llevar canastas de " +"regalos, llevar canastas de fruta e hierbas, almacenar varios objetos o para" +" usar como balde de hielo." #: lang/json/CONTAINER_from_json.py msgid "hydration pack" @@ -44528,6 +44537,8 @@ msgstr "salmón" #: lang/json/MONSTER_from_json.py msgid "A salmon. A very fatty, nutritious fish. Tastes great smoked." msgstr "" +"Es un salmón. Es un pez bastante gordo y nutritivo. Ahumado tiene muy buen " +"sabor." #: lang/json/MONSTER_from_json.py msgid "sunfish" @@ -44611,7 +44622,7 @@ msgstr "" #: lang/json/MONSTER_from_json.py msgid "lobster" -msgstr "" +msgstr "langosta" #. ~ Description for lobster #: lang/json/MONSTER_from_json.py @@ -44626,7 +44637,7 @@ msgstr "" #: lang/json/MONSTER_from_json.py msgid "crayfish" -msgstr "" +msgstr "cangrejo de río" #. ~ Description for crayfish #: lang/json/MONSTER_from_json.py @@ -47310,6 +47321,9 @@ msgid "" "guard and a tassel attached to the pommel. One of the four major weapons in" " folklore, alongside the dao sabre, qiang spear, and gun staff." msgstr "" +"Es una antigua espada china recta de doble filo, con la guarda ornamentada y" +" una borla unida al pomo. Una de las cuatro armas principales de su " +"tradición, junto con el sable dao, la lanza qiang y el bastón gun." #. ~ Description for jian #: lang/json/TOOL_from_json.py @@ -48036,8 +48050,8 @@ msgstr "" #: lang/json/TOOL_from_json.py msgid "inactive anti-materiel turret" msgid_plural "inactive anti-materiel turrets" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "torreta anti-material inactiva" +msgstr[1] "torretas anti-material inactivas" #. ~ Description for inactive anti-materiel turret #: lang/json/TOOL_from_json.py @@ -48050,6 +48064,12 @@ msgid "" "turret will identify you as a friendly, and attack all enemies with a built-" "in rifle." msgstr "" +"Es una torreta anti-material inactiva. Usarla incluye cargar la unidad con " +"las balas .50 BMG que haya en tu inventario (si querés dividir tu munición, " +"dejá las .50 BMG que NO quieras ponerle a la torreta), después prenderla y " +"ubicarla en el suelo, donde se desplegará sola. Si se la reprograma e " +"instala correctamente, la torreta te identificará como aliado y atacará a " +"todos tus enemigos con su rifle incorporado." #: lang/json/TOOL_from_json.py msgid "inactive manhack" @@ -120839,8 +120859,19 @@ msgstr "Acá hay una fosa de carbonización." #: src/iexamine.cpp #, c-format -msgid "It should take %d minutes to finish burning." -msgstr "Debería tardar %d minutos en terminar la combustión." +msgid "It will finish burning in about %d hour." +msgid_plural "It will finish burning in about %d hours." +msgstr[0] "" +msgstr[1] "" + +#: src/iexamine.cpp +msgid "It will finish burning in less than an hour." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "It should take about %d minutes to finish burning." +msgstr "" #: src/iexamine.cpp msgid "You have no brew to ferment." @@ -122061,8 +122092,8 @@ msgid "Compatible magazines: " msgstr "Cargadores compatibles: " #: src/item.cpp -msgid "Mods: " -msgstr "Mods: " +msgid "Mods: " +msgstr "" #: src/item.cpp #, c-format @@ -122387,8 +122418,8 @@ msgid "Contains items with qualities:" msgstr "Contiene objetos con calidades:" #: src/item.cpp -msgid "Techniques: " -msgstr "Técnicas: " +msgid "Techniques when wielded: " +msgstr "" #: src/item.cpp msgid "* This item can be used to make long reach attacks." @@ -122905,6 +122936,10 @@ msgstr "no puede tener un/a %s" msgid "isn't big enough to use that mod" msgstr "no es suficientemente grande para usar esa modificación" +#: src/item.cpp +msgid "can only accept small mods on that slot" +msgstr "" + #. ~ %1$s - name of the gunmod, %2$s - name of the ammo #: src/item.cpp #, c-format diff --git a/lang/po/es_ES.po b/lang/po/es_ES.po index 69f84fd4a1c11..310c91145daf4 100644 --- a/lang/po/es_ES.po +++ b/lang/po/es_ES.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: cataclysm-dda 0.C\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-06-01 19:14-0400\n" +"POT-Creation-Date: 2018-06-09 21:55+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Da WhatTheFox , 2018\n" "Language-Team: Spanish (Spain) (https://www.transifex.com/cataclysm-dda-translators/teams/2217/es_ES/)\n" @@ -119217,8 +119217,19 @@ msgstr "Aquí hay una fosa de carbonización." #: src/iexamine.cpp #, c-format -msgid "It should take %d minutes to finish burning." -msgstr "Debería tardar %d minutos en terminar la combustión." +msgid "It will finish burning in about %d hour." +msgid_plural "It will finish burning in about %d hours." +msgstr[0] "" +msgstr[1] "" + +#: src/iexamine.cpp +msgid "It will finish burning in less than an hour." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "It should take about %d minutes to finish burning." +msgstr "" #: src/iexamine.cpp msgid "You have no brew to ferment." @@ -120439,8 +120450,8 @@ msgid "Compatible magazines: " msgstr "Cargadores compatibles: " #: src/item.cpp -msgid "Mods: " -msgstr "Mods: " +msgid "Mods: " +msgstr "" #: src/item.cpp #, c-format @@ -120763,8 +120774,8 @@ msgid "Contains items with qualities:" msgstr "Contiene objetos con calidades:" #: src/item.cpp -msgid "Techniques: " -msgstr "Técnicas: " +msgid "Techniques when wielded: " +msgstr "" #: src/item.cpp msgid "* This item can be used to make long reach attacks." @@ -121275,6 +121286,10 @@ msgstr "no puedes tener un/a %s" msgid "isn't big enough to use that mod" msgstr "no es lo suficientemente grande como para usar esa modificación" +#: src/item.cpp +msgid "can only accept small mods on that slot" +msgstr "" + #. ~ %1$s - name of the gunmod, %2$s - name of the ammo #: src/item.cpp #, c-format diff --git a/lang/po/fr.po b/lang/po/fr.po index 909e26c5729fd..638c6419abaec 100644 --- a/lang/po/fr.po +++ b/lang/po/fr.po @@ -1,17 +1,17 @@ # Translators: # Mickaël Falck , 2018 -# Julien Maitre , 2018 -# Brett Dong , 2018 -# Argasm Voragz , 2018 # Jazz , 2018 # _hickop, 2018 +# Brett Dong , 2018 +# Argasm Voragz , 2018 +# Julien Maitre , 2018 # Réouven Assouly , 2018 # master zu, 2018 msgid "" msgstr "" "Project-Id-Version: cataclysm-dda 0.C\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-06-01 19:14-0400\n" +"POT-Creation-Date: 2018-06-09 21:55+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: master zu, 2018\n" "Language-Team: French (https://www.transifex.com/cataclysm-dda-translators/teams/2217/fr/)\n" @@ -5551,7 +5551,7 @@ msgstr "" #: lang/json/AMMO_from_json.py msgid "makeshift shotgun shot" -msgstr "balle de fusil de chasse de fortune" +msgstr "balle de fusil à pompe de fortune" #. ~ Description for makeshift shotgun shot #: lang/json/AMMO_from_json.py @@ -7452,7 +7452,7 @@ msgid "" "travels. It has a lot of storage space." msgstr "" "Une tenue de fortune faite de vêtements pré-cataclysme conçue pour de longs " -"voyages." +"voyages. Elle a beaucoup de poches." #: lang/json/ARMOR_from_json.py msgid "plated leather armor" @@ -33794,6 +33794,8 @@ msgid "" "A telescoping baton that collapses for easy storage. Makes an excellent " "melee weapon. Activate to expand." msgstr "" +"Une matraque télescopique qui se réduit pour un rangement plus facile. Fait " +"une excellente arme de mêlée. Activer pour développer" #: lang/json/GENERIC_from_json.py msgid "expandable baton (extended)" @@ -33817,6 +33819,8 @@ msgid "" "A telescoping baton that collapses for easy storage. Makes an excellent " "melee weapon. Activate to collapse." msgstr "" +"Une matraque télescopique qui se réduit pour un rangement plus facile. Fait " +"une excellente arme de mêlée. Activer pour réduire." #: lang/json/GENERIC_from_json.py msgid "bee sting" @@ -33828,17 +33832,18 @@ msgstr[1] "dards d'abeille" #: lang/json/GENERIC_from_json.py msgid "A six-inch stinger from a giant bee. Makes a mediocre melee weapon." msgstr "" +"Un dard de 6 pouces d'une abeille géante. Fait une arme médiocre de mêlée" #: lang/json/GENERIC_from_json.py msgid "fungal fighter sting" msgid_plural "fungal fighter stings" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Dard d'un guerrier fongique" +msgstr[1] "dards d'un guerrier fongique" #. ~ Description for fungal fighter sting #: lang/json/GENERIC_from_json.py msgid "A short dart from a fungal fighter. Makes an poor melee weapon." -msgstr "" +msgstr "Un petit dard d'un guerrier fongique. Fait une pauvre arme de Mélée." #: lang/json/GENERIC_from_json.py msgid "wasp sting" @@ -37037,8 +37042,8 @@ msgstr "" #: lang/json/GENERIC_from_json.py msgid "makeshift air filter" msgid_plural "makeshift air filters" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "filtre à air de fortune" +msgstr[1] "filtres à air de fortune" #. ~ Description for makeshift air filter #: lang/json/GENERIC_from_json.py @@ -37061,8 +37066,8 @@ msgstr "" #: lang/json/GENERIC_from_json.py msgid "makeshift automotive filter" msgid_plural "makeshift automotive filters" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "filtre pour voiture de fortune" +msgstr[1] "filtres pour voiture de fortune" #. ~ Description for makeshift automotive filter #: lang/json/GENERIC_from_json.py @@ -37200,8 +37205,8 @@ msgstr "" #: lang/json/GENERIC_from_json.py msgid "makeshift bayonet" msgid_plural "makeshift bayonets" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "baïonnette de fortune" +msgstr[1] "baïonnettes de fortune" #. ~ Description for makeshift bayonet #: lang/json/GENERIC_from_json.py @@ -37209,6 +37214,8 @@ msgid "" "A makeshift version of a bayonet that consists of a mere spike with some " "string." msgstr "" +"Une baïonnettes de fortune faite à partir d'une simple pointe et de " +"ficelles." #: lang/json/GENERIC_from_json.py msgid "aluminum ingot" @@ -37336,6 +37343,8 @@ msgid "" "A makeshift pallet lifter. If attached to a frame it could be used to lift " "up to 0.5 metric tonnes." msgstr "" +"Un porte palettes de fortune. Attachée à un cadre il peut être utilisé pour " +"lever jusqu’à une demi tonne." #: lang/json/GENERIC_from_json.py msgid "vehicle crafting rig" @@ -38004,8 +38013,8 @@ msgstr "" #: lang/json/GENERIC_from_json.py msgid "makeshift pot" msgid_plural "makeshift pots" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "pot de fortune" +msgstr[1] "pots de fortune" #. ~ Description for makeshift pot #: lang/json/GENERIC_from_json.py @@ -40106,7 +40115,7 @@ msgstr "Pas de monstres fongiques" #. ~ Description for No Fungal Monsters #: lang/json/MOD_INFO_from_json.py msgid "Removes fungal monsters and regions from the game." -msgstr "" +msgstr "Retire les monstres et les régions fongiques du jeux." #: lang/json/MOD_INFO_from_json.py msgid "No Medieval Items" @@ -77585,7 +77594,7 @@ msgstr "" #: lang/json/mutation_from_json.py msgid "Bee" -msgstr "" +msgstr "Abeille" #. ~ Description for Bee #: lang/json/mutation_from_json.py @@ -77593,6 +77602,8 @@ msgid "" "NPC trait that makes monsters see it as a bee. It is a bug (heh) if you " "have it." msgstr "" +"Trait d'un NPC faisant voir les monstres comme des abailles. C'est un bug " +"(eheh) si vous l'avez." #: lang/json/mutation_from_json.py msgid "mute" @@ -114436,8 +114447,19 @@ msgstr "Il y a un four à charbon ici." #: src/iexamine.cpp #, c-format -msgid "It should take %d minutes to finish burning." -msgstr "Il faut %d minutes pour que tout soit brûlé." +msgid "It will finish burning in about %d hour." +msgid_plural "It will finish burning in about %d hours." +msgstr[0] "" +msgstr[1] "" + +#: src/iexamine.cpp +msgid "It will finish burning in less than an hour." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "It should take about %d minutes to finish burning." +msgstr "" #: src/iexamine.cpp msgid "You have no brew to ferment." @@ -115628,7 +115650,7 @@ msgid "Compatible magazines: " msgstr "Chargeurs compatibles: " #: src/item.cpp -msgid "Mods: " +msgid "Mods: " msgstr "" #: src/item.cpp @@ -115946,8 +115968,8 @@ msgid "Contains items with qualities:" msgstr "Contient des objets avec les qualités:" #: src/item.cpp -msgid "Techniques: " -msgstr "Techniques: " +msgid "Techniques when wielded: " +msgstr "" #: src/item.cpp msgid "* This item can be used to make long reach attacks." @@ -116430,6 +116452,10 @@ msgstr "" msgid "isn't big enough to use that mod" msgstr "" +#: src/item.cpp +msgid "can only accept small mods on that slot" +msgstr "" + #. ~ %1$s - name of the gunmod, %2$s - name of the ammo #: src/item.cpp #, c-format diff --git a/lang/po/it_IT.po b/lang/po/it_IT.po index 9cfd627188b67..95fbb12f8e0e7 100644 --- a/lang/po/it_IT.po +++ b/lang/po/it_IT.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: cataclysm-dda 0.C\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-06-01 19:14-0400\n" +"POT-Creation-Date: 2018-06-09 21:55+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: F D , 2018\n" "Language-Team: Italian (Italy) (https://www.transifex.com/cataclysm-dda-translators/teams/2217/it_IT/)\n" @@ -108877,8 +108877,19 @@ msgstr "C'è una carbonaia lì." #: src/iexamine.cpp #, c-format -msgid "It should take %d minutes to finish burning." -msgstr "Dovrebbe impiegare %d minuti per finire di bruciare." +msgid "It will finish burning in about %d hour." +msgid_plural "It will finish burning in about %d hours." +msgstr[0] "" +msgstr[1] "" + +#: src/iexamine.cpp +msgid "It will finish burning in less than an hour." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "It should take about %d minutes to finish burning." +msgstr "" #: src/iexamine.cpp msgid "You have no brew to ferment." @@ -110052,7 +110063,7 @@ msgid "Compatible magazines: " msgstr "" #: src/item.cpp -msgid "Mods: " +msgid "Mods: " msgstr "" #: src/item.cpp @@ -110368,8 +110379,8 @@ msgid "Contains items with qualities:" msgstr "" #: src/item.cpp -msgid "Techniques: " -msgstr "Tecniche:" +msgid "Techniques when wielded: " +msgstr "" #: src/item.cpp msgid "* This item can be used to make long reach attacks." @@ -110850,6 +110861,10 @@ msgstr "" msgid "isn't big enough to use that mod" msgstr "" +#: src/item.cpp +msgid "can only accept small mods on that slot" +msgstr "" + #. ~ %1$s - name of the gunmod, %2$s - name of the ammo #: src/item.cpp #, c-format diff --git a/lang/po/ja.po b/lang/po/ja.po index 69cbb0601580c..52b151da36642 100644 --- a/lang/po/ja.po +++ b/lang/po/ja.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: cataclysm-dda 0.C\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-06-01 19:14-0400\n" +"POT-Creation-Date: 2018-06-09 21:55+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: AkAset , 2018\n" "Language-Team: Japanese (https://www.transifex.com/cataclysm-dda-translators/teams/2217/ja/)\n" @@ -74431,7 +74431,7 @@ msgstr "" #: lang/json/professions_from_json.py msgctxt "profession_male" msgid "Fisher" -msgstr "釣師" +msgstr "釣り人" #. ~ Profession (male Fisher) description #: lang/json/professions_from_json.py @@ -74448,7 +74448,7 @@ msgstr "" #: lang/json/professions_from_json.py msgctxt "profession_female" msgid "Fisher" -msgstr "釣師" +msgstr "釣り人" #. ~ Profession (female Fisher) description #: lang/json/professions_from_json.py @@ -94043,7 +94043,7 @@ msgid "" "%s: %i more slot(s) needed." msgstr "" "\n" -"%s: %iスロット不足しています。" +"%s: あと%iのスロットが必要です。" #: src/bionics.cpp #, c-format @@ -105632,8 +105632,18 @@ msgstr "そこには炭焼窯があります。" #: src/iexamine.cpp #, c-format -msgid "It should take %d minutes to finish burning." -msgstr "燃焼を終えるまで%d分掛かります。" +msgid "It will finish burning in about %d hour." +msgid_plural "It will finish burning in about %d hours." +msgstr[0] "あと%d時間ほどで完全に燃え尽きます。" + +#: src/iexamine.cpp +msgid "It will finish burning in less than an hour." +msgstr "あと1時間ほどで完全に燃え尽きます。" + +#: src/iexamine.cpp +#, c-format +msgid "It should take about %d minutes to finish burning." +msgstr "あと%d分ほどで完全に燃え尽きます。" #: src/iexamine.cpp msgid "You have no brew to ferment." @@ -106801,8 +106811,8 @@ msgid "Compatible magazines: " msgstr "互換弾倉 : " #: src/item.cpp -msgid "Mods: " -msgstr "MOD: " +msgid "Mods: " +msgstr "MOD: " #: src/item.cpp #, c-format @@ -107113,8 +107123,8 @@ msgid "Contains items with qualities:" msgstr "収納されている道具の性能: " #: src/item.cpp -msgid "Techniques: " -msgstr "技術: " +msgid "Techniques when wielded: " +msgstr "装備時の技術: " #: src/item.cpp msgid "* This item can be used to make long reach attacks." @@ -107600,6 +107610,10 @@ msgstr "%sは取付不可" msgid "isn't big enough to use that mod" msgstr "空間不足" +#: src/item.cpp +msgid "can only accept small mods on that slot" +msgstr "MODが大きすぎて取り付けられない" + #. ~ %1$s - name of the gunmod, %2$s - name of the ammo #: src/item.cpp #, c-format diff --git a/lang/po/ko.po b/lang/po/ko.po index 37b9cee698dac..e06f995cd823b 100644 --- a/lang/po/ko.po +++ b/lang/po/ko.po @@ -1,4 +1,5 @@ # Translators: +# fenjo , 2018 # indejeC , 2018 # Brett Dong , 2018 # 탯새 , 2018 @@ -6,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: cataclysm-dda 0.C\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-06-01 19:14-0400\n" +"POT-Creation-Date: 2018-06-09 21:55+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: 탯새 , 2018\n" "Language-Team: Korean (https://www.transifex.com/cataclysm-dda-translators/teams/2217/ko/)\n" @@ -1548,13 +1549,13 @@ msgstr "" #: lang/extra/android/options.cpp msgid "Default gameplay shortcuts" -msgstr "" +msgstr "기본 게임플레이 단축키" #: lang/extra/android/options.cpp msgid "" "The default set of gameplay shortcuts to show. Used on starting a new game " "and whenever all gameplay shortcuts are removed." -msgstr "" +msgstr "화면 밑에 기본으로 표시되는 단축키를 설정합니다. 새로운 시작 혹은 기존 단축키가 삭제될 경우에 사용됩니다." #: lang/extra/android/options.cpp msgid "Add shortcuts for action menu selections" @@ -1577,11 +1578,11 @@ msgstr "" #: lang/extra/android/options.cpp msgid "Tap key (in-game)" -msgstr "" +msgstr "탭키 (게임 내)" #: lang/extra/android/options.cpp msgid "The key to press when tapping during gameplay." -msgstr "" +msgstr "게임 플레이 도중 화면을 두번 터치했을때 사용할 키를 설정합니다." #: lang/extra/android/options.cpp msgid "Two-finger tap key (in-game)" @@ -2435,7 +2436,7 @@ msgstr "목재 화살-그을림" msgid "" "This simple arrow has a fire-hardened point and fletching. Stands a below " "average chance of remaining intact once fired." -msgstr "촉 부분을 뾰족하게 깎아 불로 그을려 단단하게 만들고 깃을 붙인 단순한 화살. 재사용 확률 평균." +msgstr "촉 부분을 뾰족하게 깎아 불로 그을려 단단하게 만들고 깃을 붙인 단순한 화살. 재사용 확률 평균 이하." #: lang/json/AMMO_from_json.py msgid "field point wooden arrow" @@ -5997,8 +5998,7 @@ msgid "" "large amounts of damage, but isn't particularly accurate. Stands a good " "chance of remaining intact once fired." msgstr "" -"목재를 깎아 날카롭게 만든 쇠뇌 볼트. 꽤 무겁기 때문에, 상당한 살상력을 낼수 있지만, 정확하지 못합니다. 사용후 재사용할 수 있는 " -"확률 높음." +"목재를 깎아 날카롭게 만든 쇠뇌 볼트. 꽤 무겁기 때문에, 상당한 살상력을 낼수 있지만, 정확하지 못합니다. 재사용 확률 높음." #: lang/json/AMMO_from_json.py msgid "lead ball" @@ -40188,7 +40188,9 @@ msgstr[0] "투시막대" msgid "" "Item to test aep_clairvoyance_plus flag. If this spawns randomly, then it's " "a bug." -msgstr "aep_clairvoyance_plus 플래그 시험용. 이것이 평범하게 생성된다면 버그입니다." +msgstr "" +"Item to test aep_clairvoyance_plus flag. If this spawns randomly, then it's " +"a bug." #: lang/json/TOOL_from_json.py msgid "boulder anvil" @@ -46596,7 +46598,7 @@ msgstr[0] "케라틴 덩어리 (성장중)" #. ~ Use action msg for growing electrified mass. #: lang/json/TOOL_from_json.py msgid "The blob balloons to full size." -msgstr "" +msgstr "블럽이 최대 크기로 부풀어 올랐다." #. ~ Use action not_ready_msg for growing keratinous mass. #. ~ Use action not_ready_msg for growing beaded mass. @@ -46620,7 +46622,7 @@ msgstr "" #. ~ Use action not_ready_msg for growing electrified mass. #: lang/json/TOOL_from_json.py msgid "Whatever it's doing, it's not done yet." -msgstr "" +msgstr "이게 뭘 하는건진 몰라도, 끝난게 아니다." #. ~ Description for growing keratinous mass #. ~ Description for growing beaded mass @@ -46645,7 +46647,7 @@ msgstr "" #: lang/json/TOOL_from_json.py msgid "" "Not quite fully grown, this blob requires nourishment to fully develop." -msgstr "" +msgstr "이 블럽은 다 자라려면 영양분이 필요하다." #: lang/json/TOOL_from_json.py msgid "growing beaded mass" @@ -46700,7 +46702,7 @@ msgstr[0] "젤라틴 덩어리 (증식중)" #. ~ Use action hostile_msg for multiplying oozing mass. #: lang/json/TOOL_from_json.py msgid "A blob splits and bounces away!" -msgstr "" +msgstr "블럽이 나뉘어 튀어올랐다!" #. ~ Description for multiplying gelatinous mass #. ~ Description for multiplying gray mass @@ -50804,7 +50806,7 @@ msgstr "가려움" #: lang/json/effects_from_json.py msgid "Writhing skin" -msgstr "" +msgstr "피부 뒤틀림" #: lang/json/effects_from_json.py msgid "Bugs in skin" @@ -51182,7 +51184,7 @@ msgstr "다투라 즐김" #. ~ Description of effect 'Experiencing Datura'. #: lang/json/effects_from_json.py msgid "Buy the ticket, take the ride. The datura has you now." -msgstr "" +msgstr "표를 사서 올라타세요. 이젠 다투라에 사로잡히셨네요." #: lang/json/effects_from_json.py msgid "Grabbed" @@ -51318,7 +51320,7 @@ msgstr "식사에 철분이 부족해서 빈혈이 점차 심해질 것이다." #. ~ Apply message for effect(s) 'Iron deficiency, Early anemia, Anemia'. #: lang/json/effects_from_json.py msgid "You begin feeling increasingly tired and listless." -msgstr "" +msgstr "점점 피곤해지고 힘이 빠지는 것 같다." #. ~ Remove message for effect(s) 'Iron deficiency, Early anemia, Anemia'. #: lang/json/effects_from_json.py @@ -51356,7 +51358,7 @@ msgstr "식사에 비타민 A가 부족해서 시력이 점차 나빠질 것이 #. blindness'. #: lang/json/effects_from_json.py msgid "You start struggling to make out the finer details." -msgstr "" +msgstr "눈이 침침해서 정교한 작업을 하기 어려워졌다." #. ~ Remove message for effect(s) 'VitA deficiency, Poor vision, Night #. blindness'. @@ -51438,7 +51440,7 @@ msgstr "괴혈병 증상이 진행되기 시작했다." #. ~ Remove message for effect(s) 'Early scurvy, Scurvy, Bad Scurvy'. #: lang/json/effects_from_json.py msgid "Your scurvy has resolved." -msgstr "괴혈병이 낫았습니다." +msgstr "괴혈병이 나았다." #. ~ Decay message for effect(s) 'Early scurvy, Scurvy, Bad Scurvy'. #: lang/json/effects_from_json.py @@ -51492,7 +51494,7 @@ msgstr "거의 회복됨" #: lang/json/effects_from_json.py msgid "This damaged limb is slowly regaining its functions." -msgstr "" +msgstr "이 부위는 서서히 기능을 되찾아가고 있다." #: lang/json/effects_from_json.py msgid "Disabled" @@ -51501,7 +51503,7 @@ msgstr "불구" #. ~ Description of effect 'Disabled'. #: lang/json/effects_from_json.py msgid "This limb is damaged beyond use and may require a splint to recover." -msgstr "" +msgstr "이 부위는 사용하기 어려울 정도로 손상되어 회복하려면 부목이 필요하다." #. ~ Apply message for effect(s) 'Disabled'. #: lang/json/effects_from_json.py @@ -52339,7 +52341,7 @@ msgstr "노란 실내 조경식물" #. ~ Description for yellow indoor plant #: lang/json/furniture_from_json.py msgid "A variety of plant for decoration. It's yellow." -msgstr "" +msgstr "장식을 위한 식물. 노랗다." #: lang/json/furniture_from_json.py lang/json/vehicle_part_from_json.py msgid "bed" @@ -52348,7 +52350,7 @@ msgstr "침대" #. ~ Description for bed #: lang/json/furniture_from_json.py msgid "Quite comfortable to sleep in." -msgstr "" +msgstr "잠들기에 편하다." #: lang/json/furniture_from_json.py msgid "toilet" @@ -52361,7 +52363,7 @@ msgstr "" #: lang/json/furniture_from_json.py msgid "porcelain breaking!" -msgstr "도자기가 깨졌습니다!" +msgstr "도자기 깨짐!" #: lang/json/furniture_from_json.py msgid "whunk!" @@ -80312,6 +80314,9 @@ msgid "" "Someone used a blue pen to write \"who gives a shit\" across the slogan and " "put X's over the eyes of all the animals." msgstr "" +"유명 제조사의 태양광 차량 포스터. 수풀이 우거진 시골가를 가로지르는 차를 보는 작은 동물이 그려져 있습니다. \"연료통 하나씩 줄여 " +"세상을 바꿔나갑니다\" 라는 슬로건이 위에 적혀있고, 누가 파란 펜으로 슬로건 위에 \"조또\" 라고 쓰고 동물 눈알 마다 엑스표시를 " +"해놨습니다." #: lang/json/snippet_from_json.py msgid "" @@ -86037,7 +86042,7 @@ msgstr "너를 고용하려면 얼마나 필요하지?" #: lang/json/talk_topic_from_json.py msgid "" "I'm just a hired hand. Someone pays me and I do what needs to be done." -msgstr "" +msgstr "난 그냥 돈받고 하는거야. 하라고 돈을 받았으니까, 하라고 한 걸 하는거야." #: lang/json/talk_topic_from_json.py msgid "" @@ -86094,7 +86099,7 @@ msgstr "" #: lang/json/talk_topic_from_json.py msgid "Pack your bags, . We're going on a trip." -msgstr "" +msgstr "가방 챙겨, . 떠날거야." #: lang/json/technique_from_json.py msgid "Not at technique at all" @@ -86107,7 +86112,7 @@ msgstr "막기" #. ~ Description for Block #: lang/json/technique_from_json.py msgid "Medium blocking ability" -msgstr "중등 막기 능력" +msgstr "중급 방어기능" #: lang/json/technique_from_json.py #, python-format @@ -86121,17 +86126,17 @@ msgstr "이(가) %s을(를) 막았다." #: lang/json/technique_from_json.py msgid "Parry" -msgstr "쳐내기" +msgstr "받아내기" #. ~ Description for Parry #: lang/json/technique_from_json.py msgid "High blocking ability" -msgstr "고급 막기 능력" +msgstr "상급 방어기능" #: lang/json/technique_from_json.py #, python-format msgid "You parry %s" -msgstr "%s을(를) 쳐냈다." +msgstr "%s을(를) 받아냈다" #: lang/json/technique_from_json.py #, python-format @@ -86145,12 +86150,12 @@ msgstr "방패" #. ~ Description for Shield #: lang/json/technique_from_json.py msgid "Very high blocking ability" -msgstr "매우 고급 막기 능력" +msgstr "최상급 방어기능" #: lang/json/technique_from_json.py #, python-format msgid "You shield against %s" -msgstr "%s을(를) 받아냈다." +msgstr "%s을(를) 막아냈다." #: lang/json/technique_from_json.py #, python-format @@ -86355,12 +86360,12 @@ msgstr "무장해제" #: lang/json/technique_from_json.py #, python-format msgid "You disarm %s using your whip" -msgstr "" +msgstr "채찍으로 %s의 무장을 해제시켰다" #: lang/json/technique_from_json.py #, python-format msgid " disarms %s using their whip" -msgstr "" +msgstr "이(가) 채찍으로 %s의 무장을 해제시켰다" #: lang/json/technique_from_json.py msgid "Counterattack" @@ -86443,7 +86448,7 @@ msgstr "크로스 카운터" #: lang/json/technique_from_json.py #, python-format msgid "You cross-counter %s" -msgstr "" +msgstr "%s에게 크로스 카운터를 먹였다." #: lang/json/technique_from_json.py #, python-format @@ -86892,12 +86897,12 @@ msgstr "햄스트링" #: lang/json/technique_from_json.py #, python-format msgid "You ground %s with a low blow" -msgstr "" +msgstr "%s의 고간을 쳐서 넘어트렸다" #: lang/json/technique_from_json.py #, python-format msgid " grounds %s with a low blow" -msgstr "이(가) %s의 고간을 쳐서 넘어트렸다!" +msgstr "이(가) %s의 고간을 쳐서 넘어트렸다" #: lang/json/technique_from_json.py msgid "Vicious Precision" @@ -86929,12 +86934,12 @@ msgstr "고간 타격" #: lang/json/technique_from_json.py #, python-format msgid "You hit %s with a dirty blow" -msgstr "" +msgstr "%s의 고간을 타격했다" #: lang/json/technique_from_json.py #, python-format msgid " delivers a dirty blow to %s" -msgstr "" +msgstr "이(가) %s의 고간을 타격했다" #: lang/json/technique_from_json.py msgid "Viper Hiss" @@ -95206,13 +95211,13 @@ msgstr "%s을(를) 완벽히 제거했다." #, c-format msgctxt "memorial_male" msgid "Failed to remove bionic: %s." -msgstr "" +msgstr "바이오닉 제거 실패: %s." #: src/bionics.cpp #, c-format msgctxt "memorial_female" msgid "Failed to remove bionic: %s." -msgstr "" +msgstr "바이오닉 제거 실패: %s." #. ~ : more slot(s) needed. #: src/bionics.cpp @@ -97571,7 +97576,7 @@ msgstr "분해할 수 없다." #: src/crafting.cpp msgid "It's rotten, I'm not taking that apart." -msgstr "" +msgstr "썩어있어서 손대고 싶지 않다." #: src/crafting.cpp #, c-format @@ -97600,7 +97605,7 @@ msgstr[0] "%d 이상 충전된 %s이(가) 필요하다." #: src/npctalk.cpp src/pickup.cpp src/player.cpp src/player.cpp src/player.cpp #: src/veh_interact.cpp msgid "Never mind." -msgstr "아무것도 하지 않았다." +msgstr "아무것도 하지 않음." #: src/crafting.cpp #, c-format @@ -97610,6 +97615,10 @@ msgid "" "Really disassemble?\n" "You feel you may be able to understand this object's construction.\n" msgstr "" +"%s 분해시 획득:\n" +"%s\n" +"정말로 분해합니까?\n" +"이것의 구조를 이해할 수 있을지도 모릅니다.\n" #: src/crafting.cpp #, c-format @@ -97624,12 +97633,12 @@ msgstr "" #: src/crafting.cpp msgid "The item has vanished." -msgstr "그 물품은 사라져 버렸다. " +msgstr "물품이 사라졌다." #: src/crafting.cpp msgid "" "The item might be gone, at least it is not at the expected position anymore." -msgstr "" +msgstr "물품이 사라졌다. 적어도 제자리에 없는 건 확실하다." #: src/crafting.cpp #, c-format @@ -103897,7 +103906,7 @@ msgstr "숨을 쉬어야 하지만 수영을 할 수 없다! 뭍으로 올라가 #: src/game.cpp msgid "No hostile creature in reach. Waiting a turn." -msgstr "" +msgstr "사거리 내에 적 없음. 턴 넘김." #: src/game.cpp msgid "You dive into water." @@ -106801,8 +106810,18 @@ msgstr "그곳에는 목탄 가마가 없다." #: src/iexamine.cpp #, c-format -msgid "It should take %d minutes to finish burning." -msgstr "불이 꺼지기까지 %d분 정도 걸린다." +msgid "It will finish burning in about %d hour." +msgid_plural "It will finish burning in about %d hours." +msgstr[0] "" + +#: src/iexamine.cpp +msgid "It will finish burning in less than an hour." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "It should take about %d minutes to finish burning." +msgstr "" #: src/iexamine.cpp msgid "You have no brew to ferment." @@ -107970,8 +107989,8 @@ msgid "Compatible magazines: " msgstr "사용 탄창: " #: src/item.cpp -msgid "Mods: " -msgstr "개조: " +msgid "Mods: " +msgstr "" #: src/item.cpp #, c-format @@ -108282,8 +108301,8 @@ msgid "Contains items with qualities:" msgstr "담긴 물품 품질:" #: src/item.cpp -msgid "Techniques: " -msgstr "테크닉: " +msgid "Techniques when wielded: " +msgstr "" #: src/item.cpp msgid "* This item can be used to make long reach attacks." @@ -108768,6 +108787,10 @@ msgstr "%s 부착 불가능" msgid "isn't big enough to use that mod" msgstr "작아서 부품을 부착할 수 없다." +#: src/item.cpp +msgid "can only accept small mods on that slot" +msgstr "" + #. ~ %1$s - name of the gunmod, %2$s - name of the ammo #: src/item.cpp #, c-format @@ -110074,7 +110097,7 @@ msgstr "지레질을 해봤지만, 문을 열지 못했다." #: src/iuse.cpp msgid "You notice the door is unlocked, so you simply open it." -msgstr "" +msgstr "문이 잠겨있지 않았기에 그대로 열었다." #: src/iuse.cpp msgid "You lift the manhole cover." @@ -118088,7 +118111,7 @@ msgstr "%s이(가) 눈에 보일 정도로 빠르게 재생한다!" #: src/monster.cpp #, c-format msgid "The %s seems a little healthier." -msgstr "%s은(는) 조금 건강해보인다." +msgstr "%s은(는) 조금 회복된 것 같다." #: src/monster.cpp #, c-format diff --git a/lang/po/pl.po b/lang/po/pl.po index 3972a4ba06b44..4dbadc59cb3bf 100644 --- a/lang/po/pl.po +++ b/lang/po/pl.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: cataclysm-dda 0.C\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-06-01 19:14-0400\n" +"POT-Creation-Date: 2018-06-09 21:55+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Przemek Orechwa , 2018\n" "Language-Team: Polish (https://www.transifex.com/cataclysm-dda-translators/teams/2217/pl/)\n" @@ -9825,6 +9825,10 @@ msgid "" "with a layer of aluminum coating. They allow safely staring at extremely " "bright and harmful sources of light like the sun during a solar eclipse." msgstr "" +"Para okularów z kartonową oprawa z soczewkami złożonymi z filtrów UV i " +"podczerwieni, pokryte warstwą aluminium. Pozwalają na bezpieczne patrzenie " +"na ekstremalnie jasne źródła światła, jak na przykład słońce podczas " +"zaćmienia." #: lang/json/ARMOR_from_json.py msgid "pair of bifocal glasses" @@ -11883,10 +11887,10 @@ msgstr "Żaden poważany Szkot nie wychodzi z domu bez kiltu." #: lang/json/ARMOR_from_json.py msgid "leather kilt" msgid_plural "leather kilts" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "skórzany kilt" +msgstr[1] "skórzany kilt" +msgstr[2] "skórzany kilt" +msgstr[3] "skórzany kilt" #: lang/json/ARMOR_from_json.py msgid "kimono" @@ -24624,7 +24628,7 @@ msgstr "" #. ~ Description for potato chips #: lang/json/COMESTIBLE_from_json.py msgid "Some plain, salted potato chips." -msgstr "" +msgstr "Nieco prostych, solonych czipsów ziemniaczanych." #. ~ Description for potato chips #: lang/json/COMESTIBLE_from_json.py @@ -24634,10 +24638,10 @@ msgstr "O człowieku, uwielbiasz te czipsy. Wypas!" #: lang/json/COMESTIBLE_from_json.py msgid "tortilla chips" msgid_plural "tortilla chips" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "czipsy tortilla" +msgstr[1] "czipsy tortilla" +msgstr[2] "czipsy tortilla" +msgstr[3] "czipsy tortilla" #. ~ Description for tortilla chips #: lang/json/COMESTIBLE_from_json.py @@ -24645,6 +24649,8 @@ msgid "" "Salted chips made from corn tortillas, could really use some cheese, maybe " "some beef." msgstr "" +"Solone czipsy z kukurydzianej tortilli, którym przydałoby się nieco sera, " +"może też trochę wołowiny." #: lang/json/COMESTIBLE_from_json.py msgid "nachos with cheese" @@ -24660,6 +24666,8 @@ msgid "" "Salted chips made from corn tortillas, now with cheese. Could stand to have" " some meat." msgstr "" +"Solone czipsy z kukurydzianej tortilli, teraz wzbogacone o trochę sera. Może" +" nieco mięsa dopełniłoby kompozycję." #: lang/json/COMESTIBLE_from_json.py msgid "nachos with meat" @@ -24675,6 +24683,8 @@ msgid "" "Salted chips made from corn tortillas, now with meat. Could probably use " "some cheese, though." msgstr "" +"Solone czipsy z kukurydzianej tortilli, teraz z dodatkiem mięsa. Może nieco " +"sera dopełniłoby kompozycję." #: lang/json/COMESTIBLE_from_json.py msgid "niño nachos" @@ -24690,6 +24700,8 @@ msgid "" "Salted chips made from corn tortillas, with human flesh. Some cheese might " "make it even better." msgstr "" +"Solone czipsy z kukurydzianej tortilli teraz z dodatkiem ludzkiego mięsa. " +"Może nieco sera dopełniłoby kompozycję." #: lang/json/COMESTIBLE_from_json.py msgid "nachos with meat and cheese" @@ -24705,6 +24717,8 @@ msgid "" "Salted chips made from corn tortillas with ground meat and smothered in " "cheese. Delicious." msgstr "" +"Solone czipsy z kukurydzianej tortilli z mielonym mięsem i zatopione w " +"serze. Doskonałe." #: lang/json/COMESTIBLE_from_json.py msgid "niño nachos with cheese" @@ -24720,6 +24734,8 @@ msgid "" "Salted chips made from corn tortillas with human flesh and smothered in " "cheese. Delicious." msgstr "" +"Solone czipsy z kukurydzianej tortilli z mielonym ludzkim mięsem i zatopione" +" w serze. Doskonałe." #: lang/json/COMESTIBLE_from_json.py msgid "popcorn kernels" @@ -32650,6 +32666,10 @@ msgid "" "flowers, holding gift baskets, containing a fruit basket and herbs, loose " "item storage or as an ice bucket." msgstr "" +"Galwanizowane wiadro na orzeszki, chłodzone wino, zimne piwo, homary, krabie" +" odnóża, paszę dla zwierząt, do zastosowań farmerskich, piknikowania, " +"wytwarzania, sadzenia, na koszyk z prezentami, owocami, ziołami, lub innymi " +"drobnymi rzeczami, takoż jako wiadro z lodem." #: lang/json/CONTAINER_from_json.py msgid "hydration pack" @@ -47856,7 +47876,7 @@ msgstr "łosoś" #. ~ Description for salmon #: lang/json/MONSTER_from_json.py msgid "A salmon. A very fatty, nutritious fish. Tastes great smoked." -msgstr "" +msgstr "Łosoś to bardzo tłusta, pożywna ryba. Doskonała po uwędzeniu." #: lang/json/MONSTER_from_json.py msgid "sunfish" @@ -47944,7 +47964,7 @@ msgstr "" #: lang/json/MONSTER_from_json.py msgid "lobster" -msgstr "" +msgstr "homar" #. ~ Description for lobster #: lang/json/MONSTER_from_json.py @@ -47959,7 +47979,7 @@ msgstr "" #: lang/json/MONSTER_from_json.py msgid "crayfish" -msgstr "" +msgstr "rak" #. ~ Description for crayfish #: lang/json/MONSTER_from_json.py @@ -50792,6 +50812,9 @@ msgid "" "guard and a tassel attached to the pommel. One of the four major weapons in" " folklore, alongside the dao sabre, qiang spear, and gun staff." msgstr "" +"Starożytny chiński miecz, z ozdobnym jelcem i z przyłączonym frędzlem. Jedna" +" z czterech podstawowych broni w folklorze, razem z szablą dao, włócznią " +"qiang, i laską gun." #. ~ Description for jian #: lang/json/TOOL_from_json.py @@ -51566,10 +51589,10 @@ msgstr "" #: lang/json/TOOL_from_json.py msgid "inactive anti-materiel turret" msgid_plural "inactive anti-materiel turrets" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "nieaktywna wieżyczka przeciwsprzętowa" +msgstr[1] "nieaktywna wieżyczka przeciwsprzętowa" +msgstr[2] "nieaktywna wieżyczka przeciwsprzętowa" +msgstr[3] "nieaktywna wieżyczka przeciwsprzętowa" #. ~ Description for inactive anti-materiel turret #: lang/json/TOOL_from_json.py @@ -51582,6 +51605,12 @@ msgid "" "turret will identify you as a friendly, and attack all enemies with a built-" "in rifle." msgstr "" +"To nieaktywna wieżyczka przeciwsprzętowa. Użycie jej zakłada napełnienie " +"pojemników fabrycznymi nabojami .50 BMG kulowymi z twojego ekwipunku (więc " +"jak chcesz zostawić nieco sobie to rozdziel amunicję i odłóż na bok TWOJĄ " +"cześć), włączenie, postawienie na ziemi, gdzie się zagnieździ. Jeżeli " +"zostanie skutecznie przeprogramowana i przekablowana rozpozna cię jako " +"przyjaciela, i będzie atakować wrogów wbudowanym karabinem." #: lang/json/TOOL_from_json.py msgid "inactive manhack" @@ -65217,7 +65246,7 @@ msgstr "pompa diesla" #. ~ Description for diesel pump #: lang/json/fault_from_json.py msgid "Required to pump and pressurize diesel from a vehicles tank." -msgstr "" +msgstr "Potrzebna do pompowania i sprężania diesla ze zbiornika paliwa." #. ~ Description for air filter #: lang/json/fault_from_json.py @@ -70530,6 +70559,8 @@ msgid "" "This is a cheap laser rifle made from common components. Weak, but can be " "powered with rechargeable batteries." msgstr "" +"Tani laserowy karabin zrobiony z powszechnych komponentów. Słaby, ale może " +"być zasilany z ładowanych baterii." #: lang/json/gun_from_json.py msgid "pipe rifle: .45" @@ -76473,6 +76504,8 @@ msgid "" "Sport of the true gentleman, modern boxing has evolved from the prizefights " "of the Victorian era." msgstr "" +"Sport prawdziwych gentlemanów. Współczesny boks wyewoluował z walko o " +"nagrody z ery wiktoriańskiej." #. ~ Description of buff for martial art 'Boxing' #: lang/json/martial_art_from_json.py @@ -78084,6 +78117,9 @@ msgid "" "You give up? This country fell apart because no one could find a good man " "to rely on... might as well give up, I guess." msgstr "" +"Poddajesz się? Ten kraj się rozpadł bo nikt nie mógł znaleźć dobrego " +"człowieka, na którym można polegać... więc pewnie można się poddać, jak " +"sądzę." #: lang/json/mission_def_from_json.py msgid "Find Corporate Accounts" @@ -78978,6 +79014,12 @@ msgid "" "unfortunately be ignored for now, without a dedicated emergency power system" " they won't be useful for some time." msgstr "" +"Większość niezbędnego sprzętu jest już z powrotem przywrócona do działania, " +"więc czas najwyższy żebyś zainstalował twój pierwszy mod wzmacniaka. Udaj " +"się na powierzchnię i zlokalizuj najbliższą stację radiową. Zainstaluj mod " +"na zapasowym terminalu i wróć do mnie żebym mógł zweryfikować czy wszystko " +"działa. Wieże radiowe niestety będą na razie pominięte, bo bez dedykowanego " +"zasilania awaryjnego przez pewien czas nie będą zdatne do użycia." #: lang/json/mission_def_from_json.py msgid "I'll be standing by down here once you are done." @@ -79212,6 +79254,14 @@ msgid "" "charge, I'm sure he could use your skills. Don't forget to wear your badge " "when meeting with them. Thank you once again marshal." msgstr "" +"Marszalu, nie przestajesz imponować. Jeśli jesteś zainteresowany, to " +"otrzymałem wieść że oddział został rozlokowany na naszym terytorium. Nie mam" +" dokładnych namiarów, ale powiedzieli, że zabezpieczają podziemną instalację" +" i mogą potrzebować pomocy. Niewiele więcej będę w stanie powiedzieć. Śmigło" +" podrzuciło ich do stacji pomp. Gdyby udało ci się zlokalizować kapitana " +"dowodzącego, to jestem pewien że skorzysta z twojej pomocy. Nie zapomnij " +"nosić odznaki jak wyjdziesz im naprzeciw. Jeszcze raz wyrazy wdzięczności " +"marszalu." #: lang/json/mission_def_from_json.py msgid "Make 2 Stills" @@ -114332,7 +114382,7 @@ msgstr[3] "%d lat" #: src/calendar.cpp msgid "for ever" -msgstr "" +msgstr "na zawsze" #. ~ %1$s - greater units of time (e.g. 3 hours), %2$s - lesser units of time #. (e.g. 11 minutes). @@ -125476,7 +125526,20 @@ msgstr "Jest tu piec do wypalania węgla drzewnego." #: src/iexamine.cpp #, c-format -msgid "It should take %d minutes to finish burning." +msgid "It will finish burning in about %d hour." +msgid_plural "It will finish burning in about %d hours." +msgstr[0] "Koniec wypalania nastąpi za około %d godzinę." +msgstr[1] "Koniec wypalania nastąpi za około %d godzin." +msgstr[2] "Koniec wypalania nastąpi za około %d godzin." +msgstr[3] "Koniec wypalania nastąpi za około %d godzin." + +#: src/iexamine.cpp +msgid "It will finish burning in less than an hour." +msgstr "Koniec wypalania nastąpi za mniej niż godzinę." + +#: src/iexamine.cpp +#, c-format +msgid "It should take about %d minutes to finish burning." msgstr "Koniec wypalania powinien nastąpić za %d minut." #: src/iexamine.cpp @@ -126686,7 +126749,7 @@ msgid "Compatible magazines: " msgstr "Kompatybilne magazynki: " #: src/item.cpp -msgid "Mods: " +msgid "Mods: " msgstr "Mody: " #: src/item.cpp @@ -127024,8 +127087,8 @@ msgid "Contains items with qualities:" msgstr "Zawiera przedmioty z cechami:" #: src/item.cpp -msgid "Techniques: " -msgstr "Techniki:" +msgid "Techniques when wielded: " +msgstr "Techniki gdy władany: " #: src/item.cpp msgid "* This item can be used to make long reach attacks." @@ -127537,6 +127600,10 @@ msgstr "nie może mieć %s" msgid "isn't big enough to use that mod" msgstr "nie jest wystarczająco duży by używać tego moda" +#: src/item.cpp +msgid "can only accept small mods on that slot" +msgstr "akceptuje tylko małe mody na tym slocie" + #. ~ %1$s - name of the gunmod, %2$s - name of the ammo #: src/item.cpp #, c-format diff --git a/lang/po/pt_BR.po b/lang/po/pt_BR.po index 1e0b9da788612..3af9e28875f74 100644 --- a/lang/po/pt_BR.po +++ b/lang/po/pt_BR.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: cataclysm-dda 0.C\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-06-01 19:14-0400\n" +"POT-Creation-Date: 2018-06-09 21:55+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Marco Przybysz , 2018\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/cataclysm-dda-translators/teams/2217/pt_BR/)\n" @@ -14886,6 +14886,9 @@ msgid "" "will be regularly counteracted by increasing hunger. Can be toggled on and " "off at will." msgstr "" +"Seu sistema digestivo e suprimento de energia são interconectados. Drenos de" +" energia serão regularmente combatidos aumentando a fome. Pode ser ligado e " +"desligado à vontade." #: lang/json/BIONIC_ITEM_from_json.py msgid "Weather Reader CBM" @@ -61019,11 +61022,11 @@ msgstr "" #. ~ Please leave anything in unchanged. #: lang/json/json_flag_from_json.py msgid "This clothing is very fancy." -msgstr "" +msgstr "Esta roupa é muito chique." #: lang/json/json_flag_from_json.py msgid "Allows you to see much further under water." -msgstr "" +msgstr "Permite você ver muito além debaixo d'água." #. ~ Please leave anything in unchanged. #: lang/json/json_flag_from_json.py @@ -61045,16 +61048,16 @@ msgstr "" #: lang/json/json_flag_from_json.py msgid "Can be made to fit via tailoring." -msgstr "" +msgstr "Pode ser feito caber via costura." #: lang/json/json_flag_from_json.py msgid "Layer for belts and other things worn on the waist." -msgstr "" +msgstr "Camada para cintos e outras coisas vestidas na cintura." #. ~ Please leave anything in unchanged. #: lang/json/json_flag_from_json.py msgid "This gear is worn on or around your waist." -msgstr "" +msgstr "Este equipamento é vestido ao redor ou na cintura." #: lang/json/json_flag_from_json.py msgid "Acts as a watch and allows the player to see actual time." @@ -61063,7 +61066,7 @@ msgstr "" #. ~ Please leave anything in unchanged. #: lang/json/json_flag_from_json.py msgid "This gear allows to see actual time." -msgstr "" +msgstr "Este equipamento permite ver o horário atual." #: lang/json/json_flag_from_json.py msgid "" @@ -107120,7 +107123,18 @@ msgstr "" #: src/iexamine.cpp #, c-format -msgid "It should take %d minutes to finish burning." +msgid "It will finish burning in about %d hour." +msgid_plural "It will finish burning in about %d hours." +msgstr[0] "" +msgstr[1] "" + +#: src/iexamine.cpp +msgid "It will finish burning in less than an hour." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "It should take about %d minutes to finish burning." msgstr "" #: src/iexamine.cpp @@ -108289,7 +108303,7 @@ msgid "Compatible magazines: " msgstr "" #: src/item.cpp -msgid "Mods: " +msgid "Mods: " msgstr "" #: src/item.cpp @@ -108605,7 +108619,7 @@ msgid "Contains items with qualities:" msgstr "" #: src/item.cpp -msgid "Techniques: " +msgid "Techniques when wielded: " msgstr "" #: src/item.cpp @@ -109087,6 +109101,10 @@ msgstr "" msgid "isn't big enough to use that mod" msgstr "" +#: src/item.cpp +msgid "can only accept small mods on that slot" +msgstr "" + #. ~ %1$s - name of the gunmod, %2$s - name of the ammo #: src/item.cpp #, c-format diff --git a/lang/po/ru.po b/lang/po/ru.po index 5e38ede61a57d..0166c62a80256 100644 --- a/lang/po/ru.po +++ b/lang/po/ru.po @@ -33,7 +33,7 @@ msgid "" msgstr "" "Project-Id-Version: cataclysm-dda 0.C\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-06-01 19:14-0400\n" +"POT-Creation-Date: 2018-06-09 21:55+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Букин Иван , 2018\n" "Language-Team: Russian (https://www.transifex.com/cataclysm-dda-translators/teams/2217/ru/)\n" @@ -73207,7 +73207,7 @@ msgid "barrel extension" msgid_plural "barrel extensions" msgstr[0] "удлинённый ствол" msgstr[1] "удлинённых ствола" -msgstr[2] "удлинённых стволов" +msgstr[2] "удлинённых стволов" msgstr[3] "удлинённых ствола" #: lang/json/gunmod_from_json.py @@ -126530,8 +126530,21 @@ msgstr "Это углевыжигательная печь." #: src/iexamine.cpp #, c-format -msgid "It should take %d minutes to finish burning." -msgstr "До конца горения осталось %d минут." +msgid "It will finish burning in about %d hour." +msgid_plural "It will finish burning in about %d hours." +msgstr[0] "Горение закончится через %d час." +msgstr[1] "Горение закончится через %d часа." +msgstr[2] "Горение закончится через %d часов." +msgstr[3] "Горение закончится через %d час." + +#: src/iexamine.cpp +msgid "It will finish burning in less than an hour." +msgstr "Горение закончится менее, чем через час." + +#: src/iexamine.cpp +#, c-format +msgid "It should take about %d minutes to finish burning." +msgstr "До конца горения осталось примерно %d минут." #: src/iexamine.cpp msgid "You have no brew to ferment." @@ -127741,8 +127754,8 @@ msgid "Compatible magazines: " msgstr "Совместимые магазины: " #: src/item.cpp -msgid "Mods: " -msgstr "Модификации: " +msgid "Mods: " +msgstr "Модификации: " #: src/item.cpp #, c-format @@ -128076,8 +128089,8 @@ msgid "Contains items with qualities:" msgstr "Содержит предметы со следующими качествами:" #: src/item.cpp -msgid "Techniques: " -msgstr "Техники: " +msgid "Techniques when wielded: " +msgstr "Техники при взятии в руки: " #: src/item.cpp msgid "* This item can be used to make long reach attacks." @@ -128590,6 +128603,10 @@ msgstr "Нельзя присоединить %s" msgid "isn't big enough to use that mod" msgstr "недостаточно велик, чтобы было возможно использовать эту модификацию." +#: src/item.cpp +msgid "can only accept small mods on that slot" +msgstr "на этот слот можно устанавливать только небольшие модификации" + #. ~ %1$s - name of the gunmod, %2$s - name of the ammo #: src/item.cpp #, c-format diff --git a/lang/po/sr.po b/lang/po/sr.po index 7300990bc6eee..5c8db3c44abfe 100644 --- a/lang/po/sr.po +++ b/lang/po/sr.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: cataclysm-dda 0.C\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-06-01 19:14-0400\n" +"POT-Creation-Date: 2018-06-09 21:55+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Brett Dong , 2018\n" "Language-Team: Serbian (https://www.transifex.com/cataclysm-dda-translators/teams/2217/sr/)\n" @@ -109411,7 +109411,19 @@ msgstr "" #: src/iexamine.cpp #, c-format -msgid "It should take %d minutes to finish burning." +msgid "It will finish burning in about %d hour." +msgid_plural "It will finish burning in about %d hours." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: src/iexamine.cpp +msgid "It will finish burning in less than an hour." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "It should take about %d minutes to finish burning." msgstr "" #: src/iexamine.cpp @@ -110585,7 +110597,7 @@ msgid "Compatible magazines: " msgstr "" #: src/item.cpp -msgid "Mods: " +msgid "Mods: " msgstr "" #: src/item.cpp @@ -110907,7 +110919,7 @@ msgid "Contains items with qualities:" msgstr "" #: src/item.cpp -msgid "Techniques: " +msgid "Techniques when wielded: " msgstr "" #: src/item.cpp @@ -111391,6 +111403,10 @@ msgstr "" msgid "isn't big enough to use that mod" msgstr "" +#: src/item.cpp +msgid "can only accept small mods on that slot" +msgstr "" + #. ~ %1$s - name of the gunmod, %2$s - name of the ammo #: src/item.cpp #, c-format diff --git a/lang/po/zh_CN.po b/lang/po/zh_CN.po index 9ba03ed888e3b..b01b63ae389ef 100644 --- a/lang/po/zh_CN.po +++ b/lang/po/zh_CN.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: cataclysm-dda 0.C\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-06-01 19:14-0400\n" +"POT-Creation-Date: 2018-06-09 21:55+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: ImmortalSTAR , 2018\n" "Language-Team: Chinese (China) (https://www.transifex.com/cataclysm-dda-translators/teams/2217/zh_CN/)\n" @@ -39746,7 +39746,7 @@ msgid "" "This is an early modern sword seeing use in the 16th, 17th, and 18th " "centuries. This sword appears to be made very poorly, but it should still " "stand up to a few swings." -msgstr "一种早期的现代剑,在16到18世纪的西方被广泛使用。之所以命名为阔剑,是为了与细长的刺剑对比。这此款是做工不佳且有大量损坏的劣质品。" +msgstr "一种早期的现代剑,在16到18世纪的西方被广泛使用。之所以命名为阔剑,是为了与细长的刺剑对比。这一把看上去很糟糕,但挥舞几次问题不大。" #. ~ Description for cutlass #: lang/json/TOOL_from_json.py @@ -39754,28 +39754,28 @@ msgid "" "This is a broad saber known for its use by sailors and pirates. This sword " "appears to be made very poorly, but it should still stand up to a few " "swings." -msgstr "这种阔刃军刀因为普遍被水手与海盗使用而闻名。偏短的刀刃让它在近身时得心应手。此款是做工不佳且有大量损坏的劣质品。" +msgstr "这种阔刃军刀因为普遍被水手与海盗使用而闻名。偏短的刀刃让它在近身时得心应手。这一把看上去很糟糕,但挥舞几次问题不大。" #. ~ Description for katana #: lang/json/TOOL_from_json.py msgid "" "This is a rare sword from Japan. While it's got the right edge and weight, " "the pommel just snaps off, and the blade seems pretty worn." -msgstr "一柄武士刀,打刀款式,为日本武士步兵作战时使用,刀身中央略微弯曲,以利于迅速拔刀,全长一米左右。此款是做工不佳且有大量损坏的劣质品。" +msgstr "一柄武士刀,打刀款式,为日本武士步兵作战时使用,刀身中央略微弯曲,以利于迅速拔刀,全长一米左右。这把刀的刀柄圆头已经脱落,刀刃也磨损严重。" #. ~ Description for zweihänder #: lang/json/TOOL_from_json.py msgid "" "This is a huge two-handed sword from Germany. You're not quite sure it's " "supposed to be that bendy." -msgstr "一把德制巨型双手剑,极具视觉冲击力。此款是做工不佳且有大量损坏的劣质品。" +msgstr "一把德制巨型双手剑,极具视觉冲击力。不知是设计师的奇思妙想,还是铸剑师的偷奸耍滑,这把剑的剑刃有些不妙的弯曲。" #. ~ Description for wakizashi #: lang/json/TOOL_from_json.py msgid "" "This is a comparatively-common Japanese short sword. There's something not " "quite right about this sword." -msgstr "这是一种比较常见的日本短刀。此款是做工不佳且有大量损坏的劣质品。" +msgstr "这是一种比较常见的日本短刀。从日本人的角度看,这把刀有些“微妙”。" #. ~ Description for battle axe #: lang/json/TOOL_from_json.py @@ -39797,7 +39797,7 @@ msgstr "一把古中国剑,双刃开锋,剑身长直,护手带有装饰, msgid "" "This is an ancient Chinese doubled-edged straight sword. The sword is quite" " worn, and bent at an odd angle." -msgstr "一把古中国剑,双刃开锋,剑身长直。此款是做工不佳且有大量损坏的劣质品。" +msgstr "一把古中国剑,双刃开锋,剑身长直——本该如此,实际上它的剑刃磨损严重,还弯出了一个奇怪的角度。" #. ~ Description for scimitar #: lang/json/TOOL_from_json.py @@ -39812,7 +39812,7 @@ msgstr "一把弯刀,源于多数中东及中亚国家。专门为斩击而设 msgid "" "This is a curved sword associated with various Middle Eastern and Central " "Asian countries. This one seems oddly dull and worn." -msgstr "一把弯刀,源于多数中东及中亚国家。此款是做工不佳且有大量损坏的劣质品。" +msgstr "一把弯刀,源于多数中东及中亚国家。它看上去又钝又旧。" #. ~ Description for longsword #: lang/json/TOOL_from_json.py @@ -39828,7 +39828,7 @@ msgid "" "This is a classic medieval sword, in between the lighter arming sword and " "later two-handed swords in size. You feel like the pommel could just snap " "off if you used it." -msgstr "这是一把经典中世纪长剑,体积介乎于骑士剑和后期的双手剑之间。此款是做工不佳且有大量损坏的劣质品。" +msgstr "这是一把经典中世纪长剑,体积介乎于骑士剑和后期的双手剑之间——的劣质品,你担心用力挥舞它时剑柄会突然断掉。" #. ~ Description for arming sword #: lang/json/TOOL_from_json.py @@ -39841,7 +39841,7 @@ msgstr "一把经典的中世纪剑,贯穿整个中世纪,前由维京时期 msgid "" "This is a classic medieval sword, just the right size to use one-handed. " "This one doesn't seem to have been made right." -msgstr "这是一把经典的中世纪剑,适合单手使用。此款是做工不佳且有大量损坏的劣质品。" +msgstr "这是一把经典的中世纪剑,适合单手使用。不过,这应该是一把不合格产品。" #: lang/json/TOOL_from_json.py msgid "folded poncho" @@ -85822,17 +85822,17 @@ msgstr "对 %s 进行了相位攻击" #: lang/json/technique_from_json.py msgid "displace and counter" -msgstr "借力打力" +msgstr "换位迎击" #: lang/json/technique_from_json.py #, python-format msgid "You displace and counter %s" -msgstr "你借力打力了 %s" +msgstr "你换位迎击 %s" #: lang/json/technique_from_json.py #, python-format msgid " displaces and counters %s" -msgstr " 借力打力了 %s" +msgstr " 换位迎击 %s" #: lang/json/technique_from_json.py msgid "sweeping strike" @@ -86181,14 +86181,14 @@ msgstr "一个填满尸体的大壕沟,甚至可能是个乱坟坑。这些尸 #: lang/json/terrain_from_json.py msgid "covered pit" -msgstr "深坑(伪装)" +msgstr "深坑(加盖)" #. ~ Description for covered pit #: lang/json/terrain_from_json.py msgid "" "A deep pit with a two by four placed across it, looks sturdy enough to cross" " safely or the plank could be removed to turn it back into trap fall." -msgstr "顶上横跨一块 2x4 木板的深坑,看来坚固程度足够安全通行,也可以移走木板再充当陷坑。" +msgstr "上面铺着 2x4 木板的深坑,看来坚固程度足够安全通行,也可以移走木板再充当陷坑。" #: lang/json/terrain_from_json.py lang/json/trap_from_json.py msgid "spiked pit" @@ -86203,7 +86203,7 @@ msgstr "布尖锐物的窄沟,那些尖锐物能轻易刺穿躯体。" #: lang/json/terrain_from_json.py msgid "covered spiked pit" -msgstr "尖刺陷坑(伪装)" +msgstr "尖刺陷坑(加盖)" #. ~ Description for covered spiked pit #: lang/json/terrain_from_json.py @@ -86226,7 +86226,7 @@ msgstr "这坑底简直像倒进了一吨碎玻璃!掉进去未必致命,但 #: lang/json/terrain_from_json.py msgid "covered glass pit" -msgstr "玻璃刺陷坑(伪装)" +msgstr "玻璃刺陷坑(加盖)" #. ~ Description for covered glass pit #: lang/json/terrain_from_json.py @@ -86290,7 +86290,7 @@ msgstr "路面" msgid "" "A segment of asphalt, slowly degrading from cracks, frost heaves and lack of" " maintenance." -msgstr "一段遍布裂隙,冰冻起皮,缺乏维护的老化沥青地面。" +msgstr " 一段沥青路面,因为裂缝、冻胀和缺乏维护而逐渐老化。" #: lang/json/terrain_from_json.py msgid "yellow pavement" @@ -86312,7 +86312,7 @@ msgstr "人行道" msgid "" "An area of common poured concrete, damaged by frost heaves and large cracks " "due to lack of maintenance." -msgstr "一段普通水泥地。因缺乏维护而损于寒冻与大裂隙。" +msgstr "一段现浇混凝土路面。因为缺乏维护而毁于冻胀和大裂缝。" #. ~ Description for concrete #: lang/json/terrain_from_json.py @@ -93538,23 +93538,23 @@ msgstr "%s 已经失去连接并关闭了。" #: src/bionics.cpp msgid "You flub the removal." -msgstr "移除生化插件失败了。" +msgstr "你把这次移除搞错了。" #: src/bionics.cpp msgid "You mess up the removal." -msgstr "移除生化插件失败了。" +msgstr "你把这次移除搞得一团糟。" #: src/bionics.cpp msgid "The removal fails." -msgstr "移除生化插件失败了。" +msgstr "移除失败。" #: src/bionics.cpp msgid "The removal is a failure." -msgstr "移除生化插件失败了。" +msgstr "本次移除完全失败。" #: src/bionics.cpp msgid "You screw up the removal." -msgstr "移除生化插件失败了。" +msgstr "你搞砸了这次移除手术。" #: src/bionics.cpp msgid "Your body is severely damaged!" @@ -93728,11 +93728,11 @@ msgstr "安装生化插件失败了,但你安然无恙。" #: src/bionics.cpp msgid "You flub the installation." -msgstr "安装生化插件失败了。" +msgstr "你把这次安装搞错了。" #: src/bionics.cpp msgid "You mess up the installation." -msgstr "安装生化插件失败了。" +msgstr "你把这次安装搞得一团糟。" #: src/bionics.cpp msgid "The installation fails." @@ -93740,11 +93740,11 @@ msgstr "安装生化插件失败了。" #: src/bionics.cpp msgid "The installation is a failure." -msgstr "安装生化插件失败了。" +msgstr "本次安装完全失败。" #: src/bionics.cpp msgid "You screw up the installation." -msgstr "安装生化插件失败了。" +msgstr "你搞砸了这次安装。" #. ~"Complications" is USian medical-speak for "unintended damage from a #. medical procedure". @@ -104371,7 +104371,7 @@ msgid "" "Most normal bows require strength of at least 8, others require an above average strength of 10, or a significant strength of 12. Bows use the archery skill." msgstr "" "( 弓\n" -"无声,致命,易于制造,箭可以重复利用。弓已经被人类使用了不知道多久了。使用弓需要两只手,并且对于使用者的力量有一定要求。如果你没有足够的力量开弓,那么你的射击效率就会掉价。上箭速度,射击速度还有射程都会因此降低。\n" +"无声,致命,易于制造,箭可以重复利用。弓已经被人类使用了不知道多久了。使用弓需要两只手,并且对于使用者的力量有一定要求。如果你没有足够的力量开弓,那么你的射击效率就会下降。上箭速度,射击速度还有射程都会因此降低。\n" "大部分普通的弓都需要至少8的力量,其他的一些则需要更强的10点力量,或者更加强大的12的力量。弓使用弓术技能。" #: src/help.cpp @@ -105194,7 +105194,17 @@ msgstr "那里有一个炭窑。" #: src/iexamine.cpp #, c-format -msgid "It should take %d minutes to finish burning." +msgid "It will finish burning in about %d hour." +msgid_plural "It will finish burning in about %d hours." +msgstr[0] "它大约在 %d 小时后结束燃烧。" + +#: src/iexamine.cpp +msgid "It will finish burning in less than an hour." +msgstr "它将在一小时内结束燃烧。" + +#: src/iexamine.cpp +#, c-format +msgid "It should take about %d minutes to finish burning." msgstr "大概需要 %d 分钟才能燃烧完毕。" #: src/iexamine.cpp @@ -106361,8 +106371,8 @@ msgid "Compatible magazines: " msgstr "兼容弹匣:" #: src/item.cpp -msgid "Mods: " -msgstr "模组:" +msgid "Mods: " +msgstr "模组:" #: src/item.cpp #, c-format @@ -106671,8 +106681,8 @@ msgid "Contains items with qualities:" msgstr "道具拥有功能:" #: src/item.cpp -msgid "Techniques: " -msgstr "战斗技:" +msgid "Techniques when wielded: " +msgstr "手持战技:" #: src/item.cpp msgid "* This item can be used to make long reach attacks." @@ -107155,6 +107165,10 @@ msgstr "不可以有 %s" msgid "isn't big enough to use that mod" msgstr "太小无法使用那个模组" +#: src/item.cpp +msgid "can only accept small mods on that slot" +msgstr "该插槽仅能容纳小型模组" + #. ~ %1$s - name of the gunmod, %2$s - name of the ammo #: src/item.cpp #, c-format @@ -123722,24 +123736,24 @@ msgstr "你失足跌倒!" #: src/player_hardcoded_effects.cpp msgid "There's some kind of big machine in the sky." -msgstr "天空中有一些巨大的机器。" +msgstr "天空出现一些巨大的飞行器。(注:台词出自赌城风情画,1998)" #: src/player_hardcoded_effects.cpp msgid "It's some kind of electric snake, coming right at you!" -msgstr "一条蛇形电弧直奔你而来!" +msgstr "像是一条电蛇一样,向我们直奔过来!(注:台词出自赌城风情画,1998)" #: src/player_hardcoded_effects.cpp msgid "" "Order us some golf shoes, otherwise we'll never get out of this place alive." -msgstr "给我们点高尔夫球鞋,不然我们永远无法活着离开这。" +msgstr "要一些高尔夫球鞋,否则我们不能活着离开这个地方了。(注:台词出自赌城风情画,1998)" #: src/player_hardcoded_effects.cpp msgid "The possibility of physical and mental collapse is now very real." -msgstr "身体和精神的崩溃已经不是小概率事件了。" +msgstr "身理和心理崩溃的可能性,现在已经很真实了。(注:台词出自赌城风情画,1998)" #: src/player_hardcoded_effects.cpp msgid "No one should be asked to handle this trip." -msgstr "没人应该为这趟飞升负责。" +msgstr "没有一个人能处理我们这一次的行程。(注:台词出自赌城风情画,1998)" #: src/player_hardcoded_effects.cpp msgid "" @@ -123751,7 +123765,7 @@ msgstr "你的心脏痛苦地痉挛……之后,停止了跳动,让你不得 msgid "" "You dissolve into beautiful paroxysms of energy. Life fades from your " "nebulae and you are no more." -msgstr "你分解成了美丽而温暖的能量。生命在你身上逐渐消逝,你不再存在了。" +msgstr "你融化到了这份美丽而温暖的能量之中。生命在你身上逐渐消逝,你不再存在了。" #: src/player_hardcoded_effects.cpp msgctxt "memorial_male" diff --git a/lang/po/zh_TW.po b/lang/po/zh_TW.po index 0c91d5e935a13..4215479196f7f 100644 --- a/lang/po/zh_TW.po +++ b/lang/po/zh_TW.po @@ -22,7 +22,7 @@ msgid "" msgstr "" "Project-Id-Version: cataclysm-dda 0.C\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-06-01 19:14-0400\n" +"POT-Creation-Date: 2018-06-09 21:55+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Meat , 2018\n" "Language-Team: Chinese (Taiwan) (https://www.transifex.com/cataclysm-dda-translators/teams/2217/zh_TW/)\n" @@ -104289,8 +104289,18 @@ msgstr "這裡有碳化爐。" #: src/iexamine.cpp #, c-format -msgid "It should take %d minutes to finish burning." -msgstr "還需要 %d 分鐘才能完成。" +msgid "It will finish burning in about %d hour." +msgid_plural "It will finish burning in about %d hours." +msgstr[0] "" + +#: src/iexamine.cpp +msgid "It will finish burning in less than an hour." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "It should take about %d minutes to finish burning." +msgstr "" #: src/iexamine.cpp msgid "You have no brew to ferment." @@ -105456,8 +105466,8 @@ msgid "Compatible magazines: " msgstr "兼容彈匣: " #: src/item.cpp -msgid "Mods: " -msgstr "模組: " +msgid "Mods: " +msgstr "" #: src/item.cpp #, c-format @@ -105766,8 +105776,8 @@ msgid "Contains items with qualities:" msgstr "收納的物品具有以下特性:" #: src/item.cpp -msgid "Techniques: " -msgstr "技巧: " +msgid "Techniques when wielded: " +msgstr "" #: src/item.cpp msgid "* This item can be used to make long reach attacks." @@ -106250,6 +106260,10 @@ msgstr "無法安裝 %s" msgid "isn't big enough to use that mod" msgstr "不夠大無法使用那個模組" +#: src/item.cpp +msgid "can only accept small mods on that slot" +msgstr "" + #. ~ %1$s - name of the gunmod, %2$s - name of the ammo #: src/item.cpp #, c-format From d1caea7b9aae7720fbdfc9b53cbf378a331552df Mon Sep 17 00:00:00 2001 From: Mark Langsdorf Date: Fri, 15 Jun 2018 10:50:38 -0500 Subject: [PATCH 55/56] Regularize and document CATTLEFODDER Make the CATTLEFODDER flags match the same format as CATFOOD and DOGFOOD, and separate animals that become friendly when given cattlefodder from animals that can be milked. --- data/json/item_actions.json | 2 +- data/json/items/tools.json | 2 +- doc/JSON_FLAGS.md | 2 ++ src/item_factory.cpp | 2 +- src/iuse.cpp | 2 +- src/monstergenerator.cpp | 1 + src/mtype.h | 1 + 7 files changed, 8 insertions(+), 4 deletions(-) diff --git a/data/json/item_actions.json b/data/json/item_actions.json index 60a26ec53fcf2..53ce4ee1c8dce 100644 --- a/data/json/item_actions.json +++ b/data/json/item_actions.json @@ -742,7 +742,7 @@ }, { "type" : "item_action", - "id" : "FEEDCATTLE", + "id" : "CATTLEFODDER", "name" : "Place" }, { diff --git a/data/json/items/tools.json b/data/json/items/tools.json index 88401f2e7fba3..96e1edd1b380c 100644 --- a/data/json/items/tools.json +++ b/data/json/items/tools.json @@ -8301,7 +8301,7 @@ "material": "veggy", "symbol": ";", "color": "brown", - "use_action": "FEEDCATTLE" + "use_action": "CATTLEFODDER" }, { "id": "link_sheet", diff --git a/doc/JSON_FLAGS.md b/doc/JSON_FLAGS.md index b972b70f68a41..203df850f28aa 100755 --- a/doc/JSON_FLAGS.md +++ b/doc/JSON_FLAGS.md @@ -219,6 +219,7 @@ Flags used to describe monsters and define their properties and abilities. - ```BORES``` Tunnels through just about anything (15x bash multiplier: dark wyrms' bash skill 12->180) - ```CAN_DIG``` Can dig _and_ walk. - ```CATFOOD``` Becomes friendly / tamed with cat food. +- ```CATTLEFODDER``` Becomes friendly / tamed with cattle fodder. - ```CBM_CIV``` May produce a common CBM a power CBM when butchered. - ```CBM_OP``` May produce a CBM or two from 'bionics_op' item group when butchered. - ```CBM_POWER``` May produce a power CBM when butchered, independent of CBM. @@ -752,6 +753,7 @@ Some armor flags, such as `WATCH` and `ALARMCLOCK` are compatible with other ite - ```BLECH``` Causes vomiting. - ```CAFF``` Reduces fatigue. - ```CATFOOD``` Makes a cat friendly. +- ```CATTLEFODDER``` Makes a large herbivore friendly. - ```CHEW``` Displays message "You chew your %s", but otherwise does nothing. - ```CIG``` Alleviates nicotine cravings. Adds disease `cig`. - ```COKE``` Decreases hunger. Adds disease `high`. diff --git a/src/item_factory.cpp b/src/item_factory.cpp index 4e81fe37347e5..d487742720142 100644 --- a/src/item_factory.cpp +++ b/src/item_factory.cpp @@ -541,6 +541,7 @@ void Item_factory::init() add_iuse( "CARVER_OFF", &iuse::carver_off ); add_iuse( "CARVER_ON", &iuse::carver_on ); add_iuse( "CATFOOD", &iuse::catfood ); + add_iuse( "CATTLEFODDER", &iuse::feedcattle ); add_iuse( "CHAINSAW_OFF", &iuse::chainsaw_off ); add_iuse( "CHAINSAW_ON", &iuse::chainsaw_on ); add_iuse( "CHEW", &iuse::chew ); @@ -567,7 +568,6 @@ void Item_factory::init() add_iuse( "ELEC_CHAINSAW_ON", &iuse::elec_chainsaw_on ); add_iuse( "EXTINGUISHER", &iuse::extinguisher ); add_iuse( "EYEDROPS", &iuse::eyedrops ); - add_iuse( "FEEDCATTLE", &iuse::feedcattle ); add_iuse( "FIRECRACKER", &iuse::firecracker ); add_iuse( "FIRECRACKER_ACT", &iuse::firecracker_act ); add_iuse( "FIRECRACKER_PACK", &iuse::firecracker_pack ); diff --git a/src/iuse.cpp b/src/iuse.cpp index 876fde1a3a0ea..de1595848a671 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -1690,7 +1690,7 @@ int petfood( player &p, const item &it, Petfood animal_food_type ) } break; case CATTLEFODDER: - if( mon.has_flag( MF_MILKABLE ) ) { + if( mon.has_flag( MF_CATTLEFODDER ) ) { p.add_msg_if_player( m_good, _( "The %s seems to like you! It lets you pat its head and seems friendly." ), mon.get_name().c_str() ); mon.friendly = -1; mon.add_effect( effect_pet, 1_turns, num_bp, true ); diff --git a/src/monstergenerator.cpp b/src/monstergenerator.cpp index 340300b1f8ce6..ed377431c34b6 100644 --- a/src/monstergenerator.cpp +++ b/src/monstergenerator.cpp @@ -451,6 +451,7 @@ void MonsterGenerator::init_flags() flag_map["PRIORITIZE_TARGETS"] = MF_PRIORITIZE_TARGETS; flag_map["NOT_HALLUCINATION"] = MF_NOT_HALLU; flag_map["CATFOOD"] = MF_CATFOOD; + flag_map["CATTLEFODDER"] = MF_CATTLEFODDER; flag_map["DOGFOOD"] = MF_DOGFOOD; flag_map["MILKABLE"] = MF_MILKABLE; flag_map["PET_WONT_FOLLOW"] = MF_PET_WONT_FOLLOW; diff --git a/src/mtype.h b/src/mtype.h index ee5b6ce0a75c5..eef27203ee1c8 100644 --- a/src/mtype.h +++ b/src/mtype.h @@ -159,6 +159,7 @@ enum m_flag : int { MF_PRIORITIZE_TARGETS, // This monster will prioritize targets depending on their danger levels MF_NOT_HALLU, // Monsters that will NOT appear when player's producing hallucinations MF_CATFOOD, // This monster will become friendly when fed cat food. + MF_CATTLEFODDER, // This monster will become friendly when fed cattle fodder. MF_DOGFOOD, // This monster will become friendly when fed dog food. MF_MILKABLE, // This monster is milkable. MF_PET_WONT_FOLLOW, // This monster won't follow the player automatically when tamed. From 4d1138a33eaad92543d4e1d16827b2a3b689b95d Mon Sep 17 00:00:00 2001 From: Mark Langsdorf Date: Fri, 15 Jun 2018 10:53:27 -0500 Subject: [PATCH 56/56] More large animal pets Make horses, sheep, and cows become friendly when fed cattle fodder, and make sheep milkable. Increase the amount of milk that cows produce per days to 2.5 liters (roughly 6 lbs), while sheep produce 0.5L/day. --- data/json/monsters.json | 9 +++++---- doc/JSON_FLAGS.md | 1 + 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/data/json/monsters.json b/data/json/monsters.json index 124fbefea38ec..6ff52d15fd5f2 100644 --- a/data/json/monsters.json +++ b/data/json/monsters.json @@ -1289,7 +1289,7 @@ "melee_cut": 6, "dodge": 2, "armor_bash": 2, - "starting_ammo": { "milk": 4 }, + "starting_ammo": { "milk": 10 }, "path_settings": { "max_dist": 10 }, "anger_triggers": [ "HURT" ], "fear_triggers": [ "PLAYER_CLOSE" ], @@ -1301,7 +1301,7 @@ }, "death_function": [ "NORMAL" ], "harvest": "animal_large", - "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "MILKABLE", "PET_WONT_FOLLOW" ] + "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "CATTLEFODDER", "MILKABLE", "PET_WONT_FOLLOW", "BONES", "FAT", "LEATHER" ] }, { "id": "mon_coyote", @@ -2867,7 +2867,7 @@ "placate_triggers": [ "PLAYER_WEAK" ], "death_function": [ "NORMAL" ], "harvest": "animal_large", - "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM" ] + "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "CATTLEFODDER", "PET_WONT_FOLLOW", "PATH_AVOID_DANGER_1", "WARM", "BONES", "FAT", "LEATHER" ] }, { "id": "mon_human_snail", @@ -3888,11 +3888,12 @@ "melee_dice_sides": 6, "melee_cut": 2, "dodge": 2, + "starting_ammo": { "milk": 2 }, "anger_triggers": [], "fear_triggers": [ "SOUND", "PLAYER_CLOSE", "FRIEND_ATTACKED" ], "placate_triggers": [ "PLAYER_WEAK" ], "death_function": [ "NORMAL" ], - "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "WOOL", "BONES", "FAT" ] + "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER_1", "WARM", "WOOL", "BONES", "FAT", "CATTLEFODDER", "MILKABLE", "PET_WONT_FOLLOW" ] }, { "id": "mon_shia", diff --git a/doc/JSON_FLAGS.md b/doc/JSON_FLAGS.md index 203df850f28aa..d62b60f4e7cf1 100755 --- a/doc/JSON_FLAGS.md +++ b/doc/JSON_FLAGS.md @@ -256,6 +256,7 @@ Flags used to describe monsters and define their properties and abilities. - ```KEENNOSE``` Keen sense of smell. - ```LARVA``` Creature is a larva. Currently used for gib and blood handling. - ```LEATHER``` May produce leather when butchered. +- ```MILKABLE``` Produces milk when milked. - ```NIGHT_INVISIBILITY``` Monster becomes invisible if it's more than one tile away and the lighting on its tile is LL_LOW or less. Visibility is not affected by night vision. - ```NOHEAD``` Headshots not allowed! - ```NOGIB``` Does not leave gibs / meat chunks when killed with huge damage.