mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-04-16 09:31:47 +01:00
* fixes * fuck my stupid chungus life * Minion limit, heal fix, dead sac fix * cooldown, no sacrificing star gazer or ascended alive heretics * blade debuff * oopsy * Update tgui.bundle.js * map diff bot what ya doing * fuck that chat spam * lets heretic armour hold a haunted longsword * why not it makes sense * do_after * god I hate this bullshit * other lewc stuff * push * heretic id card fix * she tg on my ui till I css * yes * spent * fix / ipc buff (real)™️ * moderate again * revert * no reserve * bringing up to master * update map files to master * didnt replace centcomm * beginning some rebalancing * aggressive spread tweaks * lots of tweaks and fixes * trying to un-key the maps * maybe this time * this time???? * oops * sql fix * basicmob conversion * paintings! and a critical influence fix * rust + tweaks * monster tweak * small change * removing this * more tweaks. no more dusting * added some examine_more * flower seeds * various tweaks. more to come * no more conduit spacing * fixed some dumb stuff * silly stuff * its always prettier * bugfixes and linters * linters, wow * oops * bah * linter * fuck you * temp check * hidden influence drain * influence visible message * tweak fix * void cloak bugfix * small fixes * fixes * do_after_once broken * fixes and tweaks * heretic blade potential fix + sacrifice changes * batch of fixes * tiny tweak * rebuilt TGUI * no greentext + rerolls * logging + bugfix * unused var * small fix * various fixes * comment * projectile change * tgui rebuild * tgui bundle redo * rune issue solved * influence visible now * fix ui reloading * new moon ascension + fixes + icons * tweaks, species sprites * tgui rebuild * small tweak + linter * harvester icon tweak * spans * fixes and tweaks * caretaker nerf + tweaks * potential fix for knowledge * roller fix * mad mask * Update tgui.bundle.js * void phase tweak * Update tgui.bundle.js * misc tweaks * fix heretic not retargeting correctly with cryo * simplify logic * this is better * lots of fixes and tweaks * Update tgui.bundle.js * linter * linter * fireshark and greyscale insanity * fish * Update tgui.bundle.js * linter * linter * tgui * no window shopping * fish fix * tgui rebundle * moon smile runtime fix * various fixes * sacrifice fixes * insanity is easier now, madness mask changes. * bugfixing + teleport change * linters + tweaks * Update code/modules/antagonists/heretic/status_effects/mark_effects.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> * Update code/modules/antagonists/heretic/status_effects/mark_effects.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> --------- Signed-off-by: Kyani <65205627+EmeraldCandy@users.noreply.github.com> Co-authored-by: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com> Co-authored-by: warriorstar-orion <orion@snowfrost.garden> Co-authored-by: Paul <pmerkamp@gmail.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
647 lines
21 KiB
Plaintext
647 lines
21 KiB
Plaintext
#define GIBTONITE_QUALITY_LOW 1
|
|
#define GIBTONITE_QUALITY_MEDIUM 2
|
|
#define GIBTONITE_QUALITY_HIGH 3
|
|
#define PROBABILITY_REFINE_BY_FIRE 50
|
|
#define ORESTACK_OVERLAYS_MAX 10
|
|
//////////////////////////////
|
|
// MARK: ORES
|
|
//////////////////////////////
|
|
/obj/item/stack/ore
|
|
name = "rock"
|
|
icon = 'icons/obj/stacks/ores.dmi'
|
|
icon_state = "ore"
|
|
lefthand_file = 'icons/mob/inhands/ore_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/ore_righthand.dmi'
|
|
singular_name = "ore chunk"
|
|
var/points = 0 //How many points this ore gets you from the ore redemption machine
|
|
var/refined_type = null //What this ore defaults to being refined into
|
|
|
|
/obj/item/stack/ore/Initialize(mapload, new_amount, merge = TRUE)
|
|
. = ..()
|
|
scatter_atom()
|
|
|
|
/obj/item/stack/ore/scatter_atom(x_offset, y_offset)
|
|
pixel_x = rand(-8, 8) + x_offset
|
|
pixel_y = rand(-8, 0) + y_offset
|
|
|
|
/obj/item/stack/ore/welder_act(mob/user, obj/item/I)
|
|
. = TRUE
|
|
if(!refined_type)
|
|
to_chat(user, SPAN_NOTICE("You can't smelt [src] into anything useful!"))
|
|
return
|
|
if(!I.use_tool(src, user, 0, 15, volume = I.tool_volume))
|
|
return
|
|
new refined_type(drop_location(), amount)
|
|
to_chat(user, SPAN_NOTICE("You smelt [src] into its refined form!"))
|
|
qdel(src)
|
|
|
|
/obj/item/stack/ore/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE)
|
|
. = ..()
|
|
if(isnull(refined_type))
|
|
return
|
|
else
|
|
var/amountrefined = round((PROBABILITY_REFINE_BY_FIRE / 100) * amount, 1)
|
|
if(amountrefined < 1)
|
|
qdel(src)
|
|
else
|
|
new refined_type(get_turf(loc), amountrefined)
|
|
qdel(src)
|
|
|
|
/obj/item/stack/ore/glass
|
|
name = "sand pile"
|
|
desc = "A coarse, dust mainly composed of quartz and silica-rich rock. Among its many uses, it can be refined into glass when fired at high tempratures."
|
|
icon_state = "sand"
|
|
singular_name = "sand pile"
|
|
points = 1
|
|
refined_type = /obj/item/stack/sheet/glass
|
|
merge_type = /obj/item/stack/ore/glass
|
|
materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
|
|
|
|
/obj/item/stack/ore/glass/examine(mob/user)
|
|
. = ..()
|
|
. += SPAN_NOTICE("You can throw this into people's eyes!")
|
|
|
|
GLOBAL_LIST_INIT(sand_recipes, list(\
|
|
new /datum/stack_recipe("sandstone", /obj/item/stack/sheet/mineral/sandstone, 1, 1, 50),
|
|
new /datum/stack_recipe("grave", /obj/structure/grave, 5, time = 10 SECONDS, one_per_turf = TRUE, on_floor = TRUE)
|
|
))
|
|
|
|
/obj/item/stack/ore/glass/Initialize(mapload, new_amount, merge = TRUE)
|
|
recipes = GLOB.sand_recipes
|
|
. = ..()
|
|
|
|
/obj/item/stack/ore/glass/throw_impact(atom/hit_atom)
|
|
if(..() || !ishuman(hit_atom))
|
|
return
|
|
var/mob/living/carbon/human/C = hit_atom
|
|
if(C.head && C.head.flags_cover & HEADCOVERSEYES)
|
|
visible_message(SPAN_DANGER("[C]'s headgear blocks the sand!"))
|
|
return
|
|
if(C.wear_mask && C.wear_mask.flags_cover & MASKCOVERSEYES)
|
|
visible_message(SPAN_DANGER("[C]'s mask blocks the sand!"))
|
|
return
|
|
if(C.glasses && C.glasses.flags_cover & GLASSESCOVERSEYES)
|
|
visible_message(SPAN_DANGER("[C]'s glasses block the sand!"))
|
|
return
|
|
C.EyeBlurry(12 SECONDS)
|
|
C.apply_damage(15, STAMINA)//the pain from your eyes burning does stamina damage
|
|
C.AdjustConfused(10 SECONDS)
|
|
to_chat(C, SPAN_USERDANGER("[src] gets into your eyes! The pain, it burns!"))
|
|
qdel(src)
|
|
|
|
/obj/item/stack/ore/glass/ex_act(severity)
|
|
if(severity == EXPLODE_NONE)
|
|
return
|
|
qdel(src)
|
|
|
|
/obj/item/stack/ore/glass/basalt
|
|
name = "volcanic ash"
|
|
desc = "A coarse, abrasive basaltic dust rich in silica and various elemental oxides. Commonly refined into glass or used as fertiliser."
|
|
icon_state = "volcanic_sand"
|
|
singular_name = "volcanic ash pile"
|
|
|
|
/obj/item/stack/ore/glass/basalt/examine(mob/user)
|
|
. = ..()
|
|
. += SPAN_NOTICE("You could add some to a girder to make a false rock wall.")
|
|
|
|
/obj/item/stack/ore/glass/basalt/ancient
|
|
name = "ancient sand"
|
|
desc = "Basultic sand mined from an exceptionally old and compacted formation."
|
|
singular_name = "ancient sand pile"
|
|
|
|
/obj/item/stack/ore/iron
|
|
name = "iron ore"
|
|
desc = "Exceptionally common ore that can be refined into iron and steel."
|
|
icon_state = "iron_ore"
|
|
singular_name = "iron ore chunk"
|
|
points = 1
|
|
refined_type = /obj/item/stack/sheet/metal
|
|
materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT)
|
|
|
|
/obj/item/stack/ore/plasma
|
|
name = "plasma ore"
|
|
desc = "The reason you're here."
|
|
icon_state = "plasma_ore"
|
|
origin_tech = "plasmatech=2;materials=2"
|
|
singular_name = "plasma ore chunk"
|
|
points = 15
|
|
refined_type = /obj/item/stack/sheet/mineral/plasma
|
|
materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT)
|
|
|
|
/obj/item/stack/ore/silver
|
|
name = "silver ore"
|
|
desc = "Metal ore rich in precious silver."
|
|
icon_state = "silver_ore"
|
|
origin_tech = "materials=3"
|
|
singular_name = "silver ore chunk"
|
|
points = 16
|
|
refined_type = /obj/item/stack/sheet/mineral/silver
|
|
materials = list(MAT_SILVER=MINERAL_MATERIAL_AMOUNT)
|
|
|
|
/obj/item/stack/ore/gold
|
|
name = "gold ore"
|
|
desc = "WE'RE RICH!"
|
|
icon_state = "gold_ore"
|
|
origin_tech = "materials=4"
|
|
singular_name = "gold ore chunk"
|
|
points = 18
|
|
refined_type = /obj/item/stack/sheet/mineral/gold
|
|
materials = list(MAT_GOLD=MINERAL_MATERIAL_AMOUNT)
|
|
|
|
/obj/item/stack/ore/uranium
|
|
name = "uranium ore"
|
|
desc = "Radioactive ore containing significant amounts of natural uranium."
|
|
icon_state = "uranium_ore"
|
|
origin_tech = "materials=5"
|
|
singular_name = "uranium ore chunk"
|
|
points = 30
|
|
refined_type = /obj/item/stack/sheet/mineral/uranium
|
|
materials = list(MAT_URANIUM=MINERAL_MATERIAL_AMOUNT)
|
|
|
|
/obj/item/stack/ore/titanium
|
|
name = "titanium ore"
|
|
icon_state = "titanium_ore"
|
|
singular_name = "titanium ore chunk"
|
|
points = 50
|
|
materials = list(MAT_TITANIUM=MINERAL_MATERIAL_AMOUNT)
|
|
refined_type = /obj/item/stack/sheet/mineral/titanium
|
|
|
|
/obj/item/stack/ore/diamond
|
|
name = "diamond ore"
|
|
desc = "Rock formation containing diamond."
|
|
icon_state = "diamond_ore"
|
|
origin_tech = "materials=6"
|
|
singular_name = "diamond ore chunk"
|
|
points = 50
|
|
refined_type = /obj/item/stack/sheet/mineral/diamond
|
|
materials = list(MAT_DIAMOND=MINERAL_MATERIAL_AMOUNT)
|
|
|
|
/obj/item/stack/ore/diamond/ten
|
|
amount = 10
|
|
|
|
/obj/item/stack/ore/platinum
|
|
name = "platinum ore"
|
|
desc = "Rock formation containing platinum."
|
|
icon_state = "platinum_ore"
|
|
origin_tech = "materials=5"
|
|
singular_name = "platinum ore chunk"
|
|
points = 50
|
|
refined_type = /obj/item/stack/sheet/mineral/platinum
|
|
materials = list(MAT_PLATINUM = MINERAL_MATERIAL_AMOUNT)
|
|
|
|
/obj/item/stack/ore/palladium
|
|
name = "palladium ore"
|
|
desc = "Rock formation containing palladium."
|
|
icon_state = "palladium_ore"
|
|
origin_tech = "materials=5"
|
|
singular_name = "palladium ore chunk"
|
|
points = 50
|
|
refined_type = /obj/item/stack/sheet/mineral/palladium
|
|
materials = list(MAT_PALLADIUM = MINERAL_MATERIAL_AMOUNT)
|
|
|
|
/obj/item/stack/ore/iridium
|
|
name = "iridium ore"
|
|
desc = "Rock formation containing iridium."
|
|
icon_state = "iridium_ore"
|
|
origin_tech = "materials=5"
|
|
singular_name = "iridium ore chunk"
|
|
points = 50
|
|
refined_type = /obj/item/stack/sheet/mineral/iridium
|
|
materials = list(MAT_IRIDIUM = MINERAL_MATERIAL_AMOUNT)
|
|
|
|
/obj/item/stack/ore/brass
|
|
name = "brass ore"
|
|
desc = "Rock formation containing brass. This ore is not naturally occurring - if you see this, let development know."
|
|
singular_name = "brass ore chunk"
|
|
points = 1
|
|
refined_type = /obj/item/stack/tile/brass
|
|
materials = list(MAT_BRASS = MINERAL_MATERIAL_AMOUNT)
|
|
|
|
/obj/item/stack/ore/bananium
|
|
name = "bananium ore"
|
|
desc = "HONK!"
|
|
icon_state = "bananium_ore"
|
|
origin_tech = "materials=4"
|
|
singular_name = "bananium ore chunk"
|
|
points = 60
|
|
refined_type = /obj/item/stack/sheet/mineral/bananium
|
|
materials = list(MAT_BANANIUM=MINERAL_MATERIAL_AMOUNT)
|
|
|
|
/obj/item/stack/ore/tranquillite
|
|
name = "tranquillite ore"
|
|
desc = "..."
|
|
icon_state = "tranquillite_ore"
|
|
origin_tech = "materials=4"
|
|
singular_name = "transquillite ore chunk"
|
|
points = 60
|
|
refined_type = /obj/item/stack/sheet/mineral/tranquillite
|
|
materials = list(MAT_TRANQUILLITE=MINERAL_MATERIAL_AMOUNT)
|
|
|
|
/obj/item/stack/ore/slag
|
|
name = "slag"
|
|
desc = "Completely useless."
|
|
icon_state = "slag"
|
|
singular_name = "slag chunk"
|
|
|
|
//////////////////////////////
|
|
// MARK: GIBTONITE
|
|
//////////////////////////////
|
|
/obj/item/gibtonite
|
|
name = "gibtonite ore"
|
|
desc = "Extremely explosive if struck with mining equipment, Gibtonite is often used by miners to speed up their work by using it as a mining charge. This material is illegal to possess by unauthorized personnel under Space Law."
|
|
icon = 'icons/obj/mining.dmi'
|
|
icon_state = "Gibtonite ore"
|
|
w_class = WEIGHT_CLASS_BULKY
|
|
throw_range = 0
|
|
anchored = TRUE //Forces people to carry it by hand, no pulling!
|
|
var/primed = 0
|
|
var/det_time = 100
|
|
var/quality = GIBTONITE_QUALITY_LOW //How pure this gibtonite is, determines the explosion produced by it and is derived from the det_time of the rock wall it was taken from, higher value = better
|
|
var/attacher = "UNKNOWN"
|
|
var/datum/wires/explosive/gibtonite/wires
|
|
|
|
/obj/item/gibtonite/examine(mob/user)
|
|
. = ..()
|
|
. += SPAN_NOTICE("You can use a mining scanner to stop an activated gibtonite crystal from detonating.")
|
|
. += SPAN_NOTICE("In addition to simply hitting it, you can add a remote signaller to the gibtonite and trigger it to make the crystal begin to detonate!")
|
|
|
|
/obj/item/gibtonite/Initialize(mapload)
|
|
. = ..()
|
|
AddComponent(/datum/component/two_handed, require_twohands = TRUE)
|
|
|
|
/obj/item/gibtonite/Destroy()
|
|
if(wires)
|
|
SStgui.close_uis(wires)
|
|
QDEL_NULL(wires)
|
|
return ..()
|
|
|
|
/obj/item/gibtonite/attackby__legacy__attackchain(obj/item/I, mob/user, params)
|
|
if(!wires && istype(I, /obj/item/assembly/igniter))
|
|
user.visible_message("[user] attaches [I] to [src].", SPAN_NOTICE("You attach [I] to [src]."))
|
|
wires = new(src)
|
|
attacher = key_name(user)
|
|
qdel(I)
|
|
overlays += "Gibtonite_igniter"
|
|
return
|
|
|
|
if(wires && !primed)
|
|
if(istype(I, /obj/item/wirecutters) || istype(I, /obj/item/multitool) || istype(I, /obj/item/assembly/signaler))
|
|
wires.Interact(user)
|
|
return
|
|
|
|
if(istype(I, /obj/item/pickaxe) || istype(I, /obj/item/resonator) || I.force >= 10)
|
|
GibtoniteReaction(user)
|
|
return
|
|
if(primed)
|
|
if(istype(I, /obj/item/mining_scanner) || istype(I, /obj/item/t_scanner/adv_mining_scanner) || istype(I, /obj/item/multitool))
|
|
primed = 0
|
|
user.visible_message("The chain reaction was stopped! ...The ore's quality looks diminished.", SPAN_NOTICE("You stopped the chain reaction. ...The ore's quality looks diminished."))
|
|
icon_state = "Gibtonite ore"
|
|
quality = GIBTONITE_QUALITY_LOW
|
|
return
|
|
..()
|
|
|
|
/obj/item/gibtonite/attack_ghost(mob/user)
|
|
if(wires)
|
|
wires.Interact(user)
|
|
|
|
/obj/item/gibtonite/attack_self__legacy__attackchain(mob/user)
|
|
if(wires)
|
|
wires.Interact(user)
|
|
else
|
|
..()
|
|
|
|
/obj/item/gibtonite/bullet_act(obj/projectile/P)
|
|
GibtoniteReaction(P.firer)
|
|
..()
|
|
|
|
/obj/item/gibtonite/ex_act()
|
|
GibtoniteReaction(null, 1)
|
|
|
|
/obj/item/gibtonite/proc/GibtoniteReaction(mob/user, triggered_by = 0)
|
|
if(!primed)
|
|
playsound(src,'sound/effects/hit_on_shattered_glass.ogg',50,1)
|
|
primed = 1
|
|
icon_state = "Gibtonite active"
|
|
var/turf/bombturf = get_turf(src)
|
|
var/notify_admins = 0
|
|
if(!is_mining_level(z))//Only annoy the admins ingame if we're triggered off the mining zlevel
|
|
notify_admins = 1
|
|
|
|
if(notify_admins)
|
|
if(triggered_by == 1)
|
|
message_admins("An explosion has triggered a [name] to detonate at [ADMIN_COORDJMP(bombturf)].")
|
|
else if(triggered_by == 2)
|
|
message_admins("A signal has triggered a [name] to detonate at [ADMIN_COORDJMP(bombturf)]. Igniter attacher: [key_name_admin(attacher)]")
|
|
else
|
|
message_admins("[key_name_admin(user)] has triggered a [name] to detonate at [ADMIN_COORDJMP(bombturf)].")
|
|
if(triggered_by == 1)
|
|
log_game("An explosion has primed a [name] for detonation at [AREACOORD(bombturf)]")
|
|
else if(triggered_by == 2)
|
|
log_game("A signal has primed a [name] for detonation at [AREACOORD(bombturf)]). Igniter attacher: [key_name(attacher)].")
|
|
else
|
|
user.visible_message(SPAN_WARNING("[user] strikes \the [src], causing a chain reaction!"), SPAN_DANGER("You strike \the [src], causing a chain reaction."))
|
|
log_game("[key_name(user)] has primed a [name] for detonation at [AREACOORD(bombturf)])")
|
|
spawn(det_time)
|
|
if(primed)
|
|
if(quality == GIBTONITE_QUALITY_HIGH)
|
|
explosion(loc, 2, 4, 9, adminlog = notify_admins, cause = "Movable Gibtonite")
|
|
if(quality == GIBTONITE_QUALITY_MEDIUM)
|
|
explosion(loc, 1, 2, 5, adminlog = notify_admins, cause = "Movable Gibtonite")
|
|
if(quality == GIBTONITE_QUALITY_LOW)
|
|
explosion(loc, -1, 1, 3, adminlog = notify_admins, cause = "Movable Gibtonite")
|
|
qdel(src)
|
|
|
|
|
|
/obj/item/stack/ore/ex_act(severity)
|
|
if(!severity || severity >= EXPLODE_HEAVY)
|
|
return
|
|
qdel(src)
|
|
|
|
|
|
//////////////////////////////
|
|
// MARK: COINS
|
|
//////////////////////////////
|
|
/obj/item/coin
|
|
icon = 'icons/obj/economy.dmi'
|
|
name = "coin"
|
|
icon_state = "coin__heads"
|
|
flags = CONDUCT
|
|
force = 1
|
|
throwforce = 2
|
|
w_class = WEIGHT_CLASS_TINY
|
|
new_attack_chain = TRUE
|
|
var/string_attached
|
|
var/list/sideslist = list("heads","tails")
|
|
var/cmineral = null
|
|
var/name_by_cmineral = TRUE
|
|
var/cooldown = 0
|
|
var/credits = 10
|
|
var/has_action = FALSE
|
|
var/heads_name = "heads"
|
|
|
|
/obj/item/coin/Initialize(mapload)
|
|
. = ..()
|
|
icon_state = "coin_[cmineral]_[sideslist[1]]"
|
|
if(cmineral && name_by_cmineral)
|
|
name = "[cmineral] coin"
|
|
update_appearance(UPDATE_NAME|UPDATE_ICON_STATE)
|
|
AddComponent(/datum/component/surgery_initiator/robo)
|
|
|
|
/obj/item/coin/gold
|
|
cmineral = "gold"
|
|
icon_state = "coin_gold_heads"
|
|
materials = list(MAT_GOLD = 400)
|
|
credits = 160
|
|
|
|
/obj/item/coin/silver
|
|
cmineral = "silver"
|
|
icon_state = "coin_silver_heads"
|
|
materials = list(MAT_SILVER = 400)
|
|
credits = 40
|
|
|
|
/obj/item/coin/diamond
|
|
cmineral = "diamond"
|
|
icon_state = "coin_diamond_heads"
|
|
materials = list(MAT_DIAMOND = 400)
|
|
credits = 120
|
|
|
|
/obj/item/coin/iron
|
|
cmineral = "iron"
|
|
icon_state = "coin_iron_heads"
|
|
materials = list(MAT_METAL = 400)
|
|
credits = 20
|
|
|
|
/obj/item/coin/plasma
|
|
cmineral = "plasma"
|
|
desc = "You really shouldn't keep this in the same pocket as a lighter."
|
|
icon_state = "coin_plasma_heads"
|
|
materials = list(MAT_PLASMA = 400)
|
|
credits = 80
|
|
|
|
/obj/item/coin/plasma/bullet_act(obj/projectile/P)
|
|
if(!QDELETED(src) && !P.nodamage && (P.damage_type == BURN))
|
|
log_and_set_aflame(P.firer, P)
|
|
|
|
/obj/item/coin/plasma/attack_by(obj/item/attacking, mob/user, params)
|
|
if(..() || !attacking.get_heat())
|
|
return FINISH_ATTACK
|
|
log_and_set_aflame(user, attacking)
|
|
|
|
/obj/item/coin/plasma/proc/log_and_set_aflame(mob/user, obj/item/I)
|
|
var/turf/T = get_turf(src)
|
|
message_admins("Plasma coin ignited by [key_name_admin(user)]([ADMIN_QUE(user, "?")]) ([ADMIN_FLW(user, "FLW")]) in ([COORD(T)] - [ADMIN_JMP(T)]")
|
|
log_game("Plasma coin ignited by [key_name(user)] in [COORD(T)]")
|
|
investigate_log("was <font color='red'><b>ignited</b></font> by [key_name(user)]", INVESTIGATE_ATMOS)
|
|
user.create_log(MISC_LOG, "Plasma coin ignited using [I]", src)
|
|
fire_act()
|
|
|
|
/obj/item/coin/plasma/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE)
|
|
..()
|
|
atmos_spawn_air(LINDA_SPAWN_HEAT | LINDA_SPAWN_TOXINS, 5) // 2 is the "correct" ammount, but its super lame. Im sure this wont have ramifications on the plasma market.
|
|
qdel(src)
|
|
|
|
/obj/item/coin/uranium
|
|
cmineral = "uranium"
|
|
desc = "You probably shouldn't keep this in your front pocket."
|
|
icon_state = "coin_uranium_heads"
|
|
materials = list(MAT_URANIUM = 400)
|
|
credits = 160
|
|
|
|
/obj/item/coin/uranium/Initialize(mapload)
|
|
. = ..()
|
|
var/datum/component/inherent_radioactivity/radioactivity = AddComponent(/datum/component/inherent_radioactivity, 50, 0, 0, 1.5)
|
|
START_PROCESSING(SSradiation, radioactivity)
|
|
|
|
/obj/item/coin/clown
|
|
cmineral = "bananium"
|
|
icon_state = "coin_bananium_heads"
|
|
materials = list(MAT_BANANIUM = 400)
|
|
credits = 600 //makes the clown cri
|
|
|
|
/obj/item/coin/clown/Initialize(mapload)
|
|
. = ..()
|
|
AddComponent(/datum/component/slippery, src, 4 SECONDS, 100, 0, FALSE)
|
|
|
|
/obj/item/coin/mime
|
|
cmineral = "tranquillite"
|
|
icon_state = "coin_tranquillite_heads"
|
|
materials = list(MAT_TRANQUILLITE = 400)
|
|
credits = 600 //makes the mime cri
|
|
|
|
/obj/item/coin/adamantine
|
|
cmineral = "adamantine"
|
|
icon_state = "coin_adamantine_heads"
|
|
credits = 400
|
|
|
|
/obj/item/coin/mythril
|
|
cmineral = "mythril"
|
|
icon_state = "coin_mythril_heads"
|
|
credits = 400
|
|
|
|
/obj/item/coin/twoheaded
|
|
cmineral = "iron"
|
|
icon_state = "coin_iron_heads"
|
|
desc = "Hey, this coin's the same on both sides!"
|
|
sideslist = list("heads")
|
|
credits = 20
|
|
|
|
/obj/item/coin/antagtoken
|
|
name = "antag token"
|
|
icon_state = "coin_valid_valid"
|
|
cmineral = "valid"
|
|
desc = "A novelty coin that helps the heart know what hard evidence cannot prove."
|
|
sideslist = list("valid", "salad")
|
|
credits = 20
|
|
name_by_cmineral = FALSE
|
|
heads_name = "valid"
|
|
|
|
/obj/item/coin/antagtoken/syndicate
|
|
name = "syndicate coin"
|
|
credits = 160
|
|
|
|
/obj/item/coin/attack_by(obj/item/attacking, mob/user, params)
|
|
if(..())
|
|
return FINISH_ATTACK
|
|
if(istype(attacking, /obj/item/stack/cable_coil))
|
|
var/obj/item/stack/cable_coil/CC = attacking
|
|
if(string_attached)
|
|
to_chat(user, SPAN_NOTICE("There already is a string attached to this coin."))
|
|
return
|
|
|
|
if(CC.use(1))
|
|
overlays += image('icons/obj/economy.dmi',"coin_string_overlay")
|
|
string_attached = 1
|
|
to_chat(user, SPAN_NOTICE("You attach a string to the coin."))
|
|
else
|
|
to_chat(user, SPAN_WARNING("You need one length of cable to attach a string to the coin."))
|
|
return
|
|
|
|
else if(istype(attacking, /obj/item/wirecutters))
|
|
if(!string_attached)
|
|
..()
|
|
return
|
|
|
|
var/obj/item/stack/cable_coil/CC = new/obj/item/stack/cable_coil(user.loc)
|
|
CC.amount = 1
|
|
CC.update_icon()
|
|
overlays = list()
|
|
string_attached = null
|
|
to_chat(user, SPAN_NOTICE("You detach the string from the coin."))
|
|
else ..()
|
|
|
|
/obj/item/coin/wirecutter_act(mob/user, obj/item/I)
|
|
if(string_attached)
|
|
return
|
|
. = TRUE
|
|
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
|
|
return
|
|
var/typelist = list("iron" = /obj/item/clothing/gloves/ring,
|
|
"silver" = /obj/item/clothing/gloves/ring/silver,
|
|
"gold" = /obj/item/clothing/gloves/ring/gold,
|
|
"plasma" = /obj/item/clothing/gloves/ring/plasma,
|
|
"uranium" = /obj/item/clothing/gloves/ring/uranium)
|
|
var/typekey = typelist[cmineral]
|
|
if(ispath(typekey))
|
|
to_chat(user, SPAN_NOTICE("You carefully cut a hole into [src] turning it into a ring."))
|
|
var/obj/item/clothing/gloves/ring/ring = new typekey()
|
|
qdel(src)
|
|
user.put_in_hands(ring)
|
|
|
|
|
|
/obj/item/coin/activate_self(mob/user)
|
|
if(..())
|
|
return
|
|
if(cooldown < world.time - 15)
|
|
if(string_attached) //does the coin have a wire attached
|
|
to_chat(user, "<span class='warning'>The coin won't flip very well with something attached!</span>" )
|
|
return FALSE//do not flip the coin
|
|
var/coinflip = pick(sideslist)
|
|
cooldown = world.time
|
|
flick("coin_[cmineral]_flip", src)
|
|
icon_state = "coin_[cmineral]_[coinflip]"
|
|
var/blind_sound
|
|
if(cmineral != "tranquillite")
|
|
playsound(user.loc, 'sound/items/coinflip.ogg', 50, TRUE)
|
|
blind_sound = SPAN_NOTICE("You hear the clattering of loose change.")
|
|
if(do_after(user, 15, target = src, allow_moving = TRUE))
|
|
user.visible_message(SPAN_NOTICE("[user] has flipped [src]. It lands on [coinflip]."), \
|
|
SPAN_NOTICE("You flip [src]. It lands on [coinflip]."), \
|
|
blind_sound)
|
|
if(has_action)
|
|
if(coinflip == heads_name)
|
|
heads_action(user)
|
|
else
|
|
tails_action(user)
|
|
|
|
/obj/item/coin/proc/heads_action(mob/user)
|
|
return
|
|
|
|
/obj/item/coin/proc/tails_action(mob/user)
|
|
return
|
|
|
|
/obj/item/coin/eldritch
|
|
name = "eldritch coin"
|
|
desc = "A surprisingly heavy, ornate coin. Its sides seem to depict a different image each time you look."
|
|
icon_state = "coin_heretic_heretic"
|
|
cmineral = "heretic"
|
|
materials = list(MAT_DIAMOND = 1000, MAT_PLASMA = 1000)
|
|
sideslist = list("heretic", "blade")
|
|
heads_name = "heretic"
|
|
has_action = TRUE
|
|
/// The range at which airlocks are effected.
|
|
var/airlock_range = 5
|
|
|
|
/obj/item/coin/eldritch/heads_action(mob/user)
|
|
var/mob/living/living_user = user
|
|
if(!IS_HERETIC(user))
|
|
living_user.adjustBruteLoss(5)
|
|
if(prob(90))
|
|
return
|
|
for(var/obj/machinery/door/airlock/target_airlock in range(airlock_range, user))
|
|
if(target_airlock.density)
|
|
INVOKE_ASYNC(src, PROC_REF(try_open_airlock), target_airlock)
|
|
continue
|
|
INVOKE_ASYNC(src, PROC_REF(try_close_airlock), target_airlock)
|
|
|
|
/obj/item/coin/eldritch/proc/try_open_airlock(obj/machinery/door/airlock/ourlock)
|
|
ourlock.open()
|
|
|
|
/obj/item/coin/eldritch/proc/try_close_airlock(obj/machinery/door/airlock/ourlock)
|
|
if(ourlock.safe)
|
|
ourlock.safe = FALSE
|
|
ourlock.close()
|
|
ourlock.safe = TRUE
|
|
|
|
/obj/item/coin/eldritch/tails_action(mob/user)
|
|
var/mob/living/living_user = user
|
|
if(!IS_HERETIC(user))
|
|
living_user.adjustFireLoss(5)
|
|
if(prob(90))
|
|
return
|
|
for(var/obj/machinery/door/airlock/target_airlock in range(airlock_range, user))
|
|
if(target_airlock.locked)
|
|
target_airlock.unlock()
|
|
continue
|
|
target_airlock.lock()
|
|
|
|
/obj/item/coin/eldritch/interact_with_atom(atom/target, mob/living/user, list/modifiers)
|
|
if(!istype(target, /obj/machinery/door/airlock))
|
|
return NONE
|
|
if(!IS_HERETIC(user))
|
|
user.adjustBruteLoss(5)
|
|
user.adjustFireLoss(5)
|
|
return ITEM_INTERACT_COMPLETE
|
|
var/obj/machinery/door/airlock/target_airlock = target
|
|
to_chat(user, SPAN_WARNING("You insert [src] into the airlock."))
|
|
target_airlock.emag_act(user, src)
|
|
qdel(src)
|
|
return ITEM_INTERACT_COMPLETE
|
|
|
|
|
|
#undef GIBTONITE_QUALITY_LOW
|
|
#undef GIBTONITE_QUALITY_MEDIUM
|
|
#undef GIBTONITE_QUALITY_HIGH
|
|
#undef PROBABILITY_REFINE_BY_FIRE
|
|
#undef ORESTACK_OVERLAYS_MAX
|