mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-18 19:44:58 +01:00
(Ready) Clockwork Cult Rework: Proof-of-concept (#29741)
* Starting on the rework * Reworks the Ark * Work on Reebe * More Ark stuff * this too * Removes ark silliness, remaps Reebe a tad * Spawning mechanics * Work on gamemode code * Finishes up ark stuff * Removes Judgement, and lots of other changes * New Ark activation sounds, Ratvar text * Spawn protection! * Adds the abscondence bijou * Bijou stuff * well, this is it * somewhat absentminded coder * Remaps the Reebe z * replica fabricators now work! * Guide paper! * Now they're clockwork floors * Infirmary, tweaks, numbers * A new thing! * this is ok for now * I was gonna whine but it's actually necessary * Adds damage scaling to ocular wardens * I missed a thing * you can go back too * New clockwork armor sprites * Weapons, scripture, oh my! * no! shoo! * hey, I forgot about you! * this looks much better, I'll give you that * no teleporting into the void! * we have no need of you anymore * Conflicteroos * AUTOMATIC SPINNING CHAIRS * how many times do we have to teach you this LESSON OLD MAN * flagged! * last time, meesa promise * Conflicts 1 * wood filling * Kindle is a projectile, and other stuff * Chameleon jumpsuit, some small changes * 150 hours of testing * Curious is the trapmaker's art * Conflicts 1 * naaah * Fixes an ark sound * Removes the prolonging prism * Adds a delay to warping in * First steps towards changing the power system * Removes power from sigils, moves to global * Conflicts 1 * zoom zoom * Adds the stargazer, re-adds conversion * conflicts? more like CLOCK-flicts * get it? clockflicts? * Daemon tuning * Scraps components, 1/? * A grace period, among other things * You can't get to reebe from space no stop bad * Adds some cogscarab shells to Reebe - yes, I get the sounds * FUCK * Chairs are very important. * Clock golems, sound improvement, intercoms * Sounds, floor fixes, conflicts * Fixes the conflicts * Prevents intercom use during non-clock rounds * Wiki, HUD timer, tweaks, golems * Components, removes unused structures, rep. fab power * go-time * Ending the round is not a good idea * whoops, forgot about you * ssh is ok * this works too
This commit is contained in:
@@ -211,6 +211,13 @@
|
||||
|
||||
var/datum/action/item_action/chameleon/change/chameleon_action
|
||||
|
||||
/obj/item/clothing/under/chameleon/ratvar
|
||||
name = "ratvarian engineer's jumpsuit"
|
||||
desc = "A tough jumpsuit woven from alloy threads. It can take on the appearance of other jumpsuits."
|
||||
icon_state = "engine"
|
||||
item_state = "engi_suit"
|
||||
item_color = "engine"
|
||||
|
||||
/obj/item/clothing/under/chameleon/New()
|
||||
..()
|
||||
chameleon_action = new(src)
|
||||
|
||||
@@ -586,6 +586,57 @@
|
||||
H.adjustFireLoss(-4)
|
||||
H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM)
|
||||
|
||||
|
||||
/datum/species/golem/clockwork
|
||||
name = "Clockwork Golem"
|
||||
id = "clockwork golem"
|
||||
say_mod = "clicks"
|
||||
limbs_id = "clockgolem"
|
||||
info_text = "<span class='bold alloy'>As a </span><span class='bold brass'>clockwork golem</span><span class='bold alloy'>, you are faster than \
|
||||
other types of golem (being a machine), and are immune to electric shocks.</span>"
|
||||
species_traits = list(NO_UNDERWEAR, NOTRANSSTING, NOBREATH, NOZOMBIE, VIRUSIMMUNE, RADIMMUNE, NOBLOOD, RESISTCOLD, RESISTPRESSURE)
|
||||
armor = 40 //Reinforced, but also slim to allow for fast movement
|
||||
attack_verb = "smash"
|
||||
attack_sound = 'sound/magic/clockwork/anima_fragment_attack.ogg'
|
||||
sexes = FALSE
|
||||
speedmod = 0
|
||||
siemens_coeff = 0
|
||||
damage_overlay_type = "synth"
|
||||
prefix = "Clockwork"
|
||||
var/has_corpse
|
||||
|
||||
/datum/species/golem/clockwork/on_species_gain(mob/living/carbon/human/H)
|
||||
. = ..()
|
||||
H.faction |= "ratvar"
|
||||
|
||||
/datum/species/golem/clockwork/on_species_loss(mob/living/carbon/human/H)
|
||||
if(!is_servant_of_ratvar(H))
|
||||
H.faction -= "ratvar"
|
||||
. = ..()
|
||||
|
||||
/datum/species/golem/clockwork/get_spans()
|
||||
return SPAN_ROBOT //beep
|
||||
|
||||
/datum/species/golem/clockwork/spec_death(gibbed, mob/living/carbon/human/H)
|
||||
gibbed = !has_corpse ? FALSE : gibbed
|
||||
. = ..()
|
||||
if(!has_corpse)
|
||||
var/turf/T = get_turf(H)
|
||||
H.visible_message("<span class='warning'>[H]'s exoskeleton shatters, collapsing into a heap of scrap!</span>")
|
||||
playsound(H, 'sound/magic/clockwork/anima_fragment_death.ogg', 50, TRUE)
|
||||
for(var/i in 1 to rand(3, 5))
|
||||
new/obj/item/clockwork/alloy_shards/small(T)
|
||||
new/obj/item/clockwork/alloy_shards/clockgolem_remains(T)
|
||||
qdel(H)
|
||||
|
||||
/datum/species/golem/clockwork/no_scrap //These golems are created through the herald's beacon and leave normal corpses on death.
|
||||
id = "clockwork golem servant"
|
||||
armor = 15 //Balance reasons make this armor weak
|
||||
has_corpse = TRUE
|
||||
blacklisted = TRUE
|
||||
dangerous_existence = TRUE
|
||||
|
||||
|
||||
/datum/species/golem/cloth
|
||||
name = "Cloth Golem"
|
||||
id = "cloth golem"
|
||||
|
||||
@@ -251,7 +251,7 @@
|
||||
emag_modules = list(/obj/item/melee/transforming/energy/sword/cyborg)
|
||||
ratvar_modules = list(
|
||||
/obj/item/clockwork/slab/cyborg,
|
||||
/obj/item/clockwork/ratvarian_spear/cyborg,
|
||||
/obj/item/clockwork/weapon/ratvarian_spear,
|
||||
/obj/item/clockwork/replica_fabricator/cyborg)
|
||||
moduleselect_icon = "standard"
|
||||
feedback_key = "cyborg_standard"
|
||||
@@ -282,7 +282,7 @@
|
||||
emag_modules = list(/obj/item/reagent_containers/borghypo/hacked)
|
||||
ratvar_modules = list(
|
||||
/obj/item/clockwork/slab/cyborg/medical,
|
||||
/obj/item/clockwork/ratvarian_spear/cyborg)
|
||||
/obj/item/clockwork/weapon/ratvarian_spear)
|
||||
cyborg_base_icon = "medical"
|
||||
moduleselect_icon = "medical"
|
||||
feedback_key = "cyborg_medical"
|
||||
@@ -334,7 +334,7 @@
|
||||
/obj/item/clothing/mask/gas/sechailer/cyborg)
|
||||
emag_modules = list(/obj/item/gun/energy/laser/cyborg)
|
||||
ratvar_modules = list(/obj/item/clockwork/slab/cyborg/security,
|
||||
/obj/item/clockwork/ratvarian_spear/cyborg)
|
||||
/obj/item/clockwork/weapon/ratvarian_spear)
|
||||
cyborg_base_icon = "sec"
|
||||
moduleselect_icon = "security"
|
||||
feedback_key = "cyborg_security"
|
||||
@@ -371,7 +371,7 @@
|
||||
emag_modules = list(/obj/item/reagent_containers/borghypo/peace/hacked)
|
||||
ratvar_modules = list(
|
||||
/obj/item/clockwork/slab/cyborg/peacekeeper,
|
||||
/obj/item/clockwork/ratvarian_spear/cyborg)
|
||||
/obj/item/clockwork/weapon/ratvarian_spear)
|
||||
cyborg_base_icon = "peace"
|
||||
moduleselect_icon = "standard"
|
||||
feedback_key = "cyborg_peacekeeper"
|
||||
@@ -504,7 +504,7 @@
|
||||
emag_modules = list(/obj/item/borg/stun)
|
||||
ratvar_modules = list(
|
||||
/obj/item/clockwork/slab/cyborg/miner,
|
||||
/obj/item/clockwork/ratvarian_spear/cyborg,
|
||||
/obj/item/clockwork/weapon/ratvarian_spear,
|
||||
/obj/item/borg/sight/xray/truesight_lens)
|
||||
cyborg_base_icon = "miner"
|
||||
moduleselect_icon = "miner"
|
||||
@@ -524,7 +524,7 @@
|
||||
|
||||
ratvar_modules = list(
|
||||
/obj/item/clockwork/slab/cyborg/security,
|
||||
/obj/item/clockwork/ratvarian_spear/cyborg)
|
||||
/obj/item/clockwork/weapon/ratvarian_spear)
|
||||
cyborg_base_icon = "synd_sec"
|
||||
moduleselect_icon = "malf"
|
||||
can_be_pushed = FALSE
|
||||
@@ -551,7 +551,7 @@
|
||||
/obj/item/gun/medbeam)
|
||||
ratvar_modules = list(
|
||||
/obj/item/clockwork/slab/cyborg/medical,
|
||||
/obj/item/clockwork/ratvarian_spear/cyborg)
|
||||
/obj/item/clockwork/weapon/ratvarian_spear)
|
||||
cyborg_base_icon = "synd_medical"
|
||||
moduleselect_icon = "malf"
|
||||
can_be_pushed = FALSE
|
||||
|
||||
@@ -130,9 +130,9 @@
|
||||
hacked = TRUE
|
||||
visualAppearence = CLOCKDRONE
|
||||
can_be_held = FALSE
|
||||
flavortext = "<span class='heavy_brass'>You are a cogscarab</span><b>, a clockwork creation of Ratvar. As a cogscarab, you have low health, an inbuilt fabricator that can convert brass \
|
||||
to power, a set of relatively fast tools, </b><span class='heavy_brass'>can communicate over the Hierophant Network with :b</span><b>, and are immune to extreme \
|
||||
temperatures and pressures. \nYour goal is to serve the Justiciar and his servants by repairing and defending all they create.</b>"
|
||||
flavortext = "<b><span class='nezbere'>You are a cogscarab,</span> a tiny building construct of Ratvar. While you're weak and can't recite scripture, \
|
||||
you have a set of quick tools, as well as a replica fabricator that can create brass and convert objects.<br><br>Work with the servants of Ratvar \
|
||||
to construct and maintain defenses at the City of Cogs. If there are no servants, use this time to experiment with base designs!"
|
||||
|
||||
/mob/living/simple_animal/drone/cogscarab/ratvar //a subtype for spawning when ratvar is alive, has a slab that it can use and a normal fabricator
|
||||
default_storage = /obj/item/storage/toolbox/brass/prefilled/ratvar
|
||||
|
||||
@@ -164,6 +164,7 @@ Difficulty: Medium
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
var/storm_type = /datum/weather/ash_storm
|
||||
var/storm_cooldown = 0
|
||||
var/static/list/excluded_areas = list(/area/reebe/city_of_cogs)
|
||||
|
||||
/obj/item/staff/storm/attack_self(mob/user)
|
||||
if(storm_cooldown > world.time)
|
||||
@@ -171,6 +172,9 @@ Difficulty: Medium
|
||||
return
|
||||
|
||||
var/area/user_area = get_area(user)
|
||||
if(user_area.type in excluded_areas)
|
||||
to_chat(user, "<span class='warning'>Something is preventing you from using the staff here.</span>")
|
||||
return
|
||||
var/datum/weather/A
|
||||
for(var/V in SSweather.existing_weather)
|
||||
var/datum/weather/W = V
|
||||
|
||||
@@ -84,6 +84,7 @@
|
||||
var/beenhit = 0 // used for counting how many times it has been hit, used for Aliens at the moment
|
||||
var/mob/living/silicon/ai/occupier = null
|
||||
var/transfer_in_progress = FALSE //Is there an AI being transferred out of us?
|
||||
var/obj/item/clockwork/integration_cog/integration_cog //Is there a cog siphoning power?
|
||||
var/longtermpower = 10
|
||||
var/auto_name = 0
|
||||
var/failure_timer = 0
|
||||
@@ -215,6 +216,8 @@
|
||||
else
|
||||
to_chat(user, "It's [ !terminal ? "not" : "" ] wired up.")
|
||||
to_chat(user, "The electronics are[!has_electronics?"n't":""] installed.")
|
||||
if(user.Adjacent(src) && integration_cog)
|
||||
to_chat(user, "<span class='warning'>[src]'s innards have been replaced by strange brass machinery!</span>")
|
||||
|
||||
else
|
||||
if (stat & MAINT)
|
||||
@@ -224,6 +227,8 @@
|
||||
else
|
||||
to_chat(user, "The cover is closed.")
|
||||
|
||||
if(integration_cog && is_servant_of_ratvar(user))
|
||||
to_chat(user, "<span class='brass'>There is an integration cog installed!</span>")
|
||||
|
||||
// update the APC icon to show the three base states
|
||||
// also add overlays for indicator lights
|
||||
@@ -408,6 +413,17 @@
|
||||
"<span class='notice'>You remove the power control board.</span>")
|
||||
new /obj/item/electronics/apc(loc)
|
||||
return
|
||||
else if(integration_cog)
|
||||
user.visible_message("<span class='notice'>[user] starts prying [integration_cog] from [src]...</span>", \
|
||||
"<span class='notice'>You painstakingly start tearing [integration_cog] out of [src]'s guts...</span>")
|
||||
playsound(src, W.usesound, 50, TRUE)
|
||||
if(!do_after(user, 100 * W.toolspeed, target = src))
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] destroys [integration_cog] in [src]!</span>", \
|
||||
"<span class='notice'>[integration_cog] comes free with a clank and snaps in two as the machinery returns to normal!</span>")
|
||||
playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE)
|
||||
QDEL_NULL(integration_cog)
|
||||
return
|
||||
else if (opened!=2) //cover isn't removed
|
||||
opened = 0
|
||||
coverlocked = TRUE //closing cover relocks it
|
||||
@@ -625,6 +641,33 @@
|
||||
if (opened==2)
|
||||
opened = 1
|
||||
update_icon()
|
||||
else if(istype(W, /obj/item/clockwork/integration_cog) && is_servant_of_ratvar(user))
|
||||
if(integration_cog)
|
||||
to_chat(user, "<span class='warning'>This APC already has a cog.</span>")
|
||||
return
|
||||
if(!opened)
|
||||
user.visible_message("<span class='warning'>[user] slices [src]'s cover lock, and it swings wide open!</span>", \
|
||||
"<span class='alloy'>You slice [src]'s cover lock apart with [W], and the cover swings open.</span>")
|
||||
opened = TRUE
|
||||
update_icon()
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] presses [W] into [src]!</span>", \
|
||||
"<span class='alloy'>You hold [W] in place within [src], and it slowly begins to warm up...</span>")
|
||||
playsound(src, 'sound/machines/click.ogg', 50, TRUE)
|
||||
if(!do_after(user, 70, target = src))
|
||||
return
|
||||
user.visible_message("<span class='warning'>[user] installs [W] in [src]!</span>", \
|
||||
"<span class='alloy'>Replicant alloy rapidly covers the APC's innards, replacing the machinery.</span><br>\
|
||||
<span class='brass'>This APC will now passively provide power for the cult!</span>")
|
||||
playsound(user, 'sound/machines/clockcult/integration_cog_install.ogg', 50, TRUE)
|
||||
user.transferItemToLoc(W, src)
|
||||
integration_cog = W
|
||||
START_PROCESSING(SSfastprocess, W)
|
||||
playsound(src, 'sound/machines/clockcult/steam_whoosh.ogg', 50, FALSE)
|
||||
opened = FALSE
|
||||
locked = FALSE
|
||||
update_icon()
|
||||
return
|
||||
else if(panel_open && !opened && is_wire_tool(W))
|
||||
wires.interact(user)
|
||||
else
|
||||
@@ -695,7 +738,7 @@
|
||||
|
||||
/obj/machinery/power/apc/ui_data(mob/user)
|
||||
var/list/data = list(
|
||||
"locked" = locked,
|
||||
"locked" = integration_cog ? !is_servant_of_ratvar(user) : locked,
|
||||
"failTime" = failure_timer,
|
||||
"isOperating" = operating,
|
||||
"externalPower" = main_status,
|
||||
|
||||
@@ -70,7 +70,8 @@
|
||||
/obj/item/stack/medical/gauze = /datum/species/golem/cloth,
|
||||
/obj/item/stack/sheet/cloth = /datum/species/golem/cloth,
|
||||
/obj/item/stack/sheet/mineral/adamantine = /datum/species/golem/adamantine,
|
||||
/obj/item/stack/sheet/plastic = /datum/species/golem/plastic)
|
||||
/obj/item/stack/sheet/plastic = /datum/species/golem/plastic,
|
||||
/obj/item/stack/tile/brass = /datum/species/golem/clockwork)
|
||||
|
||||
if(istype(I, /obj/item/stack))
|
||||
var/obj/item/stack/O = I
|
||||
|
||||
Reference in New Issue
Block a user