- Mech Fabricator can be built. Contruction path is almost the same as for lathes, but you'll require 2 Matter Bins, 1 Manipulator, 1 Micro-Laser and 1 Console Screen.

- Added design for mech fabricator circuitboard.
- Added origin_tech for some mech equipment.
- Examining mecha chassis will show what construction step you're currently on.
- Made Gygax construction reversible.
- Moved global_iterator.dm and construction_datum.dm to code/datums/helper_datums
- Split mecha_construction.dm into mecha_parts.dm and mecha_construction_paths.dm
- Fixed wrong logic for mecha dna-checks.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1402 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
panurgomatic
2011-04-06 23:45:30 +00:00
parent 2c901c71bb
commit c1b1f4323c
12 changed files with 654 additions and 442 deletions

View File

@@ -5,6 +5,7 @@
var/list/steps
var/atom/holder
var/result
var/list/steps_desc
New(atom)
..()
@@ -12,12 +13,15 @@
if(!holder) //don't want this without a holder
spawn
del src
set_desc(steps.len)
return
proc/next_step()
steps.len--
if(!steps.len)
spawn_result()
else
set_desc(steps.len)
return
proc/action(atom/used_atom,mob/user as mob)
@@ -65,6 +69,11 @@
L -= null
return
proc/set_desc(index as num)
var/list/step = steps[index]
holder.desc = step["desc"]
return
/datum/construction/reversible
var/index
@@ -77,6 +86,8 @@
index+=diff
if(index==0)
spawn_result()
else
set_desc(index)
return
is_right_key(atom/used_atom) // returns index step

View File

@@ -7,7 +7,7 @@ Generally, the only thing you want to play with (meaning, redefine) is the proce
It must contain all the things you want done.
Control functions:
new - used to create datum. First argument (optional) - var list(to use in process() proc),
new - used to create datum. First argument (optional) - var list(to use in process() proc) as list,
second (optional) - autostart control.
If autostart == TRUE, the loop will be started immediately after datum creation.
@@ -24,7 +24,7 @@ Control functions:
active() - Returns 1 if datum is active, 0 otherwise.
toggle() - toggles datum state. Returns 1 if datum activated, 0 otherwise
toggle() - toggles datum state. Returns new datum state (see active()).
Misc functions:
@@ -38,14 +38,13 @@ Control vars:
delay - delay between iterations
check_for_null - if equals TRUE, on each iteration the supplied arguments will be checked for nulls.
If some varible equals null, the loop is stopped.
If some varible equals null (and null only), the loop is stopped.
Usefull, if some var unexpectedly becomes null - due to object deletion, for example.
Of course, you can check the variables inside process() proc to prevent runtime errors.
Of course, you can also check the variables inside process() proc to prevent runtime errors.
Data storage vars:
result - stores the value returned by process() proc
*/
/datum/global_iterator
@@ -131,7 +130,7 @@ Data storage vars:
proc/toggle_null_checks()
src.check_for_null = !src.check_for_null
return
return src.check_for_null
proc/toggle()
if(!src.stop())

View File

@@ -197,3 +197,15 @@ obj/item/weapon/circuitboard/rdserver
req_components = list(
"/obj/item/weapon/cable_coil" = 2,
"/obj/item/weapon/stock_parts/scanning_module" = 1)
/obj/item/weapon/circuitboard/mechfab
name = "Circuit board (Exosuit Fabricator)"
build_path = "/obj/machinery/mecha_part_fabricator"
board_type = "machine"
origin_tech = "programming=2;materials=3"
frame_desc = "Requires 2 Matter Bins, 1 Manipulator, 1 Micro-Laser and 1 Console Screen."
req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 2,
"/obj/item/weapon/stock_parts/manipulator" = 1,
"/obj/item/weapon/stock_parts/micro_laser" = 1,
"/obj/item/weapon/stock_parts/console_screen" = 1)

View File

@@ -5,6 +5,7 @@
icon = 'mech_construct.dmi'
icon_state = "mecha_equip"
force = 5
origin_tech = "materials=2"
construction_time = 100
construction_cost = list("metal"=10000)
var/equip_cooldown = 0

View File

@@ -166,6 +166,7 @@
name = "Mounted RCD"
desc = "An exosuit-mounted Rapid Construction Device."
icon_state = "mecha_rcd"
origin_tech = "materials=4;bluespace=3;magnets=4;powerstorage=4"
equip_cooldown = 20
energy_drain = 250
range = MELEE|RANGED
@@ -270,6 +271,7 @@
name = "Teleporter"
desc = "An exosuit module that allows exosuits to teleport to any position in view."
icon_state = "mecha_teleport"
origin_tech = "bluespace=10"
equip_cooldown = 300
energy_drain = 1000
range = RANGED
@@ -290,6 +292,7 @@
name = "Wormhole Generator"
desc = "An exosuit module that allows generating of small quasi-stable wormholes."
icon_state = "mecha_wholegen"
origin_tech = "bluespace=3"
equip_cooldown = 50
energy_drain = 300
range = RANGED
@@ -339,6 +342,7 @@
name = "Gravitational Catapult"
desc = "An exosuit mounted Gravitational Catapult."
icon_state = "mecha_teleport"
origin_tech = "bluespace=2;magnets=3"
equip_cooldown = 10
energy_drain = 200
range = MELEE|RANGED
@@ -401,10 +405,11 @@
name = "Armor Booster Module (Close Combat Weaponry)"
desc = "Boosts exosuit armor against armed melee attacks."
icon_state = "mecha_abooster_ccw"
origin_tech = "materials=3"
equip_cooldown = 10
energy_drain = 50
range = RANGED
construction_cost = list("metal"=20000,"silver"=20000)
construction_cost = list("metal"=20000,"silver"=5000)
var/deflect_coeff = 1.15
var/damage_coeff = 0.8
@@ -443,10 +448,11 @@
name = "Armor Booster Module (Ranged Weaponry)"
desc = "Boosts exosuit armor against ranged attacks. Completely blocks taser shots."
icon_state = "mecha_abooster_proj"
origin_tech = "materials=4"
equip_cooldown = 10
energy_drain = 50
range = RANGED
construction_cost = list("metal"=20000,"gold"=20000)
construction_cost = list("metal"=20000,"gold"=5000)
var/damage_coeff = 0.8
can_attach(obj/mecha/M as obj)
@@ -516,6 +522,7 @@
name = "Exosuit Repair Droid"
desc = "Automated repair droid. Scans exosuit for damage and repairs it. Can fix almost all types of external or internal damage."
icon_state = "repair_droid"
origin_tech = "magnets=3;programming=3"
equip_cooldown = 20
energy_drain = 20
range = RANGED

View File

@@ -222,7 +222,7 @@
src.icon_state = "mechfab3" //looks better than 'flick'
src.use_power = 2
src.updateUsrDialog()
sleep(round(part.construction_time*time_coeff,0.1))
sleep(get_construction_time_w_coeff(part,0.1))
if(!src) return
src.use_power = 1
src.being_built.Move(get_step(src,EAST))
@@ -300,12 +300,12 @@
if("materials")
diff = round(initial(resource_coeff) - (initial(resource_coeff)*T.level)/25,0.01)
if(resource_coeff!=diff)
resource_coeff = round(initial(resource_coeff) - (initial(resource_coeff)*T.level)/25,0.01)
resource_coeff = diff
output+="Production efficiency increased.<br>"
if("programming")
diff = round(initial(time_coeff) - (initial(time_coeff)*T.level)/25,0.01)
diff = round(initial(time_coeff) - (initial(time_coeff)*T.level)/25,0.1)
if(time_coeff!=diff)
time_coeff = round(initial(time_coeff) - (initial(time_coeff)*T.level)/25,0.1)
time_coeff = diff
output+="Production routines updated.<br>"
return output
@@ -346,6 +346,10 @@
if (..())
return
user.machine = src
var/turf/exit = get_step(src,EAST)
if(exit.density)
src.visible_message("<b>[src]</b> beeps, \"Error! Part outlet is obstructed\".")
return
if(temp)
left_part = temp
else if(src.being_built)

View File

@@ -408,7 +408,7 @@
spawn()
var/obj/mecha/mecha = src
// var/mob/M = src.occupant
var/turf/T = src.loc
var/turf/T = get_turf(src)
var/wreckage = src.wreckage
var/list/r_equipment = src.equipment
src = null
@@ -421,6 +421,8 @@
for(var/obj/item/mecha_parts/mecha_equipment/E in r_equipment)
if(prob(30))
WR.equipment += E
E.loc = WR
E.equip_ready = 1
E.reliability = rand(30,100)
else
E.loc = T
@@ -611,7 +613,7 @@
/obj/mecha/verb/move_inside()
set category = "Object"
set name = "Enter Mecha"
set name = "Enter Exosuit"
set src in oview(1)
if (usr.stat || !ishuman(usr))
@@ -627,9 +629,12 @@
return
*/
var/passed
if((src.dna && usr.dna.unique_enzymes==src.dna))
if(src.dna)
if(usr.dna.unique_enzymes==src.dna)
passed = 1
if(!passed && !src.operation_allowed(usr))
else if(src.operation_allowed(usr))
passed = 1
if(!passed)
usr << "\red Access denied"
src.log_append_to_last("Permission denied.")
return
@@ -953,7 +958,7 @@
user << "There's already a powercell installed."
return
else if(istype(W, /obj/item/weapon/weldingtool) && W:welding)
else if(istype(W, /obj/item/weapon/weldingtool) && W:welding && user.a_intent != "hurt")
if (W:remove_fuel(0,user))
if (src.internal_damage & MECHA_INT_TANK_BREACH)
src.internal_damage &= ~MECHA_INT_TANK_BREACH

View File

@@ -1,349 +1,3 @@
/////////////////////////
////// Mecha Parts //////
/////////////////////////
/obj/item/mecha_parts
name = "mecha part"
icon = 'mech_construct.dmi'
icon_state = "blank"
w_class = 20
flags = FPRINT | TABLEPASS | CONDUCT
origin_tech = "programming=2;materials=2"
var/construction_time = 100
var/list/construction_cost = list("metal"=20000,"glass"=5000)
/obj/item/mecha_parts/chassis
name="Mecha Chassis"
icon_state = "backbone"
var/datum/construction/construct
construction_cost = list("metal"=20000)
flags = FPRINT | CONDUCT
attackby(obj/item/W as obj, mob/user as mob)
if(!construct || !construct.action(W, user))
..()
return
attack_hand()
return
/////////// Ripley
/obj/item/mecha_parts/chassis/ripley
name = "Ripley Chassis"
New()
..()
construct = new /datum/construction/mecha/ripley_chassis(src)
/obj/item/mecha_parts/part/ripley_torso
name="Ripley Torso"
icon_state = "ripley_harness"
origin_tech = "programming=2;materials=3;biotech=1"
construction_time = 300
construction_cost = list("metal"=40000,"glass"=15000)
/obj/item/mecha_parts/part/ripley_left_arm
name="Ripley Left Arm"
icon_state = "ripley_l_arm"
origin_tech = "programming=2;materials=3"
construction_time = 200
construction_cost = list("metal"=25000)
/obj/item/mecha_parts/part/ripley_right_arm
name="Ripley Right Arm"
icon_state = "ripley_r_arm"
origin_tech = "programming=2;materials=3"
construction_time = 200
construction_cost = list("metal"=25000)
/obj/item/mecha_parts/part/ripley_left_leg
name="Ripley Left Leg"
icon_state = "ripley_l_leg"
origin_tech = "programming=2;materials=3"
construction_time = 200
construction_cost = list("metal"=30000)
/obj/item/mecha_parts/part/ripley_right_leg
name="Ripley Right Leg"
icon_state = "ripley_r_leg"
origin_tech = "programming=2;materials=3"
construction_time = 200
construction_cost = list("metal"=30000)
///////// Gygax
/obj/item/mecha_parts/chassis/gygax
name = "Gygax Chassis"
construction_cost = list("metal"=25000)
New()
..()
construct = new /datum/construction/mecha/gygax_chassis(src)
/obj/item/mecha_parts/part/gygax_torso
name="Gygax Torso"
icon_state = "gygax_harness"
origin_tech = "programming=2;materials=4;biotech=2"
construction_time = 300
construction_cost = list("metal"=50000,"glass"=20000)
/obj/item/mecha_parts/part/gygax_head
name="Gygax Head"
icon_state = "gygax_head"
origin_tech = "programming=2;materials=4;magnets=3"
construction_time = 200
construction_cost = list("metal"=20000,"glass"=10000)
/obj/item/mecha_parts/part/gygax_left_arm
name="Gygax Left Arm"
icon_state = "gygax_l_arm"
origin_tech = "programming=2;materials=4"
construction_time = 200
construction_cost = list("metal"=30000)
/obj/item/mecha_parts/part/gygax_right_arm
name="Gygax Right Arm"
icon_state = "gygax_r_arm"
origin_tech = "programming=2;materials=4"
construction_time = 200
construction_cost = list("metal"=30000)
/obj/item/mecha_parts/part/gygax_left_leg
name="Gygax Left Leg"
icon_state = "gygax_l_leg"
origin_tech = "programming=2;materials=4"
construction_time = 200
construction_cost = list("metal"=35000)
/obj/item/mecha_parts/part/gygax_right_leg
name="Gygax Right Leg"
icon_state = "gygax_r_leg"
origin_tech = "programming=2;materials=4"
construction_time = 200
construction_cost = list("metal"=35000)
/obj/item/mecha_parts/part/gygax_armour
name="Gygax Armour Plates"
icon_state = "gygax_armour"
origin_tech = "materials=5;combat=4"
construction_time = 600
construction_cost = list("metal"=50000,"diamond"=10000)
//////////// Durand
/obj/item/mecha_parts/chassis/durand
name = "Durand Chassis"
construction_cost = list("metal"=25000)
New()
..()
construct = new /datum/construction/mecha/durand_chassis(src)
/obj/item/mecha_parts/part/durand_torso
name="Durand Torso"
icon_state = "gygax_harness"
origin_tech = "programming=2;materials=4;biotech=2"
construction_time = 300
construction_cost = list("metal"=55000,"glass"=20000,"silver"=10000)
/obj/item/mecha_parts/part/durand_head
name="Durand Head"
icon_state = "gygax_head"
origin_tech = "programming=2;materials=4;magnets=3"
construction_time = 200
construction_cost = list("metal"=25000,"glass"=10000,"silver"=5000)
/obj/item/mecha_parts/part/durand_left_arm
name="Durand Left Arm"
icon_state = "gygax_l_arm"
origin_tech = "programming=2;materials=4"
construction_time = 200
construction_cost = list("metal"=35000,"silver"=5000)
/obj/item/mecha_parts/part/durand_right_arm
name="Durand Right Arm"
icon_state = "gygax_r_arm"
origin_tech = "programming=2;materials=4"
construction_time = 200
construction_cost = list("metal"=35000,"silver"=5000)
/obj/item/mecha_parts/part/durand_left_leg
name="Durand Left Leg"
icon_state = "gygax_l_leg"
origin_tech = "programming=2;materials=4"
construction_time = 200
construction_cost = list("metal"=40000,"silver"=5000)
/obj/item/mecha_parts/part/durand_right_leg
name="Durand Right Leg"
icon_state = "gygax_r_leg"
origin_tech = "programming=2;materials=4"
construction_time = 200
construction_cost = list("metal"=40000,"silver"=5000)
/obj/item/mecha_parts/part/durand_armour
name="Durand Armour Plates"
icon_state = "gygax_armour"
origin_tech = "materials=5;combat=4"
construction_time = 600
construction_cost = list("metal"=50000,"uranium"=10000)
////////// Firefighter
/obj/item/mecha_parts/chassis/firefighter
name = "Ripley-on-Fire Chassis"
New()
..()
construct = new /datum/construction/mecha/firefighter_chassis(src)
/obj/item/mecha_parts/part/firefighter_torso
name="Ripley-on-Fire Torso"
icon_state = "ripley_harness"
/obj/item/mecha_parts/part/firefighter_left_arm
name="Ripley-on-Fire Left Arm"
icon_state = "ripley_l_arm"
/obj/item/mecha_parts/part/firefighter_right_arm
name="Ripley-on-Fire Right Arm"
icon_state = "ripley_r_arm"
/obj/item/mecha_parts/part/firefighter_left_leg
name="Ripley-on-Fire Left Leg"
icon_state = "ripley_l_leg"
/obj/item/mecha_parts/part/firefighter_right_leg
name="Ripley-on-Fire Right Leg"
icon_state = "ripley_r_leg"
////////// HONK
/obj/item/mecha_parts/chassis/honker
name = "H.O.N.K Chassis"
New()
..()
construct = new /datum/construction/mecha/honker_chassis(src)
/obj/item/mecha_parts/part/honker_torso
name="H.O.N.K Torso"
icon_state = "honker_harness"
construction_time = 300
construction_cost = list("metal"=35000,"glass"=10000,"bananium"=10000)
/obj/item/mecha_parts/part/honker_head
name="H.O.N.K Head"
icon_state = "honker_head"
construction_time = 200
construction_cost = list("metal"=15000,"glass"=5000,"bananium"=5000)
/obj/item/mecha_parts/part/honker_left_arm
name="H.O.N.K Left Arm"
icon_state = "honker_l_arm"
construction_time = 200
construction_cost = list("metal"=20000,"bananium"=5000)
/obj/item/mecha_parts/part/honker_right_arm
name="H.O.N.K Right Arm"
icon_state = "honker_r_arm"
construction_time = 200
construction_cost = list("metal"=20000,"bananium"=5000)
/obj/item/mecha_parts/part/honker_left_leg
name="H.O.N.K Left Leg"
icon_state = "honker_l_leg"
construction_time = 200
construction_cost = list("metal"=20000,"bananium"=5000)
/obj/item/mecha_parts/part/honker_right_leg
name="H.O.N.K Right Leg"
icon_state = "honker_r_leg"
construction_time = 200
construction_cost = list("metal"=20000,"bananium"=5000)
/obj/item/mecha_parts/circuitboard
name = "Exosuit Circuit board"
icon = 'module.dmi'
icon_state = "std_mod"
item_state = "electronic"
flags = FPRINT | TABLEPASS| CONDUCT
force = 5.0
w_class = 2.0
throwforce = 5.0
throw_speed = 3
throw_range = 15
ripley
origin_tech = "programming=3"
ripley/peripherals
name = "Circuit board (Ripley Peripherals Control module)"
icon_state = "mcontroller"
ripley/main
name = "Circuit board (Ripley Central Control module)"
icon_state = "mainboard"
gygax
origin_tech = "programming=4"
gygax/peripherals
name = "Circuit board (Gygax Peripherals Control module)"
icon_state = "mcontroller"
gygax/targeting
name = "Circuit board (Gygax Weapon Control and Targeting module)"
icon_state = "mcontroller"
origin_tech = "programming=3;combat=3"
gygax/main
name = "Circuit board (Gygax Central Control module)"
icon_state = "mainboard"
durand
origin_tech = "programming=4"
durand/peripherals
name = "Circuit board (Durand Peripherals Control module)"
icon_state = "mcontroller"
durand/targeting
name = "Circuit board (Durand Weapon Control and Targeting module)"
icon_state = "mcontroller"
origin_tech = "programming=3;combat=3"
durand/main
name = "Circuit board (Durand Central Control module)"
icon_state = "mainboard"
firefighter/peripherals
name = "Circuit board (Ripley-on-Fire Peripherals Control module)"
icon_state = "mcontroller"
honker
origin_tech = "programming=4"
honker/peripherals
name = "Circuit board (H.O.N.K Peripherals Control module)"
icon_state = "mcontroller"
honker/targeting
name = "Circuit board (H.O.N.K Weapon Control and Targeting module)"
icon_state = "mcontroller"
honker/main
name = "Circuit board (H.O.N.K Central Control module)"
icon_state = "mainboard"
////////////////////////////////
///// Construction datums //////
////////////////////////////////
@@ -435,20 +89,62 @@
/datum/construction/reversible/mecha/ripley
result = "/obj/mecha/working/ripley"
steps = list(list("key"=/obj/item/weapon/weldingtool,"backkey"=/obj/item/weapon/wrench),//1
list("key"=/obj/item/weapon/wrench,"backkey"=/obj/item/weapon/crowbar),//2
list("key"=/obj/item/stack/sheet/r_metal,"backkey"=/obj/item/weapon/weldingtool),//3
list("key"=/obj/item/weapon/weldingtool,"backkey"=/obj/item/weapon/wrench),//4
list("key"=/obj/item/weapon/wrench,"backkey"=/obj/item/weapon/crowbar),//5
list("key"=/obj/item/stack/sheet/metal,"backkey"=/obj/item/weapon/screwdriver),//6
list("key"=/obj/item/weapon/screwdriver,"backkey"=/obj/item/weapon/crowbar),//7
list("key"=/obj/item/mecha_parts/circuitboard/ripley/peripherals,"backkey"=/obj/item/weapon/screwdriver),//8
list("key"=/obj/item/weapon/screwdriver,"backkey"=/obj/item/weapon/crowbar),//9
list("key"=/obj/item/mecha_parts/circuitboard/ripley/main,"backkey"=/obj/item/weapon/screwdriver),//10
list("key"=/obj/item/weapon/wirecutters,"backkey"=/obj/item/weapon/screwdriver),//11
list("key"=/obj/item/weapon/cable_coil,"backkey"=/obj/item/weapon/screwdriver),//12
list("key"=/obj/item/weapon/screwdriver,"backkey"=/obj/item/weapon/wrench),//13
list("key"=/obj/item/weapon/wrench)//14
steps = list(
//1
list("key"=/obj/item/weapon/weldingtool,
"backkey"=/obj/item/weapon/wrench,
"desc"="External armor is wrenched."),
//2
list("key"=/obj/item/weapon/wrench,
"backkey"=/obj/item/weapon/crowbar,
"desc"="External armor is installed."),
//3
list("key"=/obj/item/stack/sheet/r_metal,
"backkey"=/obj/item/weapon/weldingtool,
"desc"="Internal armor is welded."),
//4
list("key"=/obj/item/weapon/weldingtool,
"backkey"=/obj/item/weapon/wrench,
"desc"="Internal armor is wrenched"),
//5
list("key"=/obj/item/weapon/wrench,
"backkey"=/obj/item/weapon/crowbar,
"desc"="Internal armor is installed"),
//6
list("key"=/obj/item/stack/sheet/metal,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="Peripherals control module is secured"),
//7
list("key"=/obj/item/weapon/screwdriver,
"backkey"=/obj/item/weapon/crowbar,
"desc"="Peripherals control module is installed"),
//8
list("key"=/obj/item/mecha_parts/circuitboard/ripley/peripherals,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="Central control module is secured"),
//9
list("key"=/obj/item/weapon/screwdriver,
"backkey"=/obj/item/weapon/crowbar,
"desc"="Central control module is installed"),
//10
list("key"=/obj/item/mecha_parts/circuitboard/ripley/main,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="The wiring is adjusted"),
//11
list("key"=/obj/item/weapon/wirecutters,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="The wiring is added"),
//12
list("key"=/obj/item/weapon/cable_coil,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="The hydraulic systems are active."),
//13
list("key"=/obj/item/weapon/screwdriver,
"backkey"=/obj/item/weapon/wrench,
"desc"="The hydraulic systems are connected."),
//14
list("key"=/obj/item/weapon/wrench,
"desc"="The hydraulic systems are disconnected.")
)
action(atom/used_atom,mob/user as mob)
@@ -561,94 +257,220 @@
spawn_result()
var/obj/item/mecha_parts/chassis/const_holder = holder
const_holder.construct = new /datum/construction/mecha/gygax(const_holder)
const_holder.construct = new /datum/construction/reversible/mecha/gygax(const_holder)
const_holder.density = 1
spawn()
del src
return
/datum/construction/mecha/gygax
/datum/construction/reversible/mecha/gygax
result = "/obj/mecha/combat/gygax"
steps = list(list("key"="/obj/item/weapon/weldingtool"),//1
list("key"="/obj/item/weapon/wrench"),//2
list("key"="/obj/item/mecha_parts/part/gygax_armour"),//3
list("key"="/obj/item/weapon/weldingtool"),//4
list("key"="/obj/item/weapon/wrench"),//5
list("key"="/obj/item/stack/sheet/metal"),//6
list("key"="/obj/item/weapon/screwdriver"),//7
list("key"="/obj/item/weapon/stock_parts/capacitor/adv"),//8
list("key"="/obj/item/weapon/screwdriver"),//9
list("key"="/obj/item/weapon/stock_parts/scanning_module/adv"),//10
list("key"="/obj/item/weapon/screwdriver"),//11
list("key"="/obj/item/mecha_parts/circuitboard/gygax/targeting"),//12
list("key"="/obj/item/weapon/screwdriver"),//13
list("key"="/obj/item/mecha_parts/circuitboard/gygax/peripherals"),//14
list("key"="/obj/item/weapon/screwdriver"),//15
list("key"="/obj/item/mecha_parts/circuitboard/gygax/main"),//16
list("key"="/obj/item/weapon/wirecutters"),//17
list("key"="/obj/item/weapon/cable_coil"),//18
list("key"="/obj/item/weapon/screwdriver"),//19
list("key"="/obj/item/weapon/wrench")//20
steps = list(
//1
list("key"=/obj/item/weapon/weldingtool,
"backkey"=/obj/item/weapon/wrench,
"desc"="External armor is wrenched."),
//2
list("key"=/obj/item/weapon/wrench,
"backkey"=/obj/item/weapon/crowbar,
"desc"="External armor is installed."),
//3
list("key"=/obj/item/mecha_parts/part/gygax_armour,
"backkey"=/obj/item/weapon/weldingtool,
"desc"="Internal armor is welded."),
//4
list("key"=/obj/item/weapon/weldingtool,
"backkey"=/obj/item/weapon/wrench,
"desc"="Internal armor is wrenched"),
//5
list("key"=/obj/item/weapon/wrench,
"backkey"=/obj/item/weapon/crowbar,
"desc"="Internal armor is installed"),
//6
list("key"=/obj/item/stack/sheet/metal,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="Advanced capacitor is secured"),
//7
list("key"=/obj/item/weapon/screwdriver,
"backkey"=/obj/item/weapon/crowbar,
"desc"="Advanced capacitor is installed"),
//8
list("key"=/obj/item/weapon/stock_parts/capacitor/adv,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="Advanced scanner module is secured"),
//9
list("key"=/obj/item/weapon/screwdriver,
"backkey"=/obj/item/weapon/crowbar,
"desc"="Advanced scanner module is installed"),
//10
list("key"=/obj/item/weapon/stock_parts/scanning_module/adv,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="Targeting module is secured"),
//11
list("key"=/obj/item/weapon/screwdriver,
"backkey"=/obj/item/weapon/crowbar,
"desc"="Targeting module is installed"),
//12
list("key"=/obj/item/mecha_parts/circuitboard/gygax/targeting,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="Peripherals control module is secured"),
//13
list("key"=/obj/item/weapon/screwdriver,
"backkey"=/obj/item/weapon/crowbar,
"desc"="Peripherals control module is installed"),
//14
list("key"=/obj/item/mecha_parts/circuitboard/gygax/peripherals,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="Central control module is secured"),
//15
list("key"=/obj/item/weapon/screwdriver,
"backkey"=/obj/item/weapon/crowbar,
"desc"="Central control module is installed"),
//16
list("key"=/obj/item/mecha_parts/circuitboard/gygax/main,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="The wiring is adjusted"),
//17
list("key"=/obj/item/weapon/wirecutters,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="The wiring is added"),
//18
list("key"=/obj/item/weapon/cable_coil,
"backkey"=/obj/item/weapon/screwdriver,
"desc"="The hydraulic systems are active."),
//19
list("key"=/obj/item/weapon/screwdriver,
"backkey"=/obj/item/weapon/wrench,
"desc"="The hydraulic systems are connected."),
//20
list("key"=/obj/item/weapon/wrench,
"desc"="The hydraulic systems are disconnected.")
)
action(atom/used_atom,mob/user as mob)
return check_step(used_atom,user)
custom_action(step, atom/used_atom, mob/user)
custom_action(index, diff, atom/used_atom, mob/user)
if(!..())
return 0
//TODO: better messages.
switch(step)
switch(index)
if(20)
user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.")
if(19)
user.visible_message("[user] adjusts [holder] hydraulic systems.", "You adjust [holder] hydraulic systems.")
if(diff==FORWARD)
user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.")
else
user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.")
if(18)
if(diff==FORWARD)
user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].")
else
user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.")
if(17)
if(diff==FORWARD)
user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].")
else
user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].")
var/obj/item/weapon/cable_coil/coil = new /obj/item/weapon/cable_coil(get_turf(holder))
coil.amount = 4
if(16)
if(diff==FORWARD)
user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].")
del used_atom
else
user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].")
if(15)
if(diff==FORWARD)
user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
else
user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].")
new /obj/item/mecha_parts/circuitboard/gygax/main(get_turf(holder))
if(14)
if(diff==FORWARD)
user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].")
del used_atom
else
user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
if(13)
if(diff==FORWARD)
user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
else
user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].")
new /obj/item/mecha_parts/circuitboard/gygax/peripherals(get_turf(holder))
if(12)
if(diff==FORWARD)
user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].")
del used_atom
else
user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
if(11)
if(diff==FORWARD)
user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.")
else
user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].")
new /obj/item/mecha_parts/circuitboard/gygax/targeting(get_turf(holder))
if(10)
if(diff==FORWARD)
user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].")
del used_atom
else
user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.")
if(9)
if(diff==FORWARD)
user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.")
else
user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the advanced scanner module from [holder].")
new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder))
if(8)
if(diff==FORWARD)
user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].")
del used_atom
else
user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.")
if(7)
if(diff==FORWARD)
user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.")
else
user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].")
new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder))
if(6)
if(diff==FORWARD)
user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].")
else
user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.")
if(5)
if(diff==FORWARD)
user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.")
else
user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].")
var/obj/item/stack/sheet/metal/MS = new /obj/item/stack/sheet/metal(get_turf(holder))
MS.amount = 5
if(4)
if(diff==FORWARD)
user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].")
else
user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
if(3)
if(diff==FORWARD)
user.visible_message("[user] installs Gygax Armour Plates to [holder].", "You install Gygax Armour Plates to [holder].")
holder.overlays += used_atom.icon_state
del used_atom
else
user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].")
if(2)
if(diff==FORWARD)
user.visible_message("[user] secures Gygax Armour Plates.", "You secure Gygax Armour Plates.")
else
user.visible_message("[user] pries Gygax Armour Plates from [holder].", "You prie Gygax Armour Plates from [holder].")
new /obj/item/mecha_parts/part/gygax_armour(get_turf(holder))
if(1)
if(diff==FORWARD)
user.visible_message("[user] welds Gygax Armour Plates to [holder].", "You weld Gygax Armour Plates to [holder].")
else
user.visible_message("[user] unfastens Gygax Armour Plates.", "You unfasten Gygax Armour Plates.")
return 1
@@ -922,10 +744,3 @@
if(1)
user.visible_message("[user] welds Durand Armour Plates to [holder].", "You weld Durand Armour Plates to [holder].")
return 1
////////////////// misc ////////////////

View File

@@ -0,0 +1,346 @@
/////////////////////////
////// Mecha Parts //////
/////////////////////////
/obj/item/mecha_parts
name = "mecha part"
icon = 'mech_construct.dmi'
icon_state = "blank"
w_class = 20
flags = FPRINT | TABLEPASS | CONDUCT
origin_tech = "programming=2;materials=2"
var/construction_time = 100
var/list/construction_cost = list("metal"=20000,"glass"=5000)
/obj/item/mecha_parts/chassis
name="Mecha Chassis"
icon_state = "backbone"
var/datum/construction/construct
construction_cost = list("metal"=20000)
flags = FPRINT | CONDUCT
attackby(obj/item/W as obj, mob/user as mob)
if(!construct || !construct.action(W, user))
..()
return
attack_hand()
return
/////////// Ripley
/obj/item/mecha_parts/chassis/ripley
name = "Ripley Chassis"
New()
..()
construct = new /datum/construction/mecha/ripley_chassis(src)
/obj/item/mecha_parts/part/ripley_torso
name="Ripley Torso"
icon_state = "ripley_harness"
origin_tech = "programming=2;materials=3;biotech=2"
construction_time = 300
construction_cost = list("metal"=40000,"glass"=15000)
/obj/item/mecha_parts/part/ripley_left_arm
name="Ripley Left Arm"
icon_state = "ripley_l_arm"
origin_tech = "programming=2;materials=3"
construction_time = 200
construction_cost = list("metal"=25000)
/obj/item/mecha_parts/part/ripley_right_arm
name="Ripley Right Arm"
icon_state = "ripley_r_arm"
origin_tech = "programming=2;materials=3"
construction_time = 200
construction_cost = list("metal"=25000)
/obj/item/mecha_parts/part/ripley_left_leg
name="Ripley Left Leg"
icon_state = "ripley_l_leg"
origin_tech = "programming=2;materials=3"
construction_time = 200
construction_cost = list("metal"=30000)
/obj/item/mecha_parts/part/ripley_right_leg
name="Ripley Right Leg"
icon_state = "ripley_r_leg"
origin_tech = "programming=2;materials=3"
construction_time = 200
construction_cost = list("metal"=30000)
///////// Gygax
/obj/item/mecha_parts/chassis/gygax
name = "Gygax Chassis"
construction_cost = list("metal"=25000)
New()
..()
construct = new /datum/construction/mecha/gygax_chassis(src)
/obj/item/mecha_parts/part/gygax_torso
name="Gygax Torso"
icon_state = "gygax_harness"
origin_tech = "programming=2;materials=5;biotech=3"
construction_time = 300
construction_cost = list("metal"=50000,"glass"=20000)
/obj/item/mecha_parts/part/gygax_head
name="Gygax Head"
icon_state = "gygax_head"
origin_tech = "programming=2;materials=5;magnets=3"
construction_time = 200
construction_cost = list("metal"=20000,"glass"=10000)
/obj/item/mecha_parts/part/gygax_left_arm
name="Gygax Left Arm"
icon_state = "gygax_l_arm"
origin_tech = "programming=2;materials=5"
construction_time = 200
construction_cost = list("metal"=30000)
/obj/item/mecha_parts/part/gygax_right_arm
name="Gygax Right Arm"
icon_state = "gygax_r_arm"
origin_tech = "programming=2;materials=5"
construction_time = 200
construction_cost = list("metal"=30000)
/obj/item/mecha_parts/part/gygax_left_leg
name="Gygax Left Leg"
icon_state = "gygax_l_leg"
origin_tech = "programming=2;materials=5"
construction_time = 200
construction_cost = list("metal"=35000)
/obj/item/mecha_parts/part/gygax_right_leg
name="Gygax Right Leg"
icon_state = "gygax_r_leg"
origin_tech = "programming=2;materials=5"
construction_time = 200
construction_cost = list("metal"=35000)
/obj/item/mecha_parts/part/gygax_armour
name="Gygax Armour Plates"
icon_state = "gygax_armour"
origin_tech = "materials=5;combat=4"
construction_time = 600
construction_cost = list("metal"=50000,"diamond"=10000)
//////////// Durand
/obj/item/mecha_parts/chassis/durand
name = "Durand Chassis"
construction_cost = list("metal"=25000)
New()
..()
construct = new /datum/construction/mecha/durand_chassis(src)
/obj/item/mecha_parts/part/durand_torso
name="Durand Torso"
icon_state = "gygax_harness"
origin_tech = "programming=2;materials=5;biotech=3"
construction_time = 300
construction_cost = list("metal"=55000,"glass"=20000,"silver"=10000)
/obj/item/mecha_parts/part/durand_head
name="Durand Head"
icon_state = "gygax_head"
origin_tech = "programming=2;materials=5;magnets=3"
construction_time = 200
construction_cost = list("metal"=25000,"glass"=10000,"silver"=5000)
/obj/item/mecha_parts/part/durand_left_arm
name="Durand Left Arm"
icon_state = "gygax_l_arm"
origin_tech = "programming=2;materials=5"
construction_time = 200
construction_cost = list("metal"=35000,"silver"=5000)
/obj/item/mecha_parts/part/durand_right_arm
name="Durand Right Arm"
icon_state = "gygax_r_arm"
origin_tech = "programming=2;materials=5"
construction_time = 200
construction_cost = list("metal"=35000,"silver"=5000)
/obj/item/mecha_parts/part/durand_left_leg
name="Durand Left Leg"
icon_state = "gygax_l_leg"
origin_tech = "programming=2;materials=5"
construction_time = 200
construction_cost = list("metal"=40000,"silver"=5000)
/obj/item/mecha_parts/part/durand_right_leg
name="Durand Right Leg"
icon_state = "gygax_r_leg"
origin_tech = "programming=2;materials=5"
construction_time = 200
construction_cost = list("metal"=40000,"silver"=5000)
/obj/item/mecha_parts/part/durand_armour
name="Durand Armour Plates"
icon_state = "gygax_armour"
origin_tech = "materials=5;combat=4"
construction_time = 600
construction_cost = list("metal"=50000,"uranium"=10000)
////////// Firefighter
/obj/item/mecha_parts/chassis/firefighter
name = "Ripley-on-Fire Chassis"
New()
..()
construct = new /datum/construction/mecha/firefighter_chassis(src)
/obj/item/mecha_parts/part/firefighter_torso
name="Ripley-on-Fire Torso"
icon_state = "ripley_harness"
/obj/item/mecha_parts/part/firefighter_left_arm
name="Ripley-on-Fire Left Arm"
icon_state = "ripley_l_arm"
/obj/item/mecha_parts/part/firefighter_right_arm
name="Ripley-on-Fire Right Arm"
icon_state = "ripley_r_arm"
/obj/item/mecha_parts/part/firefighter_left_leg
name="Ripley-on-Fire Left Leg"
icon_state = "ripley_l_leg"
/obj/item/mecha_parts/part/firefighter_right_leg
name="Ripley-on-Fire Right Leg"
icon_state = "ripley_r_leg"
////////// HONK
/obj/item/mecha_parts/chassis/honker
name = "H.O.N.K Chassis"
New()
..()
construct = new /datum/construction/mecha/honker_chassis(src)
/obj/item/mecha_parts/part/honker_torso
name="H.O.N.K Torso"
icon_state = "honker_harness"
construction_time = 300
construction_cost = list("metal"=35000,"glass"=10000,"bananium"=10000)
/obj/item/mecha_parts/part/honker_head
name="H.O.N.K Head"
icon_state = "honker_head"
construction_time = 200
construction_cost = list("metal"=15000,"glass"=5000,"bananium"=5000)
/obj/item/mecha_parts/part/honker_left_arm
name="H.O.N.K Left Arm"
icon_state = "honker_l_arm"
construction_time = 200
construction_cost = list("metal"=20000,"bananium"=5000)
/obj/item/mecha_parts/part/honker_right_arm
name="H.O.N.K Right Arm"
icon_state = "honker_r_arm"
construction_time = 200
construction_cost = list("metal"=20000,"bananium"=5000)
/obj/item/mecha_parts/part/honker_left_leg
name="H.O.N.K Left Leg"
icon_state = "honker_l_leg"
construction_time = 200
construction_cost = list("metal"=20000,"bananium"=5000)
/obj/item/mecha_parts/part/honker_right_leg
name="H.O.N.K Right Leg"
icon_state = "honker_r_leg"
construction_time = 200
construction_cost = list("metal"=20000,"bananium"=5000)
/obj/item/mecha_parts/circuitboard
name = "Exosuit Circuit board"
icon = 'module.dmi'
icon_state = "std_mod"
item_state = "electronic"
flags = FPRINT | TABLEPASS| CONDUCT
force = 5.0
w_class = 2.0
throwforce = 5.0
throw_speed = 3
throw_range = 15
ripley
origin_tech = "programming=3"
ripley/peripherals
name = "Circuit board (Ripley Peripherals Control module)"
icon_state = "mcontroller"
ripley/main
name = "Circuit board (Ripley Central Control module)"
icon_state = "mainboard"
gygax
origin_tech = "programming=4"
gygax/peripherals
name = "Circuit board (Gygax Peripherals Control module)"
icon_state = "mcontroller"
gygax/targeting
name = "Circuit board (Gygax Weapon Control and Targeting module)"
icon_state = "mcontroller"
origin_tech = "programming=4;combat=4"
gygax/main
name = "Circuit board (Gygax Central Control module)"
icon_state = "mainboard"
durand
origin_tech = "programming=4"
durand/peripherals
name = "Circuit board (Durand Peripherals Control module)"
icon_state = "mcontroller"
durand/targeting
name = "Circuit board (Durand Weapon Control and Targeting module)"
icon_state = "mcontroller"
origin_tech = "programming=4;combat=4"
durand/main
name = "Circuit board (Durand Central Control module)"
icon_state = "mainboard"
firefighter/peripherals
name = "Circuit board (Ripley-on-Fire Peripherals Control module)"
icon_state = "mcontroller"
honker
origin_tech = "programming=4"
honker/peripherals
name = "Circuit board (H.O.N.K Peripherals Control module)"
icon_state = "mcontroller"
honker/targeting
name = "Circuit board (H.O.N.K Weapon Control and Targeting module)"
icon_state = "mcontroller"
honker/main
name = "Circuit board (H.O.N.K Central Control module)"
icon_state = "mainboard"

View File

@@ -509,7 +509,7 @@ datum
desc = "An exosuit module that allows generating of small quasi-stable wormholes."
id = "mech_wormhole_gen"
build_type = MECHFAB
req_tech = list("bluepace" = 4)
req_tech = list("bluepace" = 3)
build_path = "/obj/item/mecha_parts/mecha_equipment/wormhole_generator"
mech_teleporter
@@ -525,7 +525,7 @@ datum
desc = "An exosuit-mounted Rapid Construction Device."
id = "mech_rcd"
build_type = MECHFAB
req_tech = list("materials" = 4, "bluespace" = 4, "magnets" = 4, "powerstorage"=4)
req_tech = list("materials" = 4, "bluespace" = 3, "magnets" = 4, "powerstorage"=4)
build_path = "/obj/item/mecha_parts/mecha_equipment/tool/rcd"
mech_gravcatapult
@@ -800,6 +800,16 @@ datum
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/rdserver"
mechfab
name = "Exosuit Fabricator Board"
desc = "The circuit board for an Exosuit Fabricator"
id = "mechfab"
req_tech = list("programming" = 2,"materials"=3)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/mechfab"
/////////////////////////////////////////
////////////Power Stuff//////////////////
/////////////////////////////////////////

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

@@ -12,6 +12,7 @@
#define FILE_DIR "code/ATMOSPHERICS/components/unary"
#define FILE_DIR "code/datums"
#define FILE_DIR "code/datums/diseases"
#define FILE_DIR "code/datums/helper_datums"
#define FILE_DIR "code/datums/spells"
#define FILE_DIR "code/defines"
#define FILE_DIR "code/defines/area"
@@ -195,6 +196,8 @@
#include "code\datums\diseases\robotic_transformation.dm"
#include "code\datums\diseases\wizarditis.dm"
#include "code\datums\diseases\xeno_transformation.dm"
#include "code\datums\helper_datums\construction_datum.dm"
#include "code\datums\helper_datums\global_iterator.dm"
#include "code\datums\spells\blind.dm"
#include "code\datums\spells\blink.dm"
#include "code\datums\spells\conjure.dm"
@@ -423,13 +426,12 @@
#include "code\game\magic\cultist\ritual.dm"
#include "code\game\magic\cultist\runes.dm"
#include "code\game\magic\cultist\specialtalisman.dm"
#include "code\game\mecha\construction_datum.dm"
#include "code\game\mecha\global_iterator.dm"
#include "code\game\mecha\mech_bay.dm"
#include "code\game\mecha\mech_fabricator.dm"
#include "code\game\mecha\mecha.dm"
#include "code\game\mecha\mecha_construction.dm"
#include "code\game\mecha\mecha_construction_paths.dm"
#include "code\game\mecha\mecha_control_console.dm"
#include "code\game\mecha\mecha_parts.dm"
#include "code\game\mecha\mecha_wreckage.dm"
#include "code\game\mecha\combat\combat.dm"
#include "code\game\mecha\combat\durand.dm"