diff --git a/data/json/itemgroups/Monsters_Animals_Lairs/monster_drops_advtech.json b/data/json/itemgroups/Monsters_Animals_Lairs/monster_drops_advtech.json index 71ef1560f17e3..3f99b1179f979 100644 --- a/data/json/itemgroups/Monsters_Animals_Lairs/monster_drops_advtech.json +++ b/data/json/itemgroups/Monsters_Animals_Lairs/monster_drops_advtech.json @@ -53,20 +53,6 @@ "subtype": "distribution", "entries": [ { "item": "tazer", "prob": 3 }, { "item": "scrap", "prob": 9 } ] }, - { - "type": "item_group", - "id": "copbot", - "subtype": "distribution", - "entries": [ - { "item": "baton", "prob": 8 }, - { "item": "tazer", "prob": 3 }, - { "item": "sheet_kevlar_layered", "prob": 10 }, - { "item": "ceramic_armor", "prob": 15 }, - { "item": "tonfa", "prob": 10 }, - { "item": "shocktonfa_off", "prob": 5 }, - { "item": "alloy_plate", "prob": 10 } - ] - }, { "type": "item_group", "id": "molebot", diff --git a/data/json/itemgroups/science_and_tech.json b/data/json/itemgroups/science_and_tech.json index 83da28628fb6c..2a9ce61051574 100644 --- a/data/json/itemgroups/science_and_tech.json +++ b/data/json/itemgroups/science_and_tech.json @@ -134,12 +134,9 @@ "items": [ [ "schematics_nursebot", 10 ], [ "schematics_grocerybot", 20 ], - [ "schematics_copbot", 50 ], - [ "schematics_eyebot", 50 ], [ "schematics_secubot", 50 ], [ "schematics_skitterbot", 50 ], [ "schematics_hazmatbot", 50 ], - [ "schematics_riotbot", 50 ], [ "schematics_sciencebot", 10 ], [ "schematics_molebot", 20 ], [ "schematics_dispatch", 25 ], diff --git a/data/json/items/book/electronics.json b/data/json/items/book/electronics.json index 9474625aa3d2c..8b6a38ee497e8 100644 --- a/data/json/items/book/electronics.json +++ b/data/json/items/book/electronics.json @@ -303,7 +303,6 @@ "category": "manuals", "name": { "str_sp": "schematics" }, "description": "seeing this is a bug", - "looks_like": "schematics_eyebot", "weight": "30 g", "volume": "250 ml", "price": 100000, @@ -332,20 +331,6 @@ "description": "Bearing the logo of Uncanny, these are assembly plans, design specs, and technical drawings for the grocery bot. Most of this is useless to you, but you could use the assembly plans to re-assemble the robot from salvaged parts.", "copy-from": "schematics_generic" }, - { - "id": "schematics_copbot", - "type": "BOOK", - "name": { "str_sp": "police bot schematics" }, - "description": "Assembly plans, design specs, and technical drawings for the police bot. Most of this is useless to you, but you could use the assembly plans to re-assemble the robot from salvaged parts.", - "copy-from": "schematics_generic" - }, - { - "id": "schematics_eyebot", - "type": "BOOK", - "name": { "str_sp": "eyebot schematics" }, - "description": "Assembly plans, design specs, and technical drawings for the eyebot. Most of this is useless to you, but you could use the assembly plans to re-assemble the robot from salvaged parts.", - "copy-from": "schematics_generic" - }, { "id": "schematics_secubot", "type": "BOOK", @@ -374,13 +359,6 @@ "description": "Assembly plans, design specs, and technical drawings for the miner bot. Most of this is useless to you, but you could use the assembly plans to re-assemble the robot from salvaged parts.", "copy-from": "schematics_generic" }, - { - "id": "schematics_riotbot", - "type": "BOOK", - "name": { "str_sp": "riot control bot schematics" }, - "description": "Assembly plans, design specs, and technical drawings for the riot control bot. Most of this is useless to you, but you could use the assembly plans to re-assemble the robot from salvaged parts.", - "copy-from": "schematics_generic" - }, { "id": "schematics_sciencebot", "type": "BOOK", diff --git a/data/json/items/corpses/inactive_bots.json b/data/json/items/corpses/inactive_bots.json index 0406e76f9eef8..9f4d3eb21fbe4 100644 --- a/data/json/items/corpses/inactive_bots.json +++ b/data/json/items/corpses/inactive_bots.json @@ -475,60 +475,6 @@ "flags": [ "SINGLE_USE" ], "melee_damage": { "bash": 8 } }, - { - "id": "bot_copbot", - "looks_like": "broken_copbot", - "type": "TOOL", - "name": { "str": "inactive police bot" }, - "description": "An inactive police robot. Using this item involves placing it on the ground and turning it on. If reprogrammed and rewired successfully, the police bot will then identify you as law enforcement, roam around or follow you, and attempt to detain lawbreakers.", - "weight": "81500 g", - "volume": "62500 ml", - "price": 100000, - "price_postapoc": 500, - "to_hit": -3, - "material": [ "steel" ], - "symbol": ";", - "color": "light_green", - "use_action": { - "type": "place_monster", - "monster_id": "mon_copbot", - "friendly_msg": "The police bot rolls into action, ready to pursue criminals.", - "hostile_msg": "A siren howls and lights flash as the police bot prepares to arrest you!", - "//": "Wheeled and must be easy-to-use for police deployment", - "difficulty": 3, - "moves": 100, - "skills": [ "electronics", "computer" ] - }, - "flags": [ "SINGLE_USE" ], - "melee_damage": { "bash": 8 } - }, - { - "id": "bot_eyebot", - "looks_like": "broken_eyebot", - "type": "TOOL", - "name": { "str": "inactive eyebot" }, - "description": "An inactive eyebot. Using this item involves turning it on and launching the UAV. If reprogrammed and rewired successfully, the eyebot will then keep watch for intruders.", - "weight": "40750 g", - "volume": "30 L", - "price": 10000, - "price_postapoc": 500, - "to_hit": -3, - "material": [ "steel" ], - "symbol": ";", - "color": "light_green", - "use_action": { - "type": "place_monster", - "monster_id": "mon_eyebot", - "friendly_msg": "The eyebot hums and takes to the sky.", - "hostile_msg": "The eyebot beeps disapprovingly and focuses its camera on your face. Say cheese!", - "//": "Like most surveillance tech these likely have poor security. Secure the wifi!", - "difficulty": 1, - "moves": 100, - "skills": [ "electronics", "computer" ] - }, - "flags": [ "SINGLE_USE" ], - "melee_damage": { "bash": 8 } - }, { "id": "bot_hazmatbot", "type": "TOOL", @@ -582,33 +528,6 @@ "flags": [ "SINGLE_USE" ], "melee_damage": { "bash": 8 } }, - { - "id": "bot_riotbot", - "looks_like": "broken_riotbot", - "type": "TOOL", - "name": { "str": "inactive riot control bot" }, - "description": "An inactive riot control bot. Using this item involves placing it on the ground and turning it on. If reprogrammed and rewired successfully, the robot will bring order and peace to the horde.", - "weight": "81500 g", - "volume": "62500 ml", - "price": 35000, - "price_postapoc": 1500, - "to_hit": -3, - "material": [ "steel" ], - "symbol": ";", - "color": "light_green", - "use_action": { - "type": "place_monster", - "monster_id": "mon_riotbot", - "friendly_msg": "The riot control bot rolls into action.", - "hostile_msg": "The riot control bot gasses you and approaches with a pair of handcuffs!", - "//": "Pretty easy but you want to be careful with the gas", - "difficulty": 4, - "moves": 150, - "skills": [ "electronics", "computer" ] - }, - "flags": [ "SINGLE_USE" ], - "melee_damage": { "bash": 8 } - }, { "id": "bot_skitterbot", "looks_like": "broken_skitterbot", @@ -1000,5 +919,31 @@ }, "flags": [ "SINGLE_USE" ], "melee_damage": { "bash": 6, "cut": 6 } + }, + { + "id": "bot_robofac_camspy", + "looks_like": "broken_robofac_camspy", + "type": "TOOL", + "name": { "str": "inactive camspy", "str_pl": "inactive camspies" }, + "description": "An inactive camspy. Using this item involves turning it on and launching it. If reprogrammed and rewired successfully, the camspy will then keep watch for intruders.", + "weight": "40750 g", + "volume": "30 L", + "price": 10000, + "price_postapoc": 500, + "to_hit": -3, + "material": [ "steel", "plastic" ], + "symbol": ";", + "color": "light_green", + "use_action": { + "type": "place_monster", + "monster_id": "mon_robofac_camspy", + "friendly_msg": "The camspy hums and takes to the sky.", + "hostile_msg": "The camspy hums and appears to reconnect to whoever was piloting it before.", + "difficulty": 3, + "moves": 100, + "skills": [ "electronics", "computer" ] + }, + "flags": [ "SINGLE_USE", "NO_SALVAGE" ], + "melee_damage": { "bash": 8 } } ] diff --git a/data/json/items/generic.json b/data/json/items/generic.json index 6ad9392d159b2..94867cefedffb 100644 --- a/data/json/items/generic.json +++ b/data/json/items/generic.json @@ -1369,28 +1369,21 @@ }, { "type": "GENERIC", - "id": "broken_eyebot", + "id": "broken_robofac_camspy", "symbol": ",", "color": "green", - "name": { "str": "broken eyebot" }, + "name": { "str": "broken camspy", "str_pl": "broken camspies" }, "category": "other", - "description": "A broken eyebot. Much less threatening now that it won't be calling for backup. Could be gutted for parts.", + "description": "A broken camspy. It probably won't spy on anything ever again. Could be gutted for parts.", "price": 1000, "price_postapoc": 10, "material": [ "steel", "plastic" ], "weight": "31520 g", "volume": "15 L", "to_hit": -3, - "flags": [ "TRADER_AVOID", "NO_REPAIR" ], + "flags": [ "TRADER_AVOID", "NO_REPAIR", "NO_SALVAGE" ], "melee_damage": { "bash": 6, "cut": 6 } }, - { - "type": "GENERIC", - "id": "broken_robofac_camspy", - "copy-from": "broken_eyebot", - "name": { "str": "broken camspy", "str_pl": "broken camspies" }, - "description": "A broken camspy. It probably won't spy on anything ever again. Could be gutted for parts." - }, { "type": "GENERIC", "id": "broken_skitterbot", @@ -1442,23 +1435,6 @@ "flags": [ "TRADER_AVOID", "NO_REPAIR" ], "melee_damage": { "bash": 4, "cut": 4 } }, - { - "type": "GENERIC", - "id": "broken_copbot", - "symbol": ",", - "color": "green", - "name": { "str": "broken police bot" }, - "category": "other", - "description": "A broken police bot. Much less threatening now that it's quiet and still. Could be gutted for parts.", - "price": 30000, - "price_postapoc": 10, - "material": [ "steel", "plastic" ], - "weight": "140000 g", - "volume": "62500 ml", - "to_hit": -3, - "flags": [ "TRADER_AVOID", "NO_REPAIR" ], - "melee_damage": { "bash": 6, "cut": 6 } - }, { "type": "GENERIC", "id": "broken_nursebot", @@ -1516,23 +1492,6 @@ "name": { "str": "broken nurse bot" }, "copy-from": "broken_nursebot" }, - { - "type": "GENERIC", - "id": "broken_riotbot", - "symbol": ",", - "color": "green", - "name": { "str": "broken riot control bot" }, - "category": "other", - "description": "A broken riot control bot. Much less threatening now that it's out of gas. Could be gutted for parts.", - "price": 30000, - "price_postapoc": 10, - "material": [ "steel", "plastic" ], - "weight": "140000 g", - "volume": "62500 ml", - "to_hit": -3, - "flags": [ "TRADER_AVOID", "NO_REPAIR" ], - "melee_damage": { "bash": 6, "cut": 6 } - }, { "type": "GENERIC", "id": "broken_robofac_prototype", diff --git a/data/json/mapgen/bank.json b/data/json/mapgen/bank.json index ef95a84852ef7..d732bda404236 100644 --- a/data/json/mapgen/bank.json +++ b/data/json/mapgen/bank.json @@ -77,8 +77,7 @@ "options": [ { "name": "Open Vault", "action": "unlock" } ], "failures": [ { "action": "shutdown" }, { "action": "alarm" } ] } - }, - "place_monster": [ { "monster": "mon_copbot", "x": [ 7, 18 ], "y": [ 7, 18 ], "chance": 30, "repeat": 4 } ] + } } }, { @@ -215,8 +214,7 @@ "options": [ { "name": "Open Vault", "action": "unlock" } ], "failures": [ { "action": "alarm" }, { "action": "damage" }, { "action": "secubots" } ] } - }, - "place_monster": [ { "monster": "mon_copbot", "x": [ 7, 18 ], "y": [ 7, 18 ], "chance": 30, "repeat": 4 } ] + } } }, { diff --git a/data/json/mapgen/lab/lab_modular/lab_nests_modular/lab_nested_maintenance.json b/data/json/mapgen/lab/lab_modular/lab_nests_modular/lab_nested_maintenance.json index 8c6f901445633..5ae228cb37a61 100644 --- a/data/json/mapgen/lab/lab_modular/lab_nests_modular/lab_nested_maintenance.json +++ b/data/json/mapgen/lab/lab_modular/lab_nests_modular/lab_nested_maintenance.json @@ -541,10 +541,7 @@ "NN Q| " ], "palettes": [ "lab_common_palette", "lab_maintenance_palette" ], - "place_loot": [ - { "item": "broken_eyebot", "x": 0, "y": 2, "chance": 100 }, - { "item": "broken_secubot", "x": 0, "y": 6, "chance": 100 } - ] + "place_loot": [ { "item": "broken_secubot", "x": 0, "y": 6, "chance": 100 } ] } }, { diff --git a/data/json/monstergroups/lab.json b/data/json/monstergroups/lab.json index ca1d3b6347651..e8ab1b41593b6 100644 --- a/data/json/monstergroups/lab.json +++ b/data/json/monstergroups/lab.json @@ -265,7 +265,6 @@ { "monster": "mon_zombie_hazmat", "weight": 20, "pack_size": [ 1, 3 ] }, { "monster": "mon_feral_human_pipe", "weight": 18, "cost_multiplier": 8, "pack_size": [ 1, 3 ] }, { "monster": "mon_feral_human_crowbar", "weight": 18, "cost_multiplier": 8, "pack_size": [ 1, 3 ] }, - { "monster": "mon_eyebot", "weight": 5 }, { "monster": "mon_hazmatbot", "weight": 7, "pack_size": [ 1, 2 ] }, { "monster": "mon_zombie", "weight": 30, "pack_size": [ 1, 3 ] }, { "monster": "mon_zombie_fat", "weight": 30 }, diff --git a/data/json/monstergroups/misc.json b/data/json/monstergroups/misc.json index 08100b4d2fec9..0da5d7df0477b 100644 --- a/data/json/monstergroups/misc.json +++ b/data/json/monstergroups/misc.json @@ -421,7 +421,6 @@ "monsters": [ { "monster": "mon_wasp_small" }, { "monster": "mon_wasp" }, - { "monster": "mon_riotbot" }, { "monster": "mon_secubot" }, { "monster": "mon_feral_militia" }, { "monster": "mon_plague_vector" }, diff --git a/data/json/monstergroups/robots.json b/data/json/monstergroups/robots.json index 0ae40b35889b0..06f50dfc5c7f3 100644 --- a/data/json/monstergroups/robots.json +++ b/data/json/monstergroups/robots.json @@ -7,7 +7,6 @@ { "monster": "mon_skitterbot", "weight": 220, "cost_multiplier": 0 }, { "monster": "mon_secubot", "weight": 150, "cost_multiplier": 0 }, { "monster": "mon_talon_m202a1", "weight": 75, "cost_multiplier": 0 }, - { "monster": "mon_copbot", "weight": 0, "cost_multiplier": 0 }, { "monster": "mon_molebot", "weight": 40, "cost_multiplier": 0 } ] }, @@ -33,11 +32,6 @@ "type": "monstergroup", "monsters": [ { "monster": "mon_hazmatbot" } ] }, - { - "type": "monstergroup", - "name": "GROUP_ROBOT_EYEBOT", - "monsters": [ { "monster": "mon_eyebot", "cost_multiplier": 0 } ] - }, { "type": "monstergroup", "name": "GROUP_ROBOT_SECUBOT", diff --git a/data/json/monsters/defense_bot.json b/data/json/monsters/defense_bot.json index d7f068b526f35..76ccb9f81e5cc 100644 --- a/data/json/monsters/defense_bot.json +++ b/data/json/monsters/defense_bot.json @@ -1,84 +1,4 @@ [ - { - "id": "mon_copbot", - "type": "MONSTER", - "name": { "str": "police bot" }, - "description": "One of the many models of armored law enforcement robots employed shortly before the collapse of civilization. Solar powered like many other robots, it maintains its programmed pursuit of law and order, propelled on a trio of omni wheels.", - "default_faction": "cop_bot", - "species": [ "ROBOT" ], - "diff": 10, - "volume": "62500 ml", - "weight": "81500 g", - "hp": 80, - "speed": 100, - "material": [ "steel" ], - "symbol": "R", - "color": "light_blue", - "aggression": 100, - "morale": 100, - "melee_skill": 4, - "melee_dice": 3, - "melee_dice_sides": 2, - "melee_damage": [ { "damage_type": "cut", "amount": 0 } ], - "dodge": 8, - "vision_day": 50, - "path_settings": { "max_dist": 5 }, - "revert_to_itype": "bot_copbot", - "special_attacks": [ [ "COPBOT", 3 ] ], - "death_drops": { "groups": [ [ "robots", 4 ], [ "copbot", 1 ] ] }, - "death_function": { "corpse_type": "BROKEN" }, - "flags": [ - "SEES", - "HEARS", - "BASHES", - "ELECTRONIC", - "COLDPROOF", - "NO_BREATHE", - "PRIORITIZE_TARGETS", - "PATH_AVOID_DANGER_1", - "STUN_IMMUNE" - ], - "armor": { "bash": 12, "cut": 8, "bullet": 6 } - }, - { - "id": "mon_riotbot", - "type": "MONSTER", - "name": { "str": "riot control bot" }, - "description": "A nonviolent riot-control bot, designed to suppress riots and make mass arrests of those participating. Though its relaxation gas is by far its best-known weapon, it carries a blinding spotlight and a low-powered stungun for self-defense--in addition to a supply of electronic handcuffs.", - "default_faction": "cop_bot", - "species": [ "ROBOT" ], - "diff": 10, - "volume": "62500 ml", - "weight": "81500 g", - "hp": 80, - "speed": 100, - "material": [ "steel" ], - "symbol": "R", - "color": "light_blue", - "aggression": 100, - "morale": 100, - "melee_damage": [ { "damage_type": "cut", "amount": 0 } ], - "dodge": 8, - "vision_day": 50, - "path_settings": { "max_dist": 5 }, - "revert_to_itype": "bot_riotbot", - "special_attacks": [ [ "RIOTBOT", 1 ] ], - "special_when_hit": [ "ZAPBACK", 100 ], - "death_drops": { "groups": [ [ "robots", 4 ], [ "copbot", 1 ] ] }, - "death_function": { "corpse_type": "BROKEN" }, - "flags": [ - "SEES", - "HEARS", - "GOODHEARING", - "ELECTRONIC", - "COLDPROOF", - "NO_BREATHE", - "PRIORITIZE_TARGETS", - "PATH_AVOID_DANGER_1", - "STUN_IMMUNE" - ], - "armor": { "bash": 12, "cut": 8, "bullet": 6 } - }, { "id": "mon_secubot", "type": "MONSTER", diff --git a/data/json/monsters/robofac_robots.json b/data/json/monsters/robofac_robots.json index 41c47784cc77c..7e47bb215c5c1 100644 --- a/data/json/monsters/robofac_robots.json +++ b/data/json/monsters/robofac_robots.json @@ -35,10 +35,22 @@ { "id": "mon_robofac_camspy", "type": "MONSTER", - "copy-from": "mon_eyebot", "name": { "str": "Hub 01 camspy", "str_pl": "Hub 01 camspies" }, "description": "A white and brown quadcopter drone mounting what looks to be a camera dome and a large antenna array. It calmly hovers a comfortable distance above the ground, surveilling its surroundings with cold indifference.", "default_faction": "robofac_spy", + "species": [ "ROBOT" ], + "diff": 2, + "volume": "30 L", + "weight": "40750 g", + "hp": 20, + "speed": 120, + "material": [ "steel" ], + "symbol": "e", + "color": "light_gray", + "morale": 100, + "melee_damage": [ { "damage_type": "cut", "amount": 0 } ], + "dodge": 3, + "revert_to_itype": "bot_robofac_camspy", "bleed_rate": 0, "tracking_distance": 10, "aggression": -99, @@ -61,7 +73,8 @@ "STUN_IMMUNE", "PACIFIST", "KEEP_DISTANCE" - ] + ], + "armor": { "bash": 8, "cut": 10, "bullet": 8 } }, { "id": "mon_robofac_skittergun", diff --git a/data/json/monsters/utility_bot.json b/data/json/monsters/utility_bot.json index 9fe8bc6e5c76c..f2e7e934341d7 100644 --- a/data/json/monsters/utility_bot.json +++ b/data/json/monsters/utility_bot.json @@ -1,29 +1,4 @@ [ - { - "id": "mon_eyebot", - "type": "MONSTER", - "name": { "str": "eyebot" }, - "description": "A quadcopter drone largely comprised of a high-resolution camera lens and a speaker, this robot hovers above the ground, documenting the carnage and mayhem around it. While it is no longer able to report to a central authority, it's likely that some of its automated alert systems are still functional, given that the thing seems to have an operational charging station somewhere.", - "default_faction": "cop_bot", - "species": [ "ROBOT" ], - "diff": 2, - "volume": "30000 ml", - "weight": "40750 g", - "hp": 20, - "speed": 120, - "material": [ "steel" ], - "symbol": "e", - "color": "light_gray", - "morale": 100, - "melee_damage": [ { "damage_type": "cut", "amount": 0 } ], - "dodge": 3, - "revert_to_itype": "bot_eyebot", - "special_attacks": [ [ "PHOTOGRAPH", 30 ] ], - "death_drops": { "groups": [ [ "robots", 4 ], [ "eyebot", 1 ] ] }, - "death_function": { "corpse_type": "BROKEN" }, - "flags": [ "SEES", "FLIES", "ELECTRONIC", "COLDPROOF", "NO_BREATHE", "NOHEAD", "PRIORITIZE_TARGETS", "STUN_IMMUNE" ], - "armor": { "bash": 8, "cut": 10, "bullet": 8 } - }, { "id": "mon_grocerybot", "type": "MONSTER", diff --git a/data/json/npcs/Backgrounds/criminal_1.json b/data/json/npcs/Backgrounds/criminal_1.json index 9d1f12ac4897c..bc6d6c34c1d43 100644 --- a/data/json/npcs/Backgrounds/criminal_1.json +++ b/data/json/npcs/Backgrounds/criminal_1.json @@ -2,7 +2,7 @@ { "id": "BGSS_CRIMINAL_1_STORY1", "type": "talk_topic", - "dynamic_line": "I was just sittin' in lockup. They took me in the night before, for a bullshit parole violation. Assholes. I was stuck in my cell when the cops all started yelling about an emergency, geared up, and left me in there with just this robot for a guard. I was stuck in there for two god-damn days, with no food and only a little water. Then this big-ass zombie busted in, and started fighting the robot. I didn't know what the fuck to think, but in the fighting they smashed open my cell door, and I managed to slip out.", + "dynamic_line": "I was just sittin' in lockup. They took me in the night before, for a bullshit parole violation. Assholes. I was stuck in my cell when the cops all started yelling about an emergency, geared up, and left me in there havin' a staring contest with a security cam that probably wasn't even on. I was stuck in there for two god-damn days, with no food and only a little water. Then this big-ass zombie busted in. I didn't know what the fuck to think, but if my cam wasn't working, the one in the hall sure was. Tripped a motion sensor or some shit, alarm started going, and the big dumb fuck turned around to get at it while its arms were still stuck in the cell bars. Ripped the whole door out.", "responses": [ { "text": "Lucky you. How did you get away?", "topic": "BGSS_CRIMINAL_1_STORY2" }, { "text": "", "topic": "TALK_FRIEND" }, @@ -12,7 +12,7 @@ { "id": "BGSS_CRIMINAL_1_STORY2", "type": "talk_topic", - "dynamic_line": "It was just chaos on the streets, man. But I'm used to chaos. You don't live as long as I've lived and not know how to keep away from a fight you can't win. Biggest worry wasn't the zombies and the monsters, honestly. It was the fuckin' police robots. They knew I was in violation, and they kept trying to arrest me.", + "dynamic_line": "It was just chaos on the streets, man. But I'm used to chaos. You don't live as long as I've lived and not know how to keep away from a fight you can't win. Biggest worry wasn't the zombies and the monsters, honestly. But I swear, some cops got a nightstick so far up their ass… I didn't have time to ditch my orange when stuff kept swipin' at me, and I swear, cops got a look at me, they decided I was the big problem. Goddamn walking corpse next to me, who do they pick to shoot at? Pricks.", "responses": [ { "text": "How did you keep from getting arrested?", "topic": "BGSS_CRIMINAL_1_STORY3" }, { "text": "What were you in for in the first place?", "topic": "BGSS_CRIMINAL_1_PAROLE" }, @@ -23,7 +23,7 @@ { "id": "BGSS_CRIMINAL_1_STORY3", "type": "talk_topic", - "dynamic_line": "Kept outta their line of sight, is a big part of it. Don't let those flyin' cameras get you, you know? If they do, they call for backup from the big guns, and then, well, I hope you like gettin' tazed and shoved in the back of a van. I kept my head down until I got past the worst of it, but then one of the eyebots recognized me and I had to book it. I was just lucky the bots it called had blown their wad on some giant-ass slime beast and were tryin' to get me with their short range shit. I wound up on the edge of town layin' low under an abandoned RV for a few hours, then slipped out in the night.", + "dynamic_line": "'cuz I know how cops think. If you can call it that. Early days, they were still going after alarms in case it meant, I dunno, survivors. You smack some fucker's sports car, it starts wailing, the cops come to take a look and you can walk right behind 'em. That's the thing about cops; they follow orders, right? Even when the world's comin' apart. I kept my head down until I got past the worst of it, but then, lucky me, I got sergeant brainiac. Figured out why someone would trip an alarm on purpose, had them case all up and down the streets for me. I wound up on the edge of town layin' low under an abandoned RV for a few hours. By then… well, they had some other big problems to deal with. For a little bit. Might've survived if they hadn't blown their wads chasing me around the block.", "responses": [ { "text": "What were you in for in the first place?", "topic": "BGSS_CRIMINAL_1_PAROLE" }, { "text": "", "topic": "TALK_FRIEND" }, diff --git a/data/json/npcs/hints.json b/data/json/npcs/hints.json index 07c8feddd23e8..9ff9e3a42da80 100644 --- a/data/json/npcs/hints.json +++ b/data/json/npcs/hints.json @@ -29,7 +29,6 @@ "Oh man, have you gone down into the old subway systems? I'd be careful… there's these things down there that are like zombies, but tougher.", "There's snakes down in most of the old sewer systems. They're slow on land, but boy, those suckers can swim fast!", "If you're planning on wandering around the sewers--not that you'd have a reason too--watch out for those fish. Those suckers are fast, and vicious too!", - "Have you seen those eyebots flying around? It's hard to say, but some faction's controlling them--maybe the military. All I know is, I don't want them taking my picture…", "Ever go toe-to-toe with a manhack? Tiny little helicopters covered in knives. Best be packing a shotgun!", "They're rare, but molebots are nasty things. They bore through the ground, then pop up to stab ya. Still, you're safe from them if you stay on pavement…", "Don't fire your gun if you can help it - the noise attracts monsters. If you could get a silencer, or make one, it would give you some advantage.", diff --git a/data/json/npcs/robofac/NPC_Cranberry_Foster.json b/data/json/npcs/robofac/NPC_Cranberry_Foster.json index 7cdcb849250bf..066c4cea2b4e4 100644 --- a/data/json/npcs/robofac/NPC_Cranberry_Foster.json +++ b/data/json/npcs/robofac/NPC_Cranberry_Foster.json @@ -644,7 +644,7 @@ { "id": "TALK_ROBOFAC_MERC_1_BACKGROUND_17", "type": "talk_topic", - "dynamic_line": "Well, no. It was obvious they just wanted to get rid of me, but I decided I wanted to show that I was useful. They tell me to find a crashed drone somewhere in the surrounding area, looks like an eyebot but with a different paint scheme, and bring it back here. No directions, of course. Y'know, go find this drone in the middle of the woods, it'll be easy. But I had some tools in my bag, right? And yours truly has repaired some drones in the park service.\"\n\n\"So it takes me a whole-ass afternoon, but I find their stupid drone stuck in a tree. I can see the camera's still on, so I pick it up and I tell the lens: 'Hey, you want me to fix it too?' And I do. It was just a cracked frame and the wiring to the rotors was sliced up. The propellers themselves were fine. So I bring it out of the woods and turn it off. Then I open up the casing, solder up the wires, and use superglue to hold the frame together, which wasn't perfect, but I figured it'd hold until it got back home. Then I turned it back on, and wouldn't you know, it immediately starts up and sits there for a minute, like 'What the fuck? Why am I working again?' And then it flies away, and I walk my smug ass back home.", + "dynamic_line": "Well, no. It was obvious they just wanted to get rid of me, but I decided I wanted to show that I was useful. They tell me to find a crashed drone somewhere in the surrounding area and bring it back here. No directions, of course. Y'know, go find this drone in the middle of the woods, it'll be easy. But I had some tools in my bag, right? And yours truly has repaired some drones in the park service.\"\n\n\"So it takes me a whole-ass afternoon, but I find their stupid drone stuck in a tree. I can see the camera's still on, so I pick it up and I tell the lens: 'Hey, you want me to fix it too?' And I do. It was just a cracked frame and the wiring to the rotors was sliced up. The propellers themselves were fine. So I bring it out of the woods and turn it off. Then I open up the casing, solder up the wires, and use superglue to hold the frame together, which wasn't perfect, but I figured it'd hold until it got back home. Then I turned it back on, and wouldn't you know, it immediately starts up and sits there for a minute, like 'What the fuck? Why am I working again?' And then it flies away, and I walk my smug ass back home.", "responses": [ { "text": "And *now* the rest is history.", "topic": "TALK_ROBOFAC_MERC_1_BACKGROUND_18" } ] }, { diff --git a/data/json/obsoletion/obsolete_items.json b/data/json/obsoletion/obsolete_items.json index dc7589e09063d..cd7ca6cb897f2 100644 --- a/data/json/obsoletion/obsolete_items.json +++ b/data/json/obsoletion/obsolete_items.json @@ -909,5 +909,128 @@ "item_restriction": [ "smart_phone", "smart_phone_flashlight", "smartphone_music" ] } ] + }, + { + "id": "schematics_eyebot", + "type": "BOOK", + "name": { "str_sp": "eyebot schematics" }, + "description": "Assembly plans, design specs, and technical drawings for the eyebot. Most of this is useless to you, but you could use the assembly plans to re-assemble the robot from salvaged parts.", + "copy-from": "schematics_generic" + }, + { + "id": "schematics_copbot", + "type": "BOOK", + "name": { "str_sp": "police bot schematics" }, + "description": "Assembly plans, design specs, and technical drawings for the police bot. Most of this is useless to you, but you could use the assembly plans to re-assemble the robot from salvaged parts.", + "copy-from": "schematics_generic" + }, + { + "id": "schematics_riotbot", + "type": "BOOK", + "name": { "str_sp": "riot control bot schematics" }, + "description": "Assembly plans, design specs, and technical drawings for the riot control bot. Most of this is useless to you, but you could use the assembly plans to re-assemble the robot from salvaged parts.", + "copy-from": "schematics_generic" + }, + { + "id": "bot_copbot", + "looks_like": "broken_copbot", + "type": "TOOL", + "name": { "str": "inactive police bot" }, + "description": "An inactive police robot. Using this item involves placing it on the ground and turning it on. If reprogrammed and rewired successfully, the police bot will then identify you as law enforcement, roam around or follow you, and attempt to detain lawbreakers.", + "weight": "81500 g", + "volume": "62500 ml", + "price": 100000, + "price_postapoc": 500, + "to_hit": -3, + "material": [ "steel" ], + "symbol": ";", + "color": "light_green", + "flags": [ "SINGLE_USE" ], + "melee_damage": { "bash": 8 } + }, + { + "id": "bot_eyebot", + "looks_like": "broken_eyebot", + "type": "TOOL", + "name": { "str": "inactive eyebot" }, + "description": "An inactive eyebot. Using this item involves turning it on and launching the UAV. If reprogrammed and rewired successfully, the eyebot will then keep watch for intruders.", + "weight": "40750 g", + "volume": "30 L", + "price": 10000, + "price_postapoc": 500, + "to_hit": -3, + "material": [ "steel" ], + "symbol": ";", + "color": "light_green", + "flags": [ "SINGLE_USE" ], + "melee_damage": { "bash": 8 } + }, + { + "id": "bot_riotbot", + "looks_like": "broken_riotbot", + "type": "TOOL", + "name": { "str": "inactive riot control bot" }, + "description": "An inactive riot control bot. Using this item involves placing it on the ground and turning it on. If reprogrammed and rewired successfully, the robot will bring order and peace to the horde.", + "weight": "81500 g", + "volume": "62500 ml", + "price": 35000, + "price_postapoc": 1500, + "to_hit": -3, + "material": [ "steel" ], + "symbol": ";", + "color": "light_green", + "flags": [ "SINGLE_USE" ], + "melee_damage": { "bash": 8 } + }, + { + "type": "GENERIC", + "id": "broken_eyebot", + "symbol": ",", + "color": "green", + "name": { "str": "broken eyebot" }, + "category": "other", + "description": "A broken eyebot. Much less threatening now that it won't be calling for backup. Could be gutted for parts.", + "price": 1000, + "price_postapoc": 10, + "material": [ "steel", "plastic" ], + "weight": "31520 g", + "volume": "15 L", + "to_hit": -3, + "flags": [ "TRADER_AVOID", "NO_REPAIR" ], + "melee_damage": { "bash": 6, "cut": 6 } + }, + { + "type": "GENERIC", + "id": "broken_copbot", + "symbol": ",", + "color": "green", + "name": { "str": "broken police bot" }, + "category": "other", + "description": "A broken police bot. Much less threatening now that it's quiet and still. Could be gutted for parts.", + "price": 30000, + "price_postapoc": 10, + "material": [ "steel", "plastic" ], + "weight": "140000 g", + "volume": "62500 ml", + "to_hit": -3, + "flags": [ "TRADER_AVOID", "NO_REPAIR" ], + "melee_damage": { "bash": 6, "cut": 6 } + }, + { + "type": "GENERIC", + "id": "broken_riotbot", + "symbol": ",", + "color": "green", + "name": { "str": "broken riot control bot" }, + "category": "other", + "description": "A broken riot control bot. Much less threatening now that it's out of gas. Could be gutted for parts.", + "price": 30000, + "price_postapoc": 10, + "material": [ "steel", "plastic" ], + "weight": "140000 g", + "volume": "62500 ml", + "to_hit": -3, + "flags": [ "TRADER_AVOID", "NO_REPAIR" ], + "melee_damage": { "bash": 6, "cut": 6 } } ] diff --git a/data/json/recipes/nested.json b/data/json/recipes/nested.json index 004740dcd2339..342dec35efcd6 100644 --- a/data/json/recipes/nested.json +++ b/data/json/recipes/nested.json @@ -5130,7 +5130,6 @@ "bot_c4_hack", "bot_hazmatbot", "bot_EMP_hack", - "bot_eyebot", "bot_flashbang_hack", "bot_grenade_hack", "bot_grocerybot", @@ -5144,8 +5143,6 @@ "bot_molebot", "bot_mininuke_hack", "bot_nursebot", - "bot_copbot", - "bot_riotbot", "bot_skitterbot", "bot_secubot", "bot_tazer_hack", diff --git a/data/json/recipes/other/bots.json b/data/json/recipes/other/bots.json index 88c11e82ca3f9..61f28c00b39b5 100644 --- a/data/json/recipes/other/bots.json +++ b/data/json/recipes/other/bots.json @@ -464,75 +464,6 @@ [ [ "steel_chunk", 6 ] ] ] }, - { - "type": "recipe", - "activity_level": "BRISK_EXERCISE", - "result": "bot_copbot", - "category": "CC_*", - "subcategory": "CSC_*_NESTED", - "skill_used": "electronics", - "skills_required": [ [ "mechanics", 5 ], [ "computer", 6 ] ], - "reversible": true, - "decomp_learn": 8, - "book_learn": [ [ "schematics_copbot", 7 ] ], - "difficulty": 6, - "time": "130 m", - "//": "200cm weld", - "using": [ [ "soldering_standard", 20 ], [ "welding_standard", 200 ] ], - "qualities": [ - { "id": "SCREW", "level": 1 }, - { "id": "SCREW_FINE", "level": 1 }, - { "id": "WRENCH", "level": 2 }, - { "id": "WRENCH_FINE", "level": 1 } - ], - "components": [ - [ [ "ai_module", 1 ] ], - [ [ "sensor_module", 1 ] ], - [ [ "memory_module", 1 ] ], - [ [ "pathfinding_module", 1 ] ], - [ [ "identification_module", 1 ] ], - [ [ "omni_wheel", 1 ] ], - [ [ "copbot_chassis", 1 ] ], - [ [ "android_arms", 1 ] ], - [ [ "power_supply", 4 ] ], - [ [ "solar_cell", 2 ] ], - [ [ "tazer", 1 ] ] - ] - }, - { - "type": "recipe", - "activity_level": "BRISK_EXERCISE", - "result": "bot_eyebot", - "category": "CC_*", - "subcategory": "CSC_*_NESTED", - "skill_used": "electronics", - "skills_required": [ [ "mechanics", 4 ], [ "computer", 4 ] ], - "reversible": true, - "decomp_learn": 5, - "book_learn": [ [ "schematics_eyebot", 7 ] ], - "difficulty": 4, - "time": "30 m", - "//": "50cm weld", - "using": [ [ "soldering_standard", 3 ], [ "welding_standard", 50 ] ], - "qualities": [ - { "id": "SCREW", "level": 1 }, - { "id": "SCREW_FINE", "level": 1 }, - { "id": "WRENCH", "level": 2 }, - { "id": "WRENCH_FINE", "level": 1 } - ], - "components": [ - [ [ "ai_module", 1 ] ], - [ [ "identification_module", 1 ] ], - [ [ "pathfinding_module", 1 ] ], - [ [ "sensor_module", 1 ] ], - [ [ "small_storage_battery", 1 ] ], - [ [ "RAM", 1 ] ], - [ [ "processor", 1 ] ], - [ [ "scrap", 1 ] ], - [ [ "quad_rotors", 1 ] ], - [ [ "lens", 1 ] ] - ] - }, { "type": "recipe", "activity_level": "BRISK_EXERCISE", @@ -564,41 +495,6 @@ [ [ "steel_chunk", 20 ] ] ] }, - { - "type": "recipe", - "activity_level": "BRISK_EXERCISE", - "result": "bot_riotbot", - "category": "CC_*", - "subcategory": "CSC_*_NESTED", - "skill_used": "electronics", - "skills_required": [ [ "mechanics", 7 ], [ "computer", 6 ] ], - "reversible": true, - "decomp_learn": 8, - "book_learn": [ [ "schematics_riotbot", 7 ] ], - "difficulty": 6, - "time": "140 m", - "//": "200cm weld", - "using": [ [ "soldering_standard", 20 ], [ "welding_standard", 200 ] ], - "qualities": [ - { "id": "SCREW", "level": 1 }, - { "id": "SCREW_FINE", "level": 1 }, - { "id": "WRENCH", "level": 2 }, - { "id": "WRENCH_FINE", "level": 1 } - ], - "components": [ - [ [ "ai_module", 1 ] ], - [ [ "sensor_module", 1 ] ], - [ [ "memory_module", 1 ] ], - [ [ "pathfinding_module", 1 ] ], - [ [ "identification_module", 1 ] ], - [ [ "omni_wheel", 1 ] ], - [ [ "copbot_chassis", 1 ] ], - [ [ "android_arms", 1 ] ], - [ [ "power_supply", 4 ] ], - [ [ "solar_cell", 2 ] ], - [ [ "canister_empty", 1 ] ] - ] - }, { "type": "recipe", "activity_level": "BRISK_EXERCISE", diff --git a/data/json/recipes/other/parts.json b/data/json/recipes/other/parts.json index dd66f5de7f557..333e721188414 100644 --- a/data/json/recipes/other/parts.json +++ b/data/json/recipes/other/parts.json @@ -629,11 +629,7 @@ "autolearn": true, "using": [ [ "soldering_standard", 10 ] ], "qualities": [ { "id": "SCREW", "level": 1 }, { "id": "SAW_M", "level": 1 } ], - "components": [ - [ [ "camera", 2 ], [ "camera_pro", 2 ], [ "broken_eyebot", 2 ], [ "smart_phone", 2 ] ], - [ [ "power_supply", 1 ] ], - [ [ "cable", 5 ] ] - ] + "components": [ [ [ "camera", 2 ], [ "camera_pro", 2 ], [ "smart_phone", 2 ] ], [ [ "power_supply", 1 ] ], [ [ "cable", 5 ] ] ] }, { "type": "recipe", diff --git a/data/json/recipes/recipe_deconstruction.json b/data/json/recipes/recipe_deconstruction.json index 434d1437a9fc6..48e5949e4f41a 100644 --- a/data/json/recipes/recipe_deconstruction.json +++ b/data/json/recipes/recipe_deconstruction.json @@ -772,30 +772,6 @@ [ [ "identification_module", 1 ] ] ] }, - { - "result": "broken_copbot", - "type": "uncraft", - "activity_level": "MODERATE_EXERCISE", - "skill_used": "electronics", - "difficulty": 6, - "time": "2 h", - "//": "These robot corpses should really be moved into the butcher mechanic", - "using": [ [ "soldering_standard", 20 ], [ "welding_standard", 5 ] ], - "qualities": [ { "id": "SCREW", "level": 1 }, { "id": "SAW_M", "level": 1 } ], - "components": [ - [ [ "ai_module", 1 ] ], - [ [ "sensor_module", 1 ] ], - [ [ "memory_module", 1 ] ], - [ [ "pathfinding_module", 1 ] ], - [ [ "identification_module", 1 ] ], - [ [ "omni_wheel", 1 ] ], - [ [ "copbot_chassis", 1 ] ], - [ [ "android_arms", 1 ] ], - [ [ "power_supply", 4 ] ], - [ [ "solar_cell", 2 ] ], - [ [ "tazer", 1 ] ] - ] - }, { "result": "broken_turret_speaker", "type": "uncraft", @@ -1002,29 +978,6 @@ [ [ "turret_chassis", 1 ] ] ] }, - { - "result": "broken_eyebot", - "type": "uncraft", - "activity_level": "LIGHT_EXERCISE", - "skill_used": "electronics", - "difficulty": 2, - "time": "30 m", - "using": [ [ "soldering_standard", 3 ] ], - "qualities": [ { "id": "SCREW", "level": 1 } ], - "components": [ - [ [ "ai_module", 1 ] ], - [ [ "identification_module", 1 ] ], - [ [ "pathfinding_module", 1 ] ], - [ [ "sensor_module", 1 ] ], - [ [ "small_storage_battery", 1 ] ], - [ [ "RAM", 1 ] ], - [ [ "processor", 1 ] ], - [ [ "scrap", 1 ] ], - [ [ "e_scrap", 1 ] ], - [ [ "quad_rotors", 1 ] ], - [ [ "lens", 1 ] ] - ] - }, { "result": "broken_robofac_camspy", "type": "uncraft", @@ -1168,29 +1121,6 @@ [ [ "steel_chunk", 20 ] ] ] }, - { - "result": "broken_riotbot", - "type": "uncraft", - "activity_level": "MODERATE_EXERCISE", - "skill_used": "electronics", - "difficulty": 6, - "time": "2 h", - "using": [ [ "soldering_standard", 20 ], [ "welding_standard", 5 ] ], - "qualities": [ { "id": "SCREW", "level": 1 }, { "id": "SAW_M", "level": 1 } ], - "components": [ - [ [ "ai_module", 1 ] ], - [ [ "sensor_module", 1 ] ], - [ [ "memory_module", 1 ] ], - [ [ "pathfinding_module", 1 ] ], - [ [ "identification_module", 1 ] ], - [ [ "omni_wheel", 1 ] ], - [ [ "copbot_chassis", 1 ] ], - [ [ "android_arms", 1 ] ], - [ [ "power_supply", 4 ] ], - [ [ "solar_cell", 2 ] ], - [ [ "canister_empty", 1 ] ] - ] - }, { "result": "broken_secubot", "type": "uncraft", diff --git a/data/json/snippets/fliers.json b/data/json/snippets/fliers.json index 4ead0789b3c42..5d041a108a952 100644 --- a/data/json/snippets/fliers.json +++ b/data/json/snippets/fliers.json @@ -11,10 +11,6 @@ "id": "flier_2", "text": "This is an advertisement for an personal injury lawyer. \"Had an accident while working? Botched surgery gone wrong? Relatives missing after the government investigated them? There's only one solution to all of this; SUE!\"" }, - { - "id": "flier_3", - "text": "This is an advertisement promoting facial recognition quadcopters. It shows a formation of the so-called 'eyebots' flying outward from an American flag in an explosion of stars and stripes. Beneath, it reads \"Don't worry, we'll watch your back.\"" - }, { "id": "flier_4", "text": "This is a somewhat weather-worn advertisement for the 'new' FEMA evacuation shelters. Beneath the colorful photo it reads, \"Familiarize yourself with your nearest emergency shelter. It could save your life.\"" diff --git a/data/json/snippets/newspapers.json b/data/json/snippets/newspapers.json index 4aca73207e440..69800bd3469ad 100644 --- a/data/json/snippets/newspapers.json +++ b/data/json/snippets/newspapers.json @@ -11,10 +11,6 @@ "id": "many_years_old_news_2", "text": "CELEBRATED PHYSICIST GOES MISSING. Dr. Amy Takatoshi, a celebrated quantum physicist at MIT dubbed by some as \"the next Hawking\" has gone missing shortly before a press conference that was expected to be the announcement of her newest research results, rumored to be in the field of teleportation." }, - { - "id": "many_years_old_news_3", - "text": "FACIAL RECOGNITION ROLLS OUT. Commissioner McConnaugh of the NYPD announced at a press conference today that a new wave of facial recognition drones would be employed by police services. \"These new guys, we're calling them 'eyebots', they can move where stationary cameras can't, and can identify known troublemakers. They lead to a much lower rate of false alarms, and a much higher rate of successful convictions without an increase in wrongful arrest. I know there have been concerns, but overall these little guys make us all safer, not just from criminals but from human error as well.\"" - }, { "id": "many_years_old_news_4", "text": "EDITORIAL: THE UN SHOULD PUT ON ITS BIG-BOY PANTS. So, driven by decreasing regulation of radioactive materials in the US and China, the UN is pushing hard again for nuclear disarmament. What a tired old litany this has become. With deregulation, we've been able to slate three new green nuclear reactors in the Eastern US alone, bringing greenhouse-gas free power to millions of people. Whatever happened to the UN's focus on global warming? This is a classic situation of the world painting the USA as villains no matter what we do." @@ -103,18 +99,6 @@ "id": "years_old_news_3", "text": "DRIVING ON A WING AND A PRAYER: A New England man has proven it is possible to create a new car from scrap parts using almost nothing but duct tape. When asked why he had done it, his answer was \"Well, I didn't have a welder.\"" }, - { - "id": "years_old_news_4", - "text": "EYEBOTS SEE WIDESPREAD USE. A recent survey of police departments in the Eastern US found that over 85% of police stations, even in small towns, now contain at least one flight of facial recognition drones. \"They're awesome,\" Sheriff Mark Louis told a reporter from his office in Pontstown, Vermont. \"We've got a flight of four eyebots on a solar dock on the roof. They take hardly any maintenance, they respond to any suspicious business downtown, and they don't hurt anyone. If it's just a minor scuffle they grab some photos and help keep things from escalating. If it's a bigger deal, or if it's someone they know is trouble, they call us in right away. They save us a lot of false alarms: if we get an eyebot call-in we know it's a big deal.\"" - }, - { - "id": "years_old_news_8", - "text": "EDITORIAL: EYEBOTS ARE GOOD FOR US. The controversy around increasing eyebot use by police forces has everyone worried, and I was on board for a long time. Facial recognition databases under government control are something we should be worried about! Then, my daughter was accosted on her way home from dance class. Long before any police officer could have arrived, an eyebot had snagged video of her attackers and reported them to Central. That, alone, probably saved her life: just knowing they'd been tagged sent the criminals packing before any real damage was done, and the information allowed us to press charges on a crime that would have gone unreported before. All safety must come at a cost, and I'll gladly pay my privacy if it's the cost to keep my family safe." - }, - { - "id": "years_old_news_9", - "text": "EDITORIAL: EYEBOTS REPRESENT A CONCERNING TREND. There it is, as it always is: the endless buzz of eyebots cruising the streets, hunting for wrongdoing. I've written many an article on these things, and read many more. I've spoken to experts. When we get to the bottom of it, there's a key disturbing truth to these ubiquitous robots… no one knows how they work. The artificial intelligence used in the little drones is more than just facial recognition, it's also threat processing and decision making, and at its very heart is a new-wave deep learning AI that is, essentially, a wild card. Without knowing how these things learn and make decisions, I don't think we can trust them in public, let alone handling our safety. That's not even considering the dangers of letting them have access to our faces and criminal records." - }, { "id": "years_old_news_10", "text": "TECHWORLD NEWS: Toy company at the origin of the successful talking doll rebrands and becomes Uncanny. A spokesperson from the newly formed Uncanny told the press, \"We think we can do more than just entertain. We have new plans, big plans, plans that will shape the very fabric of reality!\" Unconfirmed rumors suggest that Uncanny has already received large orders from the government." diff --git a/data/json/snippets/survivor_notes.json b/data/json/snippets/survivor_notes.json index 0375088c3d076..f19b377c473df 100644 --- a/data/json/snippets/survivor_notes.json +++ b/data/json/snippets/survivor_notes.json @@ -294,7 +294,6 @@ "id": "note_119", "text": "\"There's nothing wrong with eating people if you HAVE to. I mean, I only did it because I didn't want to waste my potato chips!\"" }, - { "id": "note_120", "text": "\"all these fuckin eyebots really take the piss out of kops\"" }, { "id": "note_121", "text": "\"CHINA DID THIS\"" }, { "id": "note_122", "text": "\"RUSSIA DID THIS\"" }, { diff --git a/data/json/speech.json b/data/json/speech.json index 883273cc0a701..af87645a6ff23 100644 --- a/data/json/speech.json +++ b/data/json/speech.json @@ -1981,163 +1981,127 @@ }, { "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], + "speaker": [ "mon_mi_go", "mon_mi_go_slaver" ], "sound": "\"Stop where you are!\"", "volume": 15 }, { "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], + "speaker": [ "mon_mi_go", "mon_mi_go_slaver" ], "sound": "\"You are under arrest!\"", "volume": 15 }, { "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], - "sound": "\"Criminal activity detected!\"", - "volume": 10 - }, - { - "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], - "sound": "\"Criminal activity registered!\"", - "volume": 15 - }, - { - "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], - "sound": "\"Violation of law detected!\"", - "volume": 15 - }, - { - "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], + "speaker": [ "mon_mi_go", "mon_mi_go_slaver" ], "sound": "\"Suspect on the move!\"", "volume": 15 }, { "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], + "speaker": [ "mon_mi_go", "mon_mi_go_slaver" ], "sound": "\"Suspect in sight!\"", "volume": 15 }, { "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], + "speaker": [ "mon_mi_go", "mon_mi_go_slaver" ], "sound": "\"You are being detained!\"", "volume": 15 }, { "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], + "speaker": [ "mon_mi_go", "mon_mi_go_slaver" ], "sound": "\"You have the right to remain silent!\"", "volume": 15 }, { "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], + "speaker": [ "mon_mi_go", "mon_mi_go_slaver" ], "sound": "\"Requesting assistance!\"", "volume": 15 }, { "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], + "speaker": [ "mon_mi_go", "mon_mi_go_slaver" ], "sound": "\"Requesting supervisor!\"", "volume": 15 }, { "type": "speech", - "speaker": "mon_eyebot", - "sound": "\"Requesting human officer!\"", - "volume": 15 - }, - { - "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], + "speaker": [ "mon_mi_go", "mon_mi_go_slaver" ], "sound": "\"No officer on scene. Requesting backup!\"", "volume": 15 }, { "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], + "speaker": [ "mon_mi_go", "mon_mi_go_slaver" ], "sound": "\"Let me see your hands!\"", "volume": 15 }, { "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], + "speaker": [ "mon_mi_go", "mon_mi_go_slaver" ], "sound": "\"Stop resisting!\"", "volume": 15 }, { "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], - "sound": "\"Code 10-66. Copy 10-4. Possible 10-55.\"", - "volume": 10 - }, - { - "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], - "sound": "\"Probable 10-70.\"", - "volume": 15 - }, - { - "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], + "speaker": [ "mon_mi_go", "mon_mi_go_slaver" ], "sound": "\"Get on the ground! Now!\"", "volume": 15 }, { "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], + "speaker": [ "mon_mi_go", "mon_mi_go_slaver" ], "sound": "\"Suspected felony!\"", "volume": 15 }, { "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], + "speaker": [ "mon_mi_go", "mon_mi_go_slaver" ], "sound": "\"Suspected misdemeanor!\"", "volume": 15 }, { "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], + "speaker": [ "mon_mi_go", "mon_mi_go_slaver" ], "sound": "\"Do not reach for your pockets!\"", "volume": 15 }, { "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], + "speaker": [ "mon_mi_go", "mon_mi_go_slaver" ], "sound": "\"Keep your hands up!\"", "volume": 15 }, { "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], + "speaker": [ "mon_mi_go", "mon_mi_go_slaver" ], "sound": "\"Get on your knees!\"", "volume": 15 }, { "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], + "speaker": [ "mon_mi_go", "mon_mi_go_slaver" ], "sound": "\"Hands in the air!\"", "volume": 15 }, { "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], + "speaker": [ "mon_mi_go", "mon_mi_go_slaver" ], "sound": "\"Wait for law enforcement officer!\"", "volume": 15 }, { "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], + "speaker": [ "mon_mi_go", "mon_mi_go_slaver" ], "sound": "\"Remain where you are!\"", "volume": 15 }, { "type": "speech", - "speaker": [ "mon_eyebot", "mon_mi_go", "mon_mi_go_slaver" ], + "speaker": [ "mon_mi_go", "mon_mi_go_slaver" ], "sound": "\"Police inbound. Stay where you are!\"", "volume": 15 }, diff --git a/data/mods/Aftershock/itemgroups/loot_corpse_groups.json b/data/mods/Aftershock/itemgroups/loot_corpse_groups.json index d02f52a32610a..0011c84ad73b6 100644 --- a/data/mods/Aftershock/itemgroups/loot_corpse_groups.json +++ b/data/mods/Aftershock/itemgroups/loot_corpse_groups.json @@ -29,5 +29,18 @@ { "group": "afs_any_ballistic_s_gun", "prob": 10 }, { "group": "afs_any_laser_s_gun", "prob": 10 } ] + }, + { + "type": "item_group", + "id": "copbot", + "subtype": "distribution", + "entries": [ + { "item": "baton", "prob": 8 }, + { "item": "tazer", "prob": 3 }, + { "item": "ceramic_armor", "prob": 15 }, + { "item": "tonfa", "prob": 10 }, + { "item": "shocktonfa_off", "prob": 5 }, + { "item": "alloy_plate", "prob": 10 } + ] } ] diff --git a/data/mods/Aftershock/items/books.json b/data/mods/Aftershock/items/books.json index 33cbad244bfb3..5d094c88e813d 100644 --- a/data/mods/Aftershock/items/books.json +++ b/data/mods/Aftershock/items/books.json @@ -126,6 +126,27 @@ "description": "Bearing the logo of Honda, those are assembly plans, design specs, and technical drawings for the tripod. Most of this is useless to you, but you could use the assembly plans to re-assemble the robot from salvaged parts.", "copy-from": "schematics_generic" }, + { + "id": "schematics_eyebot", + "type": "BOOK", + "name": { "str_sp": "eyebot schematics" }, + "description": "Assembly plans, design specs, and technical drawings for the eyebot. Most of this is useless to you, but you could use the assembly plans to re-assemble the robot from salvaged parts.", + "copy-from": "schematics_generic" + }, + { + "id": "schematics_copbot", + "type": "BOOK", + "name": { "str_sp": "police bot schematics" }, + "description": "Assembly plans, design specs, and technical drawings for the police bot. Most of this is useless to you, but you could use the assembly plans to re-assemble the robot from salvaged parts.", + "copy-from": "schematics_generic" + }, + { + "id": "schematics_riotbot", + "type": "BOOK", + "name": { "str_sp": "riot control bot schematics" }, + "description": "Assembly plans, design specs, and technical drawings for the riot control bot. Most of this is useless to you, but you could use the assembly plans to re-assemble the robot from salvaged parts.", + "copy-from": "schematics_generic" + }, { "id": "afs_landfall_kit_2_instructions", "type": "BOOK", diff --git a/data/mods/Aftershock/items/corpses.json b/data/mods/Aftershock/items/corpses.json index a63f163e41d96..46741d6bb0cc4 100644 --- a/data/mods/Aftershock/items/corpses.json +++ b/data/mods/Aftershock/items/corpses.json @@ -288,5 +288,56 @@ "to_hit": -3, "flags": [ "TRADER_AVOID", "LEAK_DAM", "RADIOACTIVE" ], "melee_damage": { "bash": 6, "cut": 6 } + }, + { + "type": "GENERIC", + "id": "broken_eyebot", + "symbol": ",", + "color": "green", + "name": { "str": "broken eyebot" }, + "category": "other", + "description": "A broken eyebot. Much less threatening now that it won't be calling for backup. Could be gutted for parts.", + "price": 1000, + "price_postapoc": 10, + "material": [ "steel", "plastic" ], + "weight": "31520 g", + "volume": "15 L", + "to_hit": -3, + "flags": [ "TRADER_AVOID", "NO_REPAIR" ], + "melee_damage": { "bash": 6, "cut": 6 } + }, + { + "type": "GENERIC", + "id": "broken_copbot", + "symbol": ",", + "color": "green", + "name": { "str": "broken police bot" }, + "category": "other", + "description": "A broken police bot. Much less threatening now that it's quiet and still. Could be gutted for parts.", + "price": 30000, + "price_postapoc": 10, + "material": [ "steel", "plastic" ], + "weight": "140000 g", + "volume": "62500 ml", + "to_hit": -3, + "flags": [ "TRADER_AVOID", "NO_REPAIR" ], + "melee_damage": { "bash": 6, "cut": 6 } + }, + { + "type": "GENERIC", + "id": "broken_riotbot", + "symbol": ",", + "color": "green", + "name": { "str": "broken riot control bot" }, + "category": "other", + "description": "A broken riot control bot. Much less threatening now that it's out of gas. Could be gutted for parts.", + "price": 30000, + "price_postapoc": 10, + "material": [ "steel", "plastic" ], + "weight": "140000 g", + "volume": "62500 ml", + "to_hit": -3, + "flags": [ "TRADER_AVOID", "NO_REPAIR" ], + "melee_damage": { "bash": 6, "cut": 6 } } ] diff --git a/data/mods/Aftershock/items/inactiverobot.json b/data/mods/Aftershock/items/inactiverobot.json index 36d1c0168d469..5d16a9bfdc0c5 100644 --- a/data/mods/Aftershock/items/inactiverobot.json +++ b/data/mods/Aftershock/items/inactiverobot.json @@ -506,5 +506,86 @@ }, "flags": [ "SINGLE_USE" ], "melee_damage": { "bash": 8 } + }, + { + "id": "bot_eyebot", + "looks_like": "broken_eyebot", + "type": "TOOL", + "name": { "str": "inactive eyebot" }, + "description": "An inactive eyebot. Using this item involves turning it on and launching the UAV. If reprogrammed and rewired successfully, the eyebot will then keep watch for intruders.", + "weight": "40750 g", + "volume": "30 L", + "price": 10000, + "price_postapoc": 500, + "to_hit": -3, + "material": [ "steel" ], + "symbol": ";", + "color": "light_green", + "use_action": { + "type": "place_monster", + "monster_id": "mon_eyebot", + "friendly_msg": "The eyebot hums and takes to the sky.", + "hostile_msg": "The eyebot beeps disapprovingly and focuses its camera on your face. Say cheese!", + "//": "Like most surveillance tech these likely have poor security. Secure the wifi!", + "difficulty": 1, + "moves": 100, + "skills": [ "electronics", "computer" ] + }, + "flags": [ "SINGLE_USE" ], + "melee_damage": { "bash": 8 } + }, + { + "id": "bot_copbot", + "looks_like": "broken_copbot", + "type": "TOOL", + "name": { "str": "inactive police bot" }, + "description": "An inactive police robot. Using this item involves placing it on the ground and turning it on. If reprogrammed and rewired successfully, the police bot will then identify you as law enforcement, roam around or follow you, and attempt to detain lawbreakers.", + "weight": "81500 g", + "volume": "62500 ml", + "price": 100000, + "price_postapoc": 500, + "to_hit": -3, + "material": [ "steel" ], + "symbol": ";", + "color": "light_green", + "use_action": { + "type": "place_monster", + "monster_id": "mon_copbot", + "friendly_msg": "The police bot rolls into action, ready to pursue criminals.", + "hostile_msg": "A siren howls and lights flash as the police bot prepares to arrest you!", + "//": "Wheeled and must be easy-to-use for police deployment", + "difficulty": 3, + "moves": 100, + "skills": [ "electronics", "computer" ] + }, + "flags": [ "SINGLE_USE" ], + "melee_damage": { "bash": 8 } + }, + { + "id": "bot_riotbot", + "looks_like": "broken_riotbot", + "type": "TOOL", + "name": { "str": "inactive riot control bot" }, + "description": "An inactive riot control bot. Using this item involves placing it on the ground and turning it on. If reprogrammed and rewired successfully, the robot will bring order and peace to the horde.", + "weight": "81500 g", + "volume": "62500 ml", + "price": 35000, + "price_postapoc": 1500, + "to_hit": -3, + "material": [ "steel" ], + "symbol": ";", + "color": "light_green", + "use_action": { + "type": "place_monster", + "monster_id": "mon_riotbot", + "friendly_msg": "The riot control bot rolls into action.", + "hostile_msg": "The riot control bot gasses you and approaches with a pair of handcuffs!", + "//": "Pretty easy but you want to be careful with the gas", + "difficulty": 4, + "moves": 150, + "skills": [ "electronics", "computer" ] + }, + "flags": [ "SINGLE_USE" ], + "melee_damage": { "bash": 8 } } ] diff --git a/data/mods/Aftershock/mobs/robot_groups.json b/data/mods/Aftershock/mobs/robot_groups.json index 5e73239cdee9d..69b177412320d 100644 --- a/data/mods/Aftershock/mobs/robot_groups.json +++ b/data/mods/Aftershock/mobs/robot_groups.json @@ -91,11 +91,6 @@ { "monster": "mon_utilibot_const", "weight": 10, "cost_multiplier": 0 } ] }, - { - "type": "monstergroup", - "name": "GROUP_ROBOT_EYEBOT", - "monsters": [ { "monster": "mon_eyebot", "weight": 100, "cost_multiplier": 0 } ] - }, { "name": "GROUP_MANSION", "type": "monstergroup", diff --git a/data/mods/Aftershock/mobs/robots.json b/data/mods/Aftershock/mobs/robots.json index d5fea47d649d1..91bff06f189a5 100644 --- a/data/mods/Aftershock/mobs/robots.json +++ b/data/mods/Aftershock/mobs/robots.json @@ -680,5 +680,110 @@ "targeting_volume": 10 } ] + }, + { + "id": "mon_eyebot", + "type": "MONSTER", + "name": { "str": "eyebot" }, + "description": "A quadcopter drone largely comprised of a high-resolution camera lens and a speaker, this robot hovers above the ground, documenting the carnage and mayhem around it. While it is no longer able to report to a central authority, it's likely that some of its automated alert systems are still functional, given that the thing seems to have an operational charging station somewhere.", + "default_faction": "cop_bot", + "species": [ "ROBOT" ], + "diff": 2, + "volume": "30000 ml", + "weight": "40750 g", + "hp": 20, + "speed": 120, + "material": [ "steel" ], + "symbol": "e", + "color": "light_gray", + "morale": 100, + "melee_damage": [ { "damage_type": "cut", "amount": 0 } ], + "dodge": 3, + "revert_to_itype": "bot_eyebot", + "special_attacks": [ [ "PHOTOGRAPH", 30 ] ], + "death_drops": { "groups": [ [ "robots", 4 ], [ "eyebot", 1 ] ] }, + "death_function": { "corpse_type": "BROKEN" }, + "flags": [ "SEES", "FLIES", "ELECTRONIC", "COLDPROOF", "NO_BREATHE", "NOHEAD", "PRIORITIZE_TARGETS", "STUN_IMMUNE" ], + "armor": { "bash": 8, "cut": 10, "bullet": 8 } + }, + { + "id": "mon_copbot", + "type": "MONSTER", + "name": { "str": "police bot" }, + "description": "One of the many models of armored law enforcement robots employed shortly before the collapse of civilization. Solar powered like many other robots, it maintains its programmed pursuit of law and order, propelled on a trio of omni wheels.", + "default_faction": "cop_bot", + "species": [ "ROBOT" ], + "diff": 10, + "volume": "62500 ml", + "weight": "81500 g", + "hp": 80, + "speed": 100, + "material": [ "steel" ], + "symbol": "R", + "color": "light_blue", + "aggression": 100, + "morale": 100, + "melee_skill": 4, + "melee_dice": 3, + "melee_dice_sides": 2, + "melee_damage": [ { "damage_type": "cut", "amount": 0 } ], + "dodge": 8, + "vision_day": 50, + "path_settings": { "max_dist": 5 }, + "revert_to_itype": "bot_copbot", + "special_attacks": [ [ "COPBOT", 3 ] ], + "death_drops": { "groups": [ [ "robots", 4 ], [ "copbot", 1 ] ] }, + "death_function": { "corpse_type": "BROKEN" }, + "flags": [ + "SEES", + "HEARS", + "BASHES", + "ELECTRONIC", + "COLDPROOF", + "NO_BREATHE", + "PRIORITIZE_TARGETS", + "PATH_AVOID_DANGER_1", + "STUN_IMMUNE" + ], + "armor": { "bash": 12, "cut": 8, "bullet": 6 } + }, + { + "id": "mon_riotbot", + "type": "MONSTER", + "name": { "str": "riot control bot" }, + "description": "A nonviolent riot-control bot, designed to suppress riots and make mass arrests of those participating. Though its relaxation gas is by far its best-known weapon, it carries a blinding spotlight and a low-powered stungun for self-defense--in addition to a supply of electronic handcuffs.", + "default_faction": "cop_bot", + "species": [ "ROBOT" ], + "diff": 10, + "volume": "62500 ml", + "weight": "81500 g", + "hp": 80, + "speed": 100, + "material": [ "steel" ], + "symbol": "R", + "color": "light_blue", + "aggression": 100, + "morale": 100, + "melee_damage": [ { "damage_type": "cut", "amount": 0 } ], + "dodge": 8, + "vision_day": 50, + "path_settings": { "max_dist": 5 }, + "revert_to_itype": "bot_riotbot", + "special_attacks": [ [ "RIOTBOT", 1 ] ], + "special_when_hit": [ "ZAPBACK", 100 ], + "death_drops": { "groups": [ [ "robots", 4 ], [ "copbot", 1 ] ] }, + "death_function": { "corpse_type": "BROKEN" }, + "flags": [ + "SEES", + "HEARS", + "GOODHEARING", + "ELECTRONIC", + "COLDPROOF", + "NO_BREATHE", + "PRIORITIZE_TARGETS", + "PATH_AVOID_DANGER_1", + "STUN_IMMUNE" + ], + "armor": { "bash": 12, "cut": 8, "bullet": 6 } } ] diff --git a/data/mods/Aftershock/recipes/deconstruction/robot.json b/data/mods/Aftershock/recipes/deconstruction/robot.json index f9b3074c005b7..92ee60796f485 100644 --- a/data/mods/Aftershock/recipes/deconstruction/robot.json +++ b/data/mods/Aftershock/recipes/deconstruction/robot.json @@ -20,5 +20,75 @@ [ [ "robot_controls", 1 ] ], [ [ "turret_chassis", 1 ] ] ] + }, + { + "result": "broken_eyebot", + "type": "uncraft", + "activity_level": "LIGHT_EXERCISE", + "skill_used": "electronics", + "difficulty": 2, + "time": "30 m", + "using": [ [ "soldering_standard", 3 ] ], + "qualities": [ { "id": "SCREW", "level": 1 } ], + "components": [ + [ [ "ai_module", 1 ] ], + [ [ "identification_module", 1 ] ], + [ [ "pathfinding_module", 1 ] ], + [ [ "sensor_module", 1 ] ], + [ [ "small_storage_battery", 1 ] ], + [ [ "RAM", 1 ] ], + [ [ "processor", 1 ] ], + [ [ "scrap", 1 ] ], + [ [ "e_scrap", 1 ] ], + [ [ "quad_rotors", 1 ] ], + [ [ "lens", 1 ] ] + ] + }, + { + "result": "broken_copbot", + "type": "uncraft", + "activity_level": "MODERATE_EXERCISE", + "skill_used": "electronics", + "difficulty": 6, + "time": "2 h", + "//": "These robot corpses should really be moved into the butcher mechanic", + "using": [ [ "soldering_standard", 20 ], [ "welding_standard", 5 ] ], + "qualities": [ { "id": "SCREW", "level": 1 }, { "id": "SAW_M", "level": 1 } ], + "components": [ + [ [ "ai_module", 1 ] ], + [ [ "sensor_module", 1 ] ], + [ [ "memory_module", 1 ] ], + [ [ "pathfinding_module", 1 ] ], + [ [ "identification_module", 1 ] ], + [ [ "omni_wheel", 1 ] ], + [ [ "copbot_chassis", 1 ] ], + [ [ "android_arms", 1 ] ], + [ [ "power_supply", 4 ] ], + [ [ "solar_cell", 2 ] ], + [ [ "tazer", 1 ] ] + ] + }, + { + "result": "broken_riotbot", + "type": "uncraft", + "activity_level": "MODERATE_EXERCISE", + "skill_used": "electronics", + "difficulty": 6, + "time": "2 h", + "using": [ [ "soldering_standard", 20 ], [ "welding_standard", 5 ] ], + "qualities": [ { "id": "SCREW", "level": 1 }, { "id": "SAW_M", "level": 1 } ], + "components": [ + [ [ "ai_module", 1 ] ], + [ [ "sensor_module", 1 ] ], + [ [ "memory_module", 1 ] ], + [ [ "pathfinding_module", 1 ] ], + [ [ "identification_module", 1 ] ], + [ [ "omni_wheel", 1 ] ], + [ [ "copbot_chassis", 1 ] ], + [ [ "android_arms", 1 ] ], + [ [ "power_supply", 4 ] ], + [ [ "solar_cell", 2 ] ], + [ [ "canister_empty", 1 ] ] + ] } ] diff --git a/data/mods/Aftershock/recipes/robot_recipes.json b/data/mods/Aftershock/recipes/robot_recipes.json index 0116c6a37346e..24215977160ef 100644 --- a/data/mods/Aftershock/recipes/robot_recipes.json +++ b/data/mods/Aftershock/recipes/robot_recipes.json @@ -78,5 +78,109 @@ [ [ "afs_material_1", 8 ] ], [ [ "robot_controls", 1 ] ] ] + }, + { + "type": "recipe", + "activity_level": "BRISK_EXERCISE", + "result": "bot_eyebot", + "category": "CC_ELECTRONIC", + "subcategory": "CSC_ELECTRONIC_OTHER", + "skill_used": "electronics", + "skills_required": [ [ "mechanics", 4 ], [ "computer", 4 ] ], + "reversible": true, + "decomp_learn": 5, + "book_learn": [ [ "schematics_eyebot", 7 ] ], + "difficulty": 4, + "time": "30 m", + "//": "50cm weld", + "using": [ [ "soldering_standard", 3 ], [ "welding_standard", 50 ] ], + "qualities": [ + { "id": "SCREW", "level": 1 }, + { "id": "SCREW_FINE", "level": 1 }, + { "id": "WRENCH", "level": 2 }, + { "id": "WRENCH_FINE", "level": 1 } + ], + "components": [ + [ [ "ai_module", 1 ] ], + [ [ "identification_module", 1 ] ], + [ [ "pathfinding_module", 1 ] ], + [ [ "sensor_module", 1 ] ], + [ [ "small_storage_battery", 1 ] ], + [ [ "RAM", 1 ] ], + [ [ "processor", 1 ] ], + [ [ "scrap", 1 ] ], + [ [ "quad_rotors", 1 ] ], + [ [ "lens", 1 ] ] + ] + }, + { + "type": "recipe", + "activity_level": "BRISK_EXERCISE", + "result": "bot_copbot", + "category": "CC_ELECTRONIC", + "subcategory": "CSC_ELECTRONIC_OTHER", + "skill_used": "electronics", + "skills_required": [ [ "mechanics", 5 ], [ "computer", 6 ] ], + "reversible": true, + "decomp_learn": 8, + "book_learn": [ [ "schematics_copbot", 7 ] ], + "difficulty": 6, + "time": "130 m", + "//": "200cm weld", + "using": [ [ "soldering_standard", 20 ], [ "welding_standard", 200 ] ], + "qualities": [ + { "id": "SCREW", "level": 1 }, + { "id": "SCREW_FINE", "level": 1 }, + { "id": "WRENCH", "level": 2 }, + { "id": "WRENCH_FINE", "level": 1 } + ], + "components": [ + [ [ "ai_module", 1 ] ], + [ [ "sensor_module", 1 ] ], + [ [ "memory_module", 1 ] ], + [ [ "pathfinding_module", 1 ] ], + [ [ "identification_module", 1 ] ], + [ [ "omni_wheel", 1 ] ], + [ [ "copbot_chassis", 1 ] ], + [ [ "android_arms", 1 ] ], + [ [ "power_supply", 4 ] ], + [ [ "solar_cell", 2 ] ], + [ [ "tazer", 1 ] ] + ] + }, + { + "type": "recipe", + "activity_level": "BRISK_EXERCISE", + "result": "bot_riotbot", + "category": "CC_ELECTRONIC", + "subcategory": "CSC_ELECTRONIC_OTHER", + "skill_used": "electronics", + "skills_required": [ [ "mechanics", 7 ], [ "computer", 6 ] ], + "reversible": true, + "decomp_learn": 8, + "book_learn": [ [ "schematics_riotbot", 7 ] ], + "difficulty": 6, + "time": "140 m", + "//": "200cm weld", + "using": [ [ "soldering_standard", 20 ], [ "welding_standard", 200 ] ], + "qualities": [ + { "id": "SCREW", "level": 1 }, + { "id": "SCREW_FINE", "level": 1 }, + { "id": "WRENCH", "level": 2 }, + { "id": "WRENCH_FINE", "level": 1 } + ], + "components": [ + [ [ "ai_module", 1 ] ], + [ [ "sensor_module", 1 ] ], + [ [ "memory_module", 1 ] ], + [ [ "pathfinding_module", 1 ] ], + [ [ "identification_module", 1 ] ], + [ [ "omni_wheel", 1 ] ], + [ [ "copbot_chassis", 1 ] ], + [ [ "android_arms", 1 ] ], + [ [ "power_supply", 4 ] ], + [ [ "solar_cell", 2 ] ], + [ [ "canister_empty", 1 ] ] + ] } ] diff --git a/src/activity_actor.cpp b/src/activity_actor.cpp index 05406cd92cc27..5a1bc012b60f9 100644 --- a/src/activity_actor.cpp +++ b/src/activity_actor.cpp @@ -783,10 +783,6 @@ void hacking_activity_actor::finish( player_activity &act, Character &who ) get_event_bus().send( who.getID() ); sounds::sound( who.pos(), 60, sounds::sound_t::music, _( "an alarm sound!" ), true, "environment", "alarm" ); - if( examp.z > 0 && !get_timed_events().queued( timed_event_type::WANTED ) ) { - get_timed_events().add( timed_event_type::WANTED, calendar::turn + 30_minutes, 0, - who.get_location() ); - } break; case hack_result::NOTHING: who.add_msg_if_player( _( "You fail the hack, but no alarms are triggered." ) ); @@ -2574,10 +2570,6 @@ void lockpick_activity_actor::finish( player_activity &act, Character &who ) if( !perfect && ter_type == t_door_locked_alarm && ( lock_roll + dice( 1, 30 ) ) > pick_roll ) { sounds::sound( who.pos(), 40, sounds::sound_t::alarm, _( "an alarm sound!" ), true, "environment", "alarm" ); - if( !get_timed_events().queued( timed_event_type::WANTED ) ) { - get_timed_events().add( timed_event_type::WANTED, calendar::turn + 30_minutes, 0, - who.get_location() ); - } } if( destroy && lockpick.has_value() ) { @@ -5360,10 +5352,6 @@ void prying_activity_actor::handle_prying( Character &who ) get_event_bus().send( who.getID() ); sounds::sound( who.pos(), 40, sounds::sound_t::alarm, _( "an alarm sound!" ), true, "environment", "alarm" ); - if( !get_timed_events().queued( timed_event_type::WANTED ) ) { - get_timed_events().add( timed_event_type::WANTED, calendar::turn + 30_minutes, 0, - who.get_location() ); - } } if( !data->message().empty() ) { diff --git a/src/computer_session.cpp b/src/computer_session.cpp index 8565289407593..07711548f7b38 100644 --- a/src/computer_session.cpp +++ b/src/computer_session.cpp @@ -1490,10 +1490,6 @@ void computer_session::failure_alarm() sounds::sound( player_character.pos(), 60, sounds::sound_t::alarm, _( "an alarm sound!" ), false, "environment", "alarm" ); - if( get_map().get_abs_sub().z() > 0 && !get_timed_events().queued( timed_event_type::WANTED ) ) { - get_timed_events().add( timed_event_type::WANTED, calendar::turn + 30_minutes, 0, - player_character.get_location() ); - } } void computer_session::failure_manhacks() diff --git a/src/magic_spell_effect.cpp b/src/magic_spell_effect.cpp index cd8c073d9d640..ea62cdbe51b71 100644 --- a/src/magic_spell_effect.cpp +++ b/src/magic_spell_effect.cpp @@ -1154,8 +1154,6 @@ void spell_effect::timed_event( const spell &sp, Creature &caster, const tripoin { const std::map timed_event_map{ { "help", timed_event_type::HELP }, - { "wanted", timed_event_type::WANTED }, - { "robot_attack", timed_event_type::ROBOT_ATTACK }, { "spawn_wyrms", timed_event_type::SPAWN_WYRMS }, { "amigara", timed_event_type::AMIGARA }, { "roots_die", timed_event_type::ROOTS_DIE }, diff --git a/src/map.cpp b/src/map.cpp index 34c4b28894c62..daccb671385be 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -3842,20 +3842,6 @@ void map::bash_ter_furn( const tripoint &p, bash_params ¶ms ) } } - // TODO: what if silent is true? - if( has_flag( ter_furn_flag::TFLAG_ALARMED, p ) && - !get_timed_events().queued( timed_event_type::WANTED ) ) { - sounds::sound( p, 40, sounds::sound_t::alarm, _( "an alarm go off!" ), - false, "environment", "alarm" ); - Character &player_character = get_player_character(); - // Blame nearby player - if( rl_dist( player_character.pos(), p ) <= 3 ) { - get_event_bus().send( player_character.getID() ); - get_timed_events().add( timed_event_type::WANTED, calendar::turn + 30_minutes, 0, - tripoint_abs_ms( getabs( p ) ) ); - } - } - if( bash == nullptr || ( bash->destroy_only && !params.destroy ) ) { // Nothing bashable here if( impassable( p ) ) { @@ -4326,12 +4312,9 @@ void map::shoot( const tripoint &p, projectile &proj, const bool hit_items ) } // bash_ter_furn already triggers the alarm // TODO: fix alarm event weirdness (not just here, also in bash, hack, etc) - if( !destroyed && data.has_flag( ter_furn_flag::TFLAG_ALARMED ) && - !get_timed_events().queued( timed_event_type::WANTED ) ) { + if( !destroyed && data.has_flag( ter_furn_flag::TFLAG_ALARMED ) ) { sounds::sound( p, 40, sounds::sound_t::alarm, _( "an alarm go off!" ), false, "environment", "alarm" ); - get_timed_events().add( timed_event_type::WANTED, calendar::turn + 30_minutes, 0, - tripoint_abs_ms( getabs( p ) ) ); } return true; } diff --git a/src/timed_event.cpp b/src/timed_event.cpp index 2113ebde11c07..d6c6f787cbb12 100644 --- a/src/timed_event.cpp +++ b/src/timed_event.cpp @@ -42,12 +42,9 @@ static const itype_id itype_petrified_eye( "petrified_eye" ); static const map_extra_id map_extra_mx_dsa_alrp( "mx_dsa_alrp" ); static const mtype_id mon_amigara_horror( "mon_amigara_horror" ); -static const mtype_id mon_copbot( "mon_copbot" ); static const mtype_id mon_dark_wyrm( "mon_dark_wyrm" ); static const mtype_id mon_dermatik( "mon_dermatik" ); static const mtype_id mon_dsa_alien_dispatch( "mon_dsa_alien_dispatch" ); -static const mtype_id mon_eyebot( "mon_eyebot" ); -static const mtype_id mon_riotbot( "mon_riotbot" ); static const mtype_id mon_sewer_snake( "mon_sewer_snake" ); static const mtype_id mon_spider_cellar_giant( "mon_spider_cellar_giant" ); static const mtype_id mon_spider_widow_giant( "mon_spider_widow_giant" ); @@ -102,19 +99,6 @@ void timed_event::actualize() debugmsg( "Currently disabled while NPC and monster factions are being rewritten." ); break; - case timed_event_type::ROBOT_ATTACK: { - const tripoint_abs_sm u_pos = player_character.global_sm_location(); - if( rl_dist( u_pos, map_point ) <= 4 ) { - const mtype_id &robot_type = one_in( 2 ) ? mon_copbot : mon_riotbot; - - get_event_bus().send( player_character.getID() ); - point rob( u_pos.x() > map_point.x() ? 0 - SEEX * 2 : SEEX * 4, - u_pos.y() > map_point.y() ? 0 - SEEY * 2 : SEEY * 4 ); - g->place_critter_at( robot_type, tripoint( rob, u_pos.z() ) ); - } - } - break; - case timed_event_type::SPAWN_WYRMS: { if( here.get_abs_sub().z() >= 0 ) { return; @@ -332,24 +316,6 @@ void timed_event::per_turn() Character &player_character = get_player_character(); map &here = get_map(); switch( type ) { - case timed_event_type::WANTED: { - // About once every 5 minutes. Suppress in classic zombie mode. - if( here.get_abs_sub().z() >= 0 && one_in( 50 ) && !get_option( "DISABLE_ROBOT_RESPONSE" ) ) { - point place = here.random_outdoor_tile(); - if( place.x == -1 && place.y == -1 ) { - // We're safely indoors! - return; - } - g->place_critter_at( mon_eyebot, tripoint( place, player_character.posz() ) ); - if( player_character.sees( tripoint( place, player_character.posz() ) ) ) { - add_msg( m_warning, _( "An eyebot swoops down nearby!" ) ); - } - // One eyebot per trigger is enough, really - when = calendar::turn; - } - } - break; - case timed_event_type::SPAWN_WYRMS: if( here.get_abs_sub().z() >= 0 ) { when -= 1_turns; diff --git a/tools/spell_checker/dictionary.txt b/tools/spell_checker/dictionary.txt index 0f0805b6fbb6c..7e001852a3294 100644 --- a/tools/spell_checker/dictionary.txt +++ b/tools/spell_checker/dictionary.txt @@ -237,6 +237,7 @@ bardiche barding barebones barghest +barleycorn barony barosaurus barotrarumatic @@ -247,7 +248,6 @@ baselines basiliscus bassline basswood -barleycorn batching batlike batrachian @@ -436,6 +436,7 @@ camelops camphine campin camptosaurus +camspies camspy canadensis canid @@ -1264,8 +1265,8 @@ gunmods gunshop gunsmithing gunsmoke -gushingly gurkha +gushingly gutskin guvnah gymnocladus @@ -1545,10 +1546,11 @@ khru kickboard kickin kickstand -killbasa -killin kilij kilijes +kilijs +killbasa +killin kilns kilroy kilted @@ -2809,11 +2811,11 @@ stompy stompy-clanker stonelike stoneskin +stook +stooking stopcock stoppered stoppeth -stook -stooking storable stormcaller stormshaper @@ -2878,6 +2880,7 @@ swages swappable swashbucklers sweetish +swipin switchgear swordmanship syde