mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 19:22:56 +00:00
[MIRROR] RMS Adjustments (#10704)
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
This commit is contained in:
committed by
GitHub
parent
c257c96747
commit
d9b395c01b
@@ -5,6 +5,23 @@
|
|||||||
#define RMS_STONE 5
|
#define RMS_STONE 5
|
||||||
#define RMS_RAND 6
|
#define RMS_RAND 6
|
||||||
|
|
||||||
|
var/list/RMS_random_malfunction = list(/obj/item/fbp_backup_cell,
|
||||||
|
/obj/item/trash/rkibble,
|
||||||
|
/obj/item/clothing/gloves/bluespace/deluxe,
|
||||||
|
/obj/item/flame/lighter/supermatter/syndismzippo,
|
||||||
|
/obj/item/instrument/trumpet/spectral,
|
||||||
|
/obj/item/storage/smolebrickcase,
|
||||||
|
/obj/item/stack/tile/grass,
|
||||||
|
/obj/item/stack/tile/carpet,
|
||||||
|
/obj/item/reagent_containers/spray/waterflower,
|
||||||
|
/obj/item/bikehorn,
|
||||||
|
/obj/item/storage/backpack/clown,
|
||||||
|
/obj/item/clothing/under/rank/clown,
|
||||||
|
/obj/item/clothing/shoes/clown_shoes,
|
||||||
|
/obj/item/clothing/mask/gas/clown_hat,
|
||||||
|
/obj/item/pda/clown,
|
||||||
|
/mob/living/simple_mob/vore/catgirl)
|
||||||
|
|
||||||
/obj/item/rms
|
/obj/item/rms
|
||||||
name = "Rapid Material Synthesizer"
|
name = "Rapid Material Synthesizer"
|
||||||
desc = "A tool that converts battery charge to materials."
|
desc = "A tool that converts battery charge to materials."
|
||||||
@@ -27,13 +44,14 @@
|
|||||||
var/mode_index = RMS_STEEL //start at steel creation
|
var/mode_index = RMS_STEEL //start at steel creation
|
||||||
var/list/modes = list(RMS_STEEL, RMS_GLASS, RMS_CLOTH, RMS_PLASTIC, RMS_STONE, RMS_RAND)
|
var/list/modes = list(RMS_STEEL, RMS_GLASS, RMS_CLOTH, RMS_PLASTIC, RMS_STONE, RMS_RAND)
|
||||||
var/stored_charge = 0
|
var/stored_charge = 0
|
||||||
var/max_charge = 1000000 //large storage, equivalent to 50 steel sheets
|
var/max_charge = 1000000 //large storage, equivalent to a little over 33 GIGA batteries.
|
||||||
var/charge_cost = 20000
|
var/charge_cost = 1000
|
||||||
var/charge_cost_o = 50000
|
/// Cost of 'basic' things such as glass or steel. Un-upgraded chargers charge at ~40 charge a second, meaning 15 seconds per sheet. 22.5 for 'advanced' sheets (overcharged). This becomes ~10 seconds and ~15 seconds with a heavily upgraded charger.
|
||||||
var/charge_cost_r = 100000
|
var/charge_cost_basic = 1000
|
||||||
|
var/charge_cost_random = 3333 //Cost of 'random' things. Used by RMS_RAND. This takes ~85 seconds a sheet on a basic charger and ~33 seconds a sheet on an upgraded charger.
|
||||||
var/charge_stage = 0
|
var/charge_stage = 0
|
||||||
var/overcharge = 0
|
var/overcharge = 0
|
||||||
var/emagged = 0
|
var/overcharge_modifier = 1.5 //Multiplier in price for using the overcharge mode.
|
||||||
var/datum/effect/effect/system/spark_spread/spark_system
|
var/datum/effect/effect/system/spark_spread/spark_system
|
||||||
|
|
||||||
var/static/image/radial_image_steel = image(icon = 'icons/mob/radial_vr.dmi', icon_state = "sheet-metal")
|
var/static/image/radial_image_steel = image(icon = 'icons/mob/radial_vr.dmi', icon_state = "sheet-metal")
|
||||||
@@ -71,6 +89,7 @@
|
|||||||
|
|
||||||
/obj/item/rms/proc/drain_battery(user, battery)
|
/obj/item/rms/proc/drain_battery(user, battery)
|
||||||
var/obj/item/cell/C = battery
|
var/obj/item/cell/C = battery
|
||||||
|
var/charge_needed = max_charge - stored_charge
|
||||||
if(stored_charge == max_charge)
|
if(stored_charge == max_charge)
|
||||||
to_chat(user, span_notice("The Rapid Material Synthesizer is full on charge!."))
|
to_chat(user, span_notice("The Rapid Material Synthesizer is full on charge!."))
|
||||||
if(C.charge == 0)
|
if(C.charge == 0)
|
||||||
@@ -79,7 +98,10 @@
|
|||||||
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
|
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
|
||||||
if(do_after(user, 2,target = C))
|
if(do_after(user, 2,target = C))
|
||||||
stored_charge += C.charge
|
stored_charge += C.charge
|
||||||
C.charge = 0
|
if(C.charge > charge_needed) //We only drain what we need!
|
||||||
|
C.use(charge_needed)
|
||||||
|
else
|
||||||
|
C.use(C.charge)
|
||||||
C.update_icon()
|
C.update_icon()
|
||||||
to_chat(user, span_notice("You drain [C]."))
|
to_chat(user, span_notice("You drain [C]."))
|
||||||
stored_charge = CLAMP(stored_charge, 0, max_charge)
|
stored_charge = CLAMP(stored_charge, 0, max_charge)
|
||||||
@@ -103,92 +125,95 @@
|
|||||||
if(!can_afford(charge_cost))
|
if(!can_afford(charge_cost))
|
||||||
to_chat(user, span_notice("There is not enough charge to use this mode."))
|
to_chat(user, span_notice("There is not enough charge to use this mode."))
|
||||||
return
|
return
|
||||||
else
|
|
||||||
consume_resources(charge_cost)
|
consume_resources(charge_cost)
|
||||||
else
|
else
|
||||||
if(!can_afford(charge_cost_o))
|
if(!can_afford(charge_cost * overcharge_modifier))
|
||||||
to_chat(user, span_notice("There is not enough charge to use the overcharged mode."))
|
to_chat(user, span_notice("There is not enough charge to use the overcharged mode."))
|
||||||
return
|
return
|
||||||
else
|
consume_resources(charge_cost * overcharge_modifier)
|
||||||
consume_resources(charge_cost_o)
|
|
||||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||||
if(do_after(user, 5, target = A))
|
if(do_after(user, 5, target = A))
|
||||||
switch(mode_index)
|
|
||||||
if(RMS_STEEL)
|
|
||||||
if(overcharge)
|
if(overcharge)
|
||||||
product = new /obj/item/stack/material/plasteel // can only create one sheet at max charge, and uses five times more charge
|
if(prob(5)) //5% chance for malfunction
|
||||||
spark_system.start()
|
var/thing_to_spawn = pick(RMS_random_malfunction)
|
||||||
|
product = new thing_to_spawn
|
||||||
else
|
else
|
||||||
product = new /obj/item/stack/material/steel
|
product = choose_overcharge(user)
|
||||||
if(RMS_GLASS)
|
|
||||||
if(overcharge)
|
|
||||||
product= new /obj/item/stack/material/glass/phoronglass // can only create one sheet at max charge, and uses five times more charge
|
|
||||||
spark_system.start()
|
|
||||||
else
|
else
|
||||||
product = new /obj/item/stack/material/glass
|
product = choose_normal(user)
|
||||||
if(RMS_CLOTH)
|
|
||||||
if(overcharge)
|
|
||||||
product= new /obj/item/stack/material/leather // can only create one sheet at max charge, and uses five times more charge
|
|
||||||
spark_system.start()
|
|
||||||
else
|
|
||||||
product = new /obj/item/stack/material/cloth
|
|
||||||
if(RMS_PLASTIC)
|
|
||||||
if(overcharge)
|
|
||||||
product= new /obj/item/stack/material/cardboard // can only create one sheet at max charge, and uses five times more charge
|
|
||||||
spark_system.start()
|
|
||||||
else
|
|
||||||
product = new /obj/item/stack/material/plastic
|
|
||||||
if(RMS_STONE)
|
|
||||||
if(overcharge)
|
|
||||||
product= new /obj/item/stack/material/marble // can only create one sheet at max charge, and uses five times more charge
|
|
||||||
spark_system.start()
|
|
||||||
else
|
|
||||||
product = new /obj/item/stack/material/sandstone
|
|
||||||
if(RMS_RAND)
|
|
||||||
if(!overcharge && !emagged)
|
|
||||||
product = pick(10;new /obj/item/trash/material/metal,
|
|
||||||
10;new /obj/item/material/shard,
|
|
||||||
10;new /obj/item/stack/cable_coil/random,
|
|
||||||
10;new /obj/item/stack/material/wood,
|
|
||||||
10;new /obj/item/stack/material/wood/sif,
|
|
||||||
10;new /obj/item/stack/material/snow)
|
|
||||||
if(overcharge && !emagged)
|
|
||||||
product = pick(1;new /obj/item/stack/rods,
|
|
||||||
5;new /obj/item/fbp_backup_cell,
|
|
||||||
5;new /obj/item/trash/rkibble,
|
|
||||||
10;new /obj/item/stack/tile/grass,
|
|
||||||
10;new /obj/item/stack/tile/carpet)
|
|
||||||
spark_system.start()
|
|
||||||
if(!overcharge && emagged)
|
|
||||||
product = pick(10;new /obj/item/trash/material/metal,
|
|
||||||
10;new /obj/item/material/shard,
|
|
||||||
10;new /obj/item/stack/cable_coil/random,
|
|
||||||
10;new /obj/item/stack/material/wood,
|
|
||||||
10;new /obj/item/stack/material/wood/sif,
|
|
||||||
10;new /obj/item/stack/material/snow,
|
|
||||||
5;new /obj/item/stack/material/phoron,
|
|
||||||
5;new /obj/item/stack/material/silver,
|
|
||||||
5;new /obj/item/stack/material/gold,
|
|
||||||
1;new /obj/item/stack/material/diamond
|
|
||||||
)
|
|
||||||
if(overcharge && emagged)
|
|
||||||
product = pick(1;new /obj/item/stack/rods,
|
|
||||||
5;new /obj/item/fbp_backup_cell,
|
|
||||||
5;new /obj/item/trash/rkibble,
|
|
||||||
10;new /obj/item/stack/tile/grass,
|
|
||||||
10;new /obj/item/stack/tile/carpet,
|
|
||||||
10;new /obj/item/reagent_containers/spray/waterflower,
|
|
||||||
10;new /obj/item/bikehorn,
|
|
||||||
10;new /obj/item/storage/backpack/clown,
|
|
||||||
10;new /obj/item/clothing/under/rank/clown,
|
|
||||||
10;new /obj/item/clothing/shoes/clown_shoes,
|
|
||||||
10;new /obj/item/clothing/mask/gas/clown_hat,
|
|
||||||
10;new /obj/item/pda/clown,
|
|
||||||
1;new /mob/living/simple_mob/vore/catgirl
|
|
||||||
)
|
|
||||||
spark_system.start()
|
spark_system.start()
|
||||||
product.loc = get_turf(A)
|
product.loc = get_turf(A)
|
||||||
|
|
||||||
|
/obj/item/rms/proc/choose_overcharge(mob/living/user)
|
||||||
|
var/final_product
|
||||||
|
switch(mode_index)
|
||||||
|
if(RMS_STEEL)
|
||||||
|
final_product = new /obj/item/stack/material/plasteel
|
||||||
|
if(RMS_GLASS)
|
||||||
|
final_product = new /obj/item/stack/material/glass/phoronglass
|
||||||
|
if(RMS_CLOTH)
|
||||||
|
final_product = new /obj/item/stack/material/leather
|
||||||
|
if(RMS_PLASTIC)
|
||||||
|
final_product = new /obj/item/stack/material/cardboard
|
||||||
|
if(RMS_STONE)
|
||||||
|
final_product = new /obj/item/stack/material/marble
|
||||||
|
if(RMS_RAND)
|
||||||
|
final_product = randomize(user)
|
||||||
|
return final_product
|
||||||
|
|
||||||
|
/obj/item/rms/proc/choose_normal(mob/living/user)
|
||||||
|
var/final_product
|
||||||
|
switch(mode_index)
|
||||||
|
if(RMS_STEEL)
|
||||||
|
final_product = new /obj/item/stack/material/steel
|
||||||
|
if(RMS_GLASS)
|
||||||
|
final_product = new /obj/item/stack/material/glass
|
||||||
|
if(RMS_CLOTH)
|
||||||
|
final_product = new /obj/item/stack/material/cloth
|
||||||
|
if(RMS_PLASTIC)
|
||||||
|
final_product = new /obj/item/stack/material/plastic
|
||||||
|
if(RMS_STONE)
|
||||||
|
final_product = new /obj/item/stack/material/sandstone
|
||||||
|
if(RMS_RAND)
|
||||||
|
final_product = randomize(user)
|
||||||
|
return final_product
|
||||||
|
|
||||||
|
/obj/item/rms/proc/randomize(mob/living/user)
|
||||||
|
var/obj/item/stack/final_product
|
||||||
|
var/possible_object_paths = list()
|
||||||
|
possible_object_paths += subtypesof(/obj/item/stack/material)
|
||||||
|
possible_object_paths -= typesof(/obj/item/stack/material/cyborg)
|
||||||
|
//I looked through the code for any materials that should be banned...Most of the "DO NOT EVER GIVE THESE TO ANYONE EVER" materials are only in their /datum form and the ones that have sheets spawn in as normal sheets (ex: hull datums) so...This is here in case it's needed in the future.
|
||||||
|
var/list/banned_sheet_materials = list(
|
||||||
|
/obj/item/stack/material/supermatter,
|
||||||
|
/obj/item/stack/material/glamour,
|
||||||
|
/obj/item/stack/material/morphium
|
||||||
|
// Include if you enable in the .dme /obj/item/stack/material/debug
|
||||||
|
)
|
||||||
|
var/obj/item/stack/new_metal = /obj/item/stack/material/supermatter
|
||||||
|
for(var/x=1;x<=10;x++) //You got 10 chances to hit a metal that is NOT banned.
|
||||||
|
var/picked_metal = pick(possible_object_paths) //We select
|
||||||
|
if(picked_metal in banned_sheet_materials)
|
||||||
|
continue
|
||||||
|
else
|
||||||
|
new_metal = picked_metal
|
||||||
|
break
|
||||||
|
if(prob(1) && prob(1) && prob(1)) //1 in a million...Feeling lucky?
|
||||||
|
if(prob(50))
|
||||||
|
new_metal = /obj/item/stack/material/morphium
|
||||||
|
else
|
||||||
|
new_metal = /obj/item/stack/material/supermatter
|
||||||
|
visible_message(span_giganteus(span_boldwarning("The [src] glows blazing hot for a moment before spitting out a glowing material!")))
|
||||||
|
if(overcharge) //uh oh...
|
||||||
|
to_chat(user, span_extramassive(span_boldwarning("The [src] heats up to the point that you are immediately vaporized!")))
|
||||||
|
user.dust()
|
||||||
|
final_product = new new_metal
|
||||||
|
if(overcharge && (charge_cost_random > 0)) //We use ALL our energy in one go while overcharged! Also has a charge_cost_random sanity check in case of badmins.
|
||||||
|
final_product.amount = max(1, 1+round(stored_charge/charge_cost_random))
|
||||||
|
consume_resources(stored_charge)
|
||||||
|
return final_product
|
||||||
|
|
||||||
/obj/item/rms/proc/check_menu(mob/living/user)
|
/obj/item/rms/proc/check_menu(mob/living/user)
|
||||||
if(!istype(user))
|
if(!istype(user))
|
||||||
return FALSE
|
return FALSE
|
||||||
@@ -227,16 +252,22 @@
|
|||||||
switch(choice)
|
switch(choice)
|
||||||
if("Steel")
|
if("Steel")
|
||||||
mode_index = modes.Find(RMS_STEEL)
|
mode_index = modes.Find(RMS_STEEL)
|
||||||
|
charge_cost = charge_cost_basic
|
||||||
if("Glass")
|
if("Glass")
|
||||||
mode_index = modes.Find(RMS_GLASS)
|
mode_index = modes.Find(RMS_GLASS)
|
||||||
|
charge_cost = charge_cost_basic
|
||||||
if("Cloth")
|
if("Cloth")
|
||||||
mode_index = modes.Find(RMS_CLOTH)
|
mode_index = modes.Find(RMS_CLOTH)
|
||||||
|
charge_cost = charge_cost_basic
|
||||||
if("Plastic")
|
if("Plastic")
|
||||||
mode_index = modes.Find(RMS_PLASTIC)
|
mode_index = modes.Find(RMS_PLASTIC)
|
||||||
|
charge_cost = charge_cost_basic
|
||||||
if("Stone")
|
if("Stone")
|
||||||
mode_index = modes.Find(RMS_STONE)
|
mode_index = modes.Find(RMS_STONE)
|
||||||
|
charge_cost = charge_cost_basic
|
||||||
if("Random")
|
if("Random")
|
||||||
mode_index = modes.Find(RMS_RAND)
|
mode_index = modes.Find(RMS_RAND)
|
||||||
|
charge_cost = charge_cost_random
|
||||||
else
|
else
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -244,11 +275,6 @@
|
|||||||
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
|
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/item/rms/emag_act(var/remaining_charges, var/mob/user)
|
|
||||||
emagged = !emagged
|
|
||||||
playsound(src.loc, "sparks", 100, 1)
|
|
||||||
return 1
|
|
||||||
|
|
||||||
/obj/item/rms/attackby(obj/item/W, mob/user)
|
/obj/item/rms/attackby(obj/item/W, mob/user)
|
||||||
if(W.has_tool_quality(TOOL_MULTITOOL))
|
if(W.has_tool_quality(TOOL_MULTITOOL))
|
||||||
overcharge = !overcharge
|
overcharge = !overcharge
|
||||||
@@ -208,7 +208,7 @@
|
|||||||
var/list/banned_sheet_materials = list(
|
var/list/banned_sheet_materials = list(
|
||||||
// Include if you enable in the .dme /obj/item/stack/material/debug
|
// Include if you enable in the .dme /obj/item/stack/material/debug
|
||||||
)
|
)
|
||||||
var/new_metal = /obj/item/stack/material/supermatter
|
var/obj/item/stack/new_metal = /obj/item/stack/material/supermatter
|
||||||
for(var/x=1;x<=10;x++) //You got 10 chances to hit a metal that is NOT banned.
|
for(var/x=1;x<=10;x++) //You got 10 chances to hit a metal that is NOT banned.
|
||||||
var/picked_metal = pick(possible_object_paths) //We select
|
var/picked_metal = pick(possible_object_paths) //We select
|
||||||
if(picked_metal in banned_sheet_materials)
|
if(picked_metal in banned_sheet_materials)
|
||||||
@@ -216,8 +216,9 @@
|
|||||||
else
|
else
|
||||||
new_metal = picked_metal
|
new_metal = picked_metal
|
||||||
break
|
break
|
||||||
new_item = new new_metal(src.loc)
|
new_metal = new new_metal(src.loc)
|
||||||
new_item:amount = rand(5,45)
|
new_metal.amount = rand(5,45)
|
||||||
|
new_item = new_metal
|
||||||
if(ARCHAEO_PEN)
|
if(ARCHAEO_PEN)
|
||||||
var/new_pen = pick(/obj/item/pen, /obj/item/pen/blade/fountain, /obj/item/pen/reagent/sleepy) //There are WAY too many pen blade variants that it'd drown out the others in this list.
|
var/new_pen = pick(/obj/item/pen, /obj/item/pen/blade/fountain, /obj/item/pen/reagent/sleepy) //There are WAY too many pen blade variants that it'd drown out the others in this list.
|
||||||
new_item = new new_pen(src.loc)
|
new_item = new new_pen(src.loc)
|
||||||
|
|||||||
@@ -1565,7 +1565,7 @@
|
|||||||
#include "code\game\objects\items\weapons\policetape.dm"
|
#include "code\game\objects\items\weapons\policetape.dm"
|
||||||
#include "code\game\objects\items\weapons\RCD.dm"
|
#include "code\game\objects\items\weapons\RCD.dm"
|
||||||
#include "code\game\objects\items\weapons\RCD_vr.dm"
|
#include "code\game\objects\items\weapons\RCD_vr.dm"
|
||||||
#include "code\game\objects\items\weapons\RMS_vr.dm"
|
#include "code\game\objects\items\weapons\RMS.dm"
|
||||||
#include "code\game\objects\items\weapons\RPD_vr.dm"
|
#include "code\game\objects\items\weapons\RPD_vr.dm"
|
||||||
#include "code\game\objects\items\weapons\RSF.dm"
|
#include "code\game\objects\items\weapons\RSF.dm"
|
||||||
#include "code\game\objects\items\weapons\scrolls.dm"
|
#include "code\game\objects\items\weapons\scrolls.dm"
|
||||||
|
|||||||
Reference in New Issue
Block a user