From 735b9952defafe3681dceb0c8875242d605b5e5f Mon Sep 17 00:00:00 2001 From: Qrox Date: Sun, 4 Jul 2021 13:08:25 +0800 Subject: [PATCH 01/13] Fix plural of some strings; remove duplicate json entry --- data/json/items/comestibles/veggy_dishes.json | 1 - data/json/items/gun/223.json | 2 +- data/json/monsters/zed-medical.json | 4 ++-- data/mods/Dark-Skies-Above/overrides/monsters.json | 2 +- data/mods/Magiclysm/monsters/forgedwellers.json | 2 +- 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/data/json/items/comestibles/veggy_dishes.json b/data/json/items/comestibles/veggy_dishes.json index a6b097ca84200..f3eda41780c92 100644 --- a/data/json/items/comestibles/veggy_dishes.json +++ b/data/json/items/comestibles/veggy_dishes.json @@ -24,7 +24,6 @@ "calories": 280, "spoils_in": "5 days", "description": "A roasted root from a cattail plant. Its fibrous outer core is charred black, you can remove it and chew on the dry inside.", - "milling": { "into": "flour", "conversion_rate": 7.5 }, "fun": -1, "delete": { "flags": [ "RAW" ] }, "//": "The flag below implies that part of root got burned and has to be removed", diff --git a/data/json/items/gun/223.json b/data/json/items/gun/223.json index 61f71f6f0ddc7..708be17d5ba5d 100644 --- a/data/json/items/gun/223.json +++ b/data/json/items/gun/223.json @@ -537,7 +537,7 @@ "looks_like": "ar15", "type": "GUN", "//": "This could use a better name, I just wanted to differentiate it from assault rifles, as it also has a burst mode", - "name": { "str": "NATO assault rifle with burst" }, + "name": { "str": "NATO assault rifle with burst", "str_pl": "NATO assault rifles with burst" }, "description": "An assault rifle used by a NATO member state. Unlike other assault rifles, this one has a burst fire mode in addition to semi-automatic and fully-automatic modes. As per NATO's STANAG agreement, it is chambered in 5.56x45mm.", "variants": [ { diff --git a/data/json/monsters/zed-medical.json b/data/json/monsters/zed-medical.json index d1c58255f315f..1ed1c721d7cad 100644 --- a/data/json/monsters/zed-medical.json +++ b/data/json/monsters/zed-medical.json @@ -21,7 +21,7 @@ { "id": "mon_skeleton_medical", "type": "MONSTER", - "name": { "str": "sawbones" }, + "name": { "str_sp": "sawbones" }, "description": "An overgrowth of ossified tissue has replaced this former medical professional's rotting skin with an organic armor of dense bone. Large clumps of black goo seep from its joints as it shambles aimlessly, with sickening crackling sounds filling the surrounding air.", "copy-from": "mon_skeleton", "death_drops": "zombie_medical_clothes" @@ -29,7 +29,7 @@ { "id": "mon_zombie_medical_acidic", "type": "MONSTER", - "name": { "str": "doctor burns" }, + "name": { "str_sp": "doctor burns" }, "description": "The pale shuffling corpse of a medical professional. Its skin looks especially thin, with a sticky, yellow fluid flowing through the clearly visible veins.", "copy-from": "mon_zombie_acidic", "death_drops": "mon_zombie_medical_death_drops" diff --git a/data/mods/Dark-Skies-Above/overrides/monsters.json b/data/mods/Dark-Skies-Above/overrides/monsters.json index b0278f7d84b82..f4aeaa7375cf1 100644 --- a/data/mods/Dark-Skies-Above/overrides/monsters.json +++ b/data/mods/Dark-Skies-Above/overrides/monsters.json @@ -79,7 +79,7 @@ { "id": "mon_wolf_mutant_huge", "type": "MONSTER", - "name": { "str": "dire wolf" }, + "name": { "str": "dire wolf", "str_pl": "dire wolves" }, "copy-from": "mon_wolf_mutant_huge", "delete": { "categories": [ "WILDLIFE" ] } }, diff --git a/data/mods/Magiclysm/monsters/forgedwellers.json b/data/mods/Magiclysm/monsters/forgedwellers.json index ec9c18254b074..e61b444f30e5c 100644 --- a/data/mods/Magiclysm/monsters/forgedwellers.json +++ b/data/mods/Magiclysm/monsters/forgedwellers.json @@ -133,7 +133,7 @@ { "id": "mon_forgehounds", "type": "MONSTER", - "name": { "str": "forge hounds" }, + "name": { "str_sp": "forge hounds" }, "description": "A metallic hound steps out of a nearby angle and growls at you. Run!!!", "default_faction": "wonder_forge", "copy-from": "mon_hound_tindalos" From 5d120f5e8aa75db18b460d5e7a888b1da16cfec7 Mon Sep 17 00:00:00 2001 From: anothersimulacrum Date: Sat, 3 Jul 2021 23:26:57 -0700 Subject: [PATCH 02/13] Add version to debugmsg A lot of times the first question I ask when debugging something is 'What version are you using?' - this should answer that question without needing to ask it a lot more. --- src/debug.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/debug.cpp b/src/debug.cpp index f963e58be25a4..173e6ceaf2129 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -246,8 +246,9 @@ static void debug_error_prompt( " DEBUG : %s\n\n" " FUNCTION : %s\n" " FILE : %s\n" - " LINE : %s\n", - text, funcname, filename, line + " LINE : %s\n" + " VERSION : %s\n", + text, funcname, filename, line, getVersionString() ); #if defined(BACKTRACE) From 124d829630ece4da1d91ba71e67d9f1c00fba60a Mon Sep 17 00:00:00 2001 From: Trioct Date: Sun, 4 Jul 2021 02:17:12 -0500 Subject: [PATCH 03/13] Start zombie bash gaieties (#44751) * Some sounds are provocative * Monsters are sometimes intrigued by quieter sounds --- src/monmove.cpp | 2 +- src/monster.cpp | 13 +++++++++- src/monster.h | 3 ++- src/savegame_json.cpp | 2 ++ src/sounds.cpp | 58 +++++++++++++++++++++++++++++++++++-------- 5 files changed, 65 insertions(+), 13 deletions(-) diff --git a/src/monmove.cpp b/src/monmove.cpp index 1687bc7cb05b3..aae3f1882c41d 100644 --- a/src/monmove.cpp +++ b/src/monmove.cpp @@ -1040,7 +1040,7 @@ void monster::move() continue; } // Don't bash if we're just tracking a noise. - if( wander() && destination == wander_pos ) { + if( !provocative_sound && wander() && destination == wander_pos ) { continue; } const int estimate = here.bash_rating( bash_estimate(), candidate ); diff --git a/src/monster.cpp b/src/monster.cpp index df92274c6facf..b2dc062840bce 100644 --- a/src/monster.cpp +++ b/src/monster.cpp @@ -2915,7 +2915,7 @@ float monster::get_mountable_weight_ratio() const return type->mountable_weight_ratio; } -void monster::hear_sound( const tripoint &source, const int vol, const int dist ) +void monster::hear_sound( const tripoint &source, const int vol, const int dist, bool provocative ) { if( !can_hear() ) { return; @@ -2928,6 +2928,12 @@ void monster::hear_sound( const tripoint &source, const int vol, const int dist return; } + int tmp_provocative = provocative || volume >= normal_roll( 30, 5 ); + // already following a more interesting sound + if( provocative_sound && !tmp_provocative && wandf > 0 ) { + return; + } + int max_error = 0; if( volume < 2 ) { max_error = 10; @@ -2943,7 +2949,12 @@ void monster::hear_sound( const tripoint &source, const int vol, const int dist // target_z will require some special check due to soil muffling sounds int wander_turns = volume * ( goodhearing ? 6 : 1 ); + // again, already following a more interesting sound + if( wander_turns < wandf ) { + return; + } process_trigger( mon_trigger::SOUND, volume ); + provocative_sound = tmp_provocative; if( morale >= 0 && anger >= 10 ) { // TODO: Add a proper check for fleeing attitude // but cache it nicely, because this part is called a lot diff --git a/src/monster.h b/src/monster.h index 843c3d7f1302d..9eaab5efe7168 100644 --- a/src/monster.h +++ b/src/monster.h @@ -436,7 +436,7 @@ class monster : public Creature * @param vol Volume at the center of the sound source * @param distance Distance to sound source (currently just rl_dist) */ - void hear_sound( const tripoint &source, int vol, int distance ); + void hear_sound( const tripoint &source, int vol, int distance, bool provocative ); bool is_hallucination() const override; // true if the monster isn't actually real @@ -458,6 +458,7 @@ class monster : public Creature const std::string &npc_msg ) const override; // TEMP VALUES tripoint wander_pos; // Wander destination - Just try to move in that direction + bool provocative_sound = false; // Are we wandering toward something we think is alive? int wandf = 0; // Urge to wander - Increased by sound, decrements each move std::vector inv; // Inventory Character *mounted_player = nullptr; // player that is mounting this creature diff --git a/src/savegame_json.cpp b/src/savegame_json.cpp index 868707d2f34d6..349829f22488e 100644 --- a/src/savegame_json.cpp +++ b/src/savegame_json.cpp @@ -2096,6 +2096,7 @@ void monster::load( const JsonObject &data ) position.z = get_map().get_abs_sub().z; } + data.read( "provocative_sound", provocative_sound ); data.read( "wandf", wandf ); data.read( "wandx", wander_pos.x ); data.read( "wandy", wander_pos.y ); @@ -2256,6 +2257,7 @@ void monster::store( JsonOut &json ) const json.member( "wandx", wander_pos.x ); json.member( "wandy", wander_pos.y ); json.member( "wandz", wander_pos.z ); + json.member( "provocative_sound", provocative_sound ); json.member( "wandf", wandf ); if( !patrol_route_abs_ms.empty() ) { json.member( "patrol_route", patrol_route_abs_ms ); diff --git a/src/sounds.cpp b/src/sounds.cpp index ee233bd5fca42..36a2ac21830f0 100644 --- a/src/sounds.cpp +++ b/src/sounds.cpp @@ -85,6 +85,11 @@ static const itype_id fuel_type_battery( "battery" ); static const itype_id itype_weapon_fire_suppressed( "weapon_fire_suppressed" ); +struct monster_sound_event { + int volume; + bool provocative; +}; + struct sound_event { int volume; sounds::sound_t category; @@ -102,6 +107,7 @@ struct centroid { float z; float volume; float weight; + bool provocative; }; namespace io @@ -133,7 +139,7 @@ std::string enum_to_string( sounds::sound_t data ) // Static globals tracking sounds events of various kinds. // The sound events since the last monster turn. -static std::vector> recent_sounds; +static std::vector> recent_sounds; // The sound events since the last interactive player turn. (doesn't count sleep etc) static std::vector> sounds_since_last_turn; // The sound events currently displayed to the player. @@ -163,6 +169,30 @@ static int sound_distance( const tripoint &source, const tripoint &sink ) return rl_dist( source.xy(), sink.xy() ) + vertical_attenuation; } +static bool is_provocative( sounds::sound_t category ) +{ + switch( category ) { + case sounds::sound_t::background: + case sounds::sound_t::weather: + case sounds::sound_t::music: + case sounds::sound_t::activity: + case sounds::sound_t::destructive_activity: + case sounds::sound_t::alarm: + case sounds::sound_t::combat: + return false; + case sounds::sound_t::movement: + case sounds::sound_t::speech: + case sounds::sound_t::electronic_speech: + case sounds::sound_t::alert: + case sounds::sound_t::order: + return true; + case sounds::sound_t::_LAST: + break; + } + debugmsg( "Invalid sound_t category" ); + abort(); +} + void sounds::ambient_sound( const tripoint &p, int vol, sound_t category, const std::string &description ) { @@ -181,7 +211,7 @@ void sounds::sound( const tripoint &p, int vol, sound_t category, const std::str if( description.empty() ) { debugmsg( "Sound at %d:%d has no description!", p.x, p.y ); } - recent_sounds.emplace_back( std::make_pair( p, vol ) ); + recent_sounds.emplace_back( std::make_pair( p, monster_sound_event{ vol, is_provocative( category ) } ) ); sounds_since_last_turn.emplace_back( std::make_pair( p, sound_event {vol, category, description, ambient, false, id, variant} ) ); @@ -211,7 +241,8 @@ static void vector_quick_remove( std::vector &source, int index ) source.pop_back(); } -static std::vector cluster_sounds( std::vector> input_sounds ) +static std::vector cluster_sounds( std::vector> + input_sounds ) { // If there are too many monsters and too many noise sources (which can be monsters, go figure), // applying sound events to monsters can dominate processing time for the whole game, @@ -236,7 +267,8 @@ static std::vector cluster_sounds( std::vector( input_sounds[index].first.x ), static_cast( input_sounds[index].first.y ), static_cast( input_sounds[index].first.z ), - static_cast( input_sounds[index].second ), static_cast( input_sounds[index].second ) + static_cast( input_sounds[index].second.volume ), static_cast( input_sounds[index].second.volume ), + input_sounds[index].second.provocative } ); vector_quick_remove( input_sounds, index ); } @@ -254,19 +286,25 @@ static std::vector cluster_sounds( std::vector( sound_event_pair.second ) + found_centroid->weight; + const float volume_sum = static_cast( sound_event_pair.second.volume ) + + found_centroid->weight; // Set the centroid location to the average of the two locations, weighted by volume. - found_centroid->x = static_cast( ( sound_event_pair.first.x * sound_event_pair.second ) + + found_centroid->x = static_cast( ( sound_event_pair.first.x * + sound_event_pair.second.volume ) + ( found_centroid->x * found_centroid->weight ) ) / volume_sum; - found_centroid->y = static_cast( ( sound_event_pair.first.y * sound_event_pair.second ) + + found_centroid->y = static_cast( ( sound_event_pair.first.y * + sound_event_pair.second.volume ) + ( found_centroid->y * found_centroid->weight ) ) / volume_sum; - found_centroid->z = static_cast( ( sound_event_pair.first.z * sound_event_pair.second ) + + found_centroid->z = static_cast( ( sound_event_pair.first.z * + sound_event_pair.second.volume ) + ( found_centroid->z * found_centroid->weight ) ) / volume_sum; // Set the centroid volume to the larger of the volumes. found_centroid->volume = std::max( found_centroid->volume, - static_cast( sound_event_pair.second ) ); + static_cast( sound_event_pair.second.volume ) ); // Set the centroid weight to the sum of the weights. found_centroid->weight = volume_sum; + // Set and keep provocative if any sound in the centroid is provocative + found_centroid->provocative |= sound_event_pair.second.provocative; } return sound_clusters; } @@ -324,7 +362,7 @@ void sounds::process_sounds() const int dist = sound_distance( source, critter.pos() ); if( vol * 2 > dist ) { // Exclude monsters that certainly won't hear the sound - critter.hear_sound( source, vol, dist ); + critter.hear_sound( source, vol, dist, this_centroid.provocative ); } } } From 0a6842142c6b4bcc2481e83e287f85d4469db572 Mon Sep 17 00:00:00 2001 From: LyleSY Date: Sun, 4 Jul 2021 03:26:28 -0400 Subject: [PATCH 04/13] [DinoMod] The Bone Wars (#48343) --- data/mods/DinoMod/monstergroups/zinosaur.json | 253 ++- data/mods/DinoMod/monsters/fungus.json | 86 +- data/mods/DinoMod/monsters/zed-dinosaur.json | 290 ++-- .../DinoMod/monsters/zinosaur_upgrade.json | 1380 ++++++++++++++--- data/mods/DinoMod/obsolete/monsters.json | 2 +- 5 files changed, 1637 insertions(+), 374 deletions(-) diff --git a/data/mods/DinoMod/monstergroups/zinosaur.json b/data/mods/DinoMod/monstergroups/zinosaur.json index 0de478d544727..4b34b79cd23a5 100644 --- a/data/mods/DinoMod/monstergroups/zinosaur.json +++ b/data/mods/DinoMod/monstergroups/zinosaur.json @@ -43,6 +43,15 @@ { "monster": "mon_zteranodon", "freq": 50, "cost_multiplier": 10, "starts": 72, "pack_size": [ 1, 2 ] } ] }, + { + "type": "monstergroup", + "name": "GROUP_zilophosaurus_UPGRADE", + "default": "mon_silophosaurus", + "monsters": [ + { "monster": "mon_silophosaurus", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zilophosaurus_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, { "type": "monstergroup", "name": "GROUP_zeratosaurus_UPGRADE", @@ -75,12 +84,20 @@ }, { "type": "monstergroup", - "name": "GROUP_zyrannosaurus_UPGRADE", - "default": "mon_syrannosaurus", + "name": "GROUP_zacrocanthosaurus_UPGRADE", + "default": "mon_sacrocanthosaurus", "monsters": [ - { "monster": "mon_syrannosaurus", "freq": 400, "cost_multiplier": 5 }, - { "monster": "mon_zyrannosaurus_shady", "freq": 300, "cost_multiplier": 5 }, - { "monster": "mon_zyrannosaurus_brute", "freq": 300, "cost_multiplier": 5 } + { "monster": "mon_sacrocanthosaurus", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zacrocanthosaurus_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_ziats_UPGRADE", + "default": "mon_skiats", + "monsters": [ + { "monster": "mon_skiats", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_ziats_brute", "freq": 400, "cost_multiplier": 5 } ] }, { @@ -93,6 +110,34 @@ { "monster": "mon_zalbertosaurus_brute", "freq": 300, "cost_multiplier": 5 } ] }, + { + "type": "monstergroup", + "name": "GROUP_zianzhousaurus_UPGRADE", + "default": "mon_sianzhousaurus", + "monsters": [ + { "monster": "mon_sianzhousaurus", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zianzhousaurus_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_zyrannosaurus_UPGRADE", + "default": "mon_syrannosaurus", + "monsters": [ + { "monster": "mon_syrannosaurus", "freq": 400, "cost_multiplier": 5 }, + { "monster": "mon_zyrannosaurus_shady", "freq": 300, "cost_multiplier": 5 }, + { "monster": "mon_zyrannosaurus_brute", "freq": 300, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_zallimimus_UPGRADE", + "default": "mon_sallimimus", + "monsters": [ + { "monster": "mon_sallimimus", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zallimimus_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, { "type": "monstergroup", "name": "GROUP_zothronychus_UPGRADE", @@ -123,6 +168,87 @@ { "monster": "mon_zutahraptor_brute", "freq": 300, "cost_multiplier": 5 } ] }, + { + "type": "monstergroup", + "name": "GROUP_zamargasaurus_UPGRADE", + "default": "mon_samargasaurus", + "monsters": [ + { "monster": "mon_samargasaurus", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zamargasaurus_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_zapatosaurus_UPGRADE", + "default": "mon_sapatosaurus", + "monsters": [ + { "monster": "mon_sapatosaurus", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zapatosaurus_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_zrontosaurus_UPGRADE", + "default": "mon_srontosaurus", + "monsters": [ + { "monster": "mon_srontosaurus", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zrontosaurus_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_ziplodocus_UPGRADE", + "default": "mon_siplodocus", + "monsters": [ + { "monster": "mon_siplodocus", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_ziplodocus_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_zamarasaurus_UPGRADE", + "default": "mon_samarasaurus", + "monsters": [ + { "monster": "mon_samarasaurus", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zamarasaurus_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_zrachiosaurus_UPGRADE", + "default": "mon_srachiosaurus", + "monsters": [ + { "monster": "mon_srachiosaurus", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zrachiosaurus_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_zalamosaurus_UPGRADE", + "default": "mon_salamosaurus", + "monsters": [ + { "monster": "mon_salamosaurus", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zalamosaurus_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_ztegosaurus_UPGRADE", + "default": "mon_sktegosaurus", + "monsters": [ + { "monster": "mon_sktegosaurus", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_ztegosaurus_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_zyoplosaurus_UPGRADE", + "default": "mon_syoplosaurus", + "monsters": [ + { "monster": "mon_syoplosaurus", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zyoplosaurus_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, { "type": "monstergroup", "name": "GROUP_zankylosaurus_UPGRADE", @@ -133,6 +259,123 @@ { "monster": "mon_zankylosaurus_brute", "freq": 300, "cost_multiplier": 5 } ] }, + { + "type": "monstergroup", + "name": "GROUP_zodosaurus_UPGRADE", + "default": "mon_sodosaurus", + "monsters": [ + { "monster": "mon_sodosaurus", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zodosaurus_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_zedmontonia_UPGRADE", + "default": "mon_sedmontonia", + "monsters": [ + { "monster": "mon_sedmontonia", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zedmontonia_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_zamptosaurus_UPGRADE", + "default": "mon_samptosaurus", + "monsters": [ + { "monster": "mon_samptosaurus", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zamptosaurus_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_zaiasaura_UPGRADE", + "default": "mon_saiasaura", + "monsters": [ + { "monster": "mon_saiasaura", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zaiasaura_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_zarasaurolophus_UPGRADE", + "default": "mon_sarasaurolophus", + "monsters": [ + { "monster": "mon_sarasaurolophus", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zarasaurolophus_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_zorythosaurus_UPGRADE", + "default": "mon_sorythosaurus", + "monsters": [ + { "monster": "mon_sorythosaurus", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zorythosaurus_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_zedmontosaurus_UPGRADE", + "default": "mon_sedmontosaurus", + "monsters": [ + { "monster": "mon_sedmontosaurus", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zedmontosaurus_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_zachycephalosaurus_UPGRADE", + "default": "mon_sachycephalosaurus", + "monsters": [ + { "monster": "mon_sachycephalosaurus", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zachycephalosaurus_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_zachyrhinosaurus_UPGRADE", + "default": "mon_sachyrhinosaurus", + "monsters": [ + { "monster": "mon_sachyrhinosaurus", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zachyrhinosaurus_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_zentaceratops_UPGRADE", + "default": "mon_sentaceratops", + "monsters": [ + { "monster": "mon_sentaceratops", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zentaceratops_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_zosmoceratops_UPGRADE", + "default": "mon_sosmoceratops", + "monsters": [ + { "monster": "mon_sosmoceratops", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zosmoceratops_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_zorosaurus_UPGRADE", + "default": "mon_sorosaurus", + "monsters": [ + { "monster": "mon_sorosaurus", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zorosaurus_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, + { + "type": "monstergroup", + "name": "GROUP_zriceratops_UPGRADE", + "default": "mon_sriceratops", + "monsters": [ + { "monster": "mon_sriceratops", "freq": 600, "cost_multiplier": 5 }, + { "monster": "mon_zriceratops_brute", "freq": 400, "cost_multiplier": 5 } + ] + }, { "type": "monstergroup", "name": "GROUP_zyrannosaurus_BRUTE", diff --git a/data/mods/DinoMod/monsters/fungus.json b/data/mods/DinoMod/monsters/fungus.json index fa1f15212e239..769001ce185e5 100644 --- a/data/mods/DinoMod/monsters/fungus.json +++ b/data/mods/DinoMod/monsters/fungus.json @@ -147,7 +147,7 @@ "id": "mon_zallimimus_fungus", "type": "MONSTER", "name": { "str": "fungal Gallimimus zombie" }, - "description": "Once a featherd bipedal plant eating dinosaur, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together an enormous shambling mass of mold-covered feathers.", + "description": "Once a feathered, plant-eating, bipedal dinosaur, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together an enormous shambling mass of mold-covered feathers.", "copy-from": "mon_zallimimus", "default_faction": "fungus", "species": [ "FUNGUS" ], @@ -183,7 +183,7 @@ "id": "mon_zeinonychus_fungus", "type": "MONSTER", "name": { "str": "fungal Deinonychus zombie" }, - "description": "Once a feathered meat eating dinosaur with a large, sickle-shaped talon on each foot, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together an enormous shambling mass of mold-covered flesh.", + "description": "Once a feathered, carnivorous dinosaur with a large, sickle-shaped talon on each foot, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together an enormous shambling mass of mold-covered flesh.", "copy-from": "mon_zeinonychus", "default_faction": "fungus", "species": [ "FUNGUS" ], @@ -206,7 +206,7 @@ "id": "mon_zutahraptor_fungus", "type": "MONSTER", "name": { "str": "fungal Utahraptor zombie" }, - "description": "Once a large feathered meat eating dinosaur with a sickle-shaped talon on each foot, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together an enormous shambling mass of mold-covered flesh.", + "description": "Once a large, feathered, meat-eating dinosaur with a sickle-shaped talon on each foot, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together an enormous shambling mass of mold-covered flesh.", "copy-from": "mon_zutahraptor", "default_faction": "fungus", "species": [ "FUNGUS" ], @@ -251,22 +251,25 @@ "id": "mon_zrontosaurus_fungus", "type": "MONSTER", "name": { "str": "fungal Brontosaurus zombie" }, - "description": "Once a massive, long-necked, four-legged plant eating dinosaur with a bulky torso and long, whip-like tail, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together an enormous shambling mass of mold-covered flesh.", - "copy-from": "mon_zapatosaurus_fungus" + "description": "This was once a massive, long-necked, four-legged dinosaur herbivore with a bulky torso and a long, whip-like tail. Fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together an enormous shambling mass of mold-covered flesh.", + "copy-from": "mon_zapatosaurus_fungus", + "upgrades": { } }, { "id": "mon_ziplodocus_fungus", "type": "MONSTER", "name": { "str": "fungal Diplodocus zombie" }, "description": "Once a huge, long-necked, four-legged plant eating dinosaur with a tiny head and long, whip-like tail, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together an enormous shambling mass of mold-covered flesh.", - "copy-from": "mon_zapatosaurus_fungus" + "copy-from": "mon_zapatosaurus_fungus", + "upgrades": { } }, { "id": "mon_zamarasaurus_fungus", "type": "MONSTER", "name": { "str": "fungal Camarasaurus zombie" }, "description": "Once a huge, long-necked, four-legged plant eating dinosaur with a long, whip-like tail, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together an enormous shambling mass of mold-covered flesh.", - "copy-from": "mon_zapatosaurus_fungus" + "copy-from": "mon_zapatosaurus_fungus", + "upgrades": { } }, { "id": "mon_zrachiosaurus_fungus", @@ -274,7 +277,8 @@ "name": { "str": "fungal Brachiosaurus zombie" }, "description": "Once a gigantic, long-necked, four-legged plant eating dinosaur with longer forelegs and a long, whip-like tail, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together an enormous shambling mass of mold-covered flesh.", "copy-from": "mon_zapatosaurus_fungus", - "proportional": { "hp": 2, "speed": 0.65 } + "proportional": { "hp": 2, "speed": 0.65 }, + "upgrades": { } }, { "id": "mon_zalamosaurus_fungus", @@ -282,13 +286,14 @@ "name": { "str": "fungal Alamosaurus zombie" }, "description": "Once a gigantic, long-necked, four-legged plant eating dinosaur with longer forelegs and spiked tail protected by natural bone armor, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together an enormous shambling mass of mold-covered flesh.", "copy-from": "mon_zapatosaurus_fungus", - "proportional": { "hp": 1.5, "speed": 0.8, "armor_bash": 2, "armor_cut": 2 } + "proportional": { "hp": 1.5, "speed": 0.8, "armor_bash": 2, "armor_cut": 2 }, + "upgrades": { } }, { "id": "mon_ztegosaurus_fungus", "type": "MONSTER", "name": { "str": "fungal Stegosaurus zombie" }, - "description": "Once a large four legged plant eating dinosaur with heavy bone plates jutting from its back and spiked tail, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh.", + "description": "This was once a large, four-legged dinosaur herbivore with a spiked tail and heavy bone plates jutting from its back. Fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh.", "copy-from": "mon_ztegosaurus", "default_faction": "fungus", "species": [ "FUNGUS" ], @@ -310,9 +315,10 @@ "id": "mon_zyoplosaurus_fungus", "type": "MONSTER", "name": { "str": "fungal Dyoplosaurus zombie" }, - "description": "Once something like a giant armadillo dinosaur hybrid with a spiked club tail, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh and bone.", + "description": "Once something like a gigantic armadillo-dinosaur hybrid with a spiked club tail, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh and bone.", "copy-from": "mon_zankylosaurus_fungus", - "proportional": { "hp": 0.35, "speed": 1.2 } + "proportional": { "hp": 0.35, "speed": 1.2 }, + "upgrades": { } }, { "id": "mon_zankylosaurus_fungus", @@ -342,26 +348,28 @@ "id": "mon_zodosaurus_fungus", "type": "MONSTER", "name": { "str": "fungal Nodosaurus zombie" }, - "description": "Once something like a giant armadillo dinosaur hybrid, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh and bone.", + "description": "Once something like a gigantic armadillo-dinosaur hybrid, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh and bone.", "copy-from": "mon_zankylosaurus_fungus", "proportional": { "hp": 0.6 }, - "special_attacks": [ [ "FUNGUS", 200 ], [ "scratch", 10 ], { "type": "bite", "cooldown": 5 } ] + "special_attacks": [ [ "FUNGUS", 200 ], [ "scratch", 10 ], { "type": "bite", "cooldown": 5 } ], + "upgrades": { } }, { "id": "mon_zedmontonia_fungus", "type": "MONSTER", "name": { "str": "fungal Edmontonia zombie" }, - "description": "Once something like a giant armadillo dinosaur hybrid with long bony spikes, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh and bone.", + "description": "Once something like a gigantic armadillo-dinosaur hybrid with long, bony spikes, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh and bone.", "copy-from": "mon_zankylosaurus_fungus", "melee_cut": 10, "proportional": { "hp": 0.65 }, - "special_attacks": [ [ "FUNGUS", 200 ], [ "scratch", 10 ], { "type": "bite", "cooldown": 5 } ] + "special_attacks": [ [ "FUNGUS", 200 ], [ "scratch", 10 ], { "type": "bite", "cooldown": 5 } ], + "upgrades": { } }, { "id": "mon_zamptosaurus_fungus", "type": "MONSTER", "name": { "str": "fungal Camptosaurus zombie" }, - "description": "Once a large feathered bipedal dinosaur with strong legs, broad shoulders and a pointed beak, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together an enormous shambling mass of mold-covered feathers.", + "description": "This was once a large, feathered, bipedal dinosaur with strong legs, broad shoulders, and a pointed beak. Fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together an enormous shambling mass of mold-covered feathers.", "copy-from": "mon_zamptosaurus", "default_faction": "fungus", "species": [ "FUNGUS" ], @@ -379,40 +387,44 @@ "id": "mon_zaiasaura_fungus", "type": "MONSTER", "name": { "str": "fungal Maiasaura zombie" }, - "description": "Once a huge four legged plant eating dinosaur with hooves, a heavy tail, and a flat beak, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh and bone.", + "description": "This was once a huge, four-legged dinosaur herbivore with hooves, a heavy tail, and a flat beak. Fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh and bone.", "copy-from": "mon_zamptosaurus_fungus", - "proportional": { "hp": 3 } + "proportional": { "hp": 3 }, + "upgrades": { } }, { "id": "mon_zarasaurolophus_fungus", "type": "MONSTER", "name": { "str": "fungal Parasaurolophus zombie" }, - "description": "Once a huge four legged plant eating dinosaur with a blunt head crest, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh and bone.", + "description": "Once a huge, four-legged dinosaur herbivore with a blunt head crest, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh and bone.", "copy-from": "mon_zamptosaurus_fungus", - "proportional": { "hp": 4 } + "proportional": { "hp": 4 }, + "upgrades": { } }, { "id": "mon_zorythosaurus_fungus", "type": "MONSTER", "name": { "str": "fungal Corythosaurus zombie" }, - "description": "Once a huge four legged plant eating dinosaur with a short beak and a tall head crest, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh and bone.", + "description": "Once a huge, four-legged dinosaur herbivore with a short beak and a tall head crest, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh and bone.", "copy-from": "mon_zamptosaurus_fungus", "proportional": { "hp": 4 }, - "special_attacks": [ [ "FUNGUS", 200 ], [ "scratch", 10 ], { "type": "bite", "cooldown": 5 }, [ "SHRIEK", 5 ] ] + "special_attacks": [ [ "FUNGUS", 200 ], [ "scratch", 10 ], { "type": "bite", "cooldown": 5 }, [ "SHRIEK", 5 ] ], + "upgrades": { } }, { "id": "mon_zedmontosaurus_fungus", "type": "MONSTER", "name": { "str": "fungal Edmontosaurus zombie" }, - "description": "Once a huge four legged plant eating dinosaur with a broad toothless beak, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh and bone.", + "description": "Once a huge, four-legged dinosaur herbivore with a broad, toothless beak, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh and bone.", "copy-from": "mon_zamptosaurus_fungus", - "proportional": { "hp": 5 } + "proportional": { "hp": 5 }, + "upgrades": { } }, { "id": "mon_zachycephalosaurus_fungus", "type": "MONSTER", "name": { "str": "fungal Pachycephalosaurus zombie" }, - "description": "Once a feathered bipedal dinosaur with a hard-looking domed head, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered feathers.", + "description": "Once a feathered, bipedal dinosaur with a hard-looking domed head, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered feathers.", "copy-from": "mon_zachycephalosaurus", "default_faction": "fungus", "species": [ "FUNGUS" ], @@ -430,45 +442,49 @@ "id": "mon_zachyrhinosaurus_fungus", "type": "MONSTER", "name": { "str": "fungal Pachyrhinosaurus zombie" }, - "description": "Once a massive four legged plant eating dinosaur with a tall bony crest from which four long horns and a short nose horn emerge, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh.", + "description": "This was once a massive, four-legged dinosaur herbivore, with a tall bony crest from which four long horns and a short nose horn emerged. Fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh.", "copy-from": "mon_zriceratops_fungus", "proportional": { "hp": 0.65 }, "special_attacks": [ [ "FUNGUS", 200 ], { "id": "slam", "cooldown": 10, "damage_max_instance": [ { "damage_type": "bash", "amount": 12 } ] }, [ "SMASH", 30 ] - ] + ], + "upgrades": { } }, { "id": "mon_zentaceratops_fungus", "type": "MONSTER", "name": { "str": "fungal Pentaceraterror" }, - "description": "Once a massive four legged plant eating dinosaur with a tall bony crest from which four long horns and a short nose horn emerge, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh.", + "description": "This was once a massive, four-legged dinosaur herbivore, with a tall bony crest from which four long horns and a short nose horn emerged. Fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh.", "copy-from": "mon_zriceratops_fungus", - "proportional": { "armor_bash": 2 } + "proportional": { "armor_bash": 2 }, + "upgrades": { } }, { "id": "mon_zosmoceratops_fungus", "type": "MONSTER", "name": { "str": "fungal Kosmoceratops zombie" }, - "description": "Once a massive four legged plant eating dinosaur with a tall bony crest from which fifteen horns and spikes emerge, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh.", + "description": "This was once a massive, four-legged dinosaur herbivore, with a tall bony crest from which fifteen horns and spikes emerged. Fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh.", "copy-from": "mon_zriceratops_fungus", - "proportional": { "melee_dice": 2, "melee_cut": 0.65 } + "proportional": { "melee_dice": 2, "melee_cut": 0.65 }, + "upgrades": { } }, { "id": "mon_zorosaurus_fungus", "type": "MONSTER", "name": { "str": "fungal Torosaurus zombie" }, - "description": "Once a massive four legged plant eating dinosaur with a tall bony crest from which two wicked looking horns emerge, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh.", + "description": "This was once a massive, four-legged dinosaur herbivore, with a tall bony crest from which two wicked-looking horns emerged. Fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh.", "copy-from": "mon_zriceratops_fungus", "proportional": { "melee_dice": 2, "melee_cut": 0.65 }, - "special_attacks": [ [ "FUNGUS", 200 ], { "id": "impale" }, [ "STRETCH_ATTACK", 5 ] ] + "special_attacks": [ [ "FUNGUS", 200 ], { "id": "impale" }, [ "STRETCH_ATTACK", 5 ] ], + "upgrades": { } }, { "id": "mon_zriceratops_fungus", "type": "MONSTER", "name": { "str": "fungal Triceraterror" }, - "description": "Once a massive four legged plant eating dinosaur with a bony head crest from which three wicked looking horns emerge, fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh.", + "description": "This was once a massive, four-legged dinosaur herbivore, with a bony head crest from which three wicked-looking horns emerged. Fungal tendrils now sprout from its mouth, eyes, and other orifices, holding together a shambling mass of mold-covered flesh.", "copy-from": "mon_zriceratops", "default_faction": "fungus", "species": [ "FUNGUS" ], diff --git a/data/mods/DinoMod/monsters/zed-dinosaur.json b/data/mods/DinoMod/monsters/zed-dinosaur.json index 5e21ea186bbe0..967bba247de57 100644 --- a/data/mods/DinoMod/monsters/zed-dinosaur.json +++ b/data/mods/DinoMod/monsters/zed-dinosaur.json @@ -17,8 +17,8 @@ "armor_cut": 4, "armor_bullet": 2, "hp": 200, - "description": "The shuffling corpse of a medium dinosaur with sharp teeth and two prominent bony crests on its head with ragged strips of ripped flesh hanging down like a frill.", - "upgrades": { "half_life": 14, "into": "mon_zilophosaurus_brute" } + "description": "The shuffling corpse of a medium-sized dinosaur with sharp teeth and two prominent bony crests on its head, with ragged strips of ripped flesh hanging down like a frill.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zilophosaurus_UPGRADE" } }, { "type": "MONSTER", @@ -126,7 +126,8 @@ "armor_bullet": 2, "hp": 1200, "special_attacks": [ [ "GRAB", 10 ], [ "LUNGE", 20 ] ], - "description": "The shambling corpse of a huge predatory bipedal dinosaur, with a tall ridge running down the length of its back covered with heavy muscles. Its teeth are curved and serrated like sawblades.", + "description": "The shambling corpse of a huge, bipedal dinosaur predator, with a tall ridge running down the length of its back covered with heavy muscles. Its teeth are curved and serrated like sawblades.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zacrocanthosaurus_UPGRADE" }, "flags": [ "SEES", "SMELLS", "HEARS", "POISON", "STUMBLES", "BASHES", "NO_BREATHE", "REVIVES", "FILTHY", "WARM" ] }, { @@ -147,9 +148,46 @@ "armor_bullet": 2, "hp": 1000, "special_attacks": [ [ "BIO_OP_TAKEDOWN", 20 ], [ "RANGED_PULL", 20 ], [ "GRAB_DRAG", 10 ] ], - "description": "The shambling corpse of a huge predatory bipedal dinosaur with long claws and strong arms for grappling.", + "description": "The shambling corpse of a huge, bipedal dinosaur predator with long claws and strong arms for grappling.", + "upgrades": { "half_life": 14, "into_group": "GROUP_ziats_UPGRADE" }, "flags": [ "SEES", "SMELLS", "HEARS", "POISON", "STUMBLES", "BASHES", "NO_BREATHE", "REVIVES", "FILTHY", "WARM" ] }, + { + "type": "MONSTER", + "id": "mon_zalbertosaurus", + "name": { "str": "Albertosaurus zombie" }, + "copy-from": "mon_zyrannosaurus", + "melee_dice_sides": 4, + "melee_cut": 10, + "armor_bash": 5, + "armor_cut": 5, + "armor_bullet": 3, + "hp": 330, + "special_attacks": [ { "type": "bite", "cooldown": 5 }, [ "GRAB", 7 ], [ "scratch", 20 ], [ "LUNGE", 5 ] ], + "description": "Massive jaws drooling black liquid, lifted over grasping claws by a huge shuffling dinosaur corpse.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zalbertosaurus_UPGRADE" } + }, + { + "type": "MONSTER", + "id": "mon_zianzhousaurus", + "name": { "str": "Qianz zombie" }, + "copy-from": "mon_zyrannosaurus", + "looks_like": "mon_zyrannosaurus", + "volume": "550 L", + "weight": "770 kg", + "speed": 60, + "melee_skill": 10, + "melee_dice": 4, + "melee_dice_sides": 7, + "melee_cut": 6, + "armor_bash": 5, + "armor_cut": 5, + "armor_bullet": 3, + "hp": 230, + "description": "An undead Qianzhousaurus, looking at you with a furious rage in its eyes and seeming intent on eating you.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zianzhousaurus_UPGRADE" }, + "flags": [ "SEES", "SMELLS", "HEARS", "BASHES", "POISON", "STUMBLES", "NO_BREATHE", "REVIVES", "FILTHY", "WARM" ] + }, { "type": "MONSTER", "id": "mon_zyrannosaurus", @@ -246,8 +284,8 @@ "hp": 70, "death_function": [ "NORMAL" ], "special_attacks": [ [ "scratch", 10 ], { "type": "bite", "cooldown": 5 } ], - "description": "The shuffling corpse of a medium-sized bipedal dinosaur covered with tattered feathers and black putrid liquid.", - "upgrades": { "half_life": 14, "into": "mon_zallimimus_brute" }, + "description": "The shuffling corpse of a medium-sized bipedal dinosaur, covered with tattered feathers and black, putrid liquid.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zallimimus_UPGRADE" }, "flags": [ "SEES", "SMELLS", "HEARS", "PET_MOUNTABLE", "POISON", "STUMBLES", "NO_BREATHE", "REVIVES", "FILTHY", "WARM" ], "vision_night": 3, "harvest": "zed_dino_feather", @@ -328,9 +366,30 @@ "armor_cut": 4, "armor_bullet": 2, "hp": 170, - "description": "The swaying, hopping corpse of a large bipedal dinosaur with feathered arms, a long tail, and long sharp scythe-like claws.", + "description": "The swaying, hopping corpse of a large bipedal dinosaur with feathered arms, a long tail, and long, sharp scythe-like claws.", "upgrades": { "half_life": 14, "into_group": "GROUP_zutahraptor_UPGRADE" } }, + { + "type": "MONSTER", + "id": "mon_zamargasaurus", + "name": { "str_sp": "Undead Amargasaurus" }, + "copy-from": "mon_zapatosaurus", + "looks_like": "mon_zapatosaurus", + "volume": "1000 L", + "weight": "1000 kg", + "speed": 55, + "melee_skill": 10, + "melee_dice": 4, + "melee_dice_sides": 7, + "melee_cut": 4, + "armor_bash": 8, + "armor_cut": 8, + "armor_bullet": 6, + "hp": 720, + "description": "A zombie amargasaurus, it has begun using its spikes for hunting.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zamargasaurus_UPGRADE" }, + "flags": [ "SEES", "SMELLS", "HEARS", "BASHES", "POISON", "STUMBLES", "NO_BREATHE", "REVIVES", "FILTHY", "WARM" ] + }, { "type": "MONSTER", "id": "mon_zapatosaurus", @@ -352,8 +411,8 @@ { "id": "slam", "cooldown": 10, "damage_max_instance": [ { "damage_type": "bash", "amount": 12 } ] }, [ "SMASH", 30 ] ], - "description": "Massive, long-necked, four-legged dinosaur corpse with a long, whip-like tail. The head is upright and the neck looks like it would still make a good strong club.", - "upgrades": { "half_life": 14, "into": "mon_zapatosaurus_brute" } + "description": "A massive, long-necked, four-legged dinosaur corpse with a long, whip-like tail. The head is still upright and the neck looks like it would still make a good, strong club.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zapatosaurus_UPGRADE" } }, { "type": "MONSTER", @@ -362,7 +421,8 @@ "copy-from": "mon_zapatosaurus", "looks_like": "mon_apatosaurus", "hp": 530, - "description": "Massive, long-necked, four-legged dinosaur corpse with a bulky torso and a long, whip-like tail." + "description": "Massive, long-necked, four-legged dinosaur corpse with a bulky torso and a long, whip-like tail.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zrontosaurus_UPGRADE" } }, { "type": "MONSTER", @@ -386,7 +446,7 @@ [ "SMASH", 30 ] ], "description": "Huge, long-necked, four-legged dinosaur with a long, whip-like tail and a tiny head with vacant white eyes. Sways and staggers.", - "upgrades": { "half_life": 14, "into": "mon_ziplodocus_brute" } + "upgrades": { "half_life": 14, "into_group": "GROUP_ziplodocus_UPGRADE" } }, { "type": "MONSTER", @@ -395,8 +455,8 @@ "copy-from": "mon_zapatosaurus", "looks_like": "mon_apatosaurus", "speed": 50, - "description": "Massive, long-necked, four-legged dinosaur corpse with a long, whip-like tail. The head is upright and the neck looks like it would still make a good strong club.", - "upgrades": { "half_life": 14, "into": "mon_zamarasaurus_brute" } + "description": "Massive, long-necked, four-legged dinosaur corpse with a long, whip-like tail. The head is still upright and the neck looks like it would still make a good, strong club.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zamarasaurus_UPGRADE" } }, { "type": "MONSTER", @@ -410,7 +470,8 @@ "armor_cut": 8, "armor_bullet": 3, "hp": 2000, - "description": "Gigantic, long-necked, four-legged dinosaur corpse with longer forelegs and a whip-like tail." + "description": "Gigantic, long-necked, four-legged dinosaur corpse with longer forelegs and a whip-like tail.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zrachiosaurus_UPGRADE" } }, { "type": "MONSTER", @@ -423,7 +484,8 @@ "armor_cut": 19, "armor_bullet": 3, "hp": 1500, - "description": "Gigantic, long-necked, four-legged dinosaur corpse with a long neck and spiked tail protected by natural bone armor." + "description": "Gigantic, long-necked, four-legged dinosaur corpse, protected by natural bone armor and a spiked tail.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zalamosaurus_UPGRADE" } }, { "type": "MONSTER", @@ -443,8 +505,8 @@ "armor_cut": 4, "armor_bullet": 2, "hp": 250, - "description": "A large shambling quadruped dinosaur corpse dragging with the weight of the plates on its back, waving a much livelier looking spiked tail.", - "upgrades": { "half_life": 14, "into": "mon_ztegosaurus_brute" } + "description": "A large, shambling quadruped dinosaur corpse, dragging with the weight of the plates on its back - waving a much livelier-looking spiked tail.", + "upgrades": { "half_life": 14, "into_group": "GROUP_ztegosaurus_UPGRADE" } }, { "type": "MONSTER", @@ -459,7 +521,8 @@ { "id": "slam", "cooldown": 10, "damage_max_instance": [ { "damage_type": "bash", "amount": 8 } ] }, [ "SMASH", 30 ] ], - "description": "This armored dinosaur corpse looks like a giant prehistoric armadillo. Its tail ends in a spiked club of bone." + "description": "This armored dinosaur corpse looks like a giant prehistoric armadillo. Its tail ends in a spiked club of bone.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zyoplosaurus_UPGRADE" } }, { "type": "MONSTER", @@ -510,7 +573,8 @@ "armor_cut": 23, "armor_bullet": 11, "special_attacks": [ [ "scratch", 10 ], { "type": "bite", "cooldown": 5 } ], - "description": "This heavily armored dinosaur corpse looks like a giant prehistoric armadillo." + "description": "This heavily-armored dinosaur corpse looks like a giant prehistoric armadillo.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zodosaurus_UPGRADE" } }, { "type": "MONSTER", @@ -524,7 +588,8 @@ "armor_cut": 23, "armor_bullet": 11, "special_attacks": [ [ "scratch", 10 ], { "type": "bite", "cooldown": 5 } ], - "description": "This heavily armored dinosaur corpse looks like a giant prehistoric armadillo with long bony spikes." + "description": "This heavily-armored dinosaur corpse looks like a giant prehistoric armadillo with long, bony spikes.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zedmontonia_UPGRADE" } }, { "type": "MONSTER", @@ -552,8 +617,8 @@ "hp": 130, "death_function": [ "NORMAL" ], "special_attacks": [ [ "scratch", 10 ], { "type": "bite", "cooldown": 5 } ], - "description": "The shuffling corpse of a large feathered bipedal dinosaur with strong legs, broad shoulders and a pointed beak. Its tattered feathers are stained with black, sticky liquid.", - "upgrades": { "half_life": 14, "into": "mon_zamptosaurus_brute" }, + "description": "The shuffling corpse of a large, feathered, bipedal dinosaur with strong legs, broad shoulders, and a pointed beak. Its tattered feathers are stained with black, sticky liquid.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zamptosaurus_UPGRADE" }, "flags": [ "SEES", "SMELLS", "HEARS", "POISON", "STUMBLES", "NO_BREATHE", "REVIVES", "FILTHY", "WARM", "BASHES" ], "vision_night": 3, "harvest": "zed_dino_leather", @@ -565,8 +630,8 @@ "name": { "str": "Maiasaura zombie" }, "copy-from": "mon_zarasaurolophus", "hp": 400, - "description": "A huge mottled dinosaur with hooves and heavy tail, dead and walking, eyes vacant and swollen. Has a flat beak, thick nose, and small spiky head crest.", - "upgrades": { "half_life": 14, "into": "mon_zaiasaura_brute" } + "description": "A huge, mottled dinosaur with hooves and a heavy tail, dead but walking, eyes vacant and swollen. Has a flat beak, thick nose, and a small but spiky head crest.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zaiasaura_UPGRADE" } }, { "type": "MONSTER", @@ -585,8 +650,8 @@ "armor_cut": 7, "armor_bullet": 4, "hp": 500, - "description": "A huge mottled dinosaur with a blunt head crest, dead and walking, eyes vacant and swollen.", - "upgrades": { "half_life": 14, "into": "mon_zarasaurolophus_brute" } + "description": "A huge, mottled dinosaur with a blunt head crest, dead but walking, eyes vacant and swollen.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zarasaurolophus_UPGRADE" } }, { "type": "MONSTER", @@ -605,8 +670,8 @@ "armor_cut": 6, "armor_bullet": 4, "hp": 500, - "description": "A huge scaly dinosaur with a short beak and a tall head crest, dead and walking, eyes vacant and swollen.", - "upgrades": { "half_life": 14, "into": "mon_zorythosaurus_brute" }, + "description": "A huge, scaly dinosaur with a short beak and a tall head crest, dead but walking, eyes vacant and swollen.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zorythosaurus_UPGRADE" }, "special_attacks": [ [ "SHRIEK", 5 ] ] }, { @@ -626,8 +691,8 @@ "armor_cut": 6, "armor_bullet": 4, "hp": 600, - "description": "A huge scaly dinosaur with a broad toothless beak, dead and walking, eyes vacant and swollen.", - "upgrades": { "half_life": 14, "into": "mon_zedmontosaurus_brute" } + "description": "A huge, scaly dinosaur with a broad, toothless beak, dead but walking, eyes vacant and swollen.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zedmontosaurus_UPGRADE" } }, { "type": "MONSTER", @@ -654,8 +719,8 @@ "hp": 70, "death_function": [ "NORMAL" ], "special_attacks": [ [ "scratch", 10 ], { "type": "bite", "cooldown": 5 } ], - "description": "The shuffling corpse of a medium-sized bipedal dinosaur covered with tattered feathers and black putrid liquid. It looks like a reptilian ostrich with a round hard-looking domed head.", - "upgrades": { "half_life": 14, "into": "mon_zachycephalosaurus_brute" }, + "description": "The shuffling corpse of a medium-sized bipedal dinosaur covered with tattered feathers and black, putrid liquid. It resembles a reptilian ostrich with a hard-looking domed head.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zachycephalosaurus_UPGRADE" }, "flags": [ "SEES", "SMELLS", "HEARS", "PET_MOUNTABLE", "POISON", "STUMBLES", "NO_BREATHE", "REVIVES", "FILTHY", "WARM" ], "vision_night": 3, "harvest": "zed_dino_feather", @@ -678,7 +743,8 @@ "name": { "str": "Pachyrhinosaurus zombie" }, "copy-from": "mon_zriceratops", "hp": 400, - "description": "A massive shambling rhino-like dinosaur corpse with a tall bony crest from which four long horns and a short nose horn emerge. Its black eyes ooze like tears.", + "description": "A massive, shambling, rhino-like dinosaur corpse with a tall, bony crest from which four long horns and a short nose horn emerge. Its eyes ooze black, putrid tears.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zachyrhinosaurus_UPGRADE" }, "special_attacks": [ { "id": "slam", "cooldown": 10, "damage_max_instance": [ { "damage_type": "bash", "amount": 12 } ] }, [ "SMASH", 30 ] @@ -692,7 +758,29 @@ "armor_cut": 9, "armor_bash": 8, "hp": 500, - "description": "A massive shambling rhino-like dinosaur corpse with a tall bony crest from which four long horns and a short nose horn emerge. Its black eyes ooze like tears." + "description": "A massive, shambling, rhino-like dinosaur corpse with a tall, bony crest from which four long horns and a short nose horn emerge. Its eyes ooze black, putrid tears.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zentaceratops_UPGRADE" } + }, + { + "type": "MONSTER", + "id": "mon_zosmoceratops", + "name": { "str_sp": "Undead Kosmoceratops" }, + "copy-from": "mon_zriceratops", + "looks_like": "mon_zriceratops", + "volume": "1000 L", + "weight": "1000 kg", + "speed": 70, + "melee_skill": 9, + "melee_dice": 5, + "melee_dice_sides": 8, + "melee_cut": 10, + "armor_bash": 6, + "armor_cut": 7, + "armor_bullet": 4, + "hp": 630, + "description": "An undead Kosmoceratops, it seems to have forgotten its herbivorous diet and looks hungry for your flesh.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zosmoceratops_UPGRADE" }, + "flags": [ "SEES", "SMELLS", "HEARS", "BASHES", "POISON", "STUMBLES", "NO_BREATHE", "REVIVES", "FILTHY", "WARM" ] }, { "type": "MONSTER", @@ -702,7 +790,8 @@ "armor_cut": 9, "armor_bash": 8, "hp": 500, - "description": "A massive shambling rhino-like dinosaur corpse with a tall bony crest from which two wicked looking horns emerge. Its black eyes ooze like tears.", + "description": "A massive, shambling, rhino-like dinosaur corpse with a tall, bony crest from which two wicked-looking horns emerge. Its eyes ooze black, putrid tears.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zorosaurus_UPGRADE" }, "special_attacks": [ { "id": "impale" }, [ "STRETCH_ATTACK", 5 ] ] }, { @@ -723,19 +812,25 @@ "armor_cut": 7, "armor_bullet": 3, "hp": 600, - "description": "A massive shambling rhino-like dinosaur corpse with a bony crest from which three wicked looking horns emerge. Its black eyes ooze like tears.", - "upgrades": { "half_life": 14, "into": "mon_zriceratops_brute" }, + "description": "A massive, shambling, rhino-like dinosaur corpse with a bony crest from which three wicked-looking horns emerge. Its eyes ooze black, putrid tears.", + "upgrades": { "half_life": 14, "into_group": "GROUP_zriceratops_UPGRADE" }, "special_attacks": [ { "id": "impale" } ] }, { "type": "MONSTER", "id": "mon_zteranodon", "name": { "str": "Pteranodon zombie" }, - "copy-from": "mon_zamptosaurus", "looks_like": "mon_pteranodon", + "species": [ "ZOMBIE" ], + "default_faction": "zombie", + "symbol": "Z", + "color": "green", "volume": "38 L", "weight": "50 kg", "bodytype": "bird", + "material": [ "flesh" ], + "aggression": 100, + "morale": 100, "speed": 150, "melee_skill": 5, "melee_dice": 2, @@ -745,30 +840,39 @@ "armor_cut": 4, "armor_bullet": 1, "hp": 70, - "description": "The raggedly flying corpse of a large feathered reptile with a long pointed toothless beak and a long pointy head crest.", + "death_function": [ "NORMAL" ], + "special_attacks": [ [ "scratch", 10 ], { "type": "bite", "cooldown": 5 } ], + "description": "The ragged but flying corpse of a large, feathered reptile with a long, pointy, toothless beak and a long, pointy head crest.", "upgrades": { "half_life": 14, "into": "mon_zteranodon_brute" }, - "extend": { "flags": [ "FLIES", "HIT_AND_RUN" ] } + "flags": [ + "SEES", + "SMELLS", + "HEARS", + "POISON", + "STUMBLES", + "NO_BREATHE", + "REVIVES", + "FILTHY", + "WARM", + "BASHES", + "FLIES", + "HIT_AND_RUN" + ], + "vision_night": 3, + "harvest": "zed_dino_feather", + "categories": [ "DINOSAUR", "CLASSIC" ] }, { "type": "MONSTER", "id": "mon_zuetzalcoatlus", "name": { "str": "Quetzalcoatlus zombie" }, - "copy-from": "mon_zamptosaurus", - "looks_like": "mon_pteranodon", + "copy-from": "mon_zteranodon", "volume": "190 L", "weight": "250 kg", - "bodytype": "bird", "speed": 120, - "melee_skill": 5, - "melee_dice": 2, - "melee_dice_sides": 6, - "melee_cut": 0, - "armor_bash": 4, - "armor_cut": 4, - "armor_bullet": 1, "hp": 332, - "description": "The raggedly flying corpse of a large feathered reptile with a long pointed toothless beak and a long rigid neck.", - "extend": { "flags": [ "FLIES", "HIT_AND_RUN" ] } + "description": "The ragged but flying corpse of a large, feathered reptile with a long, pointy, toothless beak and a long, rigid neck.", + "upgrades": { } }, { "type": "MONSTER", @@ -808,25 +912,37 @@ "type": "MONSTER", "id": "mon_zapatosaurus_juvenile", "name": { "str": "juvenile sauropod zombie" }, - "copy-from": "mon_zamptosaurus", "looks_like": "mon_apatosaurus", + "species": [ "ZOMBIE" ], + "default_faction": "zombie", + "symbol": "Z", + "color": "green", "volume": "1000 L", "weight": "1000 kg", "bodytype": "elephant", + "material": [ "flesh" ], + "aggression": 100, + "morale": 100, "speed": 50, "melee_skill": 5, "melee_dice": 2, "melee_dice_sides": 4, + "melee_cut": 2, "armor_bash": 6, "armor_cut": 4, "armor_bullet": 2, "hp": 1500, + "death_function": [ "NORMAL" ], "special_attacks": [ { "id": "slam", "cooldown": 10, "damage_max_instance": [ { "damage_type": "bash", "amount": 12 } ] }, [ "SMASH", 30 ] ], - "description": "A small four-legged plant-eating dinosaur juvenile corpse, it could be from a number of different species.", - "upgrades": { "half_life": 14, "into": "mon_zapatosaurus" } + "description": "A small, four-legged, herbivorous dinosaur juvenile's corpse that could be from a number of different species.", + "upgrades": { "half_life": 14, "into": "mon_zapatosaurus" }, + "flags": [ "SEES", "SMELLS", "HEARS", "POISON", "STUMBLES", "NO_BREATHE", "REVIVES", "FILTHY", "WARM", "BASHES" ], + "vision_night": 3, + "harvest": "zed_dino_leather", + "categories": [ "DINOSAUR", "CLASSIC" ] }, { "type": "MONSTER", @@ -869,72 +985,12 @@ "type": "MONSTER", "id": "mon_zalamosaurus_juvenile", "name": { "str": "juvenile Alamosaurus zombie" }, - "copy-from": "mon_zapatosaurus", + "copy-from": "mon_zapatosaurus_juvenile", "looks_like": "mon_apatosaurus", "armor_bash": 7, "armor_cut": 9, "armor_bullet": 1, - "description": "A small four-legged plant-eating dinosaur juvenile corpse with natural bone armor plates.", + "description": "The corpse of a small, four-legged, herbivorous dinosaur juvenile, with natural bone armor plates.", "upgrades": { "half_life": 14, "into": "mon_zalamosaurus" } - }, - { - "type": "MONSTER", - "id": "mon_zianzhousaurus", - "name": { "str": "Qianz zombie" }, - "copy-from": "mon_zyrannosaurus", - "looks_like": "mon_zyrannosaurus", - "volume": "550 L", - "weight": "770 kg", - "speed": 60, - "melee_skill": 10, - "melee_dice": 4, - "melee_dice_sides": 7, - "melee_cut": 6, - "armor_bash": 5, - "armor_cut": 5, - "armor_bullet": 3, - "hp": 230, - "description": "An undead Qianzhousaurus, looking at you with a furious rage in its eyes and seeming intent on eating you.", - "flags": [ "SEES", "SMELLS", "HEARS", "BASHES", "POISON", "STUMBLES", "NO_BREATHE", "REVIVES", "FILTHY", "WARM" ] - }, - { - "type": "MONSTER", - "id": "mon_zosmoceratops", - "name": { "str_sp": "Undead Kosmoceratops" }, - "copy-from": "mon_zriceratops", - "looks_like": "mon_zriceratops", - "volume": "1000 L", - "weight": "1000 kg", - "speed": 70, - "melee_skill": 9, - "melee_dice": 5, - "melee_dice_sides": 8, - "melee_cut": 10, - "armor_bash": 6, - "armor_cut": 7, - "armor_bullet": 4, - "hp": 630, - "description": "An undead Kosmoceratops, it seems to have forgotten it's herbivore diet, and seems hungry for your flesh.", - "flags": [ "SEES", "SMELLS", "HEARS", "BASHES", "POISON", "STUMBLES", "NO_BREATHE", "REVIVES", "FILTHY", "WARM" ] - }, - { - "type": "MONSTER", - "id": "mon_zamargasaurus", - "name": { "str_sp": "Undead Amargasaurus" }, - "copy-from": "mon_zapatosaurus", - "looks_like": "mon_zapatosaurus", - "volume": "1000 L", - "weight": "1000 kg", - "speed": 55, - "melee_skill": 10, - "melee_dice": 4, - "melee_dice_sides": 7, - "melee_cut": 4, - "armor_bash": 8, - "armor_cut": 8, - "armor_bullet": 6, - "hp": 720, - "description": "A zombie amargasaurus, it has begun using its spikes for hunting.", - "flags": [ "SEES", "SMELLS", "HEARS", "BASHES", "POISON", "STUMBLES", "NO_BREATHE", "REVIVES", "FILTHY", "WARM" ] } ] diff --git a/data/mods/DinoMod/monsters/zinosaur_upgrade.json b/data/mods/DinoMod/monsters/zinosaur_upgrade.json index 1830f67f9a297..d0b524038d944 100644 --- a/data/mods/DinoMod/monsters/zinosaur_upgrade.json +++ b/data/mods/DinoMod/monsters/zinosaur_upgrade.json @@ -1,10 +1,10 @@ [ { "type": "MONSTER", - "id": "mon_zallimimus_brute", - "name": { "str_sp": "Gruesome Gallimimus" }, - "copy-from": "mon_zallimimus", - "description": "The shuffling corpse of a medium-sized bipedal dinosaur covered with tattered feathers and black putrid liquid. Its entire body bulges with distended muscles and swollen, festering wounds.", + "id": "mon_zilophosaurus_brute", + "name": { "str": "Crested Crusher" }, + "copy-from": "mon_zilophosaurus", + "description": "The shuffling corpse of a medium-sized dinosaur with sharp teeth and two prominent bony crests on its head, with ragged strips of ripped flesh hanging down like a frill. Its entire body bulges with distended muscles and swollen, festering wounds.", "diff": 2, "color": "red", "proportional": { "hp": 1.5, "speed": 1.5 }, @@ -24,13 +24,14 @@ }, { "type": "MONSTER", - "id": "mon_zachycephalosaurus_brute", - "name": { "str": "Skull Breaker" }, - "copy-from": "mon_zachycephalosaurus", - "description": "The shuffling corpse of a medium-sized bipedal dinosaur covered with tattered feathers and black putrid liquid. Its round, hard-looking domed head sits on a body bulging with distended muscles and swollen, festering wounds.", + "id": "mon_zeratosaurus_brute", + "name": { "str": "Draco Titan" }, + "copy-from": "mon_zeratosaurus", + "looks_like": "mon_zyrannosaurus", + "description": "This zombie is enormous, scaly, studded with bony spikes, and moving with horrible speed. Its colorful horns and bone spikes sit on a body bulging with distended muscles and swollen, festering wounds.", "diff": 2, "color": "red", - "proportional": { "hp": 1.5, "speed": 1.5 }, + "proportional": { "hp": 1.5 }, "relative": { "melee_dice": 1, "melee_dice_sides": 5, @@ -70,11 +71,10 @@ }, { "type": "MONSTER", - "id": "mon_zyrannosaurus_brute", - "name": { "str_sp": "Rage Rex" }, - "copy-from": "mon_zyrannosaurus", - "looks_like": "mon_zyrannosaurus", - "description": "Massive piles of ragged, stinking flesh lifting enormous teeth. Its entire body bulges with distended muscles and swollen, festering wounds.", + "id": "mon_zallosaurus_brute", + "name": { "str": "Allosaurus Avalanche" }, + "copy-from": "mon_zallosaurus", + "description": "The shambling corpse of a large predatory bipedal dinosaur. Its entire body bulges with distended muscles and swollen, festering wounds.", "diff": 2, "color": "red", "proportional": { "hp": 1.5, "speed": 1.5 }, @@ -87,18 +87,17 @@ "armor_bullet": 5, "vision_night": 1 }, - "upgrades": { "half_life": 21, "into_group": "GROUP_zyrannosaurus_BRUTE" }, + "upgrades": { }, "special_attacks": [ [ "SMASH", 30 ] ], "extend": { "flags": [ "GROUP_BASH", "PUSH_MON", "PUSH_VEH" ] }, "categories": [ "DINOSAUR" ] }, { "type": "MONSTER", - "id": "mon_zalbertosaurus_brute", - "name": { "str": "Alberta Anvil" }, - "copy-from": "mon_zalbertosaurus", - "looks_like": "mon_zyrannosaurus", - "description": "Massive jaws and grabbing claws lifting by a body bulging with distended muscles and swollen, festering wounds.", + "id": "mon_zacrocanthosaurus_brute", + "name": { "str": "Acrocanthosaurus Avenger" }, + "copy-from": "mon_zacrocanthosaurus", + "description": "The shambling corpse of a large predatory bipedal dinosaur with curved, sawblade-like teeth. Its entire body bulges with distended muscles and swollen, festering wounds.", "diff": 2, "color": "red", "proportional": { "hp": 1.5, "speed": 1.5 }, @@ -112,16 +111,16 @@ "vision_night": 1 }, "upgrades": { }, - "special_attacks": [ [ "SMASH", 30 ], [ "GRAB", 7 ] ], + "special_attacks": [ [ "SMASH", 30 ] ], "extend": { "flags": [ "GROUP_BASH", "PUSH_MON", "PUSH_VEH" ] }, "categories": [ "DINOSAUR" ] }, { "type": "MONSTER", - "id": "mon_zriceratops_brute", - "name": { "str": "Triceratruck" }, - "copy-from": "mon_zriceratops", - "description": "A massive shambling rhino-like dinosaur corpse with a bony crest from which three wicked looking horns emerge. Its black eyes ooze like tears. Its entire body bulges with distended muscles and swollen, festering wounds.", + "id": "mon_ziats_brute", + "name": { "str": "Siats Stonehenge" }, + "copy-from": "mon_ziats", + "description": "The shambling corpse of a large predatory bipedal dinosaur with long claws and strong arms for grappling. Its entire body bulges with distended muscles and swollen, festering wounds.", "diff": 2, "color": "red", "proportional": { "hp": 1.5, "speed": 1.5 }, @@ -141,10 +140,11 @@ }, { "type": "MONSTER", - "id": "mon_ztegosaurus_brute", - "name": { "str": "Stegosaurus Sledge" }, - "copy-from": "mon_ztegosaurus", - "description": "A large shambling quadruped dinosaur corpse with plates on its back, waving a spiked tail. Its entire body bulges with distended muscles and swollen, festering wounds.", + "id": "mon_zalbertosaurus_brute", + "name": { "str": "Alberta Anvil" }, + "copy-from": "mon_zalbertosaurus", + "looks_like": "mon_zyrannosaurus", + "description": "Massive jaws and grabbing claws lifted by an undead body bulging with distended muscles and swollen, festering wounds.", "diff": 2, "color": "red", "proportional": { "hp": 1.5, "speed": 1.5 }, @@ -158,16 +158,17 @@ "vision_night": 1 }, "upgrades": { }, - "special_attacks": [ [ "SMASH", 30 ] ], + "special_attacks": [ [ "SMASH", 30 ], [ "GRAB", 7 ] ], "extend": { "flags": [ "GROUP_BASH", "PUSH_MON", "PUSH_VEH" ] }, "categories": [ "DINOSAUR" ] }, { "type": "MONSTER", - "id": "mon_zankylosaurus_brute", - "name": { "str": "Dino Tank" }, - "copy-from": "mon_zankylosaurus", - "description": "Heavily armored zombie dinosaur. Its entire body bulges with distended muscles and swollen, festering wounds.", + "id": "mon_zianzhousaurus_brute", + "name": { "str": "Qianzhousaurus chéngqiáng" }, + "copy-from": "mon_zianzhousaurus", + "looks_like": "mon_zyrannosaurus", + "description": "Massive jaws on a long snout lifted by an undead body bulging with distended muscles and swollen, festering wounds.", "diff": 2, "color": "red", "proportional": { "hp": 1.5, "speed": 1.5 }, @@ -180,17 +181,41 @@ "armor_bullet": 5, "vision_night": 1 }, - "upgrades": { "half_life": 21, "into_group": "GROUP_zankylosaurus_BRUTE" }, + "upgrades": { }, + "special_attacks": [ [ "SMASH", 30 ], [ "GRAB", 7 ] ], + "extend": { "flags": [ "GROUP_BASH", "PUSH_MON", "PUSH_VEH" ] }, + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_zyrannosaurus_brute", + "name": { "str_sp": "Rage Rex" }, + "copy-from": "mon_zyrannosaurus", + "looks_like": "mon_zyrannosaurus", + "description": "A massive pile of ragged, stinking flesh lifting enormous teeth. Its entire body bulges with distended muscles and swollen, festering wounds.", + "diff": 2, + "color": "red", + "proportional": { "hp": 1.5, "speed": 1.5 }, + "relative": { + "melee_dice": 1, + "melee_dice_sides": 5, + "melee_cut": 2, + "armor_bash": 4, + "armor_cut": 6, + "armor_bullet": 5, + "vision_night": 1 + }, + "upgrades": { "half_life": 21, "into_group": "GROUP_zyrannosaurus_BRUTE" }, "special_attacks": [ [ "SMASH", 30 ] ], "extend": { "flags": [ "GROUP_BASH", "PUSH_MON", "PUSH_VEH" ] }, "categories": [ "DINOSAUR" ] }, { "type": "MONSTER", - "id": "mon_ziplodocus_brute", - "name": { "str": "Flail Fiend" }, - "copy-from": "mon_ziplodocus", - "description": "Huge, long-necked, four-legged dinosaur with a long, whip-like tail and a tiny head with vacant white eyes. Sways and staggers. Its entire body bulges with distended muscles and swollen, festering wounds.", + "id": "mon_zallimimus_brute", + "name": { "str_sp": "Gruesome Gallimimus" }, + "copy-from": "mon_zallimimus", + "description": "The shuffling corpse of a medium-sized bipedal dinosaur covered with tattered feathers and black, putrid liquid. Its entire body bulges with distended muscles and swollen, festering wounds.", "diff": 2, "color": "red", "proportional": { "hp": 1.5, "speed": 1.5 }, @@ -210,10 +235,10 @@ }, { "type": "MONSTER", - "id": "mon_zamarasaurus_brute", - "name": { "str": "Zombie Freight Train" }, - "copy-from": "mon_zamarasaurus", - "description": "Massive four-legged dinosaur corpse with a square head and even bulkier frame. Its entire body bulges with distended muscles and swollen, festering wounds.", + "id": "mon_zothronychus_brute", + "name": { "str_sp": "Nefarious Nothronychus" }, + "copy-from": "mon_zothronychus", + "description": "The shuffling corpse of a medium-sized bipedal dinosaur covered with tattered feathers and black, putrid liquid. Long curved claws protrude from its hands. Its entire body bulges with distended muscles and swollen, festering wounds.", "diff": 2, "color": "red", "proportional": { "hp": 1.5, "speed": 1.5 }, @@ -233,10 +258,10 @@ }, { "type": "MONSTER", - "id": "mon_zapatosaurus_brute", - "name": { "str": "Zombie Dreadnought" }, - "copy-from": "mon_zapatosaurus", - "description": "Massive, long-necked, four-legged dinosaur corpse with a long, whip-like tail. Its entire body bulges with distended muscles and swollen, festering wounds.", + "id": "mon_zeinonychus_brute", + "name": { "str": "Deino Destroyer" }, + "copy-from": "mon_zeinonychus", + "description": "The shuffling corpse of a medium-sized bipedal dinosaur covered with tattered feathers and black, putrid liquid. Both feet brandish a large sickle-shaped claw. Its entire body bulges with distended muscles and swollen, festering wounds.", "diff": 2, "color": "red", "proportional": { "hp": 1.5, "speed": 1.5 }, @@ -256,13 +281,14 @@ }, { "type": "MONSTER", - "id": "mon_zallosaurus_brute", - "name": { "str": "Allosaurus Avalanche" }, - "copy-from": "mon_zallosaurus", - "description": "The shambling corpse of a large predatory bipedal dinosaur. Its entire body bulges with distended muscles and swollen, festering wounds.", + "id": "mon_zutahraptor_brute", + "name": { "str": "Utah Hoodoo" }, + "copy-from": "mon_zutahraptor", + "description": "The swaying, hopping corpse of a large bipedal dinosaur with feathered arms, a long tail, and long, sharp, scythe-shaped claws. Its entire body bulges with distended muscles and swollen, festering wounds.", "diff": 2, "color": "red", - "proportional": { "hp": 1.5, "speed": 1.5 }, + "proportional": { "hp": 1.5 }, + "speed": 150, "relative": { "melee_dice": 1, "melee_dice_sides": 5, @@ -279,10 +305,10 @@ }, { "type": "MONSTER", - "id": "mon_zothronychus_brute", - "name": { "str_sp": "Nefarious Nothronychus" }, - "copy-from": "mon_zothronychus", - "description": "The shuffling corpse of a medium-sized bipedal dinosaur covered with tattered feathers and black putrid liquid. Long curved claws protude from its hands. Its entire body bulges with distended muscles and swollen, festering wounds.", + "id": "mon_zamargasaurus_brute", + "name": { "str": "Spiked Dreadnaught" }, + "copy-from": "mon_zamargasaurus", + "description": "Huge, long-necked, four-legged dinosaur corpse with two parallel rows of tall spines down its neck and back and a whip-like tail. Its entire body bulges with distended muscles and swollen, festering wounds.", "diff": 2, "color": "red", "proportional": { "hp": 1.5, "speed": 1.5 }, @@ -302,10 +328,10 @@ }, { "type": "MONSTER", - "id": "mon_zeinonychus_brute", - "name": { "str": "Deino Destroyer" }, - "copy-from": "mon_zeinonychus", - "description": "The shuffling corpse of a medium-sized bipedal dinosaur covered with tattered feathers and black putrid liquid. Both feet brandish a large sickle-like claw. Its entire body bulges with distended muscles and swollen, festering wounds.", + "id": "mon_zapatosaurus_brute", + "name": { "str": "Anabolic Apatosaurus" }, + "copy-from": "mon_zapatosaurus", + "description": "Massive, long-necked, four-legged dinosaur corpse with a long, whip-like tail. Its entire body bulges with distended muscles and swollen, festering wounds.", "diff": 2, "color": "red", "proportional": { "hp": 1.5, "speed": 1.5 }, @@ -325,14 +351,13 @@ }, { "type": "MONSTER", - "id": "mon_zutahraptor_brute", - "name": { "str": "Utah Hoodoo" }, - "copy-from": "mon_zutahraptor", - "description": "The swaying, hopping corpse of a large bipedal dinosaur with feathered arms, a long tail, and long sharp scythe-like claws. Its entire body bulges with distended muscles and swollen, festering wounds.", + "id": "mon_zrontosaurus_brute", + "name": { "str": "Brontosaurus Brute" }, + "copy-from": "mon_zrontosaurus", + "description": "Massive, long-necked, four-legged dinosaur corpse with a long, whip-like tail. Its entire body bulges with distended muscles and swollen, festering wounds.", "diff": 2, "color": "red", - "proportional": { "hp": 1.5 }, - "speed": 150, + "proportional": { "hp": 1.5, "speed": 1.5 }, "relative": { "melee_dice": 1, "melee_dice_sides": 5, @@ -349,10 +374,10 @@ }, { "type": "MONSTER", - "id": "mon_zamptosaurus_brute", - "name": { "str": "Crusher Camp" }, - "copy-from": "mon_zamptosaurus", - "description": "The shuffling corpse of a large feathered bipedal dinosaur with grossly bulging legs, massive hulking shoulders and a vicious pointed beak. Its tattered feathers are stained with black, sticky liquid.", + "id": "mon_ziplodocus_brute", + "name": { "str": "Flail Fiend" }, + "copy-from": "mon_ziplodocus", + "description": "Huge, long-necked, four-legged dinosaur corpse with a long, whip-like tail and a tiny head with vacant white eyes. Sways and staggers. Its entire body bulges with distended muscles and swollen, festering wounds.", "diff": 2, "color": "red", "proportional": { "hp": 1.5, "speed": 1.5 }, @@ -372,10 +397,10 @@ }, { "type": "MONSTER", - "id": "mon_zaiasaura_brute", - "name": { "str": "Mother Crusher" }, - "copy-from": "mon_zaiasaura", - "description": "A huge mottled dinosaur with hooves and heavy tail, dead and walking, eyes vacant and swollen. Its entire body bulges with distended muscles and swollen, festering wounds.", + "id": "mon_zamarasaurus_brute", + "name": { "str": "Zombie Freight Train" }, + "copy-from": "mon_zamarasaurus", + "description": "Massive, four-legged dinosaur corpse with a square head and even bulkier frame. Its entire body bulges with distended muscles and swollen, festering wounds.", "diff": 2, "color": "red", "proportional": { "hp": 1.5, "speed": 1.5 }, @@ -395,10 +420,10 @@ }, { "type": "MONSTER", - "id": "mon_zarasaurolophus_brute", - "name": { "str": "Parasaur Punch", "str_pl": "Parasaur Punches" }, - "copy-from": "mon_zarasaurolophus", - "description": "A huge mottled dinosaur with a blunt head crest, dead and walking, eyes vacant and swollen. Its entire body bulges with distended muscles and swollen, festering wounds.", + "id": "mon_zrachiosaurus_brute", + "name": { "str": "Brachiosaurus Brute" }, + "copy-from": "mon_zrachiosaurus", + "description": "Gigantic four-legged dinosaur corpse with longer forelegs and a whip-like tail. Its entire body bulges with distended muscles and swollen, festering wounds.", "diff": 2, "color": "red", "proportional": { "hp": 1.5, "speed": 1.5 }, @@ -418,10 +443,10 @@ }, { "type": "MONSTER", - "id": "mon_zorythosaurus_brute", - "name": { "str": "Cory Crusher" }, - "copy-from": "mon_zorythosaurus", - "description": "A huge scaly dinosaur with a short beak and a tall head crest, dead and walking, eyes vacant and swollen. Its entire body bulges with distended muscles and swollen, festering wounds.", + "id": "mon_zalamosaurus_brute", + "name": { "str": "Anabolic Alamosaurus" }, + "copy-from": "mon_zalamosaurus", + "description": "Gigantic, four-legged dinosaur corpse with a long neck and a spiked whip-like tail. Its entire body bulges with distended muscles and swollen, festering wounds.", "diff": 2, "color": "red", "proportional": { "hp": 1.5, "speed": 1.5 }, @@ -441,10 +466,10 @@ }, { "type": "MONSTER", - "id": "mon_zedmontosaurus_brute", - "name": { "str": "Edmonton Everest" }, - "copy-from": "mon_zedmontosaurus", - "description": "A huge scaly dinosaur with a broad toothless beak, dead and walking, eyes vacant and swollen. Its entire body bulges with distended muscles and swollen, festering wounds.", + "id": "mon_ztegosaurus_brute", + "name": { "str": "Stegosaurus Sledge" }, + "copy-from": "mon_ztegosaurus", + "description": "A large, shambling, quadrupedal dinosaur corpse with plates on its back, waving a spiked tail. Its entire body bulges with distended muscles and swollen, festering wounds.", "diff": 2, "color": "red", "proportional": { "hp": 1.5, "speed": 1.5 }, @@ -464,10 +489,10 @@ }, { "type": "MONSTER", - "id": "mon_zteranodon_brute", - "name": { "str": "Winged Horror" }, - "copy-from": "mon_zteranodon", - "description": "The raggedly flying corpse of a large feathered reptile with a long, pointed, toothless beak and a long pointy head crest. Its entire body bulges with distended muscles and swollen, festering wounds.", + "id": "mon_zyoplosaurus_brute", + "name": { "str": "Dino Tankette" }, + "copy-from": "mon_zyoplosaurus", + "description": "Heavily-armored zombie dinosaur with a thick, spiked tail. Its entire body bulges with distended muscles and swollen, festering wounds.", "diff": 2, "color": "red", "proportional": { "hp": 1.5, "speed": 1.5 }, @@ -487,10 +512,10 @@ }, { "type": "MONSTER", - "id": "mon_zilophosaurus_brute", - "name": { "str": "Crested Crusher" }, - "copy-from": "mon_zilophosaurus", - "description": "The shuffling corpse of a medium dinosaur with sharp teeth and two prominent bony crests on its head with ragged strips of ripped flesh hanging down like a frill. Its entire body bulges with distended muscles and swollen, festering wounds.", + "id": "mon_zankylosaurus_brute", + "name": { "str": "Dino Tank" }, + "copy-from": "mon_zankylosaurus", + "description": "Heavily-armored zombie dinosaur with a massive spiked tail of bone. Its entire body bulges with distended muscles and swollen, festering wounds.", "diff": 2, "color": "red", "proportional": { "hp": 1.5, "speed": 1.5 }, @@ -503,21 +528,20 @@ "armor_bullet": 5, "vision_night": 1 }, - "upgrades": { }, + "upgrades": { "half_life": 21, "into_group": "GROUP_zankylosaurus_BRUTE" }, "special_attacks": [ [ "SMASH", 30 ] ], "extend": { "flags": [ "GROUP_BASH", "PUSH_MON", "PUSH_VEH" ] }, "categories": [ "DINOSAUR" ] }, { "type": "MONSTER", - "id": "mon_zeratosaurus_brute", - "name": { "str": "Draco Titan" }, - "copy-from": "mon_zeratosaurus", - "looks_like": "mon_zyrannosaurus", - "description": "This zombie is enormous, scaly, studded with bony spikes, and it moves with horrible speed. Its colorful horns and bone spikes sit on a body bulging with distended muscles and swollen, festering wounds.", + "id": "mon_zodosaurus_brute", + "name": { "str": "Nodosaurus Neutralizer" }, + "copy-from": "mon_zodosaurus", + "description": "Heavily-armored zombie dinosaur. Its entire body bulges with distended muscles and swollen, festering wounds.", "diff": 2, "color": "red", - "proportional": { "hp": 1.5 }, + "proportional": { "hp": 1.5, "speed": 1.5 }, "relative": { "melee_dice": 1, "melee_dice_sides": 5, @@ -534,133 +558,936 @@ }, { "type": "MONSTER", - "id": "mon_zpinosaurus_shady", - "name": { "str": "Spinosaurus shady zombie" }, - "copy-from": "mon_zpinosaurus", - "color": "light_gray", - "description": "An uncanny shadow envelops this dinosaur. You can make out the outline of a huge bipedal dinosaur with a tattered sail. The head is long and narrow with a V-shaped snout.", + "id": "mon_zedmontonia_brute", + "name": { "str": "Edmontonia Elbow" }, + "copy-from": "mon_zedmontonia", + "description": "Heavily-armored zombie dinosaur with long, bony spikes. Its entire body bulges with distended muscles and swollen, festering wounds.", + "diff": 2, + "color": "red", + "proportional": { "hp": 1.5, "speed": 1.5 }, + "relative": { + "melee_dice": 1, + "melee_dice_sides": 5, + "melee_cut": 2, + "armor_bash": 4, + "armor_cut": 6, + "armor_bullet": 5, + "vision_night": 1 + }, "upgrades": { }, - "extend": { "flags": [ "NIGHT_INVISIBILITY" ] }, - "vision_day": 3, - "vision_night": 30, + "special_attacks": [ [ "SMASH", 30 ] ], + "extend": { "flags": [ "GROUP_BASH", "PUSH_MON", "PUSH_VEH" ] }, "categories": [ "DINOSAUR" ] }, { "type": "MONSTER", - "id": "mon_zyrannosaurus_shady", - "name": { "str_sp": "shady Z-Rex" }, - "copy-from": "mon_zyrannosaurus", - "looks_like": "mon_zyrannosaurus", - "color": "light_gray", - "description": "An uncanny shadow envelops this dinosaur. You can make out the outline of a huge bipedal dinosaur with feathery edges. The head looks big, lots of big teeth would fit in it.", + "id": "mon_zamptosaurus_brute", + "name": { "str": "Crusher Camp" }, + "copy-from": "mon_zamptosaurus", + "description": "The shuffling corpse of a large, feathered, bipedal dinosaur with grossly-bulging legs, massive hulking shoulders, and a vicious pointed beak. Its tattered feathers are stained with black, sticky liquid.", + "diff": 2, + "color": "red", + "proportional": { "hp": 1.5, "speed": 1.5 }, + "relative": { + "melee_dice": 1, + "melee_dice_sides": 5, + "melee_cut": 2, + "armor_bash": 4, + "armor_cut": 6, + "armor_bullet": 5, + "vision_night": 1 + }, "upgrades": { }, - "extend": { "flags": [ "NIGHT_INVISIBILITY" ] }, - "vision_day": 3, - "vision_night": 30, + "special_attacks": [ [ "SMASH", 30 ] ], + "extend": { "flags": [ "GROUP_BASH", "PUSH_MON", "PUSH_VEH" ] }, "categories": [ "DINOSAUR" ] }, { "type": "MONSTER", - "id": "mon_zalbertosaurus_shady", - "name": { "str_sp": "shady Albertosaurus" }, - "copy-from": "mon_zalbertosaurus", - "looks_like": "mon_zyrannosaurus", - "color": "light_gray", - "description": "An uncanny shadow envelops this dinosaur. You can make out the outline of a huge bipedal dinosaur with feathery edges. The head looks big and below are long grasping claws.", + "id": "mon_zaiasaura_brute", + "name": { "str": "Mother Crusher" }, + "copy-from": "mon_zaiasaura", + "description": "A huge, mottled dinosaur with hooves and a heavy tail, dead but walking, eyes vacant and swollen. Its entire body bulges with distended muscles and swollen, festering wounds.", + "diff": 2, + "color": "red", + "proportional": { "hp": 1.5, "speed": 1.5 }, + "relative": { + "melee_dice": 1, + "melee_dice_sides": 5, + "melee_cut": 2, + "armor_bash": 4, + "armor_cut": 6, + "armor_bullet": 5, + "vision_night": 1 + }, "upgrades": { }, - "extend": { "flags": [ "NIGHT_INVISIBILITY" ] }, - "vision_day": 3, - "vision_night": 30, + "special_attacks": [ [ "SMASH", 30 ] ], + "extend": { "flags": [ "GROUP_BASH", "PUSH_MON", "PUSH_VEH" ] }, "categories": [ "DINOSAUR" ] }, { "type": "MONSTER", - "id": "mon_zankylosaurus_shady", - "name": { "str_sp": "shady Ankylosaurus" }, - "copy-from": "mon_zankylosaurus", - "color": "light_gray", - "description": "An uncanny shadow envelops this dinosaur. You can make out the outline of a large, heavily armored four-legged dinosaur with a spiked tail.", + "id": "mon_zarasaurolophus_brute", + "name": { "str": "Parasaur Punch", "str_pl": "Parasaur Punches" }, + "copy-from": "mon_zarasaurolophus", + "description": "A huge, mottled dinosaur with a blunt head crest, dead but walking, eyes vacant and swollen. Its entire body bulges with distended muscles and swollen, festering wounds.", + "diff": 2, + "color": "red", + "proportional": { "hp": 1.5, "speed": 1.5 }, + "relative": { + "melee_dice": 1, + "melee_dice_sides": 5, + "melee_cut": 2, + "armor_bash": 4, + "armor_cut": 6, + "armor_bullet": 5, + "vision_night": 1 + }, "upgrades": { }, - "extend": { "flags": [ "NIGHT_INVISIBILITY" ] }, - "vision_day": 3, - "vision_night": 40, + "special_attacks": [ [ "SMASH", 30 ] ], + "extend": { "flags": [ "GROUP_BASH", "PUSH_MON", "PUSH_VEH" ] }, "categories": [ "DINOSAUR" ] }, { "type": "MONSTER", - "id": "mon_zallosaurus_shady", - "name": { "str_sp": "shady Allosaurus" }, - "copy-from": "mon_zallosaurus", - "color": "light_gray", - "description": "An uncanny shadow envelops this dinosaur. You can make out the outline of a large bipedal dinosaur with large sharp teeth.", + "id": "mon_zorythosaurus_brute", + "name": { "str": "Cory Crusher" }, + "copy-from": "mon_zorythosaurus", + "description": "A huge, scaly dinosaur with a short beak and a tall head crest, dead but walking, eyes vacant and swollen. Its entire body bulges with distended muscles and swollen, festering wounds.", + "diff": 2, + "color": "red", + "proportional": { "hp": 1.5, "speed": 1.5 }, + "relative": { + "melee_dice": 1, + "melee_dice_sides": 5, + "melee_cut": 2, + "armor_bash": 4, + "armor_cut": 6, + "armor_bullet": 5, + "vision_night": 1 + }, + "upgrades": { }, + "special_attacks": [ [ "SMASH", 30 ] ], + "extend": { "flags": [ "GROUP_BASH", "PUSH_MON", "PUSH_VEH" ] }, + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_zedmontosaurus_brute", + "name": { "str": "Edmonton Everest" }, + "copy-from": "mon_zedmontosaurus", + "description": "A huge, scaly dinosaur with a broad, toothless beak, dead but walking, eyes vacant and swollen. Its entire body bulges with distended muscles and swollen, festering wounds.", + "diff": 2, + "color": "red", + "proportional": { "hp": 1.5, "speed": 1.5 }, + "relative": { + "melee_dice": 1, + "melee_dice_sides": 5, + "melee_cut": 2, + "armor_bash": 4, + "armor_cut": 6, + "armor_bullet": 5, + "vision_night": 1 + }, + "upgrades": { }, + "special_attacks": [ [ "SMASH", 30 ] ], + "extend": { "flags": [ "GROUP_BASH", "PUSH_MON", "PUSH_VEH" ] }, + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_zachycephalosaurus_brute", + "name": { "str": "Skull Breaker" }, + "copy-from": "mon_zachycephalosaurus", + "description": "The shuffling corpse of a medium-sized bipedal dinosaur, covered with tattered feathers and black, putrid liquid. Its hard-looking domed head sits on a body bulging with distended muscles and swollen, festering wounds.", + "diff": 2, + "color": "red", + "proportional": { "hp": 1.5, "speed": 1.5 }, + "relative": { + "melee_dice": 1, + "melee_dice_sides": 5, + "melee_cut": 2, + "armor_bash": 4, + "armor_cut": 6, + "armor_bullet": 5, + "vision_night": 1 + }, + "upgrades": { }, + "special_attacks": [ [ "SMASH", 30 ] ], + "extend": { "flags": [ "GROUP_BASH", "PUSH_MON", "PUSH_VEH" ] }, + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_zachyrhinosaurus_brute", + "name": { "str": "Dino Rhino" }, + "copy-from": "mon_zachyrhinosaurus", + "description": "A massive, shambling, rhino-like dinosaur corpse with two massive bony bosses on its brow and nose. Its entire body bulges with distended muscles and swollen, festering wounds.", + "diff": 2, + "color": "red", + "proportional": { "hp": 1.5, "speed": 1.5 }, + "relative": { + "melee_dice": 1, + "melee_dice_sides": 5, + "melee_cut": 2, + "armor_bash": 4, + "armor_cut": 6, + "armor_bullet": 5, + "vision_night": 1 + }, + "upgrades": { }, + "special_attacks": [ [ "SMASH", 30 ] ], + "extend": { "flags": [ "GROUP_BASH", "PUSH_MON", "PUSH_VEH" ] }, + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_zentaceratops_brute", + "name": { "str": "Five Horn Death Punch" }, + "copy-from": "mon_zentaceratops", + "description": "A massive, shambling, rhino-like dinosaur corpse with a tall bony crest from which four long horns and a short nose horn emerge. Its entire body bulges with distended muscles and swollen, festering wounds.", + "diff": 2, + "color": "red", + "proportional": { "hp": 1.5, "speed": 1.5 }, + "relative": { + "melee_dice": 1, + "melee_dice_sides": 5, + "melee_cut": 2, + "armor_bash": 4, + "armor_cut": 6, + "armor_bullet": 5, + "vision_night": 1 + }, + "upgrades": { }, + "special_attacks": [ [ "SMASH", 30 ] ], + "extend": { "flags": [ "GROUP_BASH", "PUSH_MON", "PUSH_VEH" ] }, + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_zosmoceratops_brute", + "name": { "str": "Kosmic Horror" }, + "copy-from": "mon_zosmoceratops", + "description": "A massive, shambling, rhino-like dinosaur corpse with a bony crest and two wavy side horns. Its entire body bulges with distended muscles and swollen, festering wounds.", + "diff": 2, + "color": "red", + "proportional": { "hp": 1.5, "speed": 1.5 }, + "relative": { + "melee_dice": 1, + "melee_dice_sides": 5, + "melee_cut": 2, + "armor_bash": 4, + "armor_cut": 6, + "armor_bullet": 5, + "vision_night": 1 + }, + "upgrades": { }, + "special_attacks": [ [ "SMASH", 30 ] ], + "extend": { "flags": [ "GROUP_BASH", "PUSH_MON", "PUSH_VEH" ] }, + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_zorosaurus_brute", + "name": { "str": "Bull Dino" }, + "copy-from": "mon_zorosaurus", + "description": "A massive, shambling, rhino-like dinosaur corpse with a bony crest from which two wicked-looking horns emerge. Its entire body bulges with distended muscles and swollen, festering wounds.", + "diff": 2, + "color": "red", + "proportional": { "hp": 1.5, "speed": 1.5 }, + "relative": { + "melee_dice": 1, + "melee_dice_sides": 5, + "melee_cut": 2, + "armor_bash": 4, + "armor_cut": 6, + "armor_bullet": 5, + "vision_night": 1 + }, + "upgrades": { }, + "special_attacks": [ [ "SMASH", 30 ] ], + "extend": { "flags": [ "GROUP_BASH", "PUSH_MON", "PUSH_VEH" ] }, + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_zriceratops_brute", + "name": { "str": "Triceratruck" }, + "copy-from": "mon_zriceratops", + "description": "A massive, shambling, rhino-like dinosaur corpse with a bony crest from which three wicked-looking horns emerge. Its eyes ooze black, putrid tears. Its entire body bulges with distended muscles and swollen, festering wounds.", + "diff": 2, + "color": "red", + "proportional": { "hp": 1.5, "speed": 1.5 }, + "relative": { + "melee_dice": 1, + "melee_dice_sides": 5, + "melee_cut": 2, + "armor_bash": 4, + "armor_cut": 6, + "armor_bullet": 5, + "vision_night": 1 + }, + "upgrades": { }, + "special_attacks": [ [ "SMASH", 30 ] ], + "extend": { "flags": [ "GROUP_BASH", "PUSH_MON", "PUSH_VEH" ] }, + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_zteranodon_brute", + "name": { "str": "Winged Horror" }, + "copy-from": "mon_zteranodon", + "description": "The ragged but flying corpse of a large feathered reptile with a long, pointed, toothless beak and a long, pointy head crest. Its entire body bulges with distended muscles and swollen, festering wounds.", + "diff": 2, + "color": "red", + "proportional": { "hp": 1.5, "speed": 1.5 }, + "relative": { + "melee_dice": 1, + "melee_dice_sides": 5, + "melee_cut": 2, + "armor_bash": 4, + "armor_cut": 6, + "armor_bullet": 5, + "vision_night": 1 + }, + "upgrades": { }, + "special_attacks": [ [ "SMASH", 30 ] ], + "extend": { "flags": [ "GROUP_BASH", "PUSH_MON", "PUSH_VEH" ] }, + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_zpinosaurus_shady", + "name": { "str": "Spinosaurus shady zombie" }, + "copy-from": "mon_zpinosaurus", + "color": "light_gray", + "description": "An uncanny shadow envelops this creature. You can make out the outline of a huge, bipedal dinosaur with a tattered sail. The head is long and narrow, with a V-shaped snout.", + "upgrades": { }, + "extend": { "flags": [ "NIGHT_INVISIBILITY" ] }, + "vision_day": 3, + "vision_night": 30, + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_zyrannosaurus_shady", + "name": { "str_sp": "shady Z-Rex" }, + "copy-from": "mon_zyrannosaurus", + "looks_like": "mon_zyrannosaurus", + "color": "light_gray", + "description": "An uncanny shadow envelops this creature. You can make out the outline of a huge, bipedal dinosaur with feathery edges. The head looks large - lots of big teeth would fit in it.", + "upgrades": { }, + "extend": { "flags": [ "NIGHT_INVISIBILITY" ] }, + "vision_day": 3, + "vision_night": 30, + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_zalbertosaurus_shady", + "name": { "str_sp": "shady Albertosaurus" }, + "copy-from": "mon_zalbertosaurus", + "looks_like": "mon_zyrannosaurus", + "color": "light_gray", + "description": "An uncanny shadow envelops this creature. You can make out the outline of a huge, bipedal dinosaur with feathery edges. The head looks big, and below are long, grasping claws.", + "upgrades": { }, + "extend": { "flags": [ "NIGHT_INVISIBILITY" ] }, + "vision_day": 3, + "vision_night": 30, + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_zankylosaurus_shady", + "name": { "str_sp": "shady Ankylosaurus" }, + "copy-from": "mon_zankylosaurus", + "color": "light_gray", + "description": "An uncanny shadow envelops this creature. You can make out the outline of a large, heavily-armored, four-legged dinosaur with a spiked tail.", + "upgrades": { }, + "extend": { "flags": [ "NIGHT_INVISIBILITY" ] }, + "vision_day": 3, + "vision_night": 40, + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_zallosaurus_shady", + "name": { "str_sp": "shady Allosaurus" }, + "copy-from": "mon_zallosaurus", + "color": "light_gray", + "description": "An uncanny shadow envelops this creature. You can make out the outline of a large, bipedal dinosaur with big, sharp teeth.", + "upgrades": { }, + "extend": { "flags": [ "NIGHT_INVISIBILITY" ] }, + "vision_day": 3, + "vision_night": 40, + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_zothronychus_shady", + "name": { "str_sp": "shady Nothronychus" }, + "copy-from": "mon_zothronychus", + "color": "light_gray", + "description": "An uncanny shadow envelops this creature. You can make out the outline of a bipedal dinosaur with feathery edges. Long claws protrude from its hands.", + "upgrades": { }, + "extend": { "flags": [ "NIGHT_INVISIBILITY" ] }, + "vision_day": 3, + "vision_night": 40, + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_zeinonychus_shady", + "name": { "str_sp": "shady Deinonychus" }, + "copy-from": "mon_zeinonychus", + "color": "light_gray", + "description": "An uncanny shadow envelops this creature. You can make out the outline of a bipedal dinosaur with feathery edges. Both feet brandish a large, sickle-shaped claw.", + "upgrades": { }, + "extend": { "flags": [ "NIGHT_INVISIBILITY" ] }, + "vision_day": 3, + "vision_night": 40, + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_zutahraptor_shady", + "name": { "str_sp": "shady Utahraptor" }, + "copy-from": "mon_zutahraptor", + "color": "light_gray", + "description": "An uncanny shadow envelops this creature. You can make out the outline of a big, bipedal dinosaur with feathery edges. Both feet brandish a large, sickle-shaped claw.", + "upgrades": { }, + "extend": { "flags": [ "NIGHT_INVISIBILITY" ] }, + "vision_day": 3, + "vision_night": 40, + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_zeratosaurus_shady", + "name": { "str_sp": "shady Ceratosaurus" }, + "copy-from": "mon_zeratosaurus", + "color": "light_gray", + "description": "An uncanny shadow envelops this creature. You can make out the outline of an enormous, bipedal dinosaur with horns, spikes, and big sharp teeth.", + "upgrades": { }, + "extend": { "flags": [ "NIGHT_INVISIBILITY" ] }, + "vision_day": 3, + "vision_night": 40, + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_silophosaurus", + "name": { "str": "Bone Dragon" }, + "copy-from": "mon_zilophosaurus", + "looks_like": "mon_zyrannosaurus", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "Monstrous columns of dense bone lifting sharp, pointed teeth dripping with black goo. Two especially bony crests on the top of the head complete the effect.", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, + "upgrades": { }, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_seratosaurus", + "name": { "str": "Bone Dragon" }, + "copy-from": "mon_zeratosaurus", + "looks_like": "mon_zyrannosaurus", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "Monstrous columns of dense bone lifting sharp, pointed teeth dripping with black goo. Spikes and colorful horns jut out to complete the effect.", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, + "upgrades": { }, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_skinosaurus", + "name": { "str_sp": "skeletal Spinosaurus" }, + "copy-from": "mon_zpinosaurus", + "looks_like": "mon_zpinosaurus", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "Monstrous columns of dense bone lifting enormous, sharp, pointed teeth dripping with black goo. There is a ridge of long spikes on the back.", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, + "upgrades": { }, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_sallosaurus", + "name": { "str_sp": "skeletal Allosaurus" }, + "copy-from": "mon_zallosaurus", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "Monstrous columns of dense bone lifting sharp, pointed teeth dripping with black goo.", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, + "upgrades": { }, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_sacrocanthosaurus", + "name": { "str_sp": "skeletal Acrocanthosaurus" }, + "copy-from": "mon_zacrocanthosaurus", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "Monstrous columns of dense bone lifting sharp, curved teeth dripping with black goo. A tall ridge runs down the back.", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, + "upgrades": { }, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_skiats", + "name": { "str_sp": "skeletal Siats" }, + "copy-from": "mon_ziats", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "Monstrous columns of dense bone lifting sharp teeth dripping with black goo. There are long claws and strong arms for grappling.", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, + "upgrades": { }, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_salbertosaurus", + "name": { "str_sp": "skeletal Albertosaurus" }, + "copy-from": "mon_zalbertosaurus", + "looks_like": "mon_zyrannosaurus", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "Monstrous columns of dense bone lifting sharp, pointed teeth dripping with black goo. Skeletal claws reach ahead.", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, + "upgrades": { }, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_sianzhousaurus", + "name": { "str_sp": "skeletal Qianzhousaurus" }, + "copy-from": "mon_zianzhousaurus", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "Monstrous columns of dense bone lifting a long snout with narrow, pointed teeth dripping with black goo.", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, + "upgrades": { }, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_syrannosaurus", + "name": { "str": "S-Rex", "str_pl": "S-Rexes" }, + "copy-from": "mon_zyrannosaurus", + "looks_like": "mon_zyrannosaurus", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "Monstrous columns of dense bone lifting enormous, sharp, pointed teeth dripping with black goo.", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, + "upgrades": { }, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_sallimimus", + "name": { "str_sp": "skeletal Gallimimus" }, + "copy-from": "mon_zallimimus", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "Monstrous columns of dense bone lifting sharp teeth dripping with black goo.", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, + "upgrades": { }, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_sothronychus", + "name": { "str_sp": "skeletal Nothronychus" }, + "copy-from": "mon_zothronychus", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "Monstrous columns of dense bone lifting sharp, pointed teeth dripping with black goo. Long, sharp claws extend from its hands", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, + "upgrades": { }, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_seinonychus", + "name": { "str_sp": "Deino Bones" }, + "copy-from": "mon_zeinonychus", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "Monstrous columns of dense bone lifting sharp, pointed teeth dripping with black goo. There is a long tail and long, sharp, scythe-shaped claws", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, + "upgrades": { }, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_sutahraptor", + "name": { "str_sp": "Utah Bones" }, + "copy-from": "mon_zutahraptor", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "Monstrous columns of dense bone lifting sharp, pointed teeth dripping with black goo. There is a long tail and long, sharp, scythe-shaped claws", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, + "upgrades": { }, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_samargasaurus", + "name": { "str_sp": "armored Amargasaurus" }, + "copy-from": "mon_zamargasaurus", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "Already heavily protected, this zombified Amargasaurus has grown even more spikes and denser bone armor, completely covering the massive, four-legged body.", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, + "upgrades": { }, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_sapatosaurus", + "name": { "str_sp": "armored Apatosaurus" }, + "copy-from": "mon_zapatosaurus", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "This zombified Apatosaurus has grown dense bone armor, completely covering the massive, four-legged body.", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, "upgrades": { }, - "extend": { "flags": [ "NIGHT_INVISIBILITY" ] }, - "vision_day": 3, - "vision_night": 40, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", "categories": [ "DINOSAUR" ] }, { "type": "MONSTER", - "id": "mon_zothronychus_shady", - "name": { "str_sp": "shady Nothronychus" }, - "copy-from": "mon_zothronychus", - "color": "light_gray", - "description": "An uncanny shadow envelops this dinosaur. You can make out the outline of a bipedal dinosaur with feathery edges. Long claws protrude from its hands.", + "id": "mon_srontosaurus", + "name": { "str": "armored Brontosaurus" }, + "copy-from": "mon_sapatosaurus", + "proportional": { "hp": 0.8 }, + "description": "This zombified Brontosaurus has grown dense bone armor, completely covering the massive, four-legged body and long, whip-like tail." + }, + { + "type": "MONSTER", + "id": "mon_siplodocus", + "name": { "str_sp": "armored Diplodocus" }, + "copy-from": "mon_ziplodocus", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "This zombified Diplodocus has grown dense bone armor, completely covering the massive, four-legged body and tiny head.", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, "upgrades": { }, - "extend": { "flags": [ "NIGHT_INVISIBILITY" ] }, - "vision_day": 3, - "vision_night": 40, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", "categories": [ "DINOSAUR" ] }, { "type": "MONSTER", - "id": "mon_zeinonychus_shady", - "name": { "str_sp": "shady Deinonychus" }, - "copy-from": "mon_zeinonychus", - "color": "light_gray", - "description": "An uncanny shadow envelops this dinosaur. You can make out the outline of a bipedal dinosaur with feathery edges. Both feet brandish a large sickle-like claw.", + "id": "mon_samarasaurus", + "name": { "str": "armored Camarasaurus" }, + "copy-from": "mon_sapatosaurus", + "proportional": { "speed": 0.8 }, + "description": "This zombified Camarasaurus has grown dense body armor, completely covering the massive, long-necked, four-legged body." + }, + { + "type": "MONSTER", + "id": "mon_srachiosaurus", + "name": { "str": "armored Brachiosaurus" }, + "copy-from": "mon_sapatosaurus", + "proportional": { "speed": 0.6, "hp": 3 }, + "description": "This zombified Brachiosaurus has grown dense body armor, completely covering the gigantic, long-necked, four-legged body." + }, + { + "type": "MONSTER", + "id": "mon_salamosaurus", + "name": { "str_sp": "armored Alamosaurus" }, + "copy-from": "mon_zalamosaurus", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "This zombified Alamosaurus has grown denser bone armor, completely covering the gigantic, four-legged body and spiked tail.", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, "upgrades": { }, - "extend": { "flags": [ "NIGHT_INVISIBILITY" ] }, - "vision_day": 3, - "vision_night": 40, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", "categories": [ "DINOSAUR" ] }, { "type": "MONSTER", - "id": "mon_zutahraptor_shady", - "name": { "str_sp": "shady Utahraptor" }, - "copy-from": "mon_zutahraptor", - "color": "light_gray", - "description": "An uncanny shadow envelops this dinosaur. You can make out the outline of a large bipedal dinosaur with feathery edges. Both feet brandish a large sickle-like claw.", + "id": "mon_sktegosaurus", + "name": { "str_sp": "skeletal Stegosaurus" }, + "copy-from": "mon_ztegosaurus", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "Already heavily protected, this zombified Stegosaurus has grown thick bone armor below its back plates as well as a larger and spikier bony tail.", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, "upgrades": { }, - "extend": { "flags": [ "NIGHT_INVISIBILITY" ] }, - "vision_day": 3, - "vision_night": 40, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", "categories": [ "DINOSAUR" ] }, { "type": "MONSTER", - "id": "mon_zeratosaurus_shady", - "name": { "str_sp": "shady Ceratosaurus" }, - "copy-from": "mon_zeratosaurus", - "color": "light_gray", - "description": "An uncanny shadow envelops this dinosaur. You can make out the outline of an enormous bipedal dinosaur with horns, spikes, and large sharp teeth.", + "id": "mon_syoplosaurus", + "name": { "str_sp": "skeletal Dyoplosaurus" }, + "copy-from": "mon_zyoplosaurus", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "Already heavily protected, this zombified Dyoplosaurus has grown even denser bone armor as well as a larger and spikier bony tail. It must be even slower, which is difficult to imagine.", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, "upgrades": { }, - "extend": { "flags": [ "NIGHT_INVISIBILITY" ] }, - "vision_day": 3, - "vision_night": 40, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", "categories": [ "DINOSAUR" ] }, { "type": "MONSTER", - "id": "mon_skinosaurus", - "name": { "str_sp": "skeletal Spinosaurus" }, - "copy-from": "mon_zpinosaurus", - "looks_like": "mon_zpinosaurus", + "id": "mon_sankylosaurus", + "name": { "str_sp": "Bone Fortress" }, + "copy-from": "mon_zankylosaurus", + "looks_like": "mon_ankylosaurus", "color": "white", "material": [ "bone" ], "armor_bash": 0, - "description": "Monstrous columns of dense bone lifting enormous sharp pointed teeth dripping with black goo. There is a ridge of long spikes on the back.", + "description": "Already heavily protected, this zombified Ankylosaurus has grown even denser bone armor as well as a larger and spikier bony tail. It must be even slower, which is difficult to imagine.", "proportional": { "hp": 0.4, "speed": 0.875 }, "relative": { "melee_dice": 9, @@ -679,14 +1506,13 @@ }, { "type": "MONSTER", - "id": "mon_syrannosaurus", - "name": { "str": "S-Rex", "str_pl": "S-Rexes" }, - "copy-from": "mon_zyrannosaurus", - "looks_like": "mon_zyrannosaurus", + "id": "mon_sodosaurus", + "name": { "str_sp": "armored Nodosaurus" }, + "copy-from": "mon_zodosaurus", "color": "white", "material": [ "bone" ], "armor_bash": 0, - "description": "Monstrous columns of dense bone lifting enormous sharp pointed teeth dripping with black goo.", + "description": "Already heavily protected, this zombified Nodosaurus has grown even denser bone armor; it must also be even slower, which is hard to imagine.", "proportional": { "hp": 0.4, "speed": 0.875 }, "relative": { "melee_dice": 9, @@ -705,14 +1531,13 @@ }, { "type": "MONSTER", - "id": "mon_salbertosaurus", - "name": { "str_sp": "skeletal Albertosaurus" }, - "copy-from": "mon_zalbertosaurus", - "looks_like": "mon_zyrannosaurus", + "id": "mon_sedmontonia", + "name": { "str_sp": "armored Edmontonia" }, + "copy-from": "mon_zedmontonia", "color": "white", "material": [ "bone" ], "armor_bash": 0, - "description": "Monstrous columns of dense bone lifting sharp pointed teeth dripping with black goo. Skeletal claws reach ahead.", + "description": "Already heavily protected, this zombified Nodosaurus has grown even denser bone armor, while keeping the long, bony spikes.", "proportional": { "hp": 0.4, "speed": 0.875 }, "relative": { "melee_dice": 9, @@ -731,14 +1556,13 @@ }, { "type": "MONSTER", - "id": "mon_sankylosaurus", - "name": { "str_sp": "Bone Fortress" }, - "copy-from": "mon_zankylosaurus", - "looks_like": "mon_ankylosaurus", + "id": "mon_samptosaurus", + "name": { "str_sp": "armored Camptosaurus" }, + "copy-from": "mon_zamptosaurus", "color": "white", "material": [ "bone" ], "armor_bash": 0, - "description": "Already heavily protected, this zombified Ankylosaurus has grown even denser bone armor and a larger and spikier bony tail and it must be even slower if possible", + "description": "This large, bipedal dinosaur corpse with strong legs, broad shoulders, and a pointed beak has grown dense bone armor.", "proportional": { "hp": 0.4, "speed": 0.875 }, "relative": { "melee_dice": 9, @@ -757,13 +1581,13 @@ }, { "type": "MONSTER", - "id": "mon_sallosaurus", - "name": { "str_sp": "skeletal Allosaurus" }, - "copy-from": "mon_zallosaurus", + "id": "mon_saiasaura", + "name": { "str_sp": "armored Maiasaura" }, + "copy-from": "mon_zaiasaura", "color": "white", "material": [ "bone" ], "armor_bash": 0, - "description": "Monstrous columns of dense bone lifting sharp pointed teeth dripping with black goo.", + "description": "This large, bipedal dinosaur corpse with a flat beak, thick nose, and small, spiky head crest has grown dense bone armor.", "proportional": { "hp": 0.4, "speed": 0.875 }, "relative": { "melee_dice": 9, @@ -782,13 +1606,13 @@ }, { "type": "MONSTER", - "id": "mon_sothronychus", - "name": { "str_sp": "Skeleton Nothronychus" }, - "copy-from": "mon_zothronychus", + "id": "mon_sarasaurolophus", + "name": { "str_sp": "armored Parasaurolophus" }, + "copy-from": "mon_zarasaurolophus", "color": "white", "material": [ "bone" ], "armor_bash": 0, - "description": "Monstrous columns of dense bone lifting sharp pointed teeth dripping with black goo. Long sharp claws extend from its hands", + "description": "This large, bipedal dinosaur corpse with a blunt head crest has grown dense bone armor.", "proportional": { "hp": 0.4, "speed": 0.875 }, "relative": { "melee_dice": 9, @@ -807,13 +1631,13 @@ }, { "type": "MONSTER", - "id": "mon_seinonychus", - "name": { "str_sp": "Deino Bones" }, - "copy-from": "mon_zeinonychus", + "id": "mon_sorythosaurus", + "name": { "str_sp": "armored Corythosaurus" }, + "copy-from": "mon_zorythosaurus", "color": "white", "material": [ "bone" ], "armor_bash": 0, - "description": "Monstrous columns of dense bone lifting sharp pointed teeth dripping with black goo. There is a long tail and long sharp scythe-like claws", + "description": "This large, bipedal dinosaur corpse with a short beak and a tall head crest has grown dense bone armor.", "proportional": { "hp": 0.4, "speed": 0.875 }, "relative": { "melee_dice": 9, @@ -832,13 +1656,13 @@ }, { "type": "MONSTER", - "id": "mon_sutahraptor", - "name": { "str_sp": "Utah Bones" }, - "copy-from": "mon_zutahraptor", + "id": "mon_sedmontosaurus", + "name": { "str_sp": "armored Edmontosaurus" }, + "copy-from": "mon_zedmontosaurus", "color": "white", "material": [ "bone" ], "armor_bash": 0, - "description": "Monstrous columns of dense bone lifting sharp pointed teeth dripping with black goo. There is a long tail and long sharp scythe-like claws", + "description": "This large, bipedal dinosaur corpse with a broad, toothless beak has grown dense bone armor.", "proportional": { "hp": 0.4, "speed": 0.875 }, "relative": { "melee_dice": 9, @@ -857,14 +1681,138 @@ }, { "type": "MONSTER", - "id": "mon_seratosaurus", - "name": { "str": "Bone Dragon" }, - "copy-from": "mon_zeratosaurus", - "looks_like": "mon_zyrannosaurus", + "id": "mon_sachycephalosaurus", + "name": { "str_sp": "protected Pachycephalosaurus" }, + "copy-from": "mon_zachycephalosaurus", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "This bipedal dinosaur corpse with a hard-looking, domed head has grown dense bone armor.", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, + "upgrades": { }, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_sachyrhinosaurus", + "name": { "str_sp": "protected Pachyrhinosaurus" }, + "copy-from": "mon_zachyrhinosaurus", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "This large, four-legged dinosaur corpse with massive bony bosses on its nose and brow has grown dense bone armor over the rest of its body.", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, + "upgrades": { }, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_sentaceratops", + "name": { "str_sp": "protected Pentaceratops" }, + "copy-from": "mon_zentaceratops", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "This large, four-legged dinosaur corpse with a tall bony crest, four long horns, and a short nose horn has grown dense bone armor.", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, + "upgrades": { }, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_sosmoceratops", + "name": { "str_sp": "armored Kosmoceratops" }, + "copy-from": "mon_zosmoceratops", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "This large, four-legged dinosaur corpse with a bony crest and two wavy side horns has grown dense bone armor.", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, + "upgrades": { }, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_sorosaurus", + "name": { "str_sp": "armored Torosaurus" }, + "copy-from": "mon_zorosaurus", + "color": "white", + "material": [ "bone" ], + "armor_bash": 0, + "description": "This large, four-legged dinosaur corpse with a tall bony crest and two wicked-looking horns has grown dense bone armor.", + "proportional": { "hp": 0.4, "speed": 0.875 }, + "relative": { + "melee_dice": 9, + "melee_dice_sides": 5, + "melee_cut": 7, + "armor_cut": 22, + "armor_bullet": 30, + "armor_stab": 30, + "armor_acid": 3, + "vision_day": -20 + }, + "upgrades": { }, + "extend": { "flags": [ "HARDTOSHOOT" ] }, + "harvest": "mr_bones", + "categories": [ "DINOSAUR" ] + }, + { + "type": "MONSTER", + "id": "mon_sriceratops", + "name": { "str_sp": "armored Triceratops" }, + "copy-from": "mon_zriceratops", "color": "white", "material": [ "bone" ], "armor_bash": 0, - "description": "Monstrous columns of dense bone lifting sharp pointed teeth dripping with black goo. Spikes and colorful horns jut out to complete the effect.", + "description": "This massive, four-legged dinosaur corpse with a tall bony crest and three wicked-looking horns has grown dense bone armor.", "proportional": { "hp": 0.4, "speed": 0.875 }, "relative": { "melee_dice": 9, diff --git a/data/mods/DinoMod/obsolete/monsters.json b/data/mods/DinoMod/obsolete/monsters.json index b0e0ae7ba07f4..28d1bbfd0d214 100644 --- a/data/mods/DinoMod/obsolete/monsters.json +++ b/data/mods/DinoMod/obsolete/monsters.json @@ -18,7 +18,7 @@ "armor_bullet": 1, "hp": 50, "description": "The raggedly flying corpse of a feathered reptile over three feet long, with short wings and a big colorful beak.", - "upgrades": { "half_life": 14, "into": "mon_zimorphodon_brute" } + "upgrades": { } }, { "type": "MONSTER", From 3d0b38fa8a13c455131feb0bf9b0edfeb9067df1 Mon Sep 17 00:00:00 2001 From: Fris0uman <41293484+Fris0uman@users.noreply.github.com> Date: Sun, 4 Jul 2021 09:38:21 +0200 Subject: [PATCH 05/13] Only apply disabled effect for main bodyparts (#49543) * Only apply disabled effect for main bodyparts * Only use set_part_cur_hp on main bodyparts --- src/bionics.cpp | 5 +++-- src/iuse.cpp | 6 ++++-- src/suffer.cpp | 8 ++++---- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/bionics.cpp b/src/bionics.cpp index 950dc89eff946..49407f2d0b3d6 100644 --- a/src/bionics.cpp +++ b/src/bionics.cpp @@ -1784,8 +1784,9 @@ void Character::process_bionic( const int b ) void Character::roll_critical_bionics_failure( const bodypart_id &bp ) { - if( one_in( get_part_hp_cur( bp ) / 4 ) ) { - set_part_hp_cur( bp, 0 ); + const bodypart_id bp_to_hurt = bp->main_part; + if( one_in( get_part_hp_cur( bp_to_hurt ) / 4 ) ) { + set_part_hp_cur( bp_to_hurt, 0 ); } } diff --git a/src/iuse.cpp b/src/iuse.cpp index c84391e10148c..cf1367c264456 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -3727,7 +3727,8 @@ cata::optional iuse::granade_act( player *p, item *it, bool t, const tripoi /** @EFFECT_PER_MAX increases possible granade per buff */ buff_stat( player_character.per_max, rng( 0, player_character.per_max / 2 ) ); player_character.recalc_hp(); - for( const bodypart_id &bp : player_character.get_all_body_parts() ) { + for( const bodypart_id &bp : player_character.get_all_body_parts( + get_body_part_flags::only_main ) ) { player_character.set_part_hp_cur( bp, player_character.get_part_hp_cur( bp ) * rng_float( 1, 1.2 ) ); const int hp_max = player_character.get_part_hp_max( bp ); @@ -3768,7 +3769,8 @@ cata::optional iuse::granade_act( player *p, item *it, bool t, const tripoi /** @EFFECT_PER_MAX increases possible granade per debuff (NEGATIVE) */ player_character.per_max -= rng( 0, player_character.per_max / 2 ); player_character.recalc_hp(); - for( const bodypart_id &bp : player_character.get_all_body_parts() ) { + for( const bodypart_id &bp : player_character.get_all_body_parts( + get_body_part_flags::only_main ) ) { const int hp_cur = player_character.get_part_hp_cur( bp ); if( hp_cur > 0 ) { player_character.set_part_hp_cur( bp, rng( 1, hp_cur ) ); diff --git a/src/suffer.cpp b/src/suffer.cpp index dcb0721b49e80..009baadf566a1 100644 --- a/src/suffer.cpp +++ b/src/suffer.cpp @@ -1512,10 +1512,10 @@ void Character::suffer_from_pain() void Character::suffer() { const int current_stim = get_stim(); - // TODO: Remove this section and encapsulate hp_cur - for( const std::pair &elem : get_body() ) { - if( is_limb_broken( elem.first ) ) { - add_effect( effect_disabled, 1_turns, elem.first.id(), true ); + + for( const bodypart_id &bp : get_all_body_parts( get_body_part_flags::only_main ) ) { + if( is_limb_broken( bp ) ) { + add_effect( effect_disabled, 1_turns, bp, true ); } } From 535c97b32d68a66537ba0e6ac2d3ab46b9de3ee1 Mon Sep 17 00:00:00 2001 From: Extension-Driver <85973915+Extension-Driver@users.noreply.github.com> Date: Sun, 4 Jul 2021 19:40:20 +1200 Subject: [PATCH 06/13] Add car crash scenario. (#49468) --- data/json/scenarios.json | 11 +++++++++++ data/json/start_locations.json | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/data/json/scenarios.json b/data/json/scenarios.json index 760cbe770fa88..04c2e700792e3 100644 --- a/data/json/scenarios.json +++ b/data/json/scenarios.json @@ -594,5 +594,16 @@ "allowed_locs": [ "sloc_private_resort" ], "professions": [ "frat", "gangster", "lost_sub", "lawyer", "politician", "dancer" ], "flags": [ "CHALLENGE", "LONE_START" ] + }, + { + "type": "scenario", + "id": "car_crash", + "name": "Car Crash", + "points": -2, + "description": "You decided the open road would be a better prospect than the zombie-filled cities. While en route to your destination, you were involved in a wreck. Injured and alone, death seems inevitable.", + "allowed_locs": [ "sloc_road" ], + "start_name": "Crash Site", + "map_extra": "mx_mayhem", + "flags": [ "CHALLENGE", "HELI_CRASH", "LONE_START" ] } ] diff --git a/data/json/start_locations.json b/data/json/start_locations.json index afaa043c83535..d26eff06a0010 100644 --- a/data/json/start_locations.json +++ b/data/json/start_locations.json @@ -492,5 +492,11 @@ "id": "sloc_private_resort", "name": "Private resort", "terrain": [ "p_resort_2ss" ] + }, + { + "type": "start_location", + "id": "sloc_road", + "name": "Road", + "terrain": [ "road_straight", "road_curved", "road_end" ] } ] From d7b98b28753dc4d00d4f13ce8250d391245451d3 Mon Sep 17 00:00:00 2001 From: El-Jekozo <72350516+El-Jekozo@users.noreply.github.com> Date: Sun, 4 Jul 2021 10:42:06 +0300 Subject: [PATCH 07/13] [CR] New side story: Meteorologist (#45012) --- data/json/items/generic.json | 9 + .../json/mapgen/nested/npc_nested_spawns.json | 6 + data/json/mapgen/station_radio.json | 3 +- data/json/npcs/BG_traits.json | 12 + .../backgrounds_table_of_contents.json | 7 + data/json/npcs/Backgrounds/meteorologist.json | 8 + data/json/npcs/other/meteorologist.json | 311 ++++++++++++++++++ 7 files changed, 355 insertions(+), 1 deletion(-) create mode 100644 data/json/npcs/Backgrounds/meteorologist.json create mode 100644 data/json/npcs/other/meteorologist.json diff --git a/data/json/items/generic.json b/data/json/items/generic.json index e0dc7f0700145..ca8d875d3e371 100644 --- a/data/json/items/generic.json +++ b/data/json/items/generic.json @@ -2725,6 +2725,15 @@ "volume": "5 ml", "to_hit": -3 }, + { + "type": "GENERIC", + "//": "Item for meteorologist mission.", + "id": "module_meteorologist", + "name": { "str": "drone memory bank" }, + "description": "Allows for storage and recovery of information. Found in meteorologist drone.", + "copy-from": "robot_module_abstract", + "flags": [ "TRADER_AVOID" ] + }, { "id": "gasdiscount_silver", "type": "TOOL", diff --git a/data/json/mapgen/nested/npc_nested_spawns.json b/data/json/mapgen/nested/npc_nested_spawns.json index bc3d54b21a1c9..1e58ceabb65a9 100644 --- a/data/json/mapgen/nested/npc_nested_spawns.json +++ b/data/json/mapgen/nested/npc_nested_spawns.json @@ -4,5 +4,11 @@ "method": "json", "nested_mapgen_id": "NPC_lighthouse_man_spawn", "object": { "mapgensize": [ 1, 1 ], "place_npcs": [ { "class": "NPC_lighthouse_man", "x": 0, "y": 0 } ] } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "NPC_meteorologist_spawn", + "object": { "mapgensize": [ 1, 1 ], "place_npcs": [ { "class": "NPC_meteorologist", "x": 0, "y": 0 } ] } } ] diff --git a/data/json/mapgen/station_radio.json b/data/json/mapgen/station_radio.json index df955a7c2a5fc..169f7fe64797a 100644 --- a/data/json/mapgen/station_radio.json +++ b/data/json/mapgen/station_radio.json @@ -89,7 +89,8 @@ { "group": "record_weather", "x": 18, "y": 13 }, { "group": "cleaning", "x": 2, "y": 17, "chance": 70 }, { "group": "electronics", "x": [ 6, 7 ], "y": 5, "chance": 80 } - ] + ], + "place_nested": [ { "chunks": [ [ "NPC_meteorologist_spawn", 20 ], [ "null", 80 ] ], "x": 4, "y": 13 } ] } }, { diff --git a/data/json/npcs/BG_traits.json b/data/json/npcs/BG_traits.json index 0e3143834e76c..521e910e985e3 100644 --- a/data/json/npcs/BG_traits.json +++ b/data/json/npcs/BG_traits.json @@ -664,6 +664,18 @@ "types": [ "BACKGROUND_SURVIVAL_STORY" ], "flags": [ "BG_SURVIVAL_STORY" ] }, + { + "type": "mutation", + "id": "BGSS_METEOROLOGIST", + "name": { "str": "Survivor Story" }, + "points": 0, + "description": "This NPC could tell you about how they survived the Cataclysm", + "player_display": false, + "valid": false, + "purifiable": false, + "types": [ "BACKGROUND_SURVIVAL_STORY" ], + "flags": [ "BG_SURVIVAL_STORY" ] + }, { "type": "mutation", "//": "This is a unique background story trait that should not be given out randomly.", diff --git a/data/json/npcs/Backgrounds/backgrounds_table_of_contents.json b/data/json/npcs/Backgrounds/backgrounds_table_of_contents.json index 55c5d2706b677..371bf8cd1bde7 100644 --- a/data/json/npcs/Backgrounds/backgrounds_table_of_contents.json +++ b/data/json/npcs/Backgrounds/backgrounds_table_of_contents.json @@ -327,6 +327,13 @@ "condition": { "npc_has_trait": "BGSS_Cyborg_1" }, "switch": true }, + { + "text": "", + "//": "This is a unique background story that should not be given out randomly.", + "topic": "BGSS_METEOROLOGIST_1", + "condition": { "npc_has_trait": "BGSS_METEOROLOGIST" }, + "switch": true + }, { "text": "How did you come to be a merc working for the Free Merchants, anyway?", "//": "This is a unique background story that should not be given out randomly.", diff --git a/data/json/npcs/Backgrounds/meteorologist.json b/data/json/npcs/Backgrounds/meteorologist.json new file mode 100644 index 0000000000000..c43cd3fb48547 --- /dev/null +++ b/data/json/npcs/Backgrounds/meteorologist.json @@ -0,0 +1,8 @@ +[ + { + "id": "BGSS_METEOROLOGIST_1", + "type": "talk_topic", + "dynamic_line": "Before , I was just a regular meteorologist. I worked for the local weather station doing data analysis and stuff. In general, ordinary boredom. In my free time I was studying electronics and radio engineering, a bit for work but mostly just as a hobby. When the riots got serious, my neighborhood was looking pretty sketchy. I gathered all my things that I managed to carry with me and settled in a radio station that seemed abandoned. I lived there for a while, doing all sorts of nonsense, until I met you. I guess you know the rest.", + "responses": [ { "text": "", "topic": "TALK_FRIEND" }, { "text": "", "topic": "TALK_DONE" } ] + } +] diff --git a/data/json/npcs/other/meteorologist.json b/data/json/npcs/other/meteorologist.json new file mode 100644 index 0000000000000..3d4af08efb919 --- /dev/null +++ b/data/json/npcs/other/meteorologist.json @@ -0,0 +1,311 @@ +[ + { + "type": "npc", + "id": "NPC_meteorologist", + "class": "NC_meteorologist", + "name_suffix": "meteorologist", + "attitude": 0, + "mission": 7, + "chat": "TALK_meteorologist_1", + "faction": "no_faction", + "mission_offered": "MISSION_meteorologist_1" + }, + { + "type": "npc_class", + "id": "NC_meteorologist", + "name": { "str": "Meteorologist" }, + "job_description": "Meteorologist.", + "common": false, + "bonus_str": { "rng": [ -2, 2 ] }, + "bonus_dex": { "rng": [ -2, 2 ] }, + "bonus_int": { "rng": [ 2, 5 ] }, + "bonus_per": { "rng": [ -1, 3 ] }, + "worn_override": "NC_meteorologist_worn", + "traits": [ { "group": "NPC_starting_traits" }, { "group": "Appearance_demographics" }, { "trait": "BGSS_METEOROLOGIST" } ], + "skills": [ + { "skill": "ALL", "level": { "mul": [ { "one_in": 3 }, { "sum": [ { "dice": [ 2, 2 ] }, { "constant": -4 } ] } ] } }, + { "skill": "computer", "bonus": { "rng": [ 2, 3 ] } }, + { "skill": "electronics", "bonus": { "rng": [ 3, 6 ] } }, + { "skill": "chemistry", "bonus": { "rng": [ 2, 3 ] } } + ] + }, + { + "type": "item_group", + "id": "NC_meteorologist_worn", + "subtype": "collection", + "entries": [ + { "item": "briefs" }, + { "item": "coat_lab" }, + { "item": "dress_shirt" }, + { "item": "pants" }, + { "item": "socks" }, + { "item": "boots" }, + { "item": "gloves_rubber" }, + { "item": "wristwatch" }, + { "item": "glasses_safety" } + ] + }, + { + "type": "talk_topic", + "id": [ "TALK_meteorologist_1" ], + "dynamic_line": { + "npc_has_var": "u_helped_meteorologist", + "type": "flag", + "context": "mission", + "value": "yes", + "yes": "Run, I need to run, where to run…", + "no": { + "npc_has_var": "u_met_meteorologist", + "type": "general", + "context": "meeting", + "value": "yes", + "yes": "Air temperature, precipitation, but what about… oh, I'm sorry, I didn't notice you. Hello.", + "no": "I have not seen living people for a long time. Glad to see another survivor. Greetings, ." + } + }, + "speaker_effect": { + "sentinel": "u_met_meteorologist", + "effect": [ { "npc_add_var": "u_met_meteorologist", "type": "general", "context": "meeting", "value": "yes" } ] + }, + "responses": [ + { "text": "About that job…", "condition": "has_assigned_mission", "topic": "TALK_MISSION_INQUIRE" }, + { "text": "", "topic": "TALK_meteorologist_Background" }, + { + "text": "Maybe I can help you with your problem?", + "topic": "TALK_meteorologist_safety", + "condition": { "npc_has_var": "u_helped_meteorologist", "type": "flag", "context": "mission", "value": "yes" }, + "switch": true + }, + { + "text": "Do you need any help?", + "switch": true, + "trial": { + "type": "CONDITION", + "condition": { + "not": { + "npc_compare_time_since_var": "meteorologist_wait", + "type": "time", + "context": "mission", + "op": "<", + "time": "2 days" + } + } + }, + "success": { + "effect": [ { "npc_lose_var": "meteorologist_wait", "type": "time", "context": "mission" } ], + "topic": "TALK_MISSION_LIST" + }, + "failure": { "topic": "TALK_meteorologist_wait" } + }, + { "text": "Goodbye.", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_meteorologist_wait", + "dynamic_line": "I need more time. Come back later.", + "responses": [ { "text": "No problem.", "topic": "TALK_DONE" } ] + }, + { + "type": "talk_topic", + "id": "TALK_meteorologist_safety", + "dynamic_line": "Help? Help with what? Oh, yes, yes. If you know a place with many survivors, can you take me there? I doubt I can survive alone…", + "responses": [ + { + "text": "Let's go.", + "topic": "TALK_DONE", + "effect": [ "follow_only", { "npc_first_topic": "TALK_meteorologist_safety_lead" } ] + }, + { "text": "Want to travel with me?", "topic": "TALK_SUGGEST_FOLLOW" }, + { "text": "Maybe later.", "topic": "TALK_NONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_meteorologist_safety_lead", + "dynamic_line": "Are we there yet, ?", + "responses": [ + { + "text": "Yes, you can relax now.", + "topic": "TALK_meteorologist_safety_done", + "condition": { + "or": [ + { "npc_at_om_location": "FACTION_CAMP_ANY" }, + { "npc_at_om_location": "evac_center_18" }, + { "npc_at_om_location": "robofachq_surface_entrance" } + ] + } + }, + { "text": "Don't worry, we're getting there soon.", "topic": "TALK_DONE" } + ] + }, + { + "type": "talk_topic", + "id": "TALK_meteorologist_safety_done", + "dynamic_line": "Thank you. I will never forget your kindness, . Take this book as token of my gratitude.", + "responses": [ + { + "text": "Bye.", + "topic": "TALK_DONE", + "effect": [ { "u_buy_item": "adv_chemistry" }, "stop_following", { "npc_first_topic": "TALK_meteorologist_safe" } ] + } + ] + }, + { + "type": "talk_topic", + "id": "TALK_meteorologist_safe", + "dynamic_line": "I'm glad you still alive.", + "responses": [ { "text": "Me too.", "topic": "TALK_DONE" } ] + }, + { + "type": "talk_topic", + "id": "TALK_meteorologist_Background", + "dynamic_line": "I'm just a regular meteorologist. In recent years I have worked at a weather station, monitored the weather, state of air, read and wrote reports, drew up schedules… in general, complete boredom. In my free time I was studying electronics and radio engineering, making various devices, some for work, some just for fun. When the first riots began, I gathered all my things that I managed to take with me and settled here. Since then I've been sitting here, wasting my time doing all sorts of nonsense.", + "responses": [ { "text": "", "topic": "TALK_NONE" } ] + }, + { + "id": "MISSION_meteorologist_1", + "type": "mission_definition", + "has_generic_rewards": false, + "name": { "str": "Find scrap for the meteorologist" }, + "description": "The meteorologist asked to bring him 50 pieces of scrap.", + "goal": "MGOAL_FIND_ITEM", + "item": "scrap", + "count": 50, + "difficulty": 0, + "value": 100, + "origins": [ "ORIGIN_SECONDARY" ], + "followup": "MISSION_meteorologist_2", + "dialogue": { + "describe": "We need scrap metal to assemble a drone…", + "offer": "I've been sitting here for a long time, and all that time I was wondering how bad everything is outside. I want to build a drone that I can use to fly over New England, check the air condition, take a few pictures from above to get a glimpse of how is it. There were a lot of things in our back room that could be useful, but still I'm missing a lot of things. You look like an experienced survivalist. Can you help me?", + "accepted": "Good. I just need a little stuff: 50 scrap, 6 medium batteries, 5 small high-quality lenses and a radio remote control. Bring the scrap for now, but don't forget about the rest.", + "rejected": "Maybe another time…", + "advice": "I don't think this is a difficult task. Surely there is a lot of it underfoot.", + "inquire": "How's it going?", + "success": "Great, I'm starting to work on it…", + "success_lie": "Why do you say that?", + "failure": "…" + } + }, + { + "id": "MISSION_meteorologist_2", + "type": "mission_definition", + "has_generic_rewards": false, + "name": { "str": "Find batteries for the meteorologist" }, + "description": "The meteorologist asked to bring him 6 medium batteries.", + "goal": "MGOAL_FIND_ITEM", + "item": "medium_battery_cell", + "count": 6, + "difficulty": 0, + "value": 100, + "origins": [ "ORIGIN_SECONDARY" ], + "followup": "MISSION_meteorologist_3", + "dialogue": { + "describe": "We need batteries to assemble a drone…", + "offer": "Well, what's next on the list… yeah, batteries. 6 medium batteries would be enough.", + "accepted": "I'm waiting for you.", + "rejected": "Maybe another time…", + "advice": "Try looking for some battery-powered trinkets and take them apart.", + "inquire": "How's it going?", + "success": "Great, I'm continue to work on it…", + "success_lie": "Why do you say that?", + "failure": "…" + } + }, + { + "id": "MISSION_meteorologist_3", + "type": "mission_definition", + "has_generic_rewards": false, + "name": { "str": "Find lens_small 5" }, + "description": "The meteorologist asked to bring him 5 little high-quality lenses.", + "goal": "MGOAL_FIND_ITEM", + "item": "lens_small", + "count": 6, + "difficulty": 0, + "value": 100, + "origins": [ "ORIGIN_SECONDARY" ], + "followup": "MISSION_meteorologist_4", + "dialogue": { + "describe": "We need high quality lenses for our drone…", + "offer": "Well, what's next on the list… yeah, lenses. 5 small high-quality lenses would be enough.", + "accepted": "I'm waiting for you.", + "rejected": "Maybe another time…", + "advice": "Try looking for cameras to dismantle. Telescopes or microscopes would also work.", + "inquire": "How's it going?", + "success": "Great, I'm continue to work on it…", + "success_lie": "Why do you say that?", + "failure": "…" + } + }, + { + "id": "MISSION_meteorologist_4", + "type": "mission_definition", + "name": { "str": "Find radiocontrol" }, + "description": "The meteorologist asked to bring him a radio controller.", + "goal": "MGOAL_FIND_ITEM", + "item": "radiocontrol", + "count": 1, + "difficulty": 0, + "value": 100, + "end": { + "effect": [ + { "npc_add_var": "meteorologist_wait", "type": "time", "context": "mission", "time": true }, + { "u_buy_item": "textbook_electronics" } + ] + }, + "origins": [ "ORIGIN_SECONDARY" ], + "followup": "MISSION_meteorologist_5", + "dialogue": { + "describe": "We need an RC to assemble a drone…", + "offer": "Well, what's next on the list… yeah, radio control. Any kind will do, but the simplest one is better, so I can easily reconfigure it for my drone.", + "accepted": "I'm waiting for you.", + "rejected": "Maybe another time…", + "advice": "I advise you to search in a store, such as electronics or toy store.", + "inquire": "How's it going?", + "success": "Great, very little work left. I need a few days to finish all this, and to try it in work. I hope everything will work fine! While I'm working on the drone, you can read this book. Maybe you can learn something new from it.", + "success_lie": "Why do you say that?", + "failure": "…" + } + }, + { + "id": "MISSION_meteorologist_5", + "type": "mission_definition", + "has_generic_rewards": false, + "name": { "str": "Find crashed drone" }, + "description": "The meteorologist asked to bring him his crashed drone.", + "goal": "MGOAL_FIND_ITEM", + "item": "module_meteorologist", + "count": 1, + "difficulty": 0, + "value": 100, + "start": { + "assign_mission_target": { "om_terrain": "field", "reveal_radius": 1, "search_range": 50, "min_distance": 15, "random": true }, + "update_mapgen": { + "place_item": [ + { "item": "module_meteorologist", "x": [ 5, 15 ], "y": [ 5, 15 ] }, + { "item": "scrap", "x": [ 5, 15 ], "y": [ 5, 15 ], "repeat": [ 5, 30 ] }, + { "item": "lens_small", "x": [ 5, 15 ], "y": [ 5, 15 ], "chance": 45, "repeat": [ 1, 3 ] }, + { "item": "cable", "x": [ 5, 15 ], "y": [ 5, 15 ], "amount": 10, "repeat": [ 3, 10 ] } + ], + "place_monster": [ { "monster": "mon_mi_go", "x": [ 5, 15 ], "y": [ 5, 15 ], "repeat": [ 2, 5 ] } ] + } + }, + "end": { + "effect": [ { "npc_add_var": "u_helped_meteorologist", "type": "flag", "context": "mission", "value": "yes" } ], + "opinion": { "trust": 4 } + }, + "origins": [ "ORIGIN_SECONDARY" ], + "dialogue": { + "describe": "I've lost the drone, we should find out what happened…", + "offer": "I'm glad that you are alive and that you haven't forgot about me. The drone turned out to be great, it managed to take off and even was able to fly several hundred meters! Unfortunately, after that, I lost control of it… I don't know what happened to it, though. Maybe you can check? I'm a little afraid to go out there…", + "accepted": "I'm waiting for you.", + "rejected": "Maybe another time…", + "advice": "I don't know quite what happened. Maybe something noticed my drone and tried to bring it down. Be careful.", + "inquire": "How's it going?", + "success": "Hmm, I see that the drone is not with you. Maybe at least the memory module remains? Okay, show it to me… hmm, situation is worse than I expected, much, much worse… I'm not feeling good. I don't feel safe in this place anymore. I have to run, run somewhere. But where to run if these s are everywhere…", + "success_lie": "Why do you say that?", + "failure": "…" + } + } +] From ac1859c8a43979b4c664141bc1df607e3ae0d7ad Mon Sep 17 00:00:00 2001 From: Anton Burmistrov Date: Sun, 4 Jul 2021 11:45:01 +0400 Subject: [PATCH 08/13] Ransack vending machines only in public places (#49185) --- data/json/mapgen/bike_shop.json | 4 ++-- data/json/mapgen/bus_station.json | 2 +- .../urban_14_dense_house_mart_food.json | 4 ++-- data/json/mapgen/field_football.json | 2 +- data/json/mapgen/garage_gas.json | 5 ++++- data/json/mapgen/helipad.json | 2 +- data/json/mapgen/homeless_shelter.json | 2 +- data/json/mapgen/hospital.json | 2 +- data/json/mapgen/hotel_tower.json | 2 +- data/json/mapgen/junkyard.json | 2 +- data/json/mapgen/mall/mall_basement.json | 4 ++-- data/json/mapgen/mall/mall_ground.json | 15 ++++++++++++--- data/json/mapgen/marina.json | 5 ++++- data/json/mapgen/motel.json | 8 ++++---- data/json/mapgen/movie_theater.json | 2 +- data/json/mapgen/musicstore.json | 2 +- data/json/mapgen/nested/retail_nested.json | 10 +++++----- data/json/mapgen/office_cubical.json | 4 ++-- data/json/mapgen/office_tower_2.json | 4 ++-- data/json/mapgen/park.json | 2 +- data/json/mapgen/pharmacy.json | 2 +- data/json/mapgen/railroad/railroad_station.json | 8 ++++---- data/json/mapgen/regional_airport.json | 2 +- data/json/mapgen/reststop.json | 2 +- data/json/mapgen/s_gas.json | 2 +- data/json/mapgen/s_hardware.json | 2 +- data/json/mapgen/school_1.json | 2 +- data/json/mapgen/smoke_lounge.json | 4 ++-- data/json/mapgen/storage_units_large.json | 2 +- data/json/mapgen/storage_units_medium.json | 2 +- data/json/mapgen/store/s_games.json | 2 +- data/json/mapgen/sub_station.json | 4 ++-- data/json/mapgen/thrift.json | 2 +- data/json/mapgen/town_hall.json | 2 +- doc/MAPGEN.md | 4 +++- src/map.h | 3 ++- src/mapgen.cpp | 14 +++++++++----- 37 files changed, 82 insertions(+), 60 deletions(-) diff --git a/data/json/mapgen/bike_shop.json b/data/json/mapgen/bike_shop.json index 924c70fa6780f..3c6ab6335079b 100644 --- a/data/json/mapgen/bike_shop.json +++ b/data/json/mapgen/bike_shop.json @@ -33,7 +33,7 @@ " " ], "palettes": [ "bike_shop" ], - "vendingmachines": { "D": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "vendingmachines": { "D": { "item_group": "vending_drink", "lootable": true }, "F": { "item_group": "vending_food", "lootable": true } }, "items": { "&": { "item": "trash", "chance": 70 }, "@": { "item": "trash", "chance": 90 }, @@ -158,7 +158,7 @@ "l": { "item": "jackets", "chance": 60 }, "r": { "item": "bikeshop_tools", "chance": 80, "repeat": [ 1, 4 ] } }, - "vendingmachines": { "D": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "vendingmachines": { "D": { "item_group": "vending_drink", "lootable": true }, "F": { "item_group": "vending_food", "lootable": true } }, "place_vehicles": [ { "vehicle": "bikeshop", "x": 6, "y": 7, "chance": 60, "status": 0, "rotation": 270 }, { "vehicle": "bikeshop", "x": 21, "y": 7, "chance": 90, "rotation": 270 }, diff --git a/data/json/mapgen/bus_station.json b/data/json/mapgen/bus_station.json index cb12d4e0aa7c8..e63d559668642 100644 --- a/data/json/mapgen/bus_station.json +++ b/data/json/mapgen/bus_station.json @@ -92,7 +92,7 @@ { "vehicle": "buses", "x": 35, "y": [ 6, 7 ], "chance": 35, "status": 0, "rotation": 360 }, { "vehicle": "buses", "x": 35, "y": [ 16, 17 ], "chance": 35, "status": 0, "rotation": 360 } ], - "vendingmachines": { "8": { "item_group": "vending_drink" }, "9": { "item_group": "vending_food" } }, + "vendingmachines": { "8": { "item_group": "vending_drink", "lootable": true }, "9": { "item_group": "vending_food", "lootable": true } }, "toilets": { "T": { } } } }, diff --git a/data/json/mapgen/city_blocks/urban_14_dense_house_mart_food.json b/data/json/mapgen/city_blocks/urban_14_dense_house_mart_food.json index 9fa7b68530de2..d2d7c8bd4c95b 100644 --- a/data/json/mapgen/city_blocks/urban_14_dense_house_mart_food.json +++ b/data/json/mapgen/city_blocks/urban_14_dense_house_mart_food.json @@ -59,7 +59,7 @@ ")": "f_exercise", "}": [ "f_ergometer", "f_ergometer_mechanical" ] }, - "vendingmachines": { "[": { "item_group": "vending_drink" }, "(": { "item_group": "vending_food" } }, + "vendingmachines": { "[": { "item_group": "vending_drink", "lootable": true }, "(": { "item_group": "vending_food", "lootable": true } }, "set": [ { "point": "trap", "id": "tr_rollmat", "x": [ 9, 11 ], "y": 11 }, { "point": "trap", "id": "tr_rollmat", "x": [ 9, 11 ], "y": 12 } @@ -128,7 +128,7 @@ "m": "f_glass_fridge", "0": "f_table" }, - "vendingmachines": { "[": { "item_group": "vending_drink" }, "(": { "item_group": "vending_food" } }, + "vendingmachines": { "[": { "item_group": "vending_drink", "lootable": true }, "(": { "item_group": "vending_food", "lootable": true } }, "items": { "1": [ { "item": "beauty", "chance": 30, "repeat": [ 1, 2 ] } ], "2": [ { "item": "vitamin_shop", "chance": 30, "repeat": [ 1, 2 ] } ], diff --git a/data/json/mapgen/field_football.json b/data/json/mapgen/field_football.json index cbaf291c10aa9..f806f616b24ef 100644 --- a/data/json/mapgen/field_football.json +++ b/data/json/mapgen/field_football.json @@ -186,7 +186,7 @@ " " ], "palettes": [ "field_football" ], - "vendingmachines": { "V": { "item_group": "vending_drink" } }, + "vendingmachines": { "V": { "item_group": "vending_drink", "lootable": true } }, "toilets": { ";": { } }, "set": [ { "point": "terrain", "id": "t_dirt", "x": [ 0, 2 ], "y": [ 0, 23 ], "repeat": [ 18, 24 ] }, diff --git a/data/json/mapgen/garage_gas.json b/data/json/mapgen/garage_gas.json index d3b387cc74c10..7cbe02646b425 100644 --- a/data/json/mapgen/garage_gas.json +++ b/data/json/mapgen/garage_gas.json @@ -72,7 +72,10 @@ }, "gaspumps": { "&": { } }, "toilets": { "t": { } }, - "place_vendingmachines": [ { "item_group": "vending_food", "x": 31, "y": 6 }, { "item_group": "vending_drink", "x": 32, "y": 6 } ], + "place_vendingmachines": [ + { "item_group": "vending_food", "x": 31, "y": 6, "lootable": true }, + { "item_group": "vending_drink", "x": 32, "y": 6, "lootable": true } + ], "place_loot": [ { "group": "magazines", "x": 26, "y": 10, "chance": 80, "repeat": [ 4, 12 ] }, { "group": "magazines", "x": 26, "y": 13, "chance": 80, "repeat": [ 4, 12 ] }, diff --git a/data/json/mapgen/helipad.json b/data/json/mapgen/helipad.json index f4af92e6e1d5d..95fe689dccd82 100644 --- a/data/json/mapgen/helipad.json +++ b/data/json/mapgen/helipad.json @@ -115,7 +115,7 @@ "H": { "item": "SUS_spice_collection", "chance": 75 }, "&": { "item": "SUS_toilet", "chance": 50 } }, - "vendingmachines": { "1": { "item_group": "vending_drink" }, "2": { "item_group": "vending_food" } }, + "vendingmachines": { "1": { "item_group": "vending_drink", "lootable": true }, "2": { "item_group": "vending_food", "lootable": true } }, "place_monsters": [ { "monster": "GROUP_MIL_STRONG", "x": 36, "y": 15 }, { "monster": "GROUP_MIL_WEAK", "x": 24, "y": 30, "density": 2 } ], "monster": { "T": { "monster": "mon_turret_rifle" } }, "place_vehicles": [ diff --git a/data/json/mapgen/homeless_shelter.json b/data/json/mapgen/homeless_shelter.json index a50321d4b4f47..551ccfcebad65 100644 --- a/data/json/mapgen/homeless_shelter.json +++ b/data/json/mapgen/homeless_shelter.json @@ -102,7 +102,7 @@ "F": { "item": "file_room", "chance": 70, "repeat": [ 1, 3 ] }, "m": { "item": "drugs_heal_simple", "chance": 70, "repeat": [ 1, 4 ] } }, - "vendingmachines": { "8": { "item_group": "vending_drink" }, "9": { "item_group": "vending_food" } } + "vendingmachines": { "8": { "item_group": "vending_drink", "lootable": true }, "9": { "item_group": "vending_food", "lootable": true } } }, { "type": "mapgen", diff --git a/data/json/mapgen/hospital.json b/data/json/mapgen/hospital.json index e971152f52a08..2499b1a130e15 100644 --- a/data/json/mapgen/hospital.json +++ b/data/json/mapgen/hospital.json @@ -87,7 +87,7 @@ "palettes": [ "hospital" ], "terrain": { "5": "t_floor", "H": "t_floor", "X": "t_door_metal_locked" }, "furniture": { "H": "f_locker" }, - "vendingmachines": { "D": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "vendingmachines": { "D": { "item_group": "vending_drink", "lootable": true }, "F": { "item_group": "vending_food", "lootable": true } }, "computers": { "5": { "name": "Medical Supply Access", diff --git a/data/json/mapgen/hotel_tower.json b/data/json/mapgen/hotel_tower.json index d3d7a731af066..4e400dd190e10 100644 --- a/data/json/mapgen/hotel_tower.json +++ b/data/json/mapgen/hotel_tower.json @@ -577,7 +577,7 @@ { "point": "trap", "id": "tr_rollmat", "x": [ 56, 61 ], "y": 19, "repeat": [ 2, 4 ] } ], "terrain": { "=": "t_door_locked_interior", ".": "t_thconc_floor", "|": "t_concrete_wall", "-": "t_concrete_wall" }, - "vendingmachines": { "U": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "vendingmachines": { "U": { "item_group": "vending_drink", "lootable": true }, "F": { "item_group": "vending_food", "lootable": true } }, "items": { "l": { "item": "cleaning", "chance": 60 } }, "item": { "r": { "item": "towel", "chance": 2, "amount": [ 1, 2 ] } }, "toilets": { "&": { } }, diff --git a/data/json/mapgen/junkyard.json b/data/json/mapgen/junkyard.json index 96c198f853a93..0bdfcb0ab3351 100644 --- a/data/json/mapgen/junkyard.json +++ b/data/json/mapgen/junkyard.json @@ -34,7 +34,7 @@ ], "palettes": [ "junkyard_palette" ], "place_toilets": [ { "x": 12, "y": 13 } ], - "vendingmachines": { "K": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "vendingmachines": { "K": { "item_group": "vending_drink", "lootable": true }, "F": { "item_group": "vending_food", "lootable": true } }, "place_loot": [ { "item": "television", "x": 17, "y": 9, "chance": 100 } ], "place_items": [ { "chance": 25, "item": "cubical_office", "x": [ 18, 19 ], "y": 12 }, diff --git a/data/json/mapgen/mall/mall_basement.json b/data/json/mapgen/mall/mall_basement.json index dc34e012da0d2..3894a522ec0e4 100644 --- a/data/json/mapgen/mall/mall_basement.json +++ b/data/json/mapgen/mall/mall_basement.json @@ -56,7 +56,7 @@ "F": "t_linoleum_gray" }, "furniture": { "{": "f_bench", "}": "f_bench", "Y": "f_trashcan" }, - "vendingmachines": { "(": { "item_group": "vending_drink" }, ")": { "item_group": "vending_food" } }, + "vendingmachines": { "(": { "item_group": "vending_drink", "lootable": true }, ")": { "item_group": "vending_food", "lootable": true } }, "place_monsters": [ { "monster": "GROUP_MALL", "x": [ 72, 95 ], "y": [ 8, 23 ], "density": 0.4 } ] } }, @@ -168,7 +168,7 @@ ")": "t_linoleum_gray" }, "furniture": { "{": "f_bench", "}": "f_bench", "Y": "f_trashcan" }, - "vendingmachines": { "(": { "item_group": "vending_drink" }, ")": { "item_group": "vending_food" } }, + "vendingmachines": { "(": { "item_group": "vending_drink", "lootable": true }, ")": { "item_group": "vending_food", "lootable": true } }, "place_monsters": [ { "monster": "GROUP_MALL", "x": [ 24, 47 ], "y": [ 10, 23 ], "density": 0.3 } ] } } diff --git a/data/json/mapgen/mall/mall_ground.json b/data/json/mapgen/mall/mall_ground.json index c42e0f1e7ef94..3f702718395c4 100644 --- a/data/json/mapgen/mall/mall_ground.json +++ b/data/json/mapgen/mall/mall_ground.json @@ -138,7 +138,10 @@ "F": "t_linoleum_gray" }, "furniture": { "%": [ "f_indoor_plant", "f_indoor_plant_y" ], "*": "f_trashcan" }, - "place_vendingmachines": [ { "item_group": "vending_food", "x": 99, "y": 6 }, { "item_group": "vending_drink", "x": 100, "y": 6 } ], + "place_vendingmachines": [ + { "item_group": "vending_food", "x": 99, "y": 6, "lootable": true }, + { "item_group": "vending_drink", "x": 100, "y": 6, "lootable": true } + ], "items": { "d": [ { "item": "jackets", "chance": 40 }, @@ -528,7 +531,10 @@ "A": "t_linoleum_white", "!": "t_linoleum_white" }, - "place_vendingmachines": [ { "item_group": "vending_drink", "x": 74, "y": 17 }, { "item_group": "vending_food", "x": 74, "y": 18 } ], + "place_vendingmachines": [ + { "item_group": "vending_drink", "x": 74, "y": 17, "lootable": true }, + { "item_group": "vending_food", "x": 74, "y": 18, "lootable": true } + ], "sealed_item": { "1": { "item": { "item": "seed_rose" }, "furniture": "f_planter_harvest" }, "{": { "item": { "item": "seed_rose" }, "furniture": "f_planter_harvest" } @@ -1357,7 +1363,10 @@ { "item": "mattress", "x": [ 13, 15 ], "y": 20, "chance": 90, "repeat": [ 2, 6 ] }, { "item": "down_mattress", "x": [ 13, 15 ], "y": 22, "chance": 70, "repeat": [ 2, 6 ] } ], - "place_vendingmachines": [ { "item_group": "vending_drink", "x": 4, "y": 12 }, { "item_group": "vending_food", "x": 4, "y": 13 } ], + "place_vendingmachines": [ + { "item_group": "vending_drink", "x": 4, "y": 12, "lootable": true }, + { "item_group": "vending_food", "x": 4, "y": 13, "lootable": true } + ], "items": { "d": [ { "item": "jackets", "chance": 40 }, diff --git a/data/json/mapgen/marina.json b/data/json/mapgen/marina.json index 2b97e9b7e36f9..0f4d0834e5ef9 100644 --- a/data/json/mapgen/marina.json +++ b/data/json/mapgen/marina.json @@ -170,7 +170,10 @@ "T": [ "f_table" ] }, "toilets": { "&": { } }, - "place_vendingmachines": [ { "item_group": "vending_food", "x": 13, "y": 59 }, { "item_group": "vending_drink", "x": 13, "y": 60 } ], + "place_vendingmachines": [ + { "item_group": "vending_food", "x": 13, "y": 59, "lootable": true }, + { "item_group": "vending_drink", "x": 13, "y": 60, "lootable": true } + ], "items": { "f": { "item": "fridge", "chance": 70, "repeat": [ 1, 3 ] }, "e": { "item": "novels", "chance": 70, "repeat": [ 2, 4 ] }, diff --git a/data/json/mapgen/motel.json b/data/json/mapgen/motel.json index 109cf2c500d14..4f683f916f402 100644 --- a/data/json/mapgen/motel.json +++ b/data/json/mapgen/motel.json @@ -220,9 +220,9 @@ "Y": "f_rack_coat" }, "place_vendingmachines": [ - { "item_group": "vending_food", "x": 18, "y": 6 }, - { "item_group": "vending_food", "x": 18, "y": 7 }, - { "item_group": "vending_drink", "x": 18, "y": 9 } + { "item_group": "vending_food", "x": 18, "y": 6, "lootable": true }, + { "item_group": "vending_food", "x": 18, "y": 7, "lootable": true }, + { "item_group": "vending_drink", "x": 18, "y": 9, "lootable": true } ], "toilets": { ";": { } }, "items": { "Y": { "item": "coat_rack", "chance": 35, "repeat": [ 1, 4 ] } }, @@ -906,7 +906,7 @@ "G": "f_oven", "0": "f_dive_block" }, - "place_vendingmachines": [ { "x": 18, "y": 6 }, { "x": 18, "y": 7 }, { "x": 18, "y": 9 } ], + "place_vendingmachines": [ { "x": 18, "y": 6, "lootable": true }, { "x": 18, "y": 7, "lootable": true }, { "x": 18, "y": 9, "lootable": true } ], "toilets": { ";": { } }, "set": [ { "point": "terrain", "id": "t_dirt", "x": 0, "y": [ 0, 23 ], "repeat": [ 5, 10 ] }, diff --git a/data/json/mapgen/movie_theater.json b/data/json/mapgen/movie_theater.json index a12c43c19c6b2..efd409968541a 100644 --- a/data/json/mapgen/movie_theater.json +++ b/data/json/mapgen/movie_theater.json @@ -87,7 +87,7 @@ "palettes": [ "movie_theater_palette.json" ], "terrain": { "#": "t_thconc_floor", "H": "t_thconc_floor", "y": "t_thconc_floor" }, "toilets": { "&": { } }, - "vendingmachines": { "v": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "vendingmachines": { "v": { "item_group": "vending_drink", "lootable": true }, "F": { "item_group": "vending_food", "lootable": true } }, "items": { "&": { "item": "alcohol", "chance": 10 }, "T": { "item": "snacks", "chance": 5 }, diff --git a/data/json/mapgen/musicstore.json b/data/json/mapgen/musicstore.json index 26aa59f51da63..c76fa8ef01d08 100644 --- a/data/json/mapgen/musicstore.json +++ b/data/json/mapgen/musicstore.json @@ -70,7 +70,7 @@ "7": "f_speaker_cabinet", "r": "f_rack" }, - "vendingmachines": { "1": { "item_group": "vending_drink" }, "2": { "item_group": "vending_food" } }, + "vendingmachines": { "1": { "item_group": "vending_drink", "lootable": true }, "2": { "item_group": "vending_food", "lootable": true } }, "toilets": { "T": { } }, "place_loot": [ { "group": "mussto_stringinst", "x": [ 5, 10 ], "y": 10, "chance": 70, "repeat": [ 1, 3 ] }, diff --git a/data/json/mapgen/nested/retail_nested.json b/data/json/mapgen/nested/retail_nested.json index 45a9551df2a7e..659a09c1baa5c 100644 --- a/data/json/mapgen/nested/retail_nested.json +++ b/data/json/mapgen/nested/retail_nested.json @@ -1083,7 +1083,7 @@ "y": [ "f_indoor_plant", "f_indoor_plant_y" ], "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, - "vendingmachines": { "D": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "vendingmachines": { "D": { "item_group": "vending_drink", "lootable": true }, "F": { "item_group": "vending_food", "lootable": true } }, "items": { "C": [ { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] } ], "G": [ { "item": "jackets", "chance": 30, "repeat": [ 0, 1 ] }, { "item": "bags", "chance": 30, "repeat": [ 0, 1 ] } ] @@ -1114,7 +1114,7 @@ "F": "f_vending_c", "y": [ "f_indoor_plant", "f_indoor_plant_y" ] }, - "vendingmachines": { "D": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "vendingmachines": { "D": { "item_group": "vending_drink", "lootable": true }, "F": { "item_group": "vending_food", "lootable": true } }, "items": { "G": [ { "item": "jackets", "chance": 30, "repeat": [ 0, 1 ] }, { "item": "bags", "chance": 30, "repeat": [ 0, 1 ] } ] } @@ -1144,7 +1144,7 @@ "y": [ "f_indoor_plant", "f_indoor_plant_y" ], "?": "f_console_broken" }, - "vendingmachines": { "D": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "vendingmachines": { "D": { "item_group": "vending_drink", "lootable": true }, "F": { "item_group": "vending_food", "lootable": true } }, "items": { "C": [ { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] } ], "G": [ { "item": "jackets", "chance": 30, "repeat": [ 0, 1 ] }, { "item": "bags", "chance": 30, "repeat": [ 0, 1 ] } ] @@ -1213,7 +1213,7 @@ "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ], "?": "f_console_broken" }, - "vendingmachines": { "D": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "vendingmachines": { "D": { "item_group": "vending_drink", "lootable": true }, "F": { "item_group": "vending_food", "lootable": true } }, "items": { "C": [ { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] } ], "G": [ { "item": "jackets", "chance": 30, "repeat": [ 0, 1 ] }, { "item": "bags", "chance": 30, "repeat": [ 0, 1 ] } ] @@ -1246,7 +1246,7 @@ "y": [ "f_indoor_plant", "f_indoor_plant_y" ], "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, - "vendingmachines": { "D": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "vendingmachines": { "D": { "item_group": "vending_drink", "lootable": true }, "F": { "item_group": "vending_food", "lootable": true } }, "items": { "C": [ { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] } ], "G": [ { "item": "jackets", "chance": 30, "repeat": [ 0, 1 ] }, { "item": "bags", "chance": 30, "repeat": [ 0, 1 ] } ] diff --git a/data/json/mapgen/office_cubical.json b/data/json/mapgen/office_cubical.json index 183e7e04e995d..8fc5bdd7e11ea 100644 --- a/data/json/mapgen/office_cubical.json +++ b/data/json/mapgen/office_cubical.json @@ -57,7 +57,7 @@ "t": "f_table", "x": "f_console_broken" }, - "vendingmachines": { "V": { } }, + "vendingmachines": { "V": { "lootable": true } }, "toilets": { "T": { } }, "place_loot": [ { "group": "dining", "x": [ 21, 21 ], "y": [ 10, 10 ], "chance": 20, "repeat": [ 1, 2 ] }, @@ -194,7 +194,7 @@ "t": "f_table", "x": "f_console_broken" }, - "vendingmachines": { "V": { } }, + "vendingmachines": { "V": { "lootable": true } }, "toilets": { "T": { } }, "items": { "o": { "item": "novels", "chance": 70 }, diff --git a/data/json/mapgen/office_tower_2.json b/data/json/mapgen/office_tower_2.json index 1dfe16498d816..79560ffc6eb52 100644 --- a/data/json/mapgen/office_tower_2.json +++ b/data/json/mapgen/office_tower_2.json @@ -111,7 +111,7 @@ "X": "f_crate_c", "l": "f_locker" }, - "place_vendingmachines": [ { "x": 17, "y": 21 }, { "x": 17, "y": 23 } ], + "place_vendingmachines": [ { "x": 17, "y": 21, "lootable": true }, { "x": 17, "y": 23, "lootable": true } ], "toilets": { ";": { } }, "place_items": [ { "item": "office_mess", "x": [ 8, 23 ], "y": [ 4, 10 ], "chance": 100, "repeat": [ 20, 70 ] }, @@ -219,7 +219,7 @@ "X": "f_crate_c", "l": "f_locker" }, - "place_vendingmachines": [ { "x": 17, "y": 21 }, { "x": 17, "y": 23 } ], + "place_vendingmachines": [ { "x": 17, "y": 21, "lootable": true }, { "x": 17, "y": 23, "lootable": true } ], "toilets": { ";": { } }, "place_items": [ { "item": "office_mess", "x": [ 8, 23 ], "y": [ 4, 10 ], "chance": 100, "repeat": [ 20, 70 ] }, diff --git a/data/json/mapgen/park.json b/data/json/mapgen/park.json index 9a99282812b96..0c1c203080b78 100644 --- a/data/json/mapgen/park.json +++ b/data/json/mapgen/park.json @@ -593,7 +593,7 @@ "'''u'''''''''''''''u''''" ], "palettes": [ "park_scenic_palette" ], - "vendingmachines": { "v": { "item_group": "vending_drink" } }, + "vendingmachines": { "v": { "item_group": "vending_drink", "lootable": true } }, "items": { "X": [ { "item": "trash", "chance": 75, "repeat": [ 2, 7 ] }, { "item": "vending_drink_items", "chance": 25 } ] }, "monsters": { "'": { "monster": "GROUP_PARK_SCENIC", "chance": 200 }, diff --git a/data/json/mapgen/pharmacy.json b/data/json/mapgen/pharmacy.json index 2ca39e6e5ec8b..067f3b24393ca 100644 --- a/data/json/mapgen/pharmacy.json +++ b/data/json/mapgen/pharmacy.json @@ -213,7 +213,7 @@ "x": "f_glass_cabinet" }, "toilets": { "T": { } }, - "vendingmachines": { "l": { "item_group": "vending_drink" }, "m": { "item_group": "vending_food" } }, + "vendingmachines": { "l": { "item_group": "vending_drink", "lootable": true }, "m": { "item_group": "vending_food", "lootable": true } }, "items": { "#": [ { "item": "snacks", "chance": 10 } ], "f": { "item": "fridgesnacks", "chance": 60, "repeat": [ 1, 12 ] }, diff --git a/data/json/mapgen/railroad/railroad_station.json b/data/json/mapgen/railroad/railroad_station.json index 26559f054f17f..dc6aeda1987d4 100644 --- a/data/json/mapgen/railroad/railroad_station.json +++ b/data/json/mapgen/railroad/railroad_station.json @@ -121,10 +121,10 @@ { "monster": "GROUP_ZOMBIE", "x": [ 49, 70 ], "y": [ 73, 94 ], "repeat": [ 0, 1 ], "density": 1 } ], "vendingmachines": { - "6": { "item_group": "vending_drink" }, - "7": { "item_group": "vending_food" }, - "8": { "item_group": "vending_drink" }, - "9": { "item_group": "vending_food" } + "6": { "item_group": "vending_drink", "lootable": true }, + "7": { "item_group": "vending_food", "lootable": true }, + "8": { "item_group": "vending_drink", "lootable": true }, + "9": { "item_group": "vending_food", "lootable": true } }, "place_vehicles": [ { "vehicle": "train_electrical_loco1300", "x": 5, "y": 90, "chance": 5, "rotation": 90, "status": -1 }, diff --git a/data/json/mapgen/regional_airport.json b/data/json/mapgen/regional_airport.json index 479e7ee48224b..ce60401910334 100644 --- a/data/json/mapgen/regional_airport.json +++ b/data/json/mapgen/regional_airport.json @@ -835,7 +835,7 @@ { "item": "mechanics", "chance": 20, "repeat": [ 1, 2 ] } ] }, - "vendingmachines": { "8": { "item_group": "vending_drink" }, "9": { "item_group": "vending_food" } }, + "vendingmachines": { "8": { "item_group": "vending_drink", "lootable": true }, "9": { "item_group": "vending_food", "lootable": true } }, "toilets": { "T": { } } } ] diff --git a/data/json/mapgen/reststop.json b/data/json/mapgen/reststop.json index 965272a40324a..d7dc10a1c3326 100644 --- a/data/json/mapgen/reststop.json +++ b/data/json/mapgen/reststop.json @@ -186,7 +186,7 @@ "Y": "f_trashcan" }, "toilets": { "B": { } }, - "vendingmachines": { "%": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "vendingmachines": { "%": { "item_group": "vending_drink", "lootable": true }, "F": { "item_group": "vending_food", "lootable": true } }, "place_loot": [ { "group": "snacks", "x": [ 19, 20 ], "y": [ 10, 12 ], "chance": 75, "repeat": [ 4, 12 ] }, { "group": "snacks", "x": [ 19, 20 ], "y": [ 15, 17 ], "chance": 75, "repeat": [ 4, 12 ] }, diff --git a/data/json/mapgen/s_gas.json b/data/json/mapgen/s_gas.json index 23e25a73c53b3..c2ed422d98c35 100644 --- a/data/json/mapgen/s_gas.json +++ b/data/json/mapgen/s_gas.json @@ -45,7 +45,7 @@ "gaspumps": { "G": { "fuel": "gasoline" }, "D": { "fuel": "diesel" } }, "furniture": { "9": "f_aut_gas_console" }, "signs": { "P": { "signage": "Danger! Do not smoke! Risk of explosion!" } }, - "vendingmachines": { "1": { "item_group": "vending_drink" }, "2": { "item_group": "vending_food" } }, + "vendingmachines": { "1": { "item_group": "vending_drink", "lootable": true }, "2": { "item_group": "vending_food", "lootable": true } }, "place_liquids": [ { "liquid": "gasoline", "x": 2, "y": 3, "repeat": [ 200, 1075 ] }, { "liquid": "diesel", "x": 4, "y": 3, "repeat": [ 200, 1075 ] } diff --git a/data/json/mapgen/s_hardware.json b/data/json/mapgen/s_hardware.json index 566a6c880cc66..c6923e007d731 100644 --- a/data/json/mapgen/s_hardware.json +++ b/data/json/mapgen/s_hardware.json @@ -333,7 +333,7 @@ "u": "f_trashcan", "v": "f_counter" }, - "place_vendingmachines": [ { "x": 8, "y": 2 }, { "x": 8, "y": 3 } ], + "place_vendingmachines": [ { "x": 8, "y": 2, "lootable": true }, { "x": 8, "y": 3, "lootable": true } ], "toilets": { "t": { } }, "place_items": [ { "item": "hardware_bulk", "x": 2, "y": [ 2, 7 ], "chance": 90, "repeat": [ 1, 6 ] }, diff --git a/data/json/mapgen/school_1.json b/data/json/mapgen/school_1.json index 69311fb9338c0..004ca143e223e 100644 --- a/data/json/mapgen/school_1.json +++ b/data/json/mapgen/school_1.json @@ -517,7 +517,7 @@ { "item": "dining", "chance": 5, "repeat": [ 1, 3 ] } ] }, - "vendingmachines": { "8": { "item_group": "vending_drink" }, "9": { "item_group": "vending_food" } }, + "vendingmachines": { "8": { "item_group": "vending_drink", "lootable": true }, "9": { "item_group": "vending_food", "lootable": true } }, "computers": { "6": { "name": "School Bell Software 1.1", diff --git a/data/json/mapgen/smoke_lounge.json b/data/json/mapgen/smoke_lounge.json index d362e1a7ab3c5..60d6a834c9194 100644 --- a/data/json/mapgen/smoke_lounge.json +++ b/data/json/mapgen/smoke_lounge.json @@ -85,7 +85,7 @@ "g": "f_stool", "Y": "f_trashcan" }, - "vendingmachines": { "M": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "vendingmachines": { "M": { "item_group": "vending_drink", "lootable": true }, "F": { "item_group": "vending_food", "lootable": true } }, "sealed_item": { "1": { "item": { "item": "seed_tobacco" }, "furniture": "f_planter_harvest" } }, "toilets": { "&": { } } }, @@ -229,7 +229,7 @@ "g": "f_stool", "Y": "f_trashcan" }, - "vendingmachines": { "M": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "vendingmachines": { "M": { "item_group": "vending_drink", "lootable": true }, "F": { "item_group": "vending_food", "lootable": true } }, "sealed_item": { "1": { "item": { "item": "seed_tobacco" }, "furniture": "f_planter_harvest" } }, "toilets": { "&": { } } }, diff --git a/data/json/mapgen/storage_units_large.json b/data/json/mapgen/storage_units_large.json index d8eabf253d53a..d2dc035cc1e92 100644 --- a/data/json/mapgen/storage_units_large.json +++ b/data/json/mapgen/storage_units_large.json @@ -219,7 +219,7 @@ "I": "f_sofa", "M": [ "f_crate_c", "f_cardboard_box" ] }, - "vendingmachines": { "U": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "vendingmachines": { "U": { "item_group": "vending_drink", "lootable": true }, "F": { "item_group": "vending_food", "lootable": true } }, "place_loot": [ { "item": "stepladder", "x": 14, "y": 12, "chance": 50 }, { "item": "stepladder", "x": 5, "y": 4, "chance": 50 } ], "place_items": [ { "item": "homebooks", "x": [ 0, 5 ], "y": [ 9, 10 ], "chance": 50, "repeat": [ 1, 11 ] }, diff --git a/data/json/mapgen/storage_units_medium.json b/data/json/mapgen/storage_units_medium.json index 92ae1167da7a4..70fc8cabc1573 100644 --- a/data/json/mapgen/storage_units_medium.json +++ b/data/json/mapgen/storage_units_medium.json @@ -221,7 +221,7 @@ "M": [ "f_crate_c", "f_cardboard_box" ] }, "place_loot": [ { "item": "television", "x": 3, "y": 6, "chance": 75 }, { "item": "stepladder", "x": 20, "y": 19, "chance": 100 } ], - "vendingmachines": { "W": { "item_group": "vending_drink" }, "V": { "item_group": "vending_food" } }, + "vendingmachines": { "W": { "item_group": "vending_drink", "lootable": true }, "V": { "item_group": "vending_food", "lootable": true } }, "place_items": [ { "item": "softdrugs", "x": [ 1, 2 ], "y": [ 1, 3 ], "chance": 50, "repeat": [ 1, 11 ] }, { "item": "camping", "x": 1, "y": [ 1, 3 ], "chance": 50, "repeat": [ 1, 11 ] }, diff --git a/data/json/mapgen/store/s_games.json b/data/json/mapgen/store/s_games.json index 88192a8e45720..fc22121425334 100644 --- a/data/json/mapgen/store/s_games.json +++ b/data/json/mapgen/store/s_games.json @@ -31,7 +31,7 @@ ".nn_____######oooo#####.", "........................" ], - "vendingmachines": { "D": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "vendingmachines": { "D": { "item_group": "vending_drink", "lootable": true }, "F": { "item_group": "vending_food", "lootable": true } }, "terrain": { "|": "t_wall_w", "#": "t_brick_wall", diff --git a/data/json/mapgen/sub_station.json b/data/json/mapgen/sub_station.json index 8e345e70aa6ba..a3f5f893b94d2 100644 --- a/data/json/mapgen/sub_station.json +++ b/data/json/mapgen/sub_station.json @@ -33,7 +33,7 @@ "SSSSSSSSSSSSSSSSSSSSSSSS" ], "palettes": [ "subway" ], - "vendingmachines": { "D": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } } + "vendingmachines": { "D": { "item_group": "vending_drink", "lootable": true }, "F": { "item_group": "vending_food", "lootable": true } } } }, { @@ -105,7 +105,7 @@ "########################" ], "palettes": [ "subway_underground" ], - "vendingmachines": { "J": { "item_group": "vending_drink" }, "C": { "item_group": "vending_food" } }, + "vendingmachines": { "J": { "item_group": "vending_drink", "lootable": true }, "C": { "item_group": "vending_food", "lootable": true } }, "place_monsters": [ { "monster": "GROUP_ZOMBIE", "x": [ 6, 20 ], "y": [ 4, 9 ], "repeat": [ 5, 9 ] } ], "place_item": [ { "item": "subwaymap", "x": 1, "y": [ 6, 7 ], "chance": 75 } ] } diff --git a/data/json/mapgen/thrift.json b/data/json/mapgen/thrift.json index fdbc9f550347d..f49b99028735e 100644 --- a/data/json/mapgen/thrift.json +++ b/data/json/mapgen/thrift.json @@ -69,7 +69,7 @@ "L": "f_locker", "U": [ "f_dumpster", "f_recycle_bin" ] }, - "vendingmachines": { "W": { "item_group": "vending_drink" }, "V": { "item_group": "vending_food" } }, + "vendingmachines": { "W": { "item_group": "vending_drink", "lootable": true }, "V": { "item_group": "vending_food", "lootable": true } }, "toilets": { "B": { } }, "items": { "J": { "item": "office", "chance": 30, "repeat": [ 3, 4 ] }, diff --git a/data/json/mapgen/town_hall.json b/data/json/mapgen/town_hall.json index 8c7b8a19d5ad7..5e5e152298564 100644 --- a/data/json/mapgen/town_hall.json +++ b/data/json/mapgen/town_hall.json @@ -73,7 +73,7 @@ ], "R": { "item": "office_supplies", "chance": 60, "repeat": [ 1, 2 ] } }, - "vendingmachines": { "4": { "item_group": "vending_drink" }, "5": { "item_group": "vending_food" } } + "vendingmachines": { "4": { "item_group": "vending_drink", "lootable": true }, "5": { "item_group": "vending_food", "lootable": true } } }, { "type": "mapgen", diff --git a/doc/MAPGEN.md b/doc/MAPGEN.md index 84567b35cb1aa..999ae42e5c12c 100644 --- a/doc/MAPGEN.md +++ b/doc/MAPGEN.md @@ -779,11 +779,13 @@ Example: ### Place a vending machine and items with "vendingmachines" -Places a vending machine (furniture) and fills it with items from an item group. The machine can sometimes spawn as broken one. +Places a vending machine (furniture) and fills it with items from an item group. | Field | Description | --- | --- | item_group | (optional, string) the item group that is used to create items inside the machine. It defaults to either "vending_food" or "vending_drink" (randomly chosen). +| reinforced | (optional, bool) setting which will make vending machine spawn as reinforced. Defaults to false. +| lootable | (optional, bool) setting which indicates whether this paricular vending machine should have a chance to spawn ransacked (i.e. broken and with no loot inside). The chance for this is increased with each day passed after the Cataclysm. Defaults to false. ### Place a toilet with some amount of water with "toilets" diff --git a/src/map.h b/src/map.h index 953bf435a1b17..e6116f5a4cdb8 100644 --- a/src/map.h +++ b/src/map.h @@ -1448,7 +1448,8 @@ class map } // 6 liters at 250 ml per charge void place_toilet( const point &p, int charges = 6 * 4 ); - void place_vending( const point &p, const item_group_id &type, bool reinforced = false ); + void place_vending( const point &p, const item_group_id &type, bool reinforced = false, + bool lootable = false ); // places an NPC, if static NPCs are enabled or if force is true character_id place_npc( const point &p, const string_id &type ); void apply_faction_ownership( const point &p1, const point &p2, const faction_id &id ); diff --git a/src/mapgen.cpp b/src/mapgen.cpp index 8415a198a5b74..e7405294ad912 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -1027,9 +1027,11 @@ class jmapgen_vending_machine : public jmapgen_piece public: bool reinforced; item_group_id group_id; + bool lootable; jmapgen_vending_machine( const JsonObject &jsi, const std::string &/*context*/ ) : reinforced( jsi.get_bool( "reinforced", false ) ) - , group_id( jsi.get_string( "item_group", "default_vending_machine" ) ) { + , group_id( jsi.get_string( "item_group", "default_vending_machine" ) ) + , lootable( jsi.get_bool( "lootable", false ) ) { if( !item_group::group_is_defined( group_id ) ) { set_mapgen_defer( jsi, "item_group", "no such item group" ); } @@ -1038,7 +1040,7 @@ class jmapgen_vending_machine : public jmapgen_piece ) const override { const point r( x.get(), y.get() ); dat.m.furn_set( r, f_null ); - dat.m.place_vending( r, group_id, reinforced ); + dat.m.place_vending( r, group_id, reinforced, lootable ); } bool has_vehicle_collision( const mapgendata &dat, const point &p ) const override { return dat.m.veh_at( tripoint( p, dat.zlevel() ) ).has_value(); @@ -4997,14 +4999,16 @@ void map::place_toilet( const point &p, int charges ) furn_set( p, f_toilet ); } -void map::place_vending( const point &p, const item_group_id &type, bool reinforced ) +void map::place_vending( const point &p, const item_group_id &type, bool reinforced, bool lootable ) { if( reinforced ) { furn_set( p, f_vending_reinforced ); place_items( type, 100, p, p, false, calendar::start_of_cataclysm ); } else { - // The chance to find a non-ransacked vending machine reduces greatly with every day after the cataclysm - if( !one_in( std::max( to_days( calendar::turn - calendar::start_of_cataclysm ), 0 ) + 4 ) ) { + // The chance to find a non-ransacked vending machine reduces greatly with every day after the cataclysm, + // unless it's hidden somewhere far away from everyone's eyes (e.g. deep in the lab) + if( lootable && + !one_in( std::max( to_days( calendar::turn - calendar::start_of_cataclysm ), 0 ) + 4 ) ) { furn_set( p, f_vending_o ); for( const auto &loc : points_in_radius( { p, abs_sub.z }, 1 ) ) { if( one_in( 4 ) ) { From e1f9bfae20bf20088e72747d228f8e4a92768e20 Mon Sep 17 00:00:00 2001 From: ZigVert <56202842+Daved27hundred@users.noreply.github.com> Date: Sun, 4 Jul 2021 03:46:10 -0400 Subject: [PATCH 09/13] gave peanut butter some much needed love (#47840) --- data/json/recipes/food/frozen.json | 30 +++++++++++++++++++++++++++++- data/json/recipes/recipe_food.json | 2 ++ tests/iteminfo_test.cpp | 4 ++-- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/data/json/recipes/food/frozen.json b/data/json/recipes/food/frozen.json index f89f7f865f01a..bce0bcb7f4a44 100644 --- a/data/json/recipes/food/frozen.json +++ b/data/json/recipes/food/frozen.json @@ -15,11 +15,13 @@ [ [ "milk_standard", 1, "LIST" ], [ "con_milk", 1 ], [ "can_coconut", 1 ] ], [ [ "chocolate", 1 ], + [ "peanutbutter", 2 ], + [ "peanutbutter_imitation", 2 ], + [ "syrup", 1 ], [ "candy", 1 ], [ "candy2", 1 ], [ "candy3", 1 ], [ "maple_candy", 1 ], - [ "syrup", 1 ], [ "strawberries", 1 ], [ "strawberries_cooked", 1 ], [ "irradiated_strawberries", 1 ], @@ -45,6 +47,8 @@ [ [ "milk_choc", 1 ] ], [ [ "chocolate", 1 ], + [ "peanutbutter", 2 ], + [ "peanutbutter_imitation", 2 ], [ "candy", 1 ], [ "candy2", 1 ], [ "candy3", 1 ], @@ -79,6 +83,9 @@ [ [ "milk_standard", 1, "LIST" ] ], [ [ "chocolate", 2 ], + [ "peanutbutter", 2 ], + [ "peanutbutter_imitation", 2 ], + [ "syrup", 1 ], [ "candy", 2 ], [ "candy2", 2 ], [ "candy3", 2 ], @@ -108,6 +115,9 @@ [ [ "milk_choc", 1 ] ], [ [ "chocolate", 2 ], + [ "peanutbutter", 2 ], + [ "peanutbutter_imitation", 2 ], + [ "syrup", 1 ], [ "candy", 2 ], [ "candy2", 2 ], [ "candy3", 2 ], @@ -163,6 +173,9 @@ [ [ "milk_standard", 2, "LIST" ] ], [ [ "chocolate", 1 ], + [ "peanutbutter", 1 ], + [ "peanutbutter_imitation", 1 ], + [ "syrup", 1 ], [ "candy", 1 ], [ "candy2", 1 ], [ "candy3", 1 ], @@ -191,6 +204,9 @@ [ [ "milk_choc", 2 ] ], [ [ "chocolate", 1 ], + [ "peanutbutter", 1 ], + [ "peanutbutter_imitation", 1 ], + [ "syrup", 1 ], [ "candy", 1 ], [ "candy2", 1 ], [ "candy3", 1 ], @@ -224,6 +240,9 @@ [ [ "milk_standard", 2, "LIST" ] ], [ [ "chocolate", 1 ], + [ "peanutbutter", 1 ], + [ "peanutbutter_imitation", 1 ], + [ "syrup", 1 ], [ "candy", 1 ], [ "candy2", 1 ], [ "candy3", 1 ], @@ -255,6 +274,9 @@ [ [ "milk_choc", 2 ] ], [ [ "chocolate", 1 ], + [ "peanutbutter", 1 ], + [ "peanutbutter_imitation", 1 ], + [ "syrup", 1 ], [ "candy", 1 ], [ "candy2", 1 ], [ "candy3", 1 ], @@ -316,6 +338,9 @@ [ [ "milk_standard", 2, "LIST" ] ], [ [ "chocolate", 1 ], + [ "peanutbutter", 1 ], + [ "peanutbutter_imitation", 1 ], + [ "syrup", 1 ], [ "candy", 1 ], [ "candy2", 1 ], [ "candy3", 1 ], @@ -381,6 +406,9 @@ [ [ "milk_standard", 1, "LIST" ] ], [ [ "chocolate", 1 ], + [ "peanutbutter", 1 ], + [ "peanutbutter_imitation", 1 ], + [ "syrup", 1 ], [ "candy", 1 ], [ "candy2", 1 ], [ "candy3", 1 ], diff --git a/data/json/recipes/recipe_food.json b/data/json/recipes/recipe_food.json index fd1b958b867b9..6d1bc903c3f52 100644 --- a/data/json/recipes/recipe_food.json +++ b/data/json/recipes/recipe_food.json @@ -3996,6 +3996,8 @@ [ [ "flour", 8 ], [ "oatmeal", 8 ], [ "dry_rice", 2 ] ], [ [ "sugar", 16 ], + [ "peanutbutter", 4 ], + [ "peanutbutter_imitation", 4 ], [ "artificial_sweetener", 16 ], [ "syrup", 1 ], [ "beet_syrup", 1 ], diff --git a/tests/iteminfo_test.cpp b/tests/iteminfo_test.cpp index 422b8f86e8c17..a01a2bc8446cb 100644 --- a/tests/iteminfo_test.cpp +++ b/tests/iteminfo_test.cpp @@ -1716,13 +1716,13 @@ TEST_CASE( "nutrients in food", "[iteminfo][food]" ) "--\n" "Nutrition will vary with chosen ingredients.\n" "Calories (kcal):" - " 126-467" + " 126-535" " Quench: 0\n" ); CHECK( item_info_str( ice_cream, { iteminfo_parts::FOOD_VITAMINS } ) == "--\n" "Nutrition will vary with chosen ingredients.\n" - "Vitamins (RDA): Calcium (7-28%), Iron (0-83%), " + "Vitamins (RDA): Calcium (7-31%), Iron (0-89%), " "Vitamin A (3-11%), Vitamin B12 (2-6%), and Vitamin C (1-85%)\n" ); } } From 0b18b8c963e71f2839c0a83539ee947b50b646c2 Mon Sep 17 00:00:00 2001 From: Sofistico <59299346+Sofistico@users.noreply.github.com> Date: Sun, 4 Jul 2021 04:47:14 -0300 Subject: [PATCH 10/13] [Magiclysm]Can cast spells with components in hand (#47914) --- src/activity_handlers.cpp | 5 ++++- src/handle_action.cpp | 2 +- src/magic.cpp | 18 ++++++++++++++++++ src/magic.h | 2 ++ 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/activity_handlers.cpp b/src/activity_handlers.cpp index 1afb2a5f04532..ee852fe7136db 100644 --- a/src/activity_handlers.cpp +++ b/src/activity_handlers.cpp @@ -4243,6 +4243,10 @@ void activity_handlers::spellcasting_finish( player_activity *act, player *p ) p->add_msg_if_player( spell_being_cast.message(), spell_being_cast.name() ); + // this is here now so that the spell first consume its components then casts its effects, necessary to cast + // spells with the components in hand. + spell_being_cast.use_components( *p ); + spell_being_cast.cast_all_effects( *p, target ); if( !no_mana ) { @@ -4266,7 +4270,6 @@ void activity_handlers::spellcasting_finish( player_activity *act, player *p ) break; } - spell_being_cast.use_components( *p ); } if( level_override == -1 ) { if( !spell_being_cast.is_max_level() ) { diff --git a/src/handle_action.cpp b/src/handle_action.cpp index fce8b3d44c4f9..20fc452179b53 100644 --- a/src/handle_action.cpp +++ b/src/handle_action.cpp @@ -1474,7 +1474,7 @@ static void cast_spell() static bool assign_spellcasting( Character &you, spell &sp, bool fake_spell ) { if( you.is_armed() && !sp.has_flag( spell_flag::NO_HANDS ) && - !you.weapon.has_flag( flag_MAGIC_FOCUS ) ) { + !you.weapon.has_flag( flag_MAGIC_FOCUS ) && !sp.check_if_component_in_hand( you ) ) { add_msg( game_message_params{ m_bad, gmf_bypass_cooldown }, _( "You need your hands free to cast this spell!" ) ); return false; diff --git a/src/magic.cpp b/src/magic.cpp index 8f5344a1b16a1..46aed434905b3 100644 --- a/src/magic.cpp +++ b/src/magic.cpp @@ -880,6 +880,24 @@ void spell::use_components( Character &guy ) const } } +bool spell::check_if_component_in_hand( Character &guy ) const +{ + if( type->spell_components.is_empty() ) { + return false; + } + + const requirement_data &spell_components = type->spell_components.obj(); + + if( guy.has_weapon() ) { + if( spell_components.can_make_with_inventory( guy.weapon, return_true ) ) { + return true; + } + } + + // if it isn't in hand, return false + return false; +} + int spell::get_difficulty() const { return type->difficulty; diff --git a/src/magic.h b/src/magic.h index 7a47b9e271845..de1cf0ad4b2c9 100644 --- a/src/magic.h +++ b/src/magic.h @@ -557,6 +557,8 @@ class spell void cast_all_effects( Creature &source, const tripoint &target ) const; // uses up the components in @guy's inventory void use_components( Character &guy ) const; + // checks if the spell's component is in the @guy's hand + bool check_if_component_in_hand( Character &guy ) const; // checks if a target point is in spell range bool is_target_in_range( const Creature &caster, const tripoint &p ) const; From 0bcaa16f888e256835910fa47a90274f46ab47c3 Mon Sep 17 00:00:00 2001 From: Saicchi <47158232+Saicchi@users.noreply.github.com> Date: Sun, 4 Jul 2021 04:48:22 -0300 Subject: [PATCH 11/13] New mod for more mutation scenarios (#48524) --- data/json/mutations/mutations.json | 2 +- data/mods/extra_mut_scen/modinfo.json | 11 + .../extra_mut_scen/mutation_scenarios.json | 518 ++++++++++++++++++ 3 files changed, 530 insertions(+), 1 deletion(-) create mode 100644 data/mods/extra_mut_scen/modinfo.json create mode 100644 data/mods/extra_mut_scen/mutation_scenarios.json diff --git a/data/json/mutations/mutations.json b/data/json/mutations/mutations.json index 9900408955dda..f9b79d68c349a 100644 --- a/data/json/mutations/mutations.json +++ b/data/json/mutations/mutations.json @@ -2810,7 +2810,7 @@ { "type": "mutation", "id": "INK_GLANDS", - "name": "Ink glands", + "name": { "str": "Ink glands" }, "points": 1, "visibility": 1, "ugliness": 1, diff --git a/data/mods/extra_mut_scen/modinfo.json b/data/mods/extra_mut_scen/modinfo.json new file mode 100644 index 0000000000000..e45dd22cc86e3 --- /dev/null +++ b/data/mods/extra_mut_scen/modinfo.json @@ -0,0 +1,11 @@ +[ + { + "type": "MOD_INFO", + "id": "extra_mut_scens", + "name": "Extra Mutated Scenarios", + "authors": [ "Saicchi" ], + "description": "Extra scenarios with all possible mutation traits and thresholds.", + "category": "misc_additions", + "dependencies": [ "dda" ] + } +] diff --git a/data/mods/extra_mut_scen/mutation_scenarios.json b/data/mods/extra_mut_scen/mutation_scenarios.json new file mode 100644 index 0000000000000..88ba004c9cc7b --- /dev/null +++ b/data/mods/extra_mut_scen/mutation_scenarios.json @@ -0,0 +1,518 @@ +[ + { + "type": "scenario", + "id": "extscenario_prethresh", + "name": "Mutant - Pre Threshold", + "description": "Start as a Pre Threshold Mutant", + "start_name": "Mutant", + "points": 1, + "flags": [ "CHALLENGE", "CITY_START", "LONE_START" ], + "professions": [ "unemployed", "mutant_patient", "mutant_volunteer", "labtech", "security", "medic" ], + "allowed_locs": [ + "sloc_forest", + "sloc_field", + "sloc_lab_random", + "sloc_lab_escape_cells", + "sloc_lab_finale", + "sloc_ice_lab_stairs", + "sloc_ice_lab_finale" + ], + "traits": [ + "ANIMALDISCORD2", + "ANIMALEMPATH2", + "ANTENNAE", + "ANTLERS", + "ARM_FEATHERS", + "ARM_TENTACLES", + "ARM_TENTACLES_4", + "ARM_TENTACLES_8", + "BARBS", + "BARK", + "BEAK", + "BEAUTIFUL", + "BEAUTIFUL2", + "BEAUTIFUL3", + "BIOLUM0", + "BIOLUM1", + "BIOLUM2", + "CANINE_EARS", + "CARNIVORE", + "CEPH_EYES", + "CEPH_VISION", + "CHAOTIC", + "CHITIN", + "CHITIN2", + "CHITIN3", + "CHITIN_FUR", + "CHITIN_FUR2", + "CLAWS", + "CLAWS_RAT", + "CLAWS_RETRACT", + "COLDBLOOD", + "COLDBLOOD2", + "COLDBLOOD3", + "COMPOUND_EYES", + "DEFORMED", + "DEFORMED2", + "DEFORMED3", + "DEX_UP", + "DEX_UP_2", + "DEX_UP_3", + "DISIMMUNE", + "ELECTRORECEPTORS", + "ELFA_FNV", + "ELFA_NV", + "EYEBULGE", + "FANGS", + "FASTHEALER2", + "FAT", + "FEATHERS", + "FELINE_EARS", + "FELINE_FUR", + "FEL_EYE", + "FEL_NV", + "FLEET2", + "FORKED_TONGUE", + "FUR", + "GILLS", + "GILLS_CEPH", + "GROWL", + "HAIRROOTS", + "HEADBUMPS", + "HERBIVORE", + "HISS", + "HOLLOW_BONES", + "HOOVES", + "HORNS", + "HORNS_CURLED", + "HORNS_POINTED", + "HUGE", + "HUNGER2", + "HUNGER3", + "INFIMMUNE", + "INFRARED", + "INK_GLANDS", + "INT_UP", + "INT_UP_2", + "INT_UP_3", + "JEKYLL", + "LARGE", + "LEAVES", + "LEG_TENTACLES", + "LIGHTFUR", + "LIGHT_BONES", + "LIZ_EYE", + "LIZ_IR", + "LUPINE_EARS", + "LUPINE_FUR", + "LYNX_FUR", + "MANDIBLES", + "MEMBRANE", + "MINOTAUR", + "MORE_PAIN2", + "MORE_PAIN3", + "MOUTH_FLAPS", + "MOUTH_TENTACLES", + "MUZZLE", + "MUZZLE_BEAR", + "MUZZLE_LONG", + "MUZZLE_RAT", + "NAILS", + "NAUSEA", + "NIGHTVISION2", + "NIGHTVISION3", + "NOMAD2", + "NOMAD3", + "PADDED_FEET", + "PAINREC1", + "PAINREC2", + "PAINREC3", + "PALE", + "PARAIMMUNE", + "PAWS", + "PAWS_LARGE", + "PER_UP", + "PER_UP_2", + "PER_UP_3", + "PHEROMONE_INSECT", + "PHEROMONE_MAMMAL", + "PLANTSKIN", + "POISONOUS", + "PONDEROUS1", + "PONDEROUS2", + "PONDEROUS3", + "QUILLS", + "RADIOACTIVE1", + "RADIOACTIVE2", + "RADIOACTIVE3", + "RADIOGENIC", + "REGEN", + "ROT1", + "ROT2", + "ROT3", + "RUMINANT", + "SAPROVORE", + "SCALES", + "SHELL", + "SHOUT1", + "SHOUT2", + "SHOUT3", + "SKIN_ROUGH", + "SLEEK_SCALES", + "SLEEPY2", + "SLIME_HANDS", + "SLIMY", + "SLIT_NOSTRILS", + "SMALL", + "SMALL2", + "SMELLY2", + "SNARL", + "SNOUT", + "SORES", + "SPINES", + "SPOTS", + "STR_UP", + "STR_UP_2", + "STR_UP_3", + "SUNBURN", + "SUNLIGHT_DEPENDENT", + "TAIL_CATTLE", + "TAIL_CLUB", + "TAIL_FIN", + "TAIL_FLUFFY", + "TAIL_LONG", + "TAIL_RAPTOR", + "TAIL_RAT", + "TAIL_STING", + "TAIL_STUB", + "TAIL_THICK", + "TALONS", + "THIRST2", + "THIRST3", + "THORNS", + "TROGLO", + "TROGLO2", + "TROGLO3", + "UNSTABLE", + "URSINE_EARS", + "URSINE_EYE", + "URSINE_FUR", + "VINES1", + "VINES2", + "VOMITOUS", + "WEBBED", + "WEB_WALKER", + "WHISKERS", + "WHISKERS_RAT", + "WINGS_BAT", + "WINGS_BIRD", + "WINGS_INSECT", + "WINGS_STUB" + ] + }, + { + "type": "scenario", + "id": "extscenario_alpha", + "copy-from": "extscenario_prethresh", + "name": "Mutant - Prime Threshold", + "description": "Start as a post-threshold Prime Mutant", + "forced_traits": "THRESH_ALPHA", + "extend": { "traits": [ "DEX_ALPHA", "INT_ALPHA", "PER_ALPHA", "STR_ALPHA", "WAKEFUL2" ] } + }, + { + "type": "scenario", + "id": "extscenario_beast", + "copy-from": "extscenario_prethresh", + "name": "Mutant - Beast Threshold", + "description": "Start as a post-threshold Beast Mutant", + "forced_traits": "THRESH_BEAST", + "extend": { "traits": [ "MUT_TOUGH", "PRED1", "PRED2", "PRED3", "PRED4", "SAPIOVORE", "STR_UP_4" ] } + }, + { + "type": "scenario", + "id": "extscenario_bird", + "copy-from": "extscenario_prethresh", + "name": "Mutant - Bird Threshold", + "description": "Start as a post-threshold Bird Mutant", + "forced_traits": "THRESH_BIRD", + "extend": { "traits": [ "BEAK_HUM", "BEAK_PECK", "BIRD_EYE", "DOWN", "GIZZARD", "PER_UP_4" ] } + }, + { + "type": "scenario", + "id": "extscenario_cattle", + "copy-from": "extscenario_prethresh", + "name": "Mutant - Bovine Threshold", + "description": "Start as a post-threshold Bovine Mutant", + "forced_traits": "THRESH_CATTLE", + "extend": { "traits": [ "GRAZER", "HUGE_OK", "LARGE_OK", "MUT_TOUGH", "MUT_TOUGH2", "MUT_TOUGH3" ] } + }, + { + "type": "scenario", + "id": "extscenario_cephalopod", + "copy-from": "extscenario_prethresh", + "name": "Mutant - Cephalopod Threshold", + "description": "Start as a post-threshold Cephalopod Mutant", + "forced_traits": "THRESH_CEPHALOPOD", + "extend": { "traits": [ "CLAWS_TENTACLE", "DEX_UP_4", "INT_UP_4", "LEG_TENT_BRACE", "SHELL2" ] } + }, + { + "type": "scenario", + "id": "extscenario_chimera", + "copy-from": "extscenario_prethresh", + "name": "Mutant - Chaos Threshold", + "description": "Start as a post-threshold Chaos Mutant", + "forced_traits": "THRESH_CHIMERA", + "extend": { + "traits": [ + "ACIDBLOOD", + "ACIDPROOF", + "EATDEAD", + "EATHEALTH", + "EATPOISON", + "MUT_JUNKIE", + "MUT_TOUGH", + "MUT_TOUGH2", + "PRED1", + "PRED2", + "PRED3", + "PRED4", + "SABER_TEETH", + "SAPIOVORE" + ] + } + }, + { + "type": "scenario", + "id": "extscenario_elfa", + "copy-from": "extscenario_prethresh", + "name": "Mutant - Fey Threshold", + "description": "Start as a post-threshold Fey Mutant", + "forced_traits": "THRESH_ELFA", + "extend": { "traits": [ "BENDY1", "FEYHEARING", "FLOWERS", "ROSEBUDS", "TREE_COMMUNION", "WAKEFUL2", "WAKEFUL3" ] } + }, + { + "type": "scenario", + "id": "extscenario_feline", + "copy-from": "extscenario_prethresh", + "name": "Mutant - Feline Threshold", + "description": "Start as a post-threshold Feline Mutant", + "forced_traits": "THRESH_FELINE", + "extend": { "traits": [ "PRED1", "PRED2", "PRED3", "SABER_TEETH" ] } + }, + { + "type": "scenario", + "id": "extscenario_fish", + "copy-from": "extscenario_prethresh", + "name": "Mutant - Aquatic Threshold", + "description": "Start as a post-threshold Aquatic Mutant", + "forced_traits": "THRESH_FISH", + "extend": { "traits": [ "AMPHIBIAN", "DEX_UP_4", "FRESHWATEROSMOSIS", "SEESLEEP", "SHARKTEETH", "TOXICFLESH", "WATERSLEEP" ] } + }, + { + "type": "scenario", + "id": "extscenario_insect", + "copy-from": "extscenario_prethresh", + "name": "Mutant - Insect Threshold", + "description": "Start as a post-threshold Insect Mutant", + "forced_traits": "THRESH_INSECT", + "extend": { "traits": [ "ACIDBLOOD", "ACIDPROOF", "INSECT_ARMS", "INSECT_ARMS_OK", "PROBOSCIS", "WINGS_BUTTERFLY" ] } + }, + { + "type": "scenario", + "id": "extscenario_lizard", + "copy-from": "extscenario_prethresh", + "name": "Mutant - Lizard Threshold", + "description": "Start as a post-threshold Lizard Mutant", + "forced_traits": "THRESH_LIZARD", + "extend": { + "traits": [ "COLDBLOOD4", "LARGE_OK", "MUT_TOUGH", "PRED1", "PRED2", "PRED3", "REGEN_LIZ", "SAPIOVORE", "THICK_SCALES" ] + } + }, + { + "type": "scenario", + "id": "extscenario_lupine", + "copy-from": "extscenario_prethresh", + "name": "Mutant - Wolf Threshold", + "description": "Start as a post-threshold Wolf Mutant", + "forced_traits": "THRESH_LUPINE", + "extend": { "traits": [ "PRED1", "PRED2", "PRED3" ] } + }, + { + "type": "scenario", + "id": "extscenario_marloss", + "copy-from": "extscenario_prethresh", + "name": "Mutant - Marloss Gateway Threshold", + "description": "Start as a post-threshold Marloss Gateway Mutant", + "forced_traits": "THRESH_MARLOSS", + "extend": { "traits": [ ] } + }, + { + "type": "scenario", + "id": "extscenario_medical", + "copy-from": "extscenario_prethresh", + "name": "Mutant - Prototype Threshold", + "description": "Start as a post-threshold Prototype Mutant", + "forced_traits": "THRESH_MEDICAL", + "extend": { + "traits": [ "ACIDBLOOD", "ACIDPROOF", "CENOBITE", "MASOCHIST_MED", "MUT_JUNKIE", "MUT_TOUGH", "MUT_TOUGH2", "NOPAIN" ] + } + }, + { + "type": "scenario", + "id": "extscenario_mouse", + "copy-from": "extscenario_prethresh", + "name": "Mutant - Diminutive Threshold", + "description": "Start as a post-threshold Diminutive Mutant", + "forced_traits": "THRESH_MOUSE", + "extend": { "traits": [ "CRAFTY", "EASYSLEEPER2", "EATDEAD", "EATPOISON", "GOODCARDIO2", "NO_THIRST", "PROJUNK2", "SMALL_OK" ] } + }, + { + "type": "scenario", + "id": "extscenario_mycus", + "copy-from": "extscenario_prethresh", + "name": "Mutant - Mycus Threshold", + "description": "Start as a post-threshold Mycus Mutant", + "forced_traits": "THRESH_MYCUS", + "extend": { + "traits": [ + "M_BLOOM", + "M_BLOSSOMS", + "M_DEFENDER", + "M_DEPENDENT", + "M_FERTILE", + "M_IMMUNE", + "M_PROVENANCE", + "M_SKIN", + "M_SKIN2", + "M_SKIN3", + "M_SPORES" + ] + } + }, + { + "type": "scenario", + "id": "extscenario_plant", + "copy-from": "extscenario_prethresh", + "name": "Mutant - Plant Threshold", + "description": "Start as a post-threshold Plant Mutant", + "forced_traits": "THRESH_PLANT", + "extend": { + "traits": [ + "CHLOROMORPH", + "COLDBLOOD4", + "FLOWERS", + "LEAVES2", + "LEAVES3", + "ROOTS1", + "ROOTS2", + "ROOTS3", + "ROSEBUDS", + "SAPROPHAGE", + "TRANSPIRATION", + "TREE_COMMUNION", + "VINES3" + ] + } + }, + { + "type": "scenario", + "id": "extscenario_raptor", + "copy-from": "extscenario_prethresh", + "name": "Mutant - Raptor Threshold", + "description": "Start as a post-threshold Raptor Mutant", + "forced_traits": "THRESH_RAPTOR", + "extend": { "traits": [ "EATPOISON", "PRED1", "PRED2", "PRED3", "PRED4", "SAPIOVORE" ] } + }, + { + "type": "scenario", + "id": "extscenario_rat", + "copy-from": "extscenario_prethresh", + "name": "Mutant - Survivor Threshold", + "description": "Start as a post-threshold Survivor Mutant", + "forced_traits": "THRESH_RAT", + "extend": { "traits": [ "BURROW", "CLAWS_ST", "EATDEAD", "EATPOISON", "INCISORS" ] } + }, + { + "type": "scenario", + "id": "extscenario_slime", + "copy-from": "extscenario_prethresh", + "name": "Mutant - Aqueous Threshold", + "description": "Start as a post-threshold Aqueous Mutant", + "forced_traits": "THRESH_SLIME", + "extend": { + "traits": [ + "ACIDBLOOD", + "ACIDPROOF", + "AMORPHOUS", + "BENDY1", + "BENDY2", + "BENDY3", + "INT_SLIME", + "PER_SLIME", + "PER_SLIME_OK", + "SLIMESPAWNER", + "VISCOUS" + ] + } + }, + { + "type": "scenario", + "id": "extscenario_spider", + "copy-from": "extscenario_prethresh", + "name": "Mutant - Arachnid Threshold", + "description": "Start as a post-threshold Arachnid Mutant", + "forced_traits": "THRESH_SPIDER", + "extend": { + "traits": [ + "ARACHNID_ARMS", + "ARACHNID_ARMS_OK", + "CF_HAIR", + "CHITIN_FUR3", + "FANGS_SPIDER", + "INSECT_ARMS", + "POISONOUS2", + "PRED1", + "PRED2", + "PRED3", + "SAPIOVORE", + "WEB_RAPPEL", + "WEB_ROPE", + "WEB_SPINNER", + "WEB_WEAVER" + ] + } + }, + { + "type": "scenario", + "id": "extscenario_troglobite", + "copy-from": "extscenario_prethresh", + "name": "Mutant - Subterranean Threshold", + "description": "Start as a post-threshold Subterranean Mutant", + "forced_traits": "THRESH_TROGLOBITE", + "extend": { "traits": [ "EATPOISON", "PAINRESIST_TROGLO", "STOCKY_TROGLO" ] } + }, + { + "type": "scenario", + "id": "extscenario_ursine", + "copy-from": "extscenario_prethresh", + "name": "Mutant - Bear Threshold", + "description": "Start as a post-threshold Bear Mutant", + "forced_traits": "THRESH_URSINE", + "extend": { + "traits": [ + "HIBERNATE", + "HUGE_OK", + "LARGE_OK", + "MUT_TOUGH", + "MUT_TOUGH2", + "MUT_TOUGH3", + "PRED1", + "PRED2", + "PRED3", + "PRED4", + "SAPIOVORE", + "STR_UP_4" + ] + } + } +] From 45ff30ff3c819efc2118470464e0bb4777831442 Mon Sep 17 00:00:00 2001 From: stubkan <34361592+stubkan@users.noreply.github.com> Date: Sun, 4 Jul 2021 08:50:16 +0100 Subject: [PATCH 12/13] Mapgen road connections improved in the absence of overmap cities (#48607) --- src/overmap.cpp | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/overmap.cpp b/src/overmap.cpp index a8a5e35aa6324..8014b33cc6528 100644 --- a/src/overmap.cpp +++ b/src/overmap.cpp @@ -4097,19 +4097,27 @@ void overmap::place_special( } } // Make connections. - if( cit ) { - for( const auto &elem : special.connections ) { - if( elem.connection ) { - const tripoint_om_omt rp = p + om_direction::rotate( elem.p, dir ); - om_direction::type initial_dir = elem.initial_dir; - - if( initial_dir != om_direction::type::invalid ) { - initial_dir = om_direction::add( initial_dir, dir ); - } + for( const auto &elem : special.connections ) { + if( elem.connection ) { + const tripoint_om_omt rp = p + om_direction::rotate( elem.p, dir ); + om_direction::type initial_dir = elem.initial_dir; + if( initial_dir != om_direction::type::invalid ) { + initial_dir = om_direction::add( initial_dir, dir ); + } + if( cit ) { build_connection( cit.pos, rp.xy(), elem.p.z, *elem.connection, must_be_unexplored, initial_dir ); } + // if no city present, search for nearby road within 50 tiles and make connection to it instead + else { + for( const tripoint_om_omt &nearby_point : closest_points_first( rp, 50 ) ) { + if( check_ot( "road", ot_match_type::contains, nearby_point ) ) { + build_connection( nearby_point.xy(), rp.xy(), elem.p.z, *elem.connection, must_be_unexplored, + initial_dir ); + } + } + } } } // Place spawns. From 66163721b93384ff78079c14ad15f120f3be911c Mon Sep 17 00:00:00 2001 From: Meelock Date: Sun, 4 Jul 2021 00:51:46 -0700 Subject: [PATCH 13/13] Fix #45844 (#48882) --- .../Magiclysm/items/vehicle/vehicle_parts.json | 14 ++++++++++++++ .../mods/Magiclysm/vehicleparts/vehicle_parts.json | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 data/mods/Magiclysm/items/vehicle/vehicle_parts.json diff --git a/data/mods/Magiclysm/items/vehicle/vehicle_parts.json b/data/mods/Magiclysm/items/vehicle/vehicle_parts.json new file mode 100644 index 0000000000000..7f3aa00b438d4 --- /dev/null +++ b/data/mods/Magiclysm/items/vehicle/vehicle_parts.json @@ -0,0 +1,14 @@ +[ + { + "type": "GENERIC", + "id": "v2_combustion_magic", + "name": "magic v-twin combustion engine", + "symbol": "v", + "description": "A magically manifested combustion engine. Despite operating entirely off of mana rather than normal fuel, it otherwise functions exactly as a conventional internal combustion engine.", + "volume": "2 L", + "weight": "10 kg", + "color": "yellow", + "material": [ "steel" ], + "price": 800000 + } +] diff --git a/data/mods/Magiclysm/vehicleparts/vehicle_parts.json b/data/mods/Magiclysm/vehicleparts/vehicle_parts.json index db8fab4e674af..9104386673d12 100644 --- a/data/mods/Magiclysm/vehicleparts/vehicle_parts.json +++ b/data/mods/Magiclysm/vehicleparts/vehicle_parts.json @@ -24,7 +24,7 @@ "id": "engine_vtwin_magic", "copy-from": "mana_engine", "type": "vehicle_part", - "item": "v2_combustion", + "item": "v2_combustion_magic", "durability": 200, "epower": -50, "power": 37300,