From 675631038d64c53a73f8d53e0deff4b4df0793f8 Mon Sep 17 00:00:00 2001 From: Kolergo <85778771+Kolergo@users.noreply.github.com> Date: Sun, 2 Jul 2023 22:44:27 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=A7=D1=82=D0=BE=20=D0=B7=D0=B0=20=D0=B1?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=20=D0=B0=D0=BE=D0=B0=D0=BE=D0=B0=D0=BE=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- maps/away/ellipse/ellipse_areas.dm | 48 +++---- maps/away/ellipse/ellipse_shuttle.dm | 60 ++++---- .../piratestation/pirate_station_areas.dm | 136 +++++++++--------- maps/away/raidership/raider_vessel_areas.dm | 68 ++++----- maps/away/spystation/spy_station_areas.dm | 86 +++++------ 5 files changed, 199 insertions(+), 199 deletions(-) diff --git a/maps/away/ellipse/ellipse_areas.dm b/maps/away/ellipse/ellipse_areas.dm index 15c0a28132aa8..d012d0c49b9bd 100644 --- a/maps/away/ellipse/ellipse_areas.dm +++ b/maps/away/ellipse/ellipse_areas.dm @@ -1,25 +1,25 @@ -/area/ellipse/bridge - name = "\improper Ellipse Bridge" - icon_state = "bridge" - icon = 'ellipse_icons.dmi' - req_access = list(access_ellipse) -/area/ellipse/atom - name = "\improper Ellipse Genearator Room" - icon_state = "atom" - icon = 'ellipse_icons.dmi' - req_access = list(access_ellipse) -/area/ellipse/arsenal - name = "\improper Ellipse Arsenal" - icon_state = "arsenal" - icon = 'ellipse_icons.dmi' - req_access = list(access_ellipse) -/area/ellipse/research - name = "\improper Ellipse Research Room" - icon_state = "research" - icon = 'ellipse_icons.dmi' - req_access = list(access_ellipse) -/area/ellipse/shuttle - name = "\improper Ellipse Landing Shuttle" - icon_state = "shuttle" - icon = 'ellipse_icons.dmi' +/area/ellipse/bridge + name = "\improper Ellipse Bridge" + icon_state = "bridge" + icon = 'ellipse_icons.dmi' + req_access = list(access_ellipse) +/area/ellipse/atom + name = "\improper Ellipse Genearator Room" + icon_state = "atom" + icon = 'ellipse_icons.dmi' + req_access = list(access_ellipse) +/area/ellipse/arsenal + name = "\improper Ellipse Arsenal" + icon_state = "arsenal" + icon = 'ellipse_icons.dmi' + req_access = list(access_ellipse) +/area/ellipse/research + name = "\improper Ellipse Research Room" + icon_state = "research" + icon = 'ellipse_icons.dmi' + req_access = list(access_ellipse) +/area/ellipse/shuttle + name = "\improper Ellipse Landing Shuttle" + icon_state = "shuttle" + icon = 'ellipse_icons.dmi' req_access = list(access_ellipse) \ No newline at end of file diff --git a/maps/away/ellipse/ellipse_shuttle.dm b/maps/away/ellipse/ellipse_shuttle.dm index 94c73de98dd68..f681ba89aa29c 100644 --- a/maps/away/ellipse/ellipse_shuttle.dm +++ b/maps/away/ellipse/ellipse_shuttle.dm @@ -1,31 +1,31 @@ -/obj/effect/overmap/visitable/ship/landable/landing_shuttle/land - name = "Land-042" - desc = "Small shuttle with Ellipse Fleet markings." - shuttle = "Land-042" - -/datum/shuttle/autodock/overmap/landing_shuttle/land - name = "Land-042" - shuttle_area = list(/area/ellipse/shuttle) - dock_target = "land_shuttle" - current_location = "nav_dock_land" - landmark_transition = "nav_transit_land" - logging_home_tag = "nav_dock_land" - logging_access = access_ellipse - defer_initialisation = TRUE - multiz = 1 - flags = SHUTTLE_FLAGS_PROCESS - -/obj/machinery/computer/shuttle_control/explore/land - name = "Land-042 control console" - shuttle_tag = "Land-042" - req_access = list(access_ellipse) - -/obj/effect/shuttle_landmark/land - name = "Land-042" - landmark_tag = "nav_dock_land" - base_area = /area/ellipse/shuttle - movable_flags = MOVABLE_FLAG_EFFECTMOVE - -/obj/effect/shuttle_landmark/transit/land - name = "In transit" +/obj/effect/overmap/visitable/ship/landable/landing_shuttle/land + name = "Land-042" + desc = "Small shuttle with Ellipse Fleet markings." + shuttle = "Land-042" + +/datum/shuttle/autodock/overmap/landing_shuttle/land + name = "Land-042" + shuttle_area = list(/area/ellipse/shuttle) + dock_target = "land_shuttle" + current_location = "nav_dock_land" + landmark_transition = "nav_transit_land" + logging_home_tag = "nav_dock_land" + logging_access = access_ellipse + defer_initialisation = TRUE + multiz = 1 + flags = SHUTTLE_FLAGS_PROCESS + +/obj/machinery/computer/shuttle_control/explore/land + name = "Land-042 control console" + shuttle_tag = "Land-042" + req_access = list(access_ellipse) + +/obj/effect/shuttle_landmark/land + name = "Land-042" + landmark_tag = "nav_dock_land" + base_area = /area/ellipse/shuttle + movable_flags = MOVABLE_FLAG_EFFECTMOVE + +/obj/effect/shuttle_landmark/transit/land + name = "In transit" landmark_tag = "nav_transit_land" \ No newline at end of file diff --git a/maps/away/piratestation/pirate_station_areas.dm b/maps/away/piratestation/pirate_station_areas.dm index 94d22ce8622d7..7d93c4f1f7043 100644 --- a/maps/away/piratestation/pirate_station_areas.dm +++ b/maps/away/piratestation/pirate_station_areas.dm @@ -1,69 +1,69 @@ -/area/pirate_station/cl - name = "\improper Corridor L" - icon_state = "cl" - icon = 'maps/away/piratestation/pirate_station_sprites.dmi' - -/area/pirate_station/cr - name = "\improper Corridor R" - icon_state = "cr" - icon = 'maps/away/piratestation/pirate_station_sprites.dmi' - -/area/pirate_station/dorm - name = "\improper Dormitory" - icon_state = "dorm" - icon = 'maps/away/piratestation/pirate_station_sprites.dmi' - -/area/pirate_station/dathroom - name = "\improper Bathroom" - icon_state = "dat" - icon = 'maps/away/piratestation/pirate_station_sprites.dmi' - -/area/pirate_station/med - name = "\improper Medical" - icon_state = "med" - icon = 'maps/away/piratestation/pirate_station_sprites.dmi' - -/area/pirate_station/hangar - name = "\improper Hangar" - icon_state = "hangar" - icon = 'maps/away/piratestation/pirate_station_sprites.dmi' - -/area/pirate_station/canteen - name = "\improper Canteen" - icon_state = "eat" - icon = 'maps/away/piratestation/pirate_station_sprites.dmi' - -/area/pirate_station/engin - name = "\improper Engineering" - icon_state = "Eng" - icon = 'maps/away/piratestation/pirate_station_sprites.dmi' - -/area/pirate_station/kitchen - name = "\improper Kitchen" - icon_state = "kitch" - icon = 'maps/away/piratestation/pirate_station_sprites.dmi' - -/area/pirate_station/armory - name = "\improper Weapon Vault" - icon_state = "armory" - icon = 'maps/away/piratestation/pirate_station_sprites.dmi' - -/area/pirate_station/brig - name = "\improper Brig" - icon_state = "brig" - icon = 'maps/away/piratestation/pirate_station_sprites.dmi' - -/area/pirate_station/ge - name = "\improper Guarded Entrance" - icon_state = "ge" - icon = 'maps/away/piratestation/pirate_station_sprites.dmi' - -/area/pirate_station/work - name = "\improper Workshop" - icon_state = "work" - icon = 'maps/away/piratestation/pirate_station_sprites.dmi' - -/area/pirate_station/cryo - name = "\improper Cryo storage" - icon_state = "cryo" +/area/pirate_station/cl + name = "\improper Corridor L" + icon_state = "cl" + icon = 'maps/away/piratestation/pirate_station_sprites.dmi' + +/area/pirate_station/cr + name = "\improper Corridor R" + icon_state = "cr" + icon = 'maps/away/piratestation/pirate_station_sprites.dmi' + +/area/pirate_station/dorm + name = "\improper Dormitory" + icon_state = "dorm" + icon = 'maps/away/piratestation/pirate_station_sprites.dmi' + +/area/pirate_station/dathroom + name = "\improper Bathroom" + icon_state = "dat" + icon = 'maps/away/piratestation/pirate_station_sprites.dmi' + +/area/pirate_station/med + name = "\improper Medical" + icon_state = "med" + icon = 'maps/away/piratestation/pirate_station_sprites.dmi' + +/area/pirate_station/hangar + name = "\improper Hangar" + icon_state = "hangar" + icon = 'maps/away/piratestation/pirate_station_sprites.dmi' + +/area/pirate_station/canteen + name = "\improper Canteen" + icon_state = "eat" + icon = 'maps/away/piratestation/pirate_station_sprites.dmi' + +/area/pirate_station/engin + name = "\improper Engineering" + icon_state = "Eng" + icon = 'maps/away/piratestation/pirate_station_sprites.dmi' + +/area/pirate_station/kitchen + name = "\improper Kitchen" + icon_state = "kitch" + icon = 'maps/away/piratestation/pirate_station_sprites.dmi' + +/area/pirate_station/armory + name = "\improper Weapon Vault" + icon_state = "armory" + icon = 'maps/away/piratestation/pirate_station_sprites.dmi' + +/area/pirate_station/brig + name = "\improper Brig" + icon_state = "brig" + icon = 'maps/away/piratestation/pirate_station_sprites.dmi' + +/area/pirate_station/ge + name = "\improper Guarded Entrance" + icon_state = "ge" + icon = 'maps/away/piratestation/pirate_station_sprites.dmi' + +/area/pirate_station/work + name = "\improper Workshop" + icon_state = "work" + icon = 'maps/away/piratestation/pirate_station_sprites.dmi' + +/area/pirate_station/cryo + name = "\improper Cryo storage" + icon_state = "cryo" icon = 'maps/away/piratestation/pirate_station_sprites.dmi' \ No newline at end of file diff --git a/maps/away/raidership/raider_vessel_areas.dm b/maps/away/raidership/raider_vessel_areas.dm index a38d2001b98c0..a64b0bbe6c58b 100644 --- a/maps/away/raidership/raider_vessel_areas.dm +++ b/maps/away/raidership/raider_vessel_areas.dm @@ -1,34 +1,34 @@ -/area/raider_vessel/ - name = "\improper Center Corridor" - icon_state = "corridor" - icon = 'maps/away/raidership/raider_vessel_sprites.dmi' - -/area/raider_vessel/cock - name = "\improper Cockpit" - icon_state = "command" - icon = 'maps/away/raidership/raider_vessel_sprites.dmi' - -/area/raider_vessel/barrack - name = "\improper Barrack and BSA" - icon_state = "barracks" - icon = 'maps/away/raidership/raider_vessel_sprites.dmi' - -/area/raider_vessel/armory - name = "\improper Armory" - icon_state = "armory" - icon = 'maps/away/raidership/raider_vessel_sprites.dmi' - -/area/raider_vessel/bsa - name = "\improper BSA Storage" - icon_state = "bsa" - icon = 'maps/away/raidership/raider_vessel_sprites.dmi' - -/area/raider_vessel/pod - name = "\improper Drop Pod" - icon_state = "pod" - icon = 'maps/away/raidership/raider_vessel_sprites.dmi' - -/area/raider_vessel/engin - name = "\improper Engineering" - icon_state = "Eng" - icon = 'maps/away/raidership/raider_vessel_sprites.dmi' +/area/raider_vessel/ + name = "\improper Center Corridor" + icon_state = "corridor" + icon = 'maps/away/raidership/raider_vessel_sprites.dmi' + +/area/raider_vessel/cock + name = "\improper Cockpit" + icon_state = "command" + icon = 'maps/away/raidership/raider_vessel_sprites.dmi' + +/area/raider_vessel/barrack + name = "\improper Barrack and BSA" + icon_state = "barracks" + icon = 'maps/away/raidership/raider_vessel_sprites.dmi' + +/area/raider_vessel/armory + name = "\improper Armory" + icon_state = "armory" + icon = 'maps/away/raidership/raider_vessel_sprites.dmi' + +/area/raider_vessel/bsa + name = "\improper BSA Storage" + icon_state = "bsa" + icon = 'maps/away/raidership/raider_vessel_sprites.dmi' + +/area/raider_vessel/pod + name = "\improper Drop Pod" + icon_state = "pod" + icon = 'maps/away/raidership/raider_vessel_sprites.dmi' + +/area/raider_vessel/engin + name = "\improper Engineering" + icon_state = "Eng" + icon = 'maps/away/raidership/raider_vessel_sprites.dmi' diff --git a/maps/away/spystation/spy_station_areas.dm b/maps/away/spystation/spy_station_areas.dm index 7c04d83954e93..b8ca12b1c6cca 100644 --- a/maps/away/spystation/spy_station_areas.dm +++ b/maps/away/spystation/spy_station_areas.dm @@ -1,44 +1,44 @@ -/area/spy_station/ - name = "\improper Center Corridor" - icon_state = "corridor" - icon = 'maps/away/spystation/spy_station_sprites.dmi' - -/area/spy_station/com - name = "\improper Center Command" - icon_state = "command" - icon = 'maps/away/spystation/spy_station_sprites.dmi' - -/area/spy_station/barrack - name = "\improper Barrack" - icon_state = "barracks" - icon = 'maps/away/spystation/spy_station_sprites.dmi' - -/area/spy_station/toilet - name = "\improper Toilet" - icon_state = "toilet" - icon = 'maps/away/spystation/spy_station_sprites.dmi' - -/area/spy_station/med - name = "\improper Medical Center" - icon_state = "med" - icon = 'maps/away/spystation/spy_station_sprites.dmi' - -/area/spy_station/lc - name = "\improper SCL office" - icon_state = "offise" - icon = 'maps/away/spystation/spy_station_sprites.dmi' - -/area/spy_station/canteen - name = "\improper Canteen" - icon_state = "eat" - icon = 'maps/away/spystation/spy_station_sprites.dmi' - -/area/spy_station/engin - name = "\improper Engineering" - icon_state = "Eng" - icon = 'maps/away/spystation/spy_station_sprites.dmi' - -/area/spy_station/dock - name = "\improper Corridor Dock" - icon_state = "dock" +/area/spy_station/ + name = "\improper Center Corridor" + icon_state = "corridor" + icon = 'maps/away/spystation/spy_station_sprites.dmi' + +/area/spy_station/com + name = "\improper Center Command" + icon_state = "command" + icon = 'maps/away/spystation/spy_station_sprites.dmi' + +/area/spy_station/barrack + name = "\improper Barrack" + icon_state = "barracks" + icon = 'maps/away/spystation/spy_station_sprites.dmi' + +/area/spy_station/toilet + name = "\improper Toilet" + icon_state = "toilet" + icon = 'maps/away/spystation/spy_station_sprites.dmi' + +/area/spy_station/med + name = "\improper Medical Center" + icon_state = "med" + icon = 'maps/away/spystation/spy_station_sprites.dmi' + +/area/spy_station/lc + name = "\improper SCL office" + icon_state = "offise" + icon = 'maps/away/spystation/spy_station_sprites.dmi' + +/area/spy_station/canteen + name = "\improper Canteen" + icon_state = "eat" + icon = 'maps/away/spystation/spy_station_sprites.dmi' + +/area/spy_station/engin + name = "\improper Engineering" + icon_state = "Eng" + icon = 'maps/away/spystation/spy_station_sprites.dmi' + +/area/spy_station/dock + name = "\improper Corridor Dock" + icon_state = "dock" icon = 'maps/away/spystation/spy_station_sprites.dmi' \ No newline at end of file From 83f2d6d81f8b875266007c22414ec86278a795e0 Mon Sep 17 00:00:00 2001 From: Kolergo <85778771+Kolergo@users.noreply.github.com> Date: Sun, 2 Jul 2023 23:19:36 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=9C=D0=B8=D0=BD=D0=B8=20=D1=80=D0=BE?= =?UTF-8?q?=D0=BB=D0=B8=20=D0=B8=20=D0=B4=D0=B8=D1=87=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../game/gamemodes/mini_roles/mini_roles.dm | 3 +- .../overmap/exoplanets/planet_types/desert.dm | 1 + code/datums/trading/misc.dm | 12 +- code/datums/trading/ship.dm | 4 +- code/datums/trading/unique.dm | 13 +- code/datums/trading/weaponry.dm | 28 +- code/game/antagonist/station/mini_roles.dm | 267 ++++++++-- code/game/objects/effects/effect_system.dm | 2 + code/modules/aspects/traps.dm | 2 +- .../antagonism/01_candidacy.dm | 1 - code/modules/item_worth/worths_list.dm | 18 +- code/modules/mechs/premade/_premade.dm | 8 +- code/modules/mining/abandonedcrates.dm | 60 +-- code/modules/mob/mob_defines.dm | 2 +- maps/away/cadaab/icons/turfs.dmi | Bin 34794 -> 32023 bytes maps/away/solship/solship.dm | 15 +- maps/away/solship/solship.dmm | 503 +++++++++--------- maps/away/solship/solship_areas.dm | 23 +- maps/away/solship/solship_crew.dm | 73 +-- maps/away/solship/solship_items.dm | 55 +- maps/away/solship/solship_ranks.dm | 201 +++++++ maps/away/solship/solship_shuttle.dm | 27 +- maps/away/solship/solship_uniforms.dm | 26 +- maps/castelnau/bos/structures/lordbanner.dm | 3 +- maps/castelnau/castelnau.dm | 3 +- maps/castelnau/castelnau_ranks.dm | 12 +- maps/castelnau/castelnau_security_state.dm | 30 +- maps/castelnau/code/modules/aspects/night.dm | 19 + maps/castelnau/code/modules/sandstorm.dm | 24 +- 29 files changed, 922 insertions(+), 513 deletions(-) create mode 100644 maps/castelnau/code/modules/aspects/night.dm diff --git a/code/bos/game/gamemodes/mini_roles/mini_roles.dm b/code/bos/game/gamemodes/mini_roles/mini_roles.dm index ed508a343b3aa..ccd8dc4f60932 100644 --- a/code/bos/game/gamemodes/mini_roles/mini_roles.dm +++ b/code/bos/game/gamemodes/mini_roles/mini_roles.dm @@ -1,4 +1,4 @@ -/datum/game_mode/mini_toles +/datum/game_mode/mini_roles name = "mini roles" round_description = "Everybody have they own targets now!" extended_round_description = "Pure chaos" @@ -7,5 +7,4 @@ required_enemies = 0 antag_tags = list(MODE_MINI_ROLES) antag_scaling_coeff = 1 - end_on_antag_death = FALSE latejoin_antag_tags = list(MODE_MINI_ROLES) diff --git a/code/bos/modules/overmap/exoplanets/planet_types/desert.dm b/code/bos/modules/overmap/exoplanets/planet_types/desert.dm index 94f96fb7fcb99..b8f387d9256bc 100644 --- a/code/bos/modules/overmap/exoplanets/planet_types/desert.dm +++ b/code/bos/modules/overmap/exoplanets/planet_types/desert.dm @@ -128,6 +128,7 @@ if(buckled_mob) overlays += buckled_mob var/image/I = image(icon,icon_state="overlay") + I.plane = GAME_PLANE_FOV_HIDDEN I.layer = ABOVE_HUMAN_LAYER overlays += I diff --git a/code/datums/trading/misc.dm b/code/datums/trading/misc.dm index 802442aabae1f..56b0b9ec4cf9f 100644 --- a/code/datums/trading/misc.dm +++ b/code/datums/trading/misc.dm @@ -170,15 +170,16 @@ /datum/trader/gmb name = "Ward-Takahashi GMB" origin = "Automated Manufacturing Station" - trade_flags = TRADER_MONEY + trade_flags = TRADER_MONEY|TRADER_GOODS|TRADER_WANTED_ONLY|TRADER_WANTED_ALL + want_multiplier = 1 speech = list(TRADER_HAIL_GENERIC = "Greetings! It's so nice to talk to a human instead of a robot... Ah, would you like to order some machine?", TRADER_HAIL_DENY = "I'm sorry, but the main AI has forbidden me to communicate with you...", TRADER_TRADE_COMPLETE = "Oh, lovely!", - TRADER_NO_BLACKLISTED = "Whoa whoa, this one is too bad, put it away.", - TRADER_NO_GOODS = "Sorry, but we take only in money.", TRADER_NOT_ENOUGH = "Sorry, but there's not enough here for this order.", + TRADER_FOUND_UNWANTED = "No-no, AI don't need this...", TRADER_HOW_MUCH = "AI say that for one entry of ITEM the price would be VALUE CURRENCY.", + TRADER_WHAT_WANT = "Oh, for our industry we need some stock parts of machinery and powercells.", TRADER_COMPLEMENT_FAILURE = "I am afraid this is beyond my competency.", TRADER_COMPLEMENT_SUCCESS = "Thank you!", @@ -186,6 +187,11 @@ TRADER_INSULT_BAD = "AI probably will be mad..." ) + wanted_items = list( + /obj/item/cell = TRADER_ALL, + /obj/item/stock_parts = TRADER_ALL + ) + possible_trading_items = list(/obj/machinery/mining/drill = TRADER_THIS_TYPE, /obj/machinery/mining/brace = TRADER_THIS_TYPE, /obj/machinery/floodlight = TRADER_THIS_TYPE, diff --git a/code/datums/trading/ship.dm b/code/datums/trading/ship.dm index b77a6d7a9f3e7..df1f691ea11fb 100644 --- a/code/datums/trading/ship.dm +++ b/code/datums/trading/ship.dm @@ -18,8 +18,8 @@ if(prob(-disposition)) return ..() - var/length = round(amt/100) + var/length = round(amt/50) //BoS, was round(amt/100) duration_of_stay += length var/datum/trade_response/tr = make_response(TRADER_BRIBE_SUCCESS, "Sure, I'll stay for TIME more minutes.", -amt, TRUE) tr.text = replacetext_char(tr.text, "TIME", length) - return tr \ No newline at end of file + return tr diff --git a/code/datums/trading/unique.dm b/code/datums/trading/unique.dm index 566907221ff42..7138c8be64614 100644 --- a/code/datums/trading/unique.dm +++ b/code/datums/trading/unique.dm @@ -141,7 +141,7 @@ trade_flags = TRADER_MONEY|TRADER_GOODS|TRADER_WANTED_ONLY|TRADER_WANTED_ALL want_multiplier = 1 margin = 1.1 - price_rng = 3 + price_rng = 5 mob_transfer_message = "You have been teleported somewhere and have lost consciousness. When you come to, you find yourself in a clean white room attached to an operating table, surrounded by people in white coats. After the words: 'Commence surgery', you were taken apart piece by piece without anaesthesia for over an hour. Only death brought you salvation." speech = list(TRADER_HAIL_GENERIC = "Ah, greetings. We looking for some things for our corporation... All for the sake of science and human race.", @@ -161,11 +161,11 @@ ) wanted_items = list( - /mob/living/carbon/human = TRADER_ALL, - /obj/item/organ/internal = TRADER_ALL, /mob/living/carbon/human/machine = TRADER_BLACKLIST_ALL, /obj/item/organ/internal/posibrain = TRADER_BLACKLIST_ALL, - /obj/item/organ/internal/augment = TRADER_BLACKLIST_ALL + /obj/item/organ/internal/augment = TRADER_BLACKLIST_ALL, + /mob/living/carbon/human = TRADER_ALL, + /obj/item/organ/internal = TRADER_ALL ) possible_trading_items = list( @@ -175,5 +175,8 @@ /obj/item/reagent_containers/syringe/zombie = TRADER_THIS_TYPE, /obj/item/reagent_containers/glass/bottle/mutagen = TRADER_THIS_TYPE, /obj/item/reagent_containers/glass/bottle/pacid = TRADER_THIS_TYPE, - /obj/item/reagent_containers/glass/bottle/chloralhydrate = TRADER_THIS_TYPE + /obj/item/reagent_containers/glass/bottle/chloralhydrate = TRADER_THIS_TYPE, + /obj/item/storage/firstaid/combat = TRADER_THIS_TYPE, + /obj/item/storage/firstaid/surgery = TRADER_THIS_TYPE, + /obj/item/storage/backpack/dufflebag/syndie/med/full = TRADER_THIS_TYPE ) diff --git a/code/datums/trading/weaponry.dm b/code/datums/trading/weaponry.dm index b4835257b43aa..7a158a5ea98bf 100644 --- a/code/datums/trading/weaponry.dm +++ b/code/datums/trading/weaponry.dm @@ -233,23 +233,29 @@ /datum/trader/ship/kaboom name = "Unknown Primitive Signature" origin = "Kadaab Deserts" - speech = list(TRADER_HAIL_GENERIC = "Ka-boom? Funny paper give you, we give you ka-boom.", - TRADER_HAIL_DENY = "No ka-boom for space demons.", + trade_flags = TRADER_MONEY|TRADER_GOODS|TRADER_WANTED_ONLY|TRADER_WANTED_ALL + want_multiplier = 1 + speech = list(TRADER_HAIL_GENERIC = "Ka-boom? Funny paper give you, we give you ka-boom.", + TRADER_HAIL_DENY = "No ka-boom for space demons.", - TRADER_TRADE_COMPLETE = "Make more kaboom with ka-boom.", - TRADER_NO_BLACKLISTED = "Not funny and not kaboom.", - TRADER_NO_GOODS = "Where funny paper.", - TRADER_NOT_ENOUGH = "More paper!!", - TRADER_HOW_MUCH = "Orgh... One, two... VALUE.", + TRADER_TRADE_COMPLETE = "Make more kaboom with ka-boom.", + TRADER_FOUND_UNWANTED = "This not funny and not meal - we not need.", + TRADER_WHAT_WANT = "Ohm, we want eat meal. And drink wata. We not drink wata for... Orgh, many suns.", + TRADER_NOT_ENOUGH = "More paper!!", + TRADER_HOW_MUCH = "Orgh... One, two... VALUE.", - TRADER_COMPLEMENT_FAILURE = "You stoopid.", - TRADER_COMPLEMENT_SUCCESS = "Great ka-boom!", - TRADER_INSULT_GOOD = "My ka-boom is good, you bad space demon!!!", - TRADER_INSULT_BAD = "Erght... What?" + TRADER_COMPLEMENT_FAILURE = "You stoopid.", + TRADER_COMPLEMENT_SUCCESS = "Great ka-boom!", + TRADER_INSULT_GOOD = "My ka-boom is good, you bad space demon!!!", + TRADER_INSULT_BAD = "Erght... What?" ) compliment_increase = 5 insult_drop = 5 + wanted_items = list( + /obj/item/reagent_containers/food = TRADER_ALL + ) + possible_trading_items = list( /obj/item/gun/launcher/grenade = TRADER_THIS_TYPE, /obj/item/gun/projectile/rocket/oneuse = TRADER_THIS_TYPE, diff --git a/code/game/antagonist/station/mini_roles.dm b/code/game/antagonist/station/mini_roles.dm index 1a2b4b2c6f8d3..e775052a6bc31 100644 --- a/code/game/antagonist/station/mini_roles.dm +++ b/code/game/antagonist/station/mini_roles.dm @@ -6,20 +6,24 @@ GLOBAL_DATUM_INIT(mini_role, /datum/antagonist/mini_roles, new) role_text_plural = "Mini Roles" antaghud_indicator = "hud_traitor" flags = ANTAG_RANDSPAWN | ANTAG_VOTABLE - welcome_text = "Хаха, мини роль делает пиу-пиу" + welcome_text = "Вы - мини роль. Не стоит воспринимать мини роль как типичного антагониста. Вы - не антагонист раунда. Вы - протагонист своей истории, будь она маленькая или большая. Действуйте в целях своего персонажа, думайте что выгоднее для него в долгосрочной перспективе. И конечно соблюдайте главное правило - не быть мудаком." antag_text = "Если Вы видите этот текст, то что-то сломалось. Попросите Стивена починить." blacklisted_jobs = list() skill_setter = null + hard_cap = 100 + hard_cap_round = 100 + initial_spawn_target = 100 min_player_age = 0 var/datum/mini_role/mini_role_datum //Container for last mini role var/list/datum/mini_role/all_mini_roles_datums = list() //All in round roles //Whitelists of mini roles for every branch. Don't forget put new mini roles here - var/list/regcom_roles = list(/datum/mini_role/creditor, /datum/mini_role/pyroman) - var/list/syndicate_roles = list(/datum/mini_role/rat, /datum/mini_role/creditor, /datum/mini_role/pyroman) - var/list/traders_roles = list(/datum/mini_role/contrabandist, /datum/mini_role/rat, /datum/mini_role/creditor, /datum/mini_role/link) - var/list/scum_roles = list(/datum/mini_role/contrabandist, /datum/mini_role/contractor, /datum/mini_role/rat, /datum/mini_role/cannibal, /datum/mini_role/pyroman, /datum/mini_role/torch, /datum/mini_role/link) //Barbars and zeki - var/list/other_roles = list(/datum/mini_role/contrabandist, /datum/mini_role/contractor, /datum/mini_role/pyroman, /datum/mini_role/torch, /datum/mini_role/link) + var/list/regcom_roles = list(/datum/mini_role/regcom_agent, /datum/mini_role/creditor, /datum/mini_role/pyroman) + var/list/gov_roles = list(/datum/mini_role/rat, /datum/mini_role/creditor, /datum/mini_role/pyroman, /datum/mini_role/treasure_hunter) + var/list/syndicate_roles = list(/datum/mini_role/syndicate_agent, /datum/mini_role/rat, /datum/mini_role/creditor, /datum/mini_role/pyroman, /datum/mini_role/treasure_hunter) + var/list/traders_roles = list(/datum/mini_role/contrabandist, /datum/mini_role/rat, /datum/mini_role/creditor, /datum/mini_role/link, /datum/mini_role/treasure_hunter) + var/list/scum_roles = list(/datum/mini_role/contrabandist, /datum/mini_role/contractor, /datum/mini_role/rat, /datum/mini_role/cannibal, /datum/mini_role/pyroman, /datum/mini_role/torch, /datum/mini_role/link, /datum/mini_role/mutant, /datum/mini_role/bluespace, /datum/mini_role/treasure_hunter) //Barbars and zeki + var/list/other_roles = list(/datum/mini_role/contrabandist, /datum/mini_role/contractor, /datum/mini_role/pyroman, /datum/mini_role/torch, /datum/mini_role/link, /datum/mini_role/mutant, /datum/mini_role/bluespace, /datum/mini_role/treasure_hunter) /datum/antagonist/mini_roles/create_antagonist(var/datum/mind/target, var/move, var/gag_announcement, var/preserve_appearance) @@ -34,17 +38,17 @@ GLOBAL_DATUM_INIT(mini_role, /datum/antagonist/mini_roles, new) var/mob/living/carbon/human/man_on_check = target.current switch(man_on_check.char_branch.name) if("Regulators") choosen_role = pick(regcom_roles) + if("Government") choosen_role = pick(gov_roles) if("Consortium of Trans-Star Corporations") choosen_role = pick(syndicate_roles) if("Free Trade Union") choosen_role = pick(traders_roles) if("Alternatively Hired") choosen_role = pick(scum_roles) - if("Aborigens") choosen_role = pick(scum_roles) + if("Military") choosen_role = pick(scum_roles) else choosen_role = pick(other_roles) else choosen_role = pick(other_roles) mini_role_datum = new choosen_role mini_role_datum.owner = target - all_mini_roles_datums += mini_role_datum if(!mini_role_datum.additional_check(target.current)) qdel(mini_role_datum) continue @@ -79,12 +83,13 @@ GLOBAL_DATUM_INIT(mini_role, /datum/antagonist/mini_roles, new) player.special_role = mini_role_datum.name var/name = mini_role_datum.name var/desc = mini_role_datum.desc + all_mini_roles_datums += mini_role_datum to_chat(player.current, "Вы - [name]!") if(leader_welcome_text && player == leader) to_chat(player.current, "[get_leader_welcome_text(player.current)]") else to_chat(player.current, "[get_welcome_text(player.current)]") - to_chat(player.current, "[desc]") + to_chat(player.current, SPAN_INFO("[desc]")) mini_role_datum.special_act(player.current) create_objectives(player) @@ -127,9 +132,10 @@ GLOBAL_DATUM_INIT(mini_role, /datum/antagonist/mini_roles, new) player.equip_to_slot(spawned_thing, slot) if(spawned_thing.loc == player) break - var/obj/item/storage/S = locate() in player.contents - if(istype(S)) - spawned_thing.forceMove(S) + for(var/obj/item/storage/S in player.contents) + if((istype(S)) && (S.max_storage_space >= DEFAULT_LARGEBOX_STORAGE)) //Storage space between wallet and backpack + spawned_thing.forceMove(S) + break random_count += 1 else for(var/thing in mini_role_datum.gear) @@ -138,9 +144,10 @@ GLOBAL_DATUM_INIT(mini_role, /datum/antagonist/mini_roles, new) player.equip_to_slot(spawned_thing, slot) if(spawned_thing.loc == player) break - var/obj/item/storage/S = locate() in player.contents - if(istype(S)) - spawned_thing.forceMove(S) + for(var/obj/item/storage/S in player.contents) + if((istype(S)) && (S.max_storage_space >= DEFAULT_LARGEBOX_STORAGE)) //Storage space between wallet and backpack + spawned_thing.forceMove(S) + break ///// // MINI ROLES DATUMS @@ -185,7 +192,7 @@ GLOBAL_DATUM_INIT(mini_role, /datum/antagonist/mini_roles, new) /datum/mini_role/proc/additional_check(var/mob/living/carbon/human/target) if(no_robots) - if((target.species.name == SPECIES_IPC) || (target.species.name == SPECIES_ADHERENT) || (target.species.name == SPECIES_SHELL) || (target.species.name == SPECIES_FBP)) + if((target.species.name == SPECIES_IPC) || (target.species.name == SPECIES_ADHERENT) || (target.species.name == SPECIES_SHELL) || (target.full_prosthetic)) return FALSE if((!can_latejoin) && (round_duration_in_ticks >> 30)) //About 3 seconds after round start @@ -196,12 +203,13 @@ GLOBAL_DATUM_INIT(mini_role, /datum/antagonist/mini_roles, new) /datum/mini_role/contrabandist name = "Контрабандист" - desc = "ЧЗХ, микро трейтор?77" + desc = "Может это была Ваша случайная находка, а может Вы лично выкупили это устройство у одного из местных криминальных боссов. Как-бы то не было, в Ваши руки попал аплинк - устройство с доступом к сети SyndieNet. Вы знаете, что такие устройства запрещены в более чем 60 государствах - но соблазн слишком велик. Может быть, с помощью него Вы сможете вылезти из этого захолустья? Да и если мир полон лжецов и убийц, почему Вы должны играть против них по-честному?" objective = "Сохраните свой аплинк у себя." can_latejoin = FALSE /datum/mini_role/contrabandist/special_act(var/mob/living/carbon/human/target) var/money = target.mind.assigned_job.economic_power * 1000 + rand(-20,20) * 100 + if(money << 0) money += 3000 second_objective = "Имейте [money] кредитов к концу смены." var/TC_amount = rand(40, 80) var/obj/item/device/radio/uplink/U = new(target, null, TC_amount) @@ -211,9 +219,10 @@ GLOBAL_DATUM_INIT(mini_role, /datum/antagonist/mini_roles, new) else if(target.put_in_hands(U)) to_chat(target, "Uplink unit appear in your hands.") + /datum/mini_role/contractor name = "Контрактник" - desc = "Эрис момент" + desc = "Может быть Вы профессиональный наёмник с сотнями голов за спиной, а может Вас просто заставили пойти на это под дулом пистолета. Как-бы то не было, Вы стали теневым работником сети SyndieNet. Всё что у Вас есть - аплинк и контракты. Простая и мирная работа. Разве кому-то мешали шпионящие программы в консолях и импланты слежения в головах?" objective = "Сохраните свой аплинк у себя. Также сохраните свою роль в секрете." can_latejoin = FALSE @@ -225,7 +234,7 @@ GLOBAL_DATUM_INIT(mini_role, /datum/antagonist/mini_roles, new) /datum/mini_role/cannibal name = "Людоед" - desc = "Есть гайских детей" + desc = "Может это уже традиция в Вашей семье, а может у Вас просто не оставалось другого выбора, когда Ваш отряд зажал враг на несколько недель в том проклятом здании. Как-бы то не было, Вы вкусили человеческую плоть - и Вам понравилось. Настолько, что желудок просит ещё. Свежей. Хотя бы взять недавно убитое кем-то другим тело - разве будет оно против?.." objective = "Опробуйте хотя бы один свежий кусочек человеческой плоти к концу смены." no_robots = TRUE gear = list(/obj/item/material/knife/kitchen/cleaver, /obj/item/handcuffs, /obj/item/tape_roll, /obj/item/device/flash, /obj/item/clothing/mask/chameleon/voice, /obj/item/beartrap) @@ -234,8 +243,8 @@ GLOBAL_DATUM_INIT(mini_role, /datum/antagonist/mini_roles, new) /datum/mini_role/rat name = "Крыса" - desc = "Доносики" - objective = "Сохраните свою роль и работодателя в тайне." + desc = "Может они держат в плену всё что Вам дорого, а может Вы уже не в первый раз вставляете нож в спину своим хозяевам. Как-бы то не было, Вы согласились найти для кое-кого компрометирующую информацию на миссию Кастельнау. Ходите, смотрите и слушайте. Эти военные преступники наверняка не заставят Вас долго ждать." + objective = "Доживите до конца смены сохранив свою роль в секрете." gear = list(/obj/item/storage/box/syndie_kit/spy, /obj/item/spacecash/bundle/c2000, /obj/item/storage/box/radiokeys, /obj/item/device/uv_light, /obj/item/device/camera, /obj/item/device/taperecorder) random_gear = 2 @@ -246,20 +255,28 @@ GLOBAL_DATUM_INIT(mini_role, /datum/antagonist/mini_roles, new) /datum/mini_role/creditor name = "Кредитор" - desc = "Где деньги" + desc = "История старая как мир. Добро и зло, кредитор и должник. Может лишить этого должника всего имущества в уплату долга? Или пусть как-то отработает? А может нанять вышибал, чтобы вернуть хотя бы часть долга? Тут нет ничего личного - что поделать, если деньги правят миром." double = TRUE /datum/mini_role/creditor/special_act(var/mob/living/carbon/human/target) var/debt debt = mini_target.assigned_job.economic_power * 1000 - rand(-40,1) * 100 + if(debt << 0) debt += 4000 objective = "[mini_target]([mini_target.assigned_job.title]) задолжал Вам [debt] кредитов. Добейтесь от должника возвращения долга до конца смены." double_text = "Вы вспоминаете, что то ли по пьяне, то ли из-за смертельной угрозы, то ли просто по случайности, но Вы должны [owner] [debt] кредитов. Не сказать, что бы Вам хотелось с ними раставаться..." double_objective = "Избегать отдачи долга в [debt] кредитов [owner]([owner.assigned_job.title])." + //Creates objective, because in time when double_act is executed, double_text is not exist + to_chat(mini_target, "[double_text]") + var/datum/objective/mini_target_obj = new + mini_target_obj.owner = mini_target + mini_target_obj.explanation_text = double_objective + mini_target.objectives |= mini_target_obj + show_objectives(mini_target) /datum/mini_role/pyroman name = "Пироман" - desc = "Ай феар нот мэн, бат..." + desc = "Дни похожи один на другой, всё это затягивается в вечный круговорот безликих людей в войне за выживание. Но среди этой постоянной резни порой просачивается луч надежды. Хаотичный, но такой приятный и греющий огонь, приносящий Вам счастье в эти тяжёлые дни. Кто же заметит, если на Кадаабе сгорит случайное здание? Может, конечно, вся эта миссия и в правду тяжело сказывается на Вашем рассудке, но разве не все говорят, что вечно смотреть можно на три вещи?.." objective = "Наслаждайтесь огнём. Сдережируйте небольшой пожар, став его главным зрителем." gear = list(/obj/item/storage/firstaid/fire, /obj/item/storage/box/beakers, /obj/item/storage/box/matches, /obj/item/reagent_containers/food/drinks/bottle/specialwhiskey, /obj/item/flamethrower, /obj/item/clothing/mask/gas/cbrn) random_gear = 2 @@ -267,32 +284,32 @@ GLOBAL_DATUM_INIT(mini_role, /datum/antagonist/mini_roles, new) /datum/mini_role/torch name = "Торчок" - desc = "Хе-хе" + desc = "Может в этом проклятом мире для отдыха просто не осталось других способов, а может Вы просто подумали, что эта была таблетка от головной боли. Как-бы то не было, Вы подсели на наркотики. Сильно подсели. Вам уже даже без разницы что принимать, лишь бы это могло помочь Вам отвлечься от этого мира." objective = "Запасите несколько доз на будущее. Чем больше - тем лучше." no_robots = TRUE - gear = list(/obj/item/seeds/ambrosiadeusseed, /obj/item/reagent_containers/hypospray/autoinjector/mindbreaker, /obj/item/storage/firstaid/toxin, /obj/item/storage/box/syringes, /obj/item/storage/pill_bottle/three_eye, /obj/item/gun/projectile/pistol/holdout) + gear = list(/obj/item/seeds/ambrosiadeusseed, /obj/item/reagent_containers/hypospray/autoinjector/mindbreaker, /obj/item/storage/firstaid/toxin, /obj/item/storage/box/syringes, /obj/item/storage/pill_bottle/three_eye, /obj/random/handgun) random_gear = 2 /datum/mini_role/link name = "Связной" - desc = "Шпион драмма" - objective = "Найдите агента, которому Вы должны передать информацию о том, что " + desc = "Может это Ваша не первая миссия такого рода, а может Вас ждёт утопление в озере с крокодилами, если Вы не сделайте приказанное. Как-бы то не было, Вам передали пакет важной информации о местном экипаже. Осталось найти того, кому нужно передать все эти данные." + objective = "Найдите агента, которому Вы должны передать информацию о том, что" + second_objective = "Доживите до конца смены не придав свою роль широкой огласке." double = TRUE + gear = list(/obj/random/handgun) double_text = "Где-то рядом с Вами должен находится связной, который может обладать интересной и полезной информацией. Найдите его и получите эту информацию." double_objective = "Найдите и установите контакт с связным." - gear = list() - random_gear = 2 //Put names of possible coop roles in list below - var/connected_roles = list("Крыса", "Контрактник") + var/connected_roles = list(/datum/mini_role/rat, /datum/mini_role/contractor) /datum/mini_role/link/additional_check(var/mob/living/carbon/human/target) var/try_amount = 0 var/list/unmasked_roles = list() while(try_amount != 4) var/datum/mini_role/picked_role = pick(GLOB.mini_role.all_mini_roles_datums) - if((is_type_in_list(picked_role.name, connected_roles)) || (picked_role.owner == target.mind)) + if((is_type_in_list(picked_role, connected_roles)) || (picked_role.owner == target.mind)) try_amount += 1 continue unmasked_roles += picked_role @@ -302,28 +319,27 @@ GLOBAL_DATUM_INIT(mini_role, /datum/antagonist/mini_roles, new) return FALSE for(var/datum/mini_role/unmasked in unmasked_roles) - var/add_text = "[unmasked.owner]([unmasked.owner.assigned_job.title]) - [unmasked.name]," + var/add_text = " [unmasked.owner]([unmasked.owner.assigned_job.title]) - [unmasked.name];" objective += add_text return TRUE - /datum/mini_role/link/double_act(var/datum/mind/obj_owner) var/list/possible_targets = list() - for(var/datum/mind/possible_target in SSticker.minds) - if((ishuman(possible_target.current)) && (possible_target.current.stat != DEAD) && (is_type_in_list(possible_target.special_role, connected_roles))) - possible_targets += possible_target + for(var/datum/mini_role/maybe_target in GLOB.mini_role.all_mini_roles_datums) + if((is_type_in_list(maybe_target, connected_roles)) && (maybe_target.owner.current.stat != DEAD)) + possible_targets += maybe_target.owner if(possible_targets.len > 0) mini_target = pick(possible_targets) - to_chat(mini_target, "[double_text]") - to_chat(mini_target, "Для поиска потенциальных союзников Вы были снабжены опозновательными словами:") - to_chat(mini_target, "Кодовые слова: [GLOB.antag_code_phrase]") - to_chat(mini_target, "Кодовые ответы: [GLOB.antag_code_response]") + to_chat(mini_target.current, "[double_text]") + to_chat(mini_target.current, "Для поиска потенциальных союзников Вы были снабжены опозновательными словами:") + to_chat(mini_target.current, "Кодовые слова: [GLOB.antag_code_phrase]") + to_chat(mini_target.current, "Кодовые ответы: [GLOB.antag_code_response]") mini_target.StoreMemory("Кодовые слова: [GLOB.antag_code_phrase]", /decl/memory_options/system) mini_target.StoreMemory("Кодовые ответы: [GLOB.antag_code_response]", /decl/memory_options/system) - to_chat(owner, "Для поиска потенциальных союзников Вы были снабжены опозновательными словами:") - to_chat(owner, "Кодовые слова: [GLOB.antag_code_phrase]") - to_chat(owner, "Кодовые ответы: [GLOB.antag_code_response]") + to_chat(owner.current, "Для поиска потенциальных союзников Вы были снабжены опозновательными словами:") + to_chat(owner.current, "Кодовые слова: [GLOB.antag_code_phrase]") + to_chat(owner.current, "Кодовые ответы: [GLOB.antag_code_response]") owner.StoreMemory("Кодовые слова: [GLOB.antag_code_phrase]", /decl/memory_options/system) owner.StoreMemory("Кодовые ответы: [GLOB.antag_code_response]", /decl/memory_options/system) @@ -335,3 +351,168 @@ GLOBAL_DATUM_INIT(mini_role, /datum/antagonist/mini_roles, new) return TRUE else return FALSE + + +/datum/mini_role/regcom_agent + name = "Агент РегКома" + desc = "Краем уха Вы услышали о будущих приказах фрау Марты к Кастельнау. Если Вы сможете сделать приказ ещё до того, как он опубликуется, то Вас может ждать очень приятная награда. Конечно, лучше будет сделать вид что всё это вышло 'случайно'." + gear = list(/obj/item/storage/lockbox/loyalty, /obj/item/storage/box/syndie_kit/imp_explosive, /obj/item/storage/box/syndie_kit/imp_imprinting, /obj/item/spacecash/bundle/c2000, + /obj/item/spacecash/bundle/c2000, /obj/item/spacecash/bundle/c2000, /obj/item/spacecash/bundle/c1000, /obj/item/spacecash/bundle/c1000, /obj/item/spacecash/bundle/c1000) + random_gear = 3 + +/datum/mini_role/regcom_agent/special_act(var/mob/living/carbon/human/target) + var/quest = pick("РегКом желает провести акцию устрашения на Кадаабе. Вздёрните врагов на фонарные столбы, сожгите город, расставьте пики с головами.", + "РегКом желает расширения аванпоста. Отремонтируйте старые здания, перенесите укрепления, улучшите электростанции.", + "РегКом желает видеть внедрение экзоскелетов в миссию. Соберите ресурсы, организуйте мехопроизводство, создайте отряд бронированной кавалерии.", + "РегКом желает увидеть самостоятельность миссии. Пополните бюджет миссии(бюджет Кастельнау) до [1000*rand(25,40)] кредитов.", + "РегКом желает пополнить список членов миссии. Примите несколько доверенных людей с планеты или любого другого места в экипаж миссии, занеся их в манифест.") + objective = quest + + +/datum/mini_role/syndicate_agent + name = "Агент Синдиката" + desc = "Одной из влиятельных персон в Синдикате вдруг что-то потребовалось от миссии Кастельнау. Если Вы сможете выполнить это желание, то возможно сможете рассчитывать на небольшую дачу на Кингстоне." + gear = list(/obj/item/storage/fancy/supply_box/grenade, /obj/item/storage/toolbox/syndicate, /obj/item/storage/box/syndie_kit/toxin, /obj/item/storage/box/syndie_kit/silenced) + random_gear = 1 + +/datum/mini_role/syndicate_agent/special_act(var/mob/living/carbon/human/target) + var/quest = pick("Синдикат хочет видеть увеличение своего влияния на Кадаабе. Создайте оперативную базу Синдиката, вербуйте оттуда людей с планеты, развешайте корпоративные листовки.", + "Синдикат в будущем желает провести реновацию Кадааба. Взорвите несколько из старых бесполезныех зданий, очистив землю для будущих построек.", + "Синдикат размышляет над отправкой дополнительного контингента на Кадааб. Запасите для него любое оружие и патроны - создайте отдельный склад, если потребуется.", + "Синдикат желает свободной конкуренции с ВТС. Попытайтесь уменьшить доходы Скряги - откройте свой магазин или скомпроментируйте ВТС. Оставьте свою роль в тайне.", + "Синдикат разыскивает ещё не обнаруженных людей с псионическим потенциалом. Найдите таковых, пробуждайте людей триглазом если необходимо.") + objective = quest + + +/datum/mini_role/mutant + name = "Мутант" + desc = "Может это сбой в криокамерах, а может просто обычное влияние космическое радиации. Как-бы то не было, Вы уже перестали быть тем, чем были раньше. Вы не представитель своего рода, а чёртов мутант. С одной стороны, возможно даже в чём-то Вы превосходите 'нормальных', с другой можно быть уверенным, что Ваше тело с готовностью будут резать все учёные мира. К тому же, Вы стали голодать чуть быстрее чем обычно..." + objective = "Доживите до конца смены, сохранив свою роль в тайне." + second_objective = "Запасите как можно больше еды к концу смены." + no_robots = TRUE + +/datum/mini_role/mutant/special_act(var/mob/living/carbon/human/target) + var/datum/species/mutant_species = new target.species.type //Create new species for our mutant and edit it below + mutant_species.hunger_factor *= 2 + mutant_species.thirst_factor *= 2 + //"Generating" our mutant next + var/abilities = 0 + var/abilities_need = rand(2,3) + var/list/possible_abilities = list("blood_abil", "bone_abil", "crawler_abil", "weaver_abil", "fov_abil", "silent_abil") + var/picked_ability + while(abilities != abilities_need) + picked_ability = pick(possible_abilities) + switch(picked_ability) + if("blood_abil") + target.remove_blood(target.species.blood_volume) //Remove old blood to add new colored one + mutant_species.blood_color = RANDOM_RGB + mutant_species.total_health += rand(10,40) + mutant_species.blood_volume += rand(-100,100) + to_chat(target, SPAN_NOTICE("С Вашей кровью что-то не то... Кажется она эффективнее обычной, но имеет другой цвет.")) + if("bone_abil") + mutant_species.bone_material = pick(MATERIAL_BONE_FISH, MATERIAL_CRYSTAL, MATERIAL_PLATINUM, MATERIAL_RESIN, MATERIAL_PHORON, MATERIAL_GLASS) + to_chat(target, SPAN_NOTICE("В Ваших костях что-то изменилось. Вероятно, они состоят теперь из чего-то другого.")) + if("crawler_abil") + mutant_species.inherent_verbs += list(/mob/living/proc/ventcrawl) + target.can_enter_vent_with += list(/obj/item, /obj/item/clothing, /obj/effect, /obj/screen) //Can enter in vent with almost anything + to_chat(target, SPAN_NOTICE("Ваше тело стало невероятно гибким. Наверное, Вы даже сможете пролезть в вентеляцию...")) + if("weaver_abil") + mutant_species.is_weaver = TRUE + mutant_species.silk_color = RANDOM_RGB + mutant_species.inherent_verbs += list(/mob/living/carbon/human/proc/check_silk_amount, /mob/living/carbon/human/proc/toggle_silk_production, + /mob/living/carbon/human/proc/weave_structure, /mob/living/carbon/human/proc/weave_item) + to_chat(target, SPAN_NOTICE("Иногда из ниоткуда у Вас появляется шёлк ручного производства.")) + if("fov_abil") + mutant_species.datum_usefov = FALSE + for(var/obj/screen/screen_effects in target.contents) + if((istype(screen_effects, /obj/screen/fov_blocker)) || (istype(screen_effects, /obj/screen/fov_shadow))) qdel(screen_effects) + to_chat(target, SPAN_NOTICE("Ваши пять чувств вышли за все известные пределы. Никто не сможет подойти к Вам не замеченным.")) + if("silent_abil") + mutant_species.silent_steps = TRUE + mutant_species.species_flags += SPECIES_FLAG_NO_SLIP + to_chat(target, SPAN_NOTICE("Стопы приобрели странную форму. Ваши шаги бесшумны, к тому же Вы не подскальзываетесь.")) + possible_abilities -= picked_ability + abilities += 1 + + target.species = mutant_species + mutant_species.handle_post_spawn(target) + target.rejuvenate() + + +/datum/mini_role/bluespace + name = "Провидец" + desc = "Кажется, Вы нашли этот 'артефакт' во время блюспейс колебаний... Или после того как упали с лестницы - точно не вспомнить. Важно то, что артефакт приоткрыл для Вас завесу вселенной. Обычные люди даже не представляют, внутри чего они живут. Вы же увидели правду. Этот шум на окраинах, на который никто не обращает внимания; этот сектор, выходя из которого оказываешься в его противоположной стороне; это существо, которое все ищут и имя которого Вы стали бояться называть. Мир не таков, каков он кажется на первый взгляд." + objective = "Доживите до конца смены, сохранив свой артефакт и не предав свою роль широкой огласке." + second_objective = "Изучите свои спосбности и артефакт, попытайтесь найти таких же." + no_robots = TRUE + gear = list(/obj/item/summoning_stone, /obj/item/scrying, /obj/item/dice/d20/cursed, /obj/item/storage/belt/soulstone/full, /obj/item/gun/energy/staff/animate, /obj/item/gun/energy/staff) + random_gear = 1 + +/datum/mini_role/bluespace/special_act(var/mob/living/carbon/human/target) + var/list/possible_spells = list(/spell/veil_of_shadows, /spell/invisibility, /spell/portal_teleport, /spell/mark_recall, /spell/aoe_turf/conjure/forcewall, + /spell/aoe_turf/exchange_wounds, /spell/aoe_turf/conjure/carp, /spell/radiant_aura, /spell/aoe_turf/blink, /spell/targeted/swap, /spell/targeted/heal_target/sacrifice, + /spell/targeted/heal_target/trance, /spell/targeted/projectile/magic_missile) + var/spell/spell_1 + var/spell/spell_2 + + target.add_spell(new /spell/noclothes) + spell_1 = pick(possible_spells) + target.add_spell(new spell_1) + + spell_2 = pick(possible_spells) + target.add_spell(new spell_2) + + +/datum/mini_role/treasure_hunter + name = "Искатель сокровищ" + desc = "Может Вы купили это устройство у подозрительной личности с тростью за половину своих сбережений, а может просто сняли его с забытого трупа на Кадаабе. В любом случае, как Вы поняли, эта штучка указывает на некий тайник... Вероятно полный ценностей." + objective = "При помощи поискового устройства найдите и вскройте тайник." + no_robots = TRUE + gear = list(/obj/item/device/flashlight/upgraded, /obj/item/device/gps/marker, /obj/item/crowbar/prybar, /obj/item/storage/fancy/supply_box/flare) + random_gear = 1 + var/weakref/treasure + +/datum/mini_role/treasure_hunter/special_act(var/mob/living/carbon/human/target) + //Giving pinpointer + var/obj/item/pinpointer/pinpointer = new /obj/item/pinpointer/advpinpointer(get_turf(target)) + var/obj/O = target.equip_to_storage(pinpointer) + if(O) + to_chat(target, "Pinpointer can be found in your [O.name].") + else if(target.put_in_hands(pinpointer)) + to_chat(target, "Pinpointer appear in your hands.") + + //If there other hunters, then give pinpointer target on their treasure and end special_act + for(var/datum/mini_role/treasure_hunter/existing_hunter in GLOB.mini_role.all_mini_roles_datums) + if(existing_hunter.treasure) + treasure = existing_hunter.treasure + pinpointer.target = treasure + break + else //If not, then create our own treasure + var/list/turf/avalible_turfs = get_subarea_turfs(/area/cadaab/caves, list(/proc/is_turf_no_mines_and_walls)) + var/turf/selected_turf = pick(avalible_turfs) + treasure = weakref(new /obj/structure/closet/crate/secure/loot(selected_turf)) + pinpointer.target = treasure + break + +/* Tired +/datum/mini_role/cyborg + name = "Киборг" + desc = "Китайский" + objective = "Закончите смену либо с новыми аугментами, либо убрав все уже установленные." + no_robots = TRUE + +/datum/mini_role/cyborg/special_act(var/mob/living/carbon/human/target) + var/list/possible_augments = list() + + +/datum/mini_role/authority + name = "Авторитет" + desc = "Девяностые" + objective = "Доживите до конца смены вместе со всеми членами своей группировки." + gear = list(/obj/random/handgun, /obj/item/clothing/mask/balaclava, /obj/item/storage/box/syndie_kit/imp_imprinting, /obj/item/grenade/smokebomb, /obj/item/spacecash/bundle/c1000, /obj/item/melee/energy/knife) + random_gear = 2 + +/datum/mini_role/authority/special_act(var/mob/living/carbon/human/target) + var/need_members_amount = rand(2,4) + second_objective = "Завербуйте в свою группировку как минимум [need_members_amount] лица." +*/ diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index d1184ca342796..db14456abf80d 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -173,6 +173,8 @@ would spawn and follow the beaker, even if it is carried or thrown. name = "smoke" icon_state = "smoke" opacity = 1 + plane = DECORATIONS_PLANE //BoS + layer = 5 //BoS anchored = FALSE mouse_opacity = 0 var/amount = 6.0 diff --git a/code/modules/aspects/traps.dm b/code/modules/aspects/traps.dm index f61761484147f..9794be0202763 100644 --- a/code/modules/aspects/traps.dm +++ b/code/modules/aspects/traps.dm @@ -3,7 +3,7 @@ /datum/round_aspect/traps name = "Минное поле" - chance = 25 + chance = 20 weight = ASPECT_WEIGHT_TRAPS announce_text = "Ночью чёртовы пираты расставили вокруг и внутри аванпоста около сотни мин. Смотрите под ноги на Кадаабе!" var/area/spawn_area = /area/maintenance diff --git a/code/modules/client/preference_setup/antagonism/01_candidacy.dm b/code/modules/client/preference_setup/antagonism/01_candidacy.dm index dce7f57aba4b6..9eddd50d842f3 100644 --- a/code/modules/client/preference_setup/antagonism/01_candidacy.dm +++ b/code/modules/client/preference_setup/antagonism/01_candidacy.dm @@ -39,7 +39,6 @@ var/datum/antagonist/antag = all_antag_types[antag_type] if(antag.id == MODE_MINI_ROLES) //BoS continue - . += "
E(u*;slB|VhZM=>F_W7ORb%nC8J4Ck1|3#Up*p zEg!~E5Xj4sU8J3MBltrRzBchx=I7w1e3uzrLsVAIm}OXTTA+vAV-O=fBV6l48FanP z9UD9Rg%>#+F^EI12dlJm_@gSA<6hI`Y< s7|$ z-}O1Wt&R)tM$;Z$hT}a?RIg>@Ba9*Gw^RI~v_reTpQd%CJj$Em)B|(u#N&K4GQrEP zwS*pC&+mRcj2`Gg7}m kM(ZB4wYy`JPLF{TSX zNbQ#pwzQrn`JeFZr{6o6dLfV*$7{q}zl+0!HrahHyltGoaM(1Sy4l2LcyU5Eo#OI+ zT&OBz(ePdr_9sc5FhOaMgGFR7H>O?itgk1`=mw>)Z6&h0l;L-`pw#y#FV-24=R3%* z*F!gOIsUOOSUkSV mKsosrMD zYzei;F5 l|!tnX9UBW{60&h6@a@_d_9hx6vQ|*qk zNfm`d23Q%TptaVE`yHlCj%i>$|30(kckn!KjA4!)vYD??ZfT|Rj)>^q7RoK7QCvC6 zo-8GY&2F%M=y&>qV;IrX#O?7Q_KQza*WHJ+wl`1mKcPw7{~cVmG99r`IHT6*G5xB5 zN7)ctCqr#-f?l^P#Xh~Xoa#eE^Dzz2+hQ{HBeR|RiPcKR e!2 z^8)UZT1@?B!hq#GnV0>r4KBr9u0a2pb=Z{_Ann+Nmw7cq_RZ*PX<$4ZNB_hLlrh@) zMQ-D`@-dB)e#$CLao19#^+2B`st7c v}dJo*Zhq&};2~YAr zVcMbh4^~$M(D$eaTcdpXGQ$w ug??E@LgGz%y{M}w=peckVt8@mV3uv?G;Pq-3 zu1B;pW?M&kf*rLN0vWB-!{xapc(v8?tFHxXDi*ObK?9pB4m961#vrko@Hso0wW}yI z7t@(5Vc1X)ul5?w=ryp^eG&O9y71SD#VK3NSnYbMU#Vs|{49glh8dMju)8&tGrFyG zPi?~`{1$qWXW4kZ3zdT=a~ITz?0)8zKw~1Eoaq!+Vbik%*RLLt>AaRP`&uG3?MSQp z1KXI@SnJJWq8mi1BprK$cPP~zL-bb=^-B$yD9)oLI|#ETU*e6-(8_p-y33148biF| zRf$Mdf!bfhUC{(?-aSOz8s^^Y5ZCQPk@5z{vfboKv?;g{jd_C=y}d9Rn1#BnlHax8 zz+ =E8wy>~0AOTpdfH!V#fV ziadD$-=b-}OY|AA*@T^WElS&AdPQ+e#t&kp;fwE!?rd-F=B{HVZbRi5YQBJdgbiV% zI;7Z5<8b2#Mkm9Gn3r*F{T^KAqexSF5IuPo!J*v@J}6*HIE&EX05cU41n<8`thEhg zcimVvG{{JUB^%rnJjwrrukPP`P^ZF-u`SiO^(*mMvjWTGt#mCDkkYA5Z0->P5(4pm zILpODDt=QBv%%1TmKiH_7qrN5%f%wXllmqvJX2LfP@ qXY@E5pRPhmVUSlo^Keo?8olXm=z1;UV$< z{&a+QGv1|1@=!j*>(-#9=Z3+Z(+t|FkzKRI*4BZz`Yg(nUd%