Merge branch 'master' into upstream-merge-37476
# Please enter a commit message to explain why this merge is necessary, # especially if it merges an updated upstream into a topic branch. # # Lines starting with '#' will be ignored, and an empty message aborts # the commit.
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "ai-slipper0"
|
||||
layer = PROJECTILE_HIT_THRESHHOLD_LAYER
|
||||
plane = FLOOR_PLANE
|
||||
anchored = TRUE
|
||||
max_integrity = 200
|
||||
armor = list("melee" = 50, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30)
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
return examine(user)
|
||||
|
||||
//Start growing a human clone in the pod!
|
||||
/obj/machinery/clonepod/proc/growclone(ckey, clonename, ui, se, mindref, datum/species/mrace, list/features, factions, list/traits)
|
||||
/obj/machinery/clonepod/proc/growclone(ckey, clonename, ui, se, mindref, datum/species/mrace, list/features, factions, list/quirks)
|
||||
if(panel_open)
|
||||
return FALSE
|
||||
if(mess || attempting)
|
||||
@@ -203,7 +203,7 @@
|
||||
if(H)
|
||||
H.faction |= factions
|
||||
|
||||
for(var/V in traits)
|
||||
for(var/V in quirks)
|
||||
new V(H)
|
||||
|
||||
H.set_cloned_appearance()
|
||||
|
||||
@@ -291,6 +291,7 @@
|
||||
/obj/machinery/computer/arcade/battle/emag_act(mob/user)
|
||||
if(obj_flags & EMAGGED)
|
||||
return
|
||||
to_chat(user, "<span class='warning'>A mesmerizing Rhumba beat starts playing from the arcade machine's speakers!</span>")
|
||||
temp = "If you die in the game, you die for real!"
|
||||
player_hp = 30
|
||||
player_mp = 10
|
||||
@@ -614,7 +615,7 @@
|
||||
L.Stun(200, ignore_canstun = TRUE) //you can't run :^)
|
||||
var/S = new /obj/singularity/academy(usr.loc)
|
||||
addtimer(CALLBACK(src, /atom/movable/proc/say, "[S] winks out, just as suddenly as it appeared."), 50)
|
||||
QDEL_IN(src, 50)
|
||||
QDEL_IN(S, 50)
|
||||
else
|
||||
event = null
|
||||
turns += 1
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
if(pod.occupant)
|
||||
continue //how though?
|
||||
|
||||
if(pod.growclone(R.fields["ckey"], R.fields["name"], R.fields["UI"], R.fields["SE"], R.fields["mind"], R.fields["mrace"], R.fields["features"], R.fields["factions"], R.fields["traits"]))
|
||||
if(pod.growclone(R.fields["ckey"], R.fields["name"], R.fields["UI"], R.fields["SE"], R.fields["mind"], R.fields["mrace"], R.fields["features"], R.fields["factions"], R.fields["quirks"]))
|
||||
temp = "[R.fields["name"]] => <font class='good'>Cloning cycle in progress...</font>"
|
||||
records -= R
|
||||
|
||||
@@ -400,7 +400,7 @@
|
||||
else if(pod.occupant)
|
||||
temp = "<font class='bad'>Cloning cycle already in progress.</font>"
|
||||
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
|
||||
else if(pod.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["features"], C.fields["factions"], C.fields["traits"]))
|
||||
else if(pod.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["features"], C.fields["factions"], C.fields["quirks"]))
|
||||
temp = "[C.fields["name"]] => <font class='good'>Cloning cycle in progress...</font>"
|
||||
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
|
||||
records.Remove(C)
|
||||
@@ -473,10 +473,10 @@
|
||||
R.fields["blood_type"] = dna.blood_type
|
||||
R.fields["features"] = dna.features
|
||||
R.fields["factions"] = mob_occupant.faction
|
||||
R.fields["traits"] = list()
|
||||
for(var/V in mob_occupant.roundstart_traits)
|
||||
var/datum/trait/T = V
|
||||
R.fields["traits"] += T.type
|
||||
R.fields["quirks"] = list()
|
||||
for(var/V in mob_occupant.roundstart_quirks)
|
||||
var/datum/quirk/T = V
|
||||
R.fields["quirks"] += T.type
|
||||
|
||||
if (!isnull(mob_occupant.mind)) //Save that mind so traitors can continue traitoring after cloning.
|
||||
R.fields["mind"] = "[REF(mob_occupant.mind)]"
|
||||
|
||||
@@ -174,25 +174,26 @@
|
||||
|
||||
else
|
||||
var/list/S = power_station.linked_stations
|
||||
if(!S.len)
|
||||
to_chat(user, "<span class='alert'>No connected stations located.</span>")
|
||||
return
|
||||
for(var/obj/machinery/teleport/station/R in S)
|
||||
if(is_eligible(R))
|
||||
if(is_eligible(R) && R.teleporter_hub)
|
||||
var/area/A = get_area(R)
|
||||
L[avoid_assoc_duplicate_keys(A.name, areaindex)] = R
|
||||
if(!L.len)
|
||||
to_chat(user, "<span class='alert'>No active connected stations located.</span>")
|
||||
return
|
||||
var/desc = input("Please select a station to lock in.", "Locking Computer") as null|anything in L
|
||||
target = L[desc]
|
||||
if(target)
|
||||
var/obj/machinery/teleport/station/trg = target
|
||||
trg.linked_stations |= power_station
|
||||
trg.stat &= ~NOPOWER
|
||||
if(trg.teleporter_hub)
|
||||
trg.teleporter_hub.stat &= ~NOPOWER
|
||||
trg.teleporter_hub.update_icon()
|
||||
if(trg.teleporter_console)
|
||||
trg.teleporter_console.stat &= ~NOPOWER
|
||||
trg.teleporter_console.update_icon()
|
||||
var/obj/machinery/teleport/station/target_station = L[desc]
|
||||
if(!target_station || !target_station.teleporter_hub)
|
||||
return
|
||||
target = target_station.teleporter_hub
|
||||
target_station.linked_stations |= power_station
|
||||
target_station.stat &= ~NOPOWER
|
||||
if(target_station.teleporter_hub)
|
||||
target_station.teleporter_hub.stat &= ~NOPOWER
|
||||
target_station.teleporter_hub.update_icon()
|
||||
if(target_station.teleporter_console)
|
||||
target_station.teleporter_console.stat &= ~NOPOWER
|
||||
target_station.teleporter_console.update_icon()
|
||||
|
||||
/obj/machinery/computer/teleporter/proc/is_eligible(atom/movable/AM)
|
||||
var/turf/T = get_turf(AM)
|
||||
|
||||
@@ -355,8 +355,7 @@
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] removes the wires from [src].</span>", \
|
||||
"<span class='notice'>You remove the wiring from [src], exposing the circuit board.</span>")
|
||||
var/obj/item/stack/cable_coil/B = new(get_turf(src))
|
||||
B.amount = 5
|
||||
new/obj/item/stack/cable_coil(get_turf(src), 5)
|
||||
constructionStep = CONSTRUCTION_GUTTED
|
||||
update_icon()
|
||||
return
|
||||
|
||||
@@ -32,6 +32,7 @@ Possible to do for anyone motivated enough:
|
||||
desc = "It's a floor-mounted device for projecting holographic images."
|
||||
icon_state = "holopad0"
|
||||
layer = LOW_OBJ_LAYER
|
||||
plane = FLOOR_PLANE
|
||||
flags_1 = HEAR_1
|
||||
anchored = TRUE
|
||||
use_power = IDLE_POWER_USE
|
||||
@@ -66,7 +67,7 @@ Possible to do for anyone motivated enough:
|
||||
flags_1 = NODECONSTRUCT_1
|
||||
on_network = FALSE
|
||||
var/proximity_range = 1
|
||||
|
||||
|
||||
/obj/machinery/holopad/tutorial/Initialize(mapload)
|
||||
. = ..()
|
||||
if(proximity_range)
|
||||
@@ -86,7 +87,7 @@ Possible to do for anyone motivated enough:
|
||||
replay_stop()
|
||||
else if(disk && disk.record)
|
||||
replay_start()
|
||||
|
||||
|
||||
/obj/machinery/holopad/tutorial/HasProximity(atom/movable/AM)
|
||||
if (!isliving(AM))
|
||||
return
|
||||
@@ -487,7 +488,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
|
||||
if(QDELETED(user) || user.incapacitated() || !user.client)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
|
||||
//Can we display holos there
|
||||
//Area check instead of line of sight check because this is a called a lot if AI wants to move around.
|
||||
/obj/machinery/holopad/proc/validate_location(turf/T,check_los = FALSE)
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
desc = "It's useful for igniting plasma."
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon_state = "igniter0"
|
||||
plane = FLOOR_PLANE
|
||||
var/id = null
|
||||
var/on = FALSE
|
||||
anchored = TRUE
|
||||
@@ -12,7 +13,7 @@
|
||||
max_integrity = 300
|
||||
armor = list("melee" = 50, "bullet" = 30, "laser" = 70, "energy" = 50, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70)
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
|
||||
/obj/machinery/igniter/on
|
||||
on = TRUE
|
||||
icon_state = "igniter1"
|
||||
|
||||
@@ -1,143 +0,0 @@
|
||||
/obj/machinery/robotic_fabricator
|
||||
name = "robotic fabricator"
|
||||
icon = 'icons/obj/robotics.dmi'
|
||||
icon_state = "fab-idle"
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
var/metal_amount = 0
|
||||
var/operating = FALSE
|
||||
var/obj/item/being_built = null
|
||||
use_power = IDLE_POWER_USE
|
||||
idle_power_usage = 20
|
||||
active_power_usage = 5000
|
||||
|
||||
/obj/machinery/robotic_fabricator/attackby(obj/item/O, mob/living/user, params)
|
||||
if (istype(O, /obj/item/stack/sheet/metal))
|
||||
if (metal_amount < 150000)
|
||||
add_overlay("fab-load-metal")
|
||||
addtimer(CALLBACK(src, .proc/FinishLoadingMetal, O, user), 15)
|
||||
else
|
||||
to_chat(user, "\The [src] is full.")
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/robotic_fabricator/proc/FinishLoadingMetal(obj/item/stack/sheet/metal/M, mob/living/user)
|
||||
cut_overlay("fab-load-metal")
|
||||
if(QDELETED(M) || QDELETED(user))
|
||||
return
|
||||
var/count = 0
|
||||
while(metal_amount < 150000 && !QDELETED(M))
|
||||
metal_amount += M.materials[MAT_METAL]
|
||||
M.use(1)
|
||||
count++
|
||||
|
||||
to_chat(user, "<span class='notice'>You insert [count] metal sheet\s into \the [src].</span>")
|
||||
updateDialog()
|
||||
|
||||
/obj/machinery/robotic_fabricator/power_change()
|
||||
if (powered())
|
||||
stat &= ~NOPOWER
|
||||
else
|
||||
stat |= NOPOWER
|
||||
|
||||
/obj/machinery/robotic_fabricator/ui_interact(mob/user)
|
||||
. = ..()
|
||||
var/dat
|
||||
|
||||
if (src.operating)
|
||||
dat = {"
|
||||
<TT>Building [src.being_built.name].<BR>
|
||||
Please wait until completion...</TT><BR>
|
||||
<BR>
|
||||
"}
|
||||
else
|
||||
dat = {"
|
||||
<B>Metal Amount:</B> [min(150000, src.metal_amount)] cm<sup>3</sup> (MAX: 150,000)<BR><HR>
|
||||
<BR>
|
||||
<A href='?src=[REF(src)];make=1'>Left Arm (25,000 cc metal.)<BR>
|
||||
<A href='?src=[REF(src)];make=2'>Right Arm (25,000 cc metal.)<BR>
|
||||
<A href='?src=[REF(src)];make=3'>Left Leg (25,000 cc metal.)<BR>
|
||||
<A href='?src=[REF(src)];make=4'>Right Leg (25,000 cc metal).<BR>
|
||||
<A href='?src=[REF(src)];make=5'>Chest (50,000 cc metal).<BR>
|
||||
<A href='?src=[REF(src)];make=6'>Head (50,000 cc metal).<BR>
|
||||
<A href='?src=[REF(src)];make=7'>Robot Frame (75,000 cc metal).<BR>
|
||||
"}
|
||||
|
||||
user << browse("<HEAD><TITLE>Robotic Fabricator Control Panel</TITLE></HEAD><TT>[dat]</TT>", "window=robot_fabricator")
|
||||
onclose(user, "robot_fabricator")
|
||||
return
|
||||
|
||||
/obj/machinery/robotic_fabricator/Topic(href, href_list)
|
||||
if (..())
|
||||
return
|
||||
|
||||
usr.set_machine(src)
|
||||
src.add_fingerprint(usr)
|
||||
|
||||
if (href_list["make"])
|
||||
if (!src.operating)
|
||||
var/part_type = text2num(href_list["make"])
|
||||
|
||||
var/build_type = ""
|
||||
var/build_time = 200
|
||||
var/build_cost = 25000
|
||||
|
||||
switch (part_type)
|
||||
if (1)
|
||||
build_type = "/obj/item/bodypart/l_arm/robot"
|
||||
build_time = 200
|
||||
build_cost = 10000
|
||||
|
||||
if (2)
|
||||
build_type = "/obj/item/bodypart/r_arm/robot"
|
||||
build_time = 200
|
||||
build_cost = 10000
|
||||
|
||||
if (3)
|
||||
build_type = "/obj/item/bodypart/l_leg/robot"
|
||||
build_time = 200
|
||||
build_cost = 10000
|
||||
|
||||
if (4)
|
||||
build_type = "/obj/item/bodypart/r_leg/robot"
|
||||
build_time = 200
|
||||
build_cost = 10000
|
||||
|
||||
if (5)
|
||||
build_type = "/obj/item/bodypart/chest/robot"
|
||||
build_time = 350
|
||||
build_cost = 40000
|
||||
|
||||
if (6)
|
||||
build_type = "/obj/item/bodypart/head/robot"
|
||||
build_time = 350
|
||||
build_cost = 5000
|
||||
|
||||
if (7)
|
||||
build_type = "/obj/item/robot_suit"
|
||||
build_time = 600
|
||||
build_cost = 15000
|
||||
|
||||
var/building = text2path(build_type)
|
||||
if (!isnull(building))
|
||||
if (src.metal_amount >= build_cost)
|
||||
operating = TRUE
|
||||
src.use_power = ACTIVE_POWER_USE
|
||||
|
||||
src.metal_amount = max(0, src.metal_amount - build_cost)
|
||||
|
||||
src.being_built = new building(src)
|
||||
|
||||
src.add_overlay("fab-active")
|
||||
src.updateUsrDialog()
|
||||
|
||||
spawn (build_time)
|
||||
if (!isnull(src.being_built))
|
||||
src.being_built.forceMove(drop_location())
|
||||
src.being_built = null
|
||||
src.use_power = IDLE_POWER_USE
|
||||
operating = FALSE
|
||||
cut_overlay("fab-active")
|
||||
return
|
||||
|
||||
updateUsrDialog()
|
||||
@@ -5,7 +5,7 @@
|
||||
name = "ominous beacon"
|
||||
desc = "This looks suspicious..."
|
||||
icon = 'icons/obj/singularity.dmi'
|
||||
icon_state = "beacon"
|
||||
icon_state = "beacon0"
|
||||
|
||||
anchored = FALSE
|
||||
density = TRUE
|
||||
|
||||
@@ -47,7 +47,6 @@
|
||||
return
|
||||
if(is_ready())
|
||||
teleport(AM)
|
||||
use_power(5000)
|
||||
|
||||
/obj/machinery/teleport/hub/attackby(obj/item/W, mob/user, params)
|
||||
if(default_deconstruction_screwdriver(user, "tele-o", "tele0", W))
|
||||
@@ -61,13 +60,15 @@
|
||||
|
||||
/obj/machinery/teleport/hub/proc/teleport(atom/movable/M as mob|obj, turf/T)
|
||||
var/obj/machinery/computer/teleporter/com = power_station.teleporter_console
|
||||
if (!com)
|
||||
if (QDELETED(com))
|
||||
return
|
||||
if (!com.target)
|
||||
if (QDELETED(com.target))
|
||||
com.target = null
|
||||
visible_message("<span class='alert'>Cannot authenticate locked on coordinates. Please reinstate coordinate matrix.</span>")
|
||||
return
|
||||
if (ismovableatom(M))
|
||||
if(do_teleport(M, com.target))
|
||||
use_power(5000)
|
||||
if(!calibrated && prob(30 - ((accurate) * 10))) //oh dear a problem
|
||||
if(ishuman(M))//don't remove people from the round randomly you jerks
|
||||
var/mob/living/carbon/human/human = M
|
||||
|
||||
@@ -65,8 +65,7 @@
|
||||
return
|
||||
|
||||
/obj/item/stack/sheet/hairlesshide/machine_wash(obj/machinery/washing_machine/WM)
|
||||
var/obj/item/stack/sheet/wetleather/WL = new(loc)
|
||||
WL.amount = amount
|
||||
new /obj/item/stack/sheet/wetleather(drop_location(), amount)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/clothing/suit/hooded/ian_costume/machine_wash(obj/machinery/washing_machine/WM)
|
||||
|
||||
Reference in New Issue
Block a user