- Added Exosuit Jetpack
- Added Exosuit Nuclear Reactor - Added Ripley construction steps sprites (courtesy of WJohnston) - Exosuit Sleeper can now inject occupant with reagents taken from Syringe Gun - Exosuit Cable Layer will now auto-dismantle floors - Exosuit Heavy Lazer cooldown increased, Scattershot now fires medium calibre ammo (less damage) - EMP now drains half of current exosuit cell charge, not half of maximum charge. - Exosuit wreckage can be pulled - Fixed several possible exosuit equipment runtimes - Moved all mecha-related icons to icons/mecha - Mecha equipment messages will show equipment icons in chat window - Fixed mecha creation reports being sent at wrong construction step - Played with changelog markup. For some reason javascript is extremely slow in byond browser, I'll look into it. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3057 316c924e-a436-60f5-8080-3fe189b3f50e
@@ -10,13 +10,16 @@
|
||||
..()
|
||||
events = new
|
||||
|
||||
proc/addEventType(event_type)
|
||||
proc/addEventType(event_type as text)
|
||||
if(!(event_type in events) || !islist(events[event_type]))
|
||||
events[event_type] = list()
|
||||
return 1
|
||||
return
|
||||
|
||||
proc/addEvent(event_type,proc_holder,proc_name)
|
||||
|
||||
// Arguments: event_type as text, proc_holder as datum, proc_name as text
|
||||
// Returns: New event, null on error.
|
||||
proc/addEvent(event_type as text, proc_holder, proc_name as text)
|
||||
if(!event_type || !proc_holder || !proc_name)
|
||||
return
|
||||
addEventType(event_type)
|
||||
@@ -25,6 +28,8 @@
|
||||
event += E
|
||||
return E
|
||||
|
||||
// Arguments: event_type as text, any number of additional arguments to pass to event handler
|
||||
// Returns: null
|
||||
proc/fireEvent()
|
||||
//world << "Events in [args[1]] called"
|
||||
var/list/event = listgetindex(events,args[1])
|
||||
@@ -35,7 +40,9 @@
|
||||
clearEvent(args[1],E)
|
||||
return
|
||||
|
||||
proc/clearEvent(event_type,datum/event/E)
|
||||
// Arguments: event_type as text, E as /datum/event
|
||||
// Returns: 1 if event cleared, null on error
|
||||
proc/clearEvent(event_type as text, datum/event/E)
|
||||
if(!event_type || !E)
|
||||
return
|
||||
var/list/event = listgetindex(events,event_type)
|
||||
|
||||
@@ -11,26 +11,6 @@
|
||||
damage_absorption = list("brute"=0.7,"fire"=1,"bullet"=0.7,"laser"=0.85,"energy"=1,"bomb"=0.8)
|
||||
var/am = "d3c2fbcadca903a41161ccc9df9cf948"
|
||||
|
||||
/*
|
||||
/obj/mecha/combat/verb/switch_weapon()
|
||||
set category = "Exosuit Interface"
|
||||
set name = "Switch weapon"
|
||||
set src in view(0)
|
||||
if(usr!=src.occupant)
|
||||
return
|
||||
if(state || !cell || cell.charge<=0) return
|
||||
|
||||
if(selected_weapon == weapon_1)
|
||||
selected_weapon = weapon_2
|
||||
else if(selected_weapon == weapon_2)
|
||||
selected_weapon = weapon_1
|
||||
|
||||
src.occupant << "You switch to [selected_weapon.name]"
|
||||
for (var/mob/M in oviewers(src))
|
||||
M.show_message("[src.name] raises [selected_weapon.name]")
|
||||
return
|
||||
*/
|
||||
|
||||
/*
|
||||
/obj/mecha/combat/range_action(target as obj|mob|turf)
|
||||
if(internal_damage&MECHA_INT_CONTROL_LOST)
|
||||
@@ -259,7 +239,7 @@
|
||||
/obj/mecha/combat/moved_inside(var/mob/living/carbon/human/H as mob)
|
||||
if(..())
|
||||
if(H.client)
|
||||
H.client.mouse_pointer_icon = file("icons/misc/mecha_mouse.dmi")
|
||||
H.client.mouse_pointer_icon = file("icons/mecha/mecha_mouse.dmi")
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
@@ -267,7 +247,7 @@
|
||||
/obj/mecha/combat/mmi_moved_inside(var/obj/item/device/mmi/mmi_as_oc as obj,mob/user as mob)
|
||||
if(..())
|
||||
if(occupant.client)
|
||||
occupant.client.mouse_pointer_icon = file("icons/misc/mecha_mouse.dmi")
|
||||
occupant.client.mouse_pointer_icon = file("icons/mecha/mecha_mouse.dmi")
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
@@ -10,11 +10,13 @@
|
||||
max_temperature = 3500
|
||||
infra_luminosity = 6
|
||||
var/overload = 0
|
||||
var/overload_coeff = 2
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/gygax
|
||||
internal_damage_threshold = 35
|
||||
max_equip = 3
|
||||
|
||||
|
||||
|
||||
/*
|
||||
/obj/mecha/combat/gygax/New()
|
||||
..()
|
||||
@@ -35,24 +37,24 @@
|
||||
if(overload)
|
||||
overload = 0
|
||||
step_in = initial(step_in)
|
||||
step_energy_drain = initial(step_energy_drain)
|
||||
src.occupant_message("<font color='blue'>You disable leg actuators overload.</font>")
|
||||
else
|
||||
overload = 1
|
||||
step_in = min(1, round(step_in/2))
|
||||
step_energy_drain = step_energy_drain*overload_coeff
|
||||
src.occupant_message("<font color='red'>You enable leg actuators overload.</font>")
|
||||
src.log_message("Toggled leg actuators overload.")
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/mecha/combat/gygax/relaymove(mob/user,direction)
|
||||
/obj/mecha/combat/gygax/dyndomove(direction)
|
||||
if(!..()) return
|
||||
if(overload)
|
||||
use_power(step_energy_drain)
|
||||
health--
|
||||
if(health < initial(health) - initial(health)/3)
|
||||
overload = 0
|
||||
step_in = initial(step_in)
|
||||
step_energy_drain = initial(step_energy_drain)
|
||||
src.occupant_message("<font color='red'>Leg actuators damage threshold exceded. Disabling overload.</font>")
|
||||
return
|
||||
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
return 0
|
||||
if(!thrusters && src.pr_inertial_movement.active())
|
||||
return 0
|
||||
if(state || !get_charge())
|
||||
if(state || !has_charge(step_energy_drain))
|
||||
return 0
|
||||
var/tmp_step_in = step_in
|
||||
var/tmp_step_energy_drain = step_energy_drain
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment
|
||||
name = "mecha equipment"
|
||||
icon = 'mech_construct.dmi'
|
||||
icon = 'mecha_equipment.dmi'
|
||||
icon_state = "mecha_equip"
|
||||
force = 5
|
||||
origin_tech = "materials=2"
|
||||
@@ -61,7 +61,7 @@
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/proc/critfail()
|
||||
if(chassis)
|
||||
chassis.log_message("Critical failure of component: [src]",1)
|
||||
log_message("Critical failure",1)
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/proc/get_equip_info()
|
||||
@@ -80,7 +80,7 @@
|
||||
return 0
|
||||
if(!chassis)
|
||||
return 0
|
||||
if(energy_drain && chassis.get_charge() < energy_drain)
|
||||
if(energy_drain && !chassis.has_charge(energy_drain))
|
||||
return 0
|
||||
if(!equip_ready)
|
||||
return 0
|
||||
@@ -107,8 +107,9 @@
|
||||
src.update_chassis_page()
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/proc/detach()
|
||||
if(src.Move(get_turf(chassis)))
|
||||
/obj/item/mecha_parts/mecha_equipment/proc/detach(atom/moveto=null)
|
||||
moveto = moveto || get_turf(chassis)
|
||||
if(src.Move(moveto))
|
||||
chassis.equipment -= src
|
||||
if(chassis.selected == src)
|
||||
chassis.selected = null
|
||||
@@ -135,3 +136,8 @@
|
||||
if(chassis)
|
||||
chassis.occupant_message("\icon[src] [message]")
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/proc/log_message(message)
|
||||
if(chassis)
|
||||
chassis.log_message("<i>[src]:</i> [message]")
|
||||
return
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
var/obj/O = target
|
||||
if(!O.anchored)
|
||||
if(cargo_holder.cargo.len < cargo_holder.cargo_capacity)
|
||||
chassis.occupant_message("You lift [target] and start to load it into cargo compartment.")
|
||||
occupant_message("You lift [target] and start to load it into cargo compartment.")
|
||||
chassis.visible_message("[chassis] lifts [target] and starts to load it into cargo compartment.")
|
||||
set_ready_state(0)
|
||||
chassis.use_power(energy_drain)
|
||||
@@ -35,15 +35,15 @@
|
||||
cargo_holder.cargo += O
|
||||
O.loc = chassis
|
||||
O.anchored = 0
|
||||
chassis.occupant_message("<font color='blue'>[target] succesfully loaded.</font>")
|
||||
chassis.log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]")
|
||||
occupant_message("<font color='blue'>[target] succesfully loaded.</font>")
|
||||
log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]")
|
||||
else
|
||||
chassis.occupant_message("<font color='red'>You must hold still while handling objects.</font>")
|
||||
occupant_message("<font color='red'>You must hold still while handling objects.</font>")
|
||||
O.anchored = initial(O.anchored)
|
||||
else
|
||||
chassis.occupant_message("<font color='red'>Not enough room in cargo compartment.</font>")
|
||||
occupant_message("<font color='red'>Not enough room in cargo compartment.</font>")
|
||||
else
|
||||
chassis.occupant_message("<font color='red'>[target] is firmly secured.</font>")
|
||||
occupant_message("<font color='red'>[target] is firmly secured.</font>")
|
||||
|
||||
else if(istype(target,/mob/living))
|
||||
var/mob/living/M = target
|
||||
@@ -52,11 +52,11 @@
|
||||
M.take_overall_damage(dam_force)
|
||||
M.adjustOxyLoss(round(dam_force/2))
|
||||
M.updatehealth()
|
||||
chassis.occupant_message("\red You squeese [target] with [src.name]. Something cracks.")
|
||||
occupant_message("\red You squeese [target] with [src.name]. Something cracks.")
|
||||
chassis.visible_message("\red [chassis] squeeses [target].")
|
||||
else
|
||||
step_away(M,chassis)
|
||||
chassis.occupant_message("You push [target] out of the way.")
|
||||
occupant_message("You push [target] out of the way.")
|
||||
chassis.visible_message("[chassis] pushes [target] out of the way.")
|
||||
set_ready_state(0)
|
||||
chassis.use_power(energy_drain)
|
||||
@@ -76,18 +76,18 @@
|
||||
set_ready_state(0)
|
||||
chassis.use_power(energy_drain)
|
||||
chassis.visible_message("<font color='red'><b>[chassis] starts to drill [target]</b></font>", "You hear the drill.")
|
||||
chassis.occupant_message("<font color='red'><b>You start to drill [target]</b></font>")
|
||||
occupant_message("<font color='red'><b>You start to drill [target]</b></font>")
|
||||
var/T = chassis.loc
|
||||
var/C = target.loc //why are these backwards? we may never know -Pete
|
||||
if(do_after_cooldown(target))
|
||||
if(T == chassis.loc && src == chassis.selected)
|
||||
if(istype(target, /turf/simulated/wall/r_wall))
|
||||
chassis.occupant_message("<font color='red'>[target] is too durable to drill through.</font>")
|
||||
occupant_message("<font color='red'>[target] is too durable to drill through.</font>")
|
||||
else if(istype(target, /turf/simulated/mineral))
|
||||
for(var/turf/simulated/mineral/M in range(chassis,1))
|
||||
if(get_dir(chassis,M)&chassis.dir)
|
||||
M.gets_drilled()
|
||||
chassis.log_message("Drilled through [target]")
|
||||
log_message("Drilled through [target]")
|
||||
if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment)
|
||||
var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo
|
||||
if(ore_box)
|
||||
@@ -95,7 +95,7 @@
|
||||
if(get_dir(chassis,ore)&chassis.dir)
|
||||
ore.Move(ore_box)
|
||||
else if(target.loc == C)
|
||||
chassis.log_message("Drilled through [target]")
|
||||
log_message("Drilled through [target]")
|
||||
target.ex_act(2)
|
||||
return 1
|
||||
|
||||
@@ -137,7 +137,7 @@
|
||||
if(istype(target, /obj/structure/reagent_dispensers/watertank) && get_dist(chassis,target) <= 1)
|
||||
var/obj/o = target
|
||||
o.reagents.trans_to(src, 200)
|
||||
chassis.occupant_message("\blue Extinguisher refilled")
|
||||
occupant_message("\blue Extinguisher refilled")
|
||||
playsound(chassis, 'refill.ogg', 50, 1, -6)
|
||||
else
|
||||
if(src.reagents.total_volume > 0)
|
||||
@@ -208,7 +208,7 @@
|
||||
switch(mode)
|
||||
if(0)
|
||||
if (istype(target, /turf/simulated/wall))
|
||||
chassis.occupant_message("Deconstructing [target]...")
|
||||
occupant_message("Deconstructing [target]...")
|
||||
set_ready_state(0)
|
||||
if(do_after_cooldown(target))
|
||||
if(disabled) return
|
||||
@@ -217,7 +217,7 @@
|
||||
playsound(target, 'Deconstruct.ogg', 50, 1)
|
||||
chassis.give_power(energy_drain)
|
||||
else if (istype(target, /turf/simulated/floor))
|
||||
chassis.occupant_message("Deconstructing [target]...")
|
||||
occupant_message("Deconstructing [target]...")
|
||||
set_ready_state(0)
|
||||
if(do_after_cooldown(target))
|
||||
if(disabled) return
|
||||
@@ -226,7 +226,7 @@
|
||||
playsound(target, 'Deconstruct.ogg', 50, 1)
|
||||
chassis.give_power(energy_drain)
|
||||
else if (istype(target, /obj/machinery/door/airlock))
|
||||
chassis.occupant_message("Deconstructing [target]...")
|
||||
occupant_message("Deconstructing [target]...")
|
||||
set_ready_state(0)
|
||||
if(do_after_cooldown(target))
|
||||
if(disabled) return
|
||||
@@ -236,7 +236,7 @@
|
||||
chassis.give_power(energy_drain)
|
||||
if(1)
|
||||
if(istype(target, /turf/space))
|
||||
chassis.occupant_message("Building Floor...")
|
||||
occupant_message("Building Floor...")
|
||||
set_ready_state(0)
|
||||
if(do_after_cooldown(target))
|
||||
if(disabled) return
|
||||
@@ -245,7 +245,7 @@
|
||||
chassis.spark_system.start()
|
||||
chassis.use_power(energy_drain*2)
|
||||
else if(istype(target, /turf/simulated/floor))
|
||||
chassis.occupant_message("Building Wall...")
|
||||
occupant_message("Building Wall...")
|
||||
set_ready_state(0)
|
||||
if(do_after_cooldown(target))
|
||||
if(disabled) return
|
||||
@@ -255,7 +255,7 @@
|
||||
chassis.use_power(energy_drain*2)
|
||||
if(2)
|
||||
if(istype(target, /turf/simulated/floor))
|
||||
chassis.occupant_message("Building Airlock...")
|
||||
occupant_message("Building Airlock...")
|
||||
set_ready_state(0)
|
||||
if(do_after_cooldown(target))
|
||||
if(disabled) return
|
||||
@@ -274,11 +274,11 @@
|
||||
mode = text2num(href_list["mode"])
|
||||
switch(mode)
|
||||
if(0)
|
||||
chassis.occupant_message("Switched RCD to Deconstruct.")
|
||||
occupant_message("Switched RCD to Deconstruct.")
|
||||
if(1)
|
||||
chassis.occupant_message("Switched RCD to Construct.")
|
||||
occupant_message("Switched RCD to Construct.")
|
||||
if(2)
|
||||
chassis.occupant_message("Switched RCD to Construct Airlock.")
|
||||
occupant_message("Switched RCD to Construct Airlock.")
|
||||
return
|
||||
|
||||
get_equip_info()
|
||||
@@ -374,10 +374,10 @@
|
||||
if(!action_checks(target) && !locked) return
|
||||
if(!locked)
|
||||
if(!istype(target) || target.anchored)
|
||||
chassis.occupant_message("Unable to lock on [target]")
|
||||
occupant_message("Unable to lock on [target]")
|
||||
return
|
||||
locked = target
|
||||
chassis.occupant_message("Locked on [target]")
|
||||
occupant_message("Locked on [target]")
|
||||
send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info())
|
||||
return
|
||||
else if(target!=locked)
|
||||
@@ -390,7 +390,7 @@
|
||||
do_after_cooldown()
|
||||
else
|
||||
locked = null
|
||||
chassis.occupant_message("Lock on [locked] disengaged.")
|
||||
occupant_message("Lock on [locked] disengaged.")
|
||||
send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info())
|
||||
if(2)
|
||||
if(!action_checks(target)) return
|
||||
@@ -592,10 +592,10 @@
|
||||
chassis.overlays -= droid_overlay
|
||||
if(pr_repair_droid.toggle())
|
||||
droid_overlay = new(src.icon, icon_state = "repair_droid_a")
|
||||
chassis.log_message("[src] activated.")
|
||||
log_message("Activated.")
|
||||
else
|
||||
droid_overlay = new(src.icon, icon_state = "repair_droid")
|
||||
chassis.log_message("[src] deactivated.")
|
||||
log_message("Deactivated.")
|
||||
set_ready_state(1)
|
||||
chassis.overlays += droid_overlay
|
||||
send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info())
|
||||
@@ -677,7 +677,7 @@
|
||||
return chassis.dyngetcharge()
|
||||
var/area/A = get_area(chassis)
|
||||
var/pow_chan = get_power_channel(A)
|
||||
var/charge
|
||||
var/charge = 0
|
||||
if(pow_chan)
|
||||
charge = 1000 //making magic
|
||||
return charge
|
||||
@@ -696,10 +696,10 @@
|
||||
if(href_list["toggle_relay"])
|
||||
if(pr_energy_relay.toggle())
|
||||
set_ready_state(0)
|
||||
chassis.log_message("[src] activated.")
|
||||
log_message("Activated.")
|
||||
else
|
||||
set_ready_state(1)
|
||||
chassis.log_message("[src] deactivated.")
|
||||
log_message("Deactivated.")
|
||||
return
|
||||
|
||||
get_equip_info()
|
||||
@@ -726,7 +726,7 @@
|
||||
if(isnull(cur_charge))
|
||||
stop()
|
||||
ER.set_ready_state(1)
|
||||
ER.chassis.occupant_message("No powercell detected.")
|
||||
ER.occupant_message("No powercell detected.")
|
||||
return
|
||||
if(cur_charge<ER.chassis.cell.maxcharge)
|
||||
var/area/A = get_area(ER.chassis)
|
||||
@@ -744,7 +744,7 @@
|
||||
|
||||
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/plasma_generator
|
||||
/obj/item/mecha_parts/mecha_equipment/generator
|
||||
name = "Plasma Converter"
|
||||
desc = "Generates power using solid plasma as fuel. Pollutes the environment."
|
||||
icon_state = "tesla"
|
||||
@@ -753,23 +753,29 @@
|
||||
energy_drain = 0
|
||||
range = MELEE
|
||||
construction_cost = list("metal"=10000,"silver"=500,"glass"=1000)
|
||||
var/datum/global_iterator/pr_mech_plasma_generator
|
||||
var/datum/global_iterator/pr_mech_generator
|
||||
var/coeff = 100
|
||||
var/fuel = 0
|
||||
var/obj/item/stack/sheet/fuel
|
||||
var/max_fuel = 150000
|
||||
var/fuel_per_cycle_idle = 100
|
||||
var/fuel_per_cycle_active = 500
|
||||
var/power_per_cycle = 15
|
||||
var/power_per_cycle = 20
|
||||
reliability = 1000
|
||||
|
||||
New()
|
||||
..()
|
||||
pr_mech_plasma_generator = new /datum/global_iterator/mecha_plasma_generator(list(src),0)
|
||||
pr_mech_plasma_generator.set_delay(equip_cooldown)
|
||||
init()
|
||||
return
|
||||
|
||||
proc/init()
|
||||
fuel = new /obj/item/stack/sheet/plasma(src)
|
||||
fuel.amount = 0
|
||||
pr_mech_generator = new /datum/global_iterator/mecha_generator(list(src),0)
|
||||
pr_mech_generator.set_delay(equip_cooldown)
|
||||
return
|
||||
|
||||
detach()
|
||||
pr_mech_plasma_generator.stop()
|
||||
pr_mech_generator.stop()
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -777,18 +783,18 @@
|
||||
Topic(href, href_list)
|
||||
..()
|
||||
if(href_list["toggle"])
|
||||
if(pr_mech_plasma_generator.toggle())
|
||||
if(pr_mech_generator.toggle())
|
||||
set_ready_state(0)
|
||||
chassis.log_message("[src] activated.")
|
||||
log_message("Activated.")
|
||||
else
|
||||
set_ready_state(1)
|
||||
chassis.log_message("[src] deactivated.")
|
||||
log_message("Deactivated.")
|
||||
return
|
||||
|
||||
get_equip_info()
|
||||
var/output = ..()
|
||||
if(output)
|
||||
return "[output] \[Plasma: [fuel] cm<sup>3</sup>\] - <a href='?src=\ref[src];toggle=1'>[pr_mech_plasma_generator.active()?"Dea":"A"]ctivate</a>"
|
||||
return "[output] \[[fuel]: [round(fuel.amount*fuel.perunit,0.1)] cm<sup>3</sup>\] - <a href='?src=\ref[src];toggle=1'>[pr_mech_generator.active()?"Dea":"A"]ctivate</a>"
|
||||
return
|
||||
|
||||
action(target)
|
||||
@@ -796,22 +802,22 @@
|
||||
var/result = load_fuel(target)
|
||||
var/message
|
||||
if(isnull(result))
|
||||
message = "<font color='red'>Plasma traces in target minimal. [target] cannot be used as fuel.</font>"
|
||||
message = "<font color='red'>[fuel] traces in target minimal. [target] cannot be used as fuel.</font>"
|
||||
else if(!result)
|
||||
message = "Unit is full."
|
||||
else
|
||||
message = "[result] units of plasma successfully loaded."
|
||||
message = "[result] unit\s of [fuel] successfully loaded."
|
||||
send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info())
|
||||
chassis.occupant_message(message)
|
||||
occupant_message(message)
|
||||
return
|
||||
|
||||
proc/load_fuel(var/obj/item/stack/sheet/plasma/P)
|
||||
if(istype(P) && P.amount)
|
||||
var/to_load = max(max_fuel - fuel,0)
|
||||
proc/load_fuel(var/obj/item/stack/sheet/P)
|
||||
if(P.type == fuel.type && P.amount)
|
||||
var/to_load = max(max_fuel - fuel.amount*fuel.perunit,0)
|
||||
if(to_load)
|
||||
var/units = min(max(round(to_load / P.perunit),1),P.amount)
|
||||
if(units)
|
||||
fuel += units * P.perunit
|
||||
fuel.amount += units
|
||||
P.use(units)
|
||||
return units
|
||||
else
|
||||
@@ -821,11 +827,11 @@
|
||||
attackby(weapon,mob/user)
|
||||
var/result = load_fuel(weapon)
|
||||
if(isnull(result))
|
||||
user.visible_message("[user] tries to shove [weapon] into [src]. What a dumb-ass.","<font color='red'>Plasma traces minimal. [weapon] cannot be used as fuel.</font>")
|
||||
user.visible_message("[user] tries to shove [weapon] into [src]. What a dumb-ass.","<font color='red'>[fuel] traces minimal. [weapon] cannot be used as fuel.</font>")
|
||||
else if(!result)
|
||||
user << "Unit is full."
|
||||
else
|
||||
user.visible_message("[user] loads [src] with plasma.","[result] units of plasma successfully loaded.")
|
||||
user.visible_message("[user] loads [src] with [fuel].","[result] unit\s of [fuel] successfully loaded.")
|
||||
return
|
||||
|
||||
critfail()
|
||||
@@ -846,35 +852,68 @@
|
||||
T.assume_air(GM)
|
||||
return
|
||||
|
||||
/datum/global_iterator/mecha_plasma_generator
|
||||
/datum/global_iterator/mecha_generator
|
||||
|
||||
process(var/obj/item/mecha_parts/mecha_equipment/plasma_generator/EG)
|
||||
process(var/obj/item/mecha_parts/mecha_equipment/generator/EG)
|
||||
if(!EG.chassis)
|
||||
stop()
|
||||
EG.set_ready_state(1)
|
||||
return
|
||||
if(EG.fuel<=0)
|
||||
return 0
|
||||
if(EG.fuel.amount<=0)
|
||||
stop()
|
||||
EG.chassis.log_message("[src] deactivated.")
|
||||
EG.log_message("Deactivated - no fuel.")
|
||||
EG.set_ready_state(1)
|
||||
return
|
||||
return 0
|
||||
if(anyprob(EG.reliability))
|
||||
EG.critfail()
|
||||
return stop()
|
||||
stop()
|
||||
return 0
|
||||
var/cur_charge = EG.chassis.get_charge()
|
||||
if(isnull(cur_charge))
|
||||
EG.set_ready_state(1)
|
||||
EG.chassis.occupant_message("No powercell detected.")
|
||||
EG.chassis.log_message("[src] deactivated.")
|
||||
return stop()
|
||||
EG.occupant_message("No powercell detected.")
|
||||
EG.log_message("Deactivated.")
|
||||
stop()
|
||||
return 0
|
||||
var/use_fuel = EG.fuel_per_cycle_idle
|
||||
if(cur_charge<EG.chassis.cell.maxcharge)
|
||||
use_fuel = EG.fuel_per_cycle_active
|
||||
EG.chassis.give_power(EG.power_per_cycle)
|
||||
EG.update_equip_info()
|
||||
EG.fuel -= use_fuel
|
||||
EG.fuel.amount -= min(use_fuel/EG.fuel.perunit,EG.fuel.amount)
|
||||
EG.update_equip_info()
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/generator/nuclear
|
||||
name = "ExoNuclear Reactor"
|
||||
desc = "Generates power using uranium. Pollutes the environment."
|
||||
icon_state = "tesla"
|
||||
origin_tech = "powerstorage=3;engineering=3"
|
||||
construction_cost = list("metal"=10000,"silver"=500,"glass"=1000)
|
||||
max_fuel = 50000
|
||||
fuel_per_cycle_idle = 10
|
||||
fuel_per_cycle_active = 30
|
||||
power_per_cycle = 50
|
||||
var/rad_per_cycle = 0.3
|
||||
reliability = 1000
|
||||
|
||||
init()
|
||||
fuel = new /obj/item/stack/sheet/uranium(src)
|
||||
fuel.amount = 0
|
||||
pr_mech_generator = new /datum/global_iterator/mecha_generator/nuclear(list(src),0)
|
||||
pr_mech_generator.set_delay(equip_cooldown)
|
||||
return
|
||||
|
||||
critfail()
|
||||
return
|
||||
|
||||
/datum/global_iterator/mecha_generator/nuclear
|
||||
|
||||
process(var/obj/item/mecha_parts/mecha_equipment/generator/nuclear/EG)
|
||||
if(..())
|
||||
for(var/mob/living/carbon/M in view(EG.chassis))
|
||||
M.radiation += EG.rad_per_cycle
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/sleeper
|
||||
@@ -890,6 +929,7 @@
|
||||
equip_cooldown = 20
|
||||
var/mob/living/carbon/occupant = null
|
||||
var/datum/global_iterator/pr_mech_sleeper
|
||||
var/inject_amount = 10
|
||||
salvageable = 0
|
||||
|
||||
can_attach(obj/mecha/medical/M)
|
||||
@@ -921,13 +961,13 @@
|
||||
if(!istype(target))
|
||||
return
|
||||
if(occupant)
|
||||
chassis.occupant_message("The sleeper is already occupied")
|
||||
occupant_message("The sleeper is already occupied")
|
||||
return
|
||||
for(var/mob/living/carbon/metroid/M in range(1,target))
|
||||
if(M.Victim == target)
|
||||
usr << "[target] will not fit into the sleeper because they have a Metroid latched onto their head."
|
||||
occupant_message("[target] will not fit into the sleeper because they have a Metroid latched onto their head.")
|
||||
return
|
||||
chassis.occupant_message("You start putting [target] into [src].")
|
||||
occupant_message("You start putting [target] into [src].")
|
||||
chassis.visible_message("[chassis] starts putting [target] into the [src].")
|
||||
var/C = chassis.loc
|
||||
var/T = target.loc
|
||||
@@ -935,7 +975,7 @@
|
||||
if(chassis.loc!=C || target.loc!=T)
|
||||
return
|
||||
if(occupant)
|
||||
chassis.occupant_message("<font color=\"red\"><B>The sleeper is already occupied!</B></font>")
|
||||
occupant_message("<font color=\"red\"><B>The sleeper is already occupied!</B></font>")
|
||||
return
|
||||
target.forceMove(src)
|
||||
occupant = target
|
||||
@@ -947,17 +987,17 @@
|
||||
*/
|
||||
set_ready_state(0)
|
||||
pr_mech_sleeper.start()
|
||||
chassis.occupant_message("<font color='blue'>[target] successfully loaded into [src]. Life support functions engaged.</font>")
|
||||
chassis.visible_message("[chassis] loads [target] into the [src].")
|
||||
chassis.log_message("[src]: [target] loaded. Life support functions engaged.")
|
||||
occupant_message("<font color='blue'>[target] successfully loaded into [src]. Life support functions engaged.</font>")
|
||||
chassis.visible_message("[chassis] loads [target] into [src].")
|
||||
log_message("[target] loaded. Life support functions engaged.")
|
||||
return
|
||||
|
||||
proc/go_out()
|
||||
if(!occupant)
|
||||
return
|
||||
occupant.forceMove(get_turf(src))
|
||||
chassis.occupant_message("[occupant] ejected. Life support functions disabled.")
|
||||
chassis.log_message("[src]: [occupant] ejected. Life support functions disabled.")
|
||||
occupant_message("[occupant] ejected. Life support functions disabled.")
|
||||
log_message("[occupant] ejected. Life support functions disabled.")
|
||||
occupant.reset_view()
|
||||
/*
|
||||
if(occupant.client)
|
||||
@@ -971,7 +1011,7 @@
|
||||
|
||||
detach()
|
||||
if(occupant)
|
||||
chassis.occupant_message("Unable to detach [src] - equipment occupied.")
|
||||
occupant_message("Unable to detach [src] - equipment occupied.")
|
||||
return
|
||||
pr_mech_sleeper.stop()
|
||||
return ..()
|
||||
@@ -995,7 +1035,7 @@
|
||||
onclose(chassis.occupant, "msleeper")
|
||||
return
|
||||
if(filter.get("inject"))
|
||||
inject_reagent(filter.get("inject"),filter.getNum("amount"), filter.get("rname"))
|
||||
inject_reagent(filter.getType("inject",/datum/reagent),filter.getObj("source"))
|
||||
return
|
||||
|
||||
proc/get_occupant_stats()
|
||||
@@ -1009,7 +1049,7 @@
|
||||
</script>
|
||||
<style>
|
||||
h3 {margin-bottom:2px;font-size:14px;}
|
||||
#lossinfo, #reagents {padding-left:15px;}
|
||||
#lossinfo, #reagents, #injectwith {padding-left:15px;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -1021,6 +1061,9 @@
|
||||
<div id="reagents">
|
||||
[get_occupant_reagents()]
|
||||
</div>
|
||||
<div id="injectwith">
|
||||
[get_available_reagents()]
|
||||
</div>
|
||||
</body>
|
||||
</html>"}
|
||||
|
||||
@@ -1050,30 +1093,45 @@
|
||||
. += "[R]: [round(R.volume,0.01)]<br />"
|
||||
return . || "None"
|
||||
|
||||
proc/get_available_reagents()
|
||||
var/output
|
||||
var/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/SG = locate(/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun) in chassis
|
||||
if(SG && SG.reagents && islist(SG.reagents.reagent_list))
|
||||
for(var/datum/reagent/R in SG.reagents.reagent_list)
|
||||
if(R.volume > 0)
|
||||
output += "<a href=\"?src=\ref[src];inject=\ref[R];source=\ref[SG]\">Inject [R.name]</a><br />"
|
||||
return output
|
||||
|
||||
proc/inject_reagent(reagent, amount, reagent_name)
|
||||
if(reagent && occupant)
|
||||
if(occupant.reagents.get_reagent_amount(reagent) + amount <= amount*2)
|
||||
occupant.reagents.add_reagent(reagent, amount)
|
||||
chassis.occupant_message("Occupant injected with [amount] units of [reagent_name].")
|
||||
chassis.log_message("[src]: Injected [occupant] with [amount] units of [reagent_name].")
|
||||
|
||||
proc/inject_reagent(var/datum/reagent/R,var/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/SG)
|
||||
if(!R || !occupant || !SG || !(SG in chassis.equipment))
|
||||
return 0
|
||||
var/to_inject = min(R.volume, inject_amount)
|
||||
if(to_inject && occupant.reagents.get_reagent_amount(R.id) + to_inject <= inject_amount*2)
|
||||
SG.reagents.trans_id_to(occupant,R.id,to_inject)
|
||||
occupant_message("[occupant] injected with [to_inject] units of [R.name].")
|
||||
log_message("[occupant] injected with [to_inject] units of [R.name].")
|
||||
update_equip_info()
|
||||
return
|
||||
|
||||
update_equip_info()
|
||||
if(..())
|
||||
send_byjax(chassis.occupant,"msleeper.browser","lossinfo",get_occupant_dam())
|
||||
send_byjax(chassis.occupant,"msleeper.browser","reagents",get_occupant_reagents())
|
||||
send_byjax(chassis.occupant,"msleeper.browser","injectwith",get_available_reagents())
|
||||
return 1
|
||||
return
|
||||
|
||||
/datum/global_iterator/mech_sleeper
|
||||
|
||||
process(var/obj/item/mecha_parts/mecha_equipment/tool/sleeper/S)
|
||||
var/cur_charge = S.chassis.get_charge()
|
||||
if(!cur_charge)
|
||||
if(!S.chassis)
|
||||
S.set_ready_state(1)
|
||||
S.chassis.log_message("[src] deactivated.")
|
||||
S.chassis.occupant_message("[src] deactivated - no power.")
|
||||
return stop()
|
||||
if(!S.chassis.has_charge(S.energy_drain))
|
||||
S.set_ready_state(1)
|
||||
S.log_message("Deactivated.")
|
||||
S.occupant_message("[src] deactivated - no power.")
|
||||
return stop()
|
||||
var/mob/living/carbon/M = S.occupant
|
||||
if(!M)
|
||||
@@ -1092,17 +1150,6 @@
|
||||
S.chassis.use_power(S.energy_drain)
|
||||
S.update_equip_info()
|
||||
return
|
||||
/*
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/mecha_injector
|
||||
name = "Reagent Injector"
|
||||
desc = "Reagent Injector"
|
||||
icon_state = "tesla"
|
||||
origin_tech = "plasmatech=2;powerstorage=2;engineering"
|
||||
equip_cooldown = 10
|
||||
energy_drain = 20
|
||||
range = MELEE
|
||||
construction_cost = list("metal"=10000,"silver"=500,"glass"=1000)
|
||||
*/
|
||||
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/cable_layer
|
||||
@@ -1150,31 +1197,32 @@
|
||||
else
|
||||
message = "[result] meters of cable successfully loaded."
|
||||
send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info())
|
||||
chassis.occupant_message(message)
|
||||
occupant_message(message)
|
||||
return
|
||||
|
||||
Topic(href,href_list)
|
||||
..()
|
||||
if(href_list["toggle"])
|
||||
set_ready_state(!equip_ready)
|
||||
chassis.occupant_message("[src] [equip_ready?"dea":"a"]ctivated.")
|
||||
chassis.log_message("[src] [equip_ready?"dea":"a"]ctivated.")
|
||||
occupant_message("[src] [equip_ready?"dea":"a"]ctivated.")
|
||||
log_message("[equip_ready?"Dea":"A"]ctivated.")
|
||||
return
|
||||
if(href_list["cut"])
|
||||
if(cable && cable.amount)
|
||||
var/m = round(input(chassis.occupant,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1)
|
||||
m = min(m, cable.amount)
|
||||
use_cable(m)
|
||||
var/obj/item/weapon/cable_coil/CC = new (get_turf(chassis))
|
||||
CC.amount = m
|
||||
if(m)
|
||||
use_cable(m)
|
||||
var/obj/item/weapon/cable_coil/CC = new (get_turf(chassis))
|
||||
CC.amount = m
|
||||
else
|
||||
chassis.occupant_message("There's no more cable on the reel.")
|
||||
occupant_message("There's no more cable on the reel.")
|
||||
return
|
||||
|
||||
get_equip_info()
|
||||
var/output = ..()
|
||||
if(output)
|
||||
return "[output] \[Cable: [cable ? cable.amount : 0] m\] - <a href='?src=\ref[src];toggle=1'>[!equip_ready?"Dea":"A"]ctivate</a>|<a href='?src=\ref[src];cut=1'>Cut</a>"
|
||||
return "[output] \[Cable: [cable ? cable.amount : 0] m\][(cable && cable.amount) ? "- <a href='?src=\ref[src];toggle=1'>[!equip_ready?"Dea":"A"]ctivate</a>|<a href='?src=\ref[src];cut=1'>Cut</a>" : null]"
|
||||
return
|
||||
|
||||
proc/load_cable(var/obj/item/weapon/cable_coil/CC)
|
||||
@@ -1196,11 +1244,11 @@
|
||||
proc/use_cable(amount)
|
||||
if(!cable || cable.amount<1)
|
||||
set_ready_state(1)
|
||||
chassis.occupant_message("Cable depleted, [src] deactivated.")
|
||||
chassis.log_message("Cable depleted, [src] deactivated.")
|
||||
occupant_message("Cable depleted, [src] deactivated.")
|
||||
log_message("Cable depleted, [src] deactivated.")
|
||||
return
|
||||
if(cable.amount < amount)
|
||||
chassis.occupant_message("No enough cable to finish the task.")
|
||||
occupant_message("No enough cable to finish the task.")
|
||||
return
|
||||
cable.use(amount)
|
||||
update_equip_info()
|
||||
@@ -1209,8 +1257,17 @@
|
||||
proc/reset()
|
||||
last_piece = null
|
||||
|
||||
proc/dismantleFloor(var/turf/new_turf)
|
||||
if(istype(new_turf, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/T = new_turf
|
||||
if(!T.is_plating())
|
||||
if(!T.broken && !T.burnt)
|
||||
new T.floor_tile.type(T)
|
||||
T.make_plating()
|
||||
return !new_turf.intact
|
||||
|
||||
proc/layCable(var/turf/new_turf)
|
||||
if(equip_ready || !istype(new_turf) || new_turf.intact)
|
||||
if(equip_ready || !istype(new_turf) || !dismantleFloor(new_turf))
|
||||
return reset()
|
||||
var/fdirn = turn(chassis.dir,180)
|
||||
for(var/obj/structure/cable/LC in new_turf) // check to make sure there's not a cable there already
|
||||
@@ -1302,10 +1359,10 @@
|
||||
if(mode)
|
||||
return analyze_reagents(target)
|
||||
if(!syringes.len)
|
||||
chassis.occupant_message("<span class=\"alert\">No syringes loaded.</span>")
|
||||
occupant_message("<span class=\"alert\">No syringes loaded.</span>")
|
||||
return
|
||||
if(reagents.total_volume<=0)
|
||||
chassis.occupant_message("<span class=\"alert\">No available reagents to load syringe with.</span>")
|
||||
occupant_message("<span class=\"alert\">No available reagents to load syringe with.</span>")
|
||||
return
|
||||
set_ready_state(0)
|
||||
chassis.use_power(energy_drain)
|
||||
@@ -1317,6 +1374,7 @@
|
||||
S.icon = 'chemical.dmi'
|
||||
S.icon_state = "syringeproj"
|
||||
playsound(chassis, 'syringeproj.ogg', 50, 1)
|
||||
log_message("Launched [S] from [src], targeting [target].")
|
||||
spawn(-1)
|
||||
src = null //if src is deleted, still process the syringe
|
||||
for(var/i=0, i<6, i++)
|
||||
@@ -1331,7 +1389,7 @@
|
||||
S.icon_state = initial(S.icon_state)
|
||||
S.icon = initial(S.icon)
|
||||
S.reagents.trans_to(M, S.reagents.total_volume)
|
||||
M.take_organ_damage(5)
|
||||
M.take_organ_damage(2)
|
||||
S.visible_message("<span class=\"attack\"> [M] was hit by the syringe!</span>")
|
||||
break
|
||||
else if(S.loc == trg)
|
||||
@@ -1348,6 +1406,7 @@
|
||||
do_after_cooldown()
|
||||
return 1
|
||||
|
||||
|
||||
Topic(href,href_list)
|
||||
..()
|
||||
var/datum/topic_input/filter = new (href,href_list)
|
||||
@@ -1358,17 +1417,21 @@
|
||||
if(filter.get("select_reagents"))
|
||||
processed_reagents.len = 0
|
||||
var/m = 0
|
||||
var/message
|
||||
for(var/i=1 to known_reagents.len)
|
||||
if(m>synth_speed)
|
||||
if(m>=synth_speed)
|
||||
break
|
||||
var/reagent = filter.get("reagent_[i]")
|
||||
if(reagent && (reagent in known_reagents))
|
||||
chassis.occupant_message("[known_reagents[reagent]] added to production")
|
||||
message = "[m ? ", " : null][known_reagents[reagent]]"
|
||||
processed_reagents += reagent
|
||||
m++
|
||||
if(processed_reagents.len)
|
||||
message += " added to production"
|
||||
synth.start()
|
||||
chassis.occupant_message("Reagent processing started.")
|
||||
occupant_message(message)
|
||||
occupant_message("Reagent processing started.")
|
||||
log_message("Reagent processing started.")
|
||||
return
|
||||
if(filter.get("show_reagents"))
|
||||
chassis.occupant << browse(get_reagents_page(),"window=msyringegun")
|
||||
@@ -1399,7 +1462,7 @@
|
||||
<body>
|
||||
<h3>Current reagents:</h3>
|
||||
<div id="reagents">
|
||||
[get_current_reagents() || "None"]
|
||||
[get_current_reagents()]
|
||||
</div>
|
||||
<h3>Reagents production:</h3>
|
||||
<div id="reagents_form">
|
||||
@@ -1439,29 +1502,29 @@
|
||||
output += "[R]: [round(R.volume,0.001)] - <a href=\"?src=\ref[src];purge_reagent=[R.id]\">Purge Reagent</a><br />"
|
||||
if(output)
|
||||
output += "Total: [round(reagents.total_volume,0.001)]/[reagents.maximum_volume] - <a href=\"?src=\ref[src];purge_all=1\">Purge All</a>"
|
||||
return output
|
||||
return output || "None"
|
||||
|
||||
proc/load_syringe(obj/item/weapon/reagent_containers/syringe/S)
|
||||
if(syringes.len<max_syringes)
|
||||
S.reagents.trans_to(src, S.reagents.total_volume)
|
||||
S.forceMove(src)
|
||||
syringes += S
|
||||
chassis.occupant_message("Syringe loaded.")
|
||||
occupant_message("Syringe loaded.")
|
||||
update_equip_info()
|
||||
return 1
|
||||
chassis.occupant_message("The [src] syringe chamber is full.")
|
||||
occupant_message("The [src] syringe chamber is full.")
|
||||
return 0
|
||||
|
||||
proc/analyze_reagents(atom/A)
|
||||
if(!A.reagents)
|
||||
chassis.occupant_message("<span class=\"alert\">No reagent info gained from [A].</span>")
|
||||
occupant_message("<span class=\"alert\">No reagent info gained from [A].</span>")
|
||||
return 0
|
||||
chassis.occupant_message("Analyzing reagents...")
|
||||
occupant_message("Analyzing reagents...")
|
||||
for(var/datum/reagent/R in A.reagents.reagent_list)
|
||||
if(R.reagent_state == 2 && add_known_reagent(R.id,R.name))
|
||||
chassis.occupant_message("Reagent analyzed, identified as [R.name] and added to database.")
|
||||
occupant_message("Reagent analyzed, identified as [R.name] and added to database.")
|
||||
send_byjax(chassis.occupant,"msyringegun.browser","reagents_form",get_reagents_form())
|
||||
chassis.occupant_message("Analyzis complete.")
|
||||
occupant_message("Analyzis complete.")
|
||||
return 1
|
||||
|
||||
proc/add_known_reagent(r_id,r_name)
|
||||
@@ -1490,15 +1553,19 @@
|
||||
delay = 100
|
||||
|
||||
process(var/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/S)
|
||||
if(!S.processed_reagents.len || S.reagents.total_volume >= S.reagents.maximum_volume)
|
||||
S.chassis.occupant_message("<span class=\"alert\">Reagent processing stopped.</a>")
|
||||
if(!S.chassis)
|
||||
return stop()
|
||||
var/energy_drain = S.energy_drain*10
|
||||
if(!S.processed_reagents.len || S.reagents.total_volume >= S.reagents.maximum_volume || !S.chassis.has_charge(energy_drain))
|
||||
S.occupant_message("<span class=\"alert\">Reagent processing stopped.</a>")
|
||||
S.log_message("Reagent processing stopped.")
|
||||
return stop()
|
||||
if(anyprob(S.reliability))
|
||||
S.critfail()
|
||||
var/amount = S.synth_speed / S.processed_reagents.len
|
||||
for(var/reagent in S.processed_reagents)
|
||||
S.reagents.add_reagent(reagent,amount)
|
||||
S.chassis.use_power(S.energy_drain*10)
|
||||
S.chassis.use_power(energy_drain)
|
||||
return 1
|
||||
|
||||
|
||||
@@ -1616,4 +1683,105 @@
|
||||
set_ready_state(0)
|
||||
chassis.use_power(energy_drain)
|
||||
do_after_cooldown()
|
||||
return 1
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/jetpack
|
||||
name = "Jetpack"
|
||||
desc = "Using directed ion bursts and cunning solar wind reflection technique, this device enables controlled space flight."
|
||||
icon_state = "mecha_equip"
|
||||
equip_cooldown = 5
|
||||
energy_drain = 50
|
||||
var/wait = 0
|
||||
var/datum/effect/effect/system/ion_trail_follow/ion_trail
|
||||
|
||||
|
||||
can_attach(obj/mecha/M as obj)
|
||||
if(!(locate(src.type) in M.equipment) && !M.proc_res["dyndomove"])
|
||||
return ..()
|
||||
|
||||
detach()
|
||||
..()
|
||||
chassis.proc_res["dyndomove"] = null
|
||||
return
|
||||
|
||||
attach(obj/mecha/M as obj)
|
||||
..()
|
||||
if(!ion_trail)
|
||||
ion_trail = new
|
||||
ion_trail.set_up(chassis)
|
||||
return
|
||||
|
||||
proc/toggle()
|
||||
if(!chassis)
|
||||
return
|
||||
!equip_ready? turn_off() : turn_on()
|
||||
return equip_ready
|
||||
|
||||
proc/turn_on()
|
||||
set_ready_state(0)
|
||||
chassis.proc_res["dyndomove"] = src
|
||||
ion_trail.start()
|
||||
occupant_message("Activated")
|
||||
log_message("Activated")
|
||||
|
||||
proc/turn_off()
|
||||
set_ready_state(1)
|
||||
chassis.proc_res["dyndomove"] = null
|
||||
ion_trail.stop()
|
||||
occupant_message("Deactivated")
|
||||
log_message("Deactivated")
|
||||
|
||||
proc/dyndomove(direction)
|
||||
if(!action_checks())
|
||||
return chassis.dyndomove(direction)
|
||||
var/move_result = 0
|
||||
if(chassis.hasInternalDamage(MECHA_INT_CONTROL_LOST))
|
||||
move_result = step_rand(chassis)
|
||||
else if(chassis.dir!=direction)
|
||||
chassis.dir = direction
|
||||
move_result = 1
|
||||
else
|
||||
move_result = step(chassis,direction)
|
||||
if(chassis.occupant)
|
||||
for(var/obj/effect/speech_bubble/B in range(1, chassis))
|
||||
if(B.parent == chassis.occupant)
|
||||
B.loc = chassis.loc
|
||||
if(move_result)
|
||||
wait = 1
|
||||
chassis.use_power(energy_drain)
|
||||
if(!chassis.pr_inertial_movement.active())
|
||||
chassis.pr_inertial_movement.start(list(chassis,direction))
|
||||
else
|
||||
chassis.pr_inertial_movement.set_process_args(list(chassis,direction))
|
||||
do_after_cooldown()
|
||||
return 1
|
||||
return 0
|
||||
|
||||
action_checks()
|
||||
if(equip_ready || wait)
|
||||
return 0
|
||||
if(energy_drain && !chassis.has_charge(energy_drain))
|
||||
return 0
|
||||
if(crit_fail)
|
||||
return 0
|
||||
if(chassis.check_for_support())
|
||||
return 0
|
||||
return 1
|
||||
|
||||
get_equip_info()
|
||||
if(!chassis) return
|
||||
return "<span style=\"color:[equip_ready?"#0f0":"#f00"];\">*</span> [src.name] \[<a href=\"?src=\ref[src];toggle=1\">Toggle</a>\]"
|
||||
|
||||
|
||||
Topic(href,href_list)
|
||||
..()
|
||||
if(href_list["toggle"])
|
||||
toggle()
|
||||
|
||||
do_after_cooldown()
|
||||
sleep(equip_cooldown)
|
||||
wait = 0
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
fire_sound = 'Laser.ogg'
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy
|
||||
equip_cooldown = 12
|
||||
equip_cooldown = 15
|
||||
name = "CH-LC \"Solaris\" Laser Cannon"
|
||||
icon_state = "mecha_laser"
|
||||
energy_drain = 60
|
||||
@@ -146,7 +146,7 @@
|
||||
walk(thingy,0)
|
||||
*/
|
||||
chassis.use_power(energy_drain)
|
||||
chassis.log_message("Honked from [src.name]. HONK!")
|
||||
log_message("Honked from [src.name]. HONK!")
|
||||
do_after_cooldown()
|
||||
return
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
projectiles_to_add--
|
||||
chassis.use_power(projectile_energy_cost)
|
||||
send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info())
|
||||
chassis.log_message("Rearmed [src.name].")
|
||||
log_message("Rearmed [src.name].")
|
||||
return
|
||||
|
||||
Topic(href, href_list)
|
||||
@@ -186,6 +186,8 @@
|
||||
name = "LBX AC 10 \"Scattershot\""
|
||||
icon_state = "mecha_scatter"
|
||||
equip_cooldown = 20
|
||||
projectile = /obj/item/projectile/bullet/midbullet
|
||||
fire_sound = 'Gunshot.ogg'
|
||||
projectiles = 40
|
||||
projectile_energy_cost = 25
|
||||
var/projectiles_per_shot = 4
|
||||
@@ -204,8 +206,8 @@
|
||||
targloc = locate(target_x+GaussRandRound(deviation,1),target_y+GaussRandRound(deviation,1),target_z)
|
||||
if(!targloc || targloc == curloc)
|
||||
break
|
||||
playsound(chassis, 'Gunshot.ogg', 80, 1)
|
||||
var/obj/item/projectile/bullet/A = new /obj/item/projectile/bullet(curloc)
|
||||
playsound(chassis, fire_sound, 80, 1)
|
||||
var/obj/item/projectile/A = new projectile(curloc)
|
||||
src.projectiles--
|
||||
A.original = targloc
|
||||
A.current = curloc
|
||||
@@ -213,7 +215,7 @@
|
||||
A.xo = targloc.x - curloc.x
|
||||
set_ready_state(0)
|
||||
A.process()
|
||||
chassis.log_message("Fired from [src.name], targeting [target].")
|
||||
log_message("Fired from [src.name], targeting [target].")
|
||||
do_after_cooldown()
|
||||
return
|
||||
|
||||
@@ -223,6 +225,8 @@
|
||||
name = "Ultra AC 2"
|
||||
icon_state = "mecha_uac2"
|
||||
equip_cooldown = 10
|
||||
projectile = /obj/item/projectile/bullet/weakbullet
|
||||
fire_sound = 'Gunshot.ogg'
|
||||
projectiles = 300
|
||||
projectile_energy_cost = 20
|
||||
var/projectiles_per_shot = 3
|
||||
@@ -244,8 +248,8 @@
|
||||
if (targloc == curloc)
|
||||
continue
|
||||
|
||||
playsound(chassis, 'Gunshot.ogg', 50, 1)
|
||||
var/obj/item/projectile/bullet/weakbullet/A = new /obj/item/projectile/bullet/weakbullet(curloc)
|
||||
playsound(chassis, fire_sound, 50, 1)
|
||||
var/obj/item/projectile/A = new projectile(curloc)
|
||||
src.projectiles--
|
||||
A.original = targloc
|
||||
A.current = curloc
|
||||
@@ -254,13 +258,15 @@
|
||||
A.process()
|
||||
sleep(2)
|
||||
set_ready_state(0)
|
||||
chassis.log_message("Fired from [src.name], targeting [target].")
|
||||
log_message("Fired from [src.name], targeting [target].")
|
||||
do_after_cooldown()
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack
|
||||
name = "SRM-8 Missile Rack"
|
||||
icon_state = "mecha_missilerack"
|
||||
projectile = /obj/item/missile
|
||||
fire_sound = 'bang.ogg'
|
||||
projectiles = 8
|
||||
projectile_energy_cost = 1000
|
||||
equip_cooldown = 60
|
||||
@@ -270,12 +276,12 @@
|
||||
action(target)
|
||||
if(!action_checks(target)) return
|
||||
set_ready_state(0)
|
||||
var/obj/item/missile/M = new /obj/item/missile(chassis.loc)
|
||||
var/obj/item/missile/M = new projectile(chassis.loc)
|
||||
M.primed = 1
|
||||
playsound(chassis, 'bang.ogg', 50, 1)
|
||||
playsound(chassis, fire_sound, 50, 1)
|
||||
M.throw_at(target, missile_range, missile_speed)
|
||||
projectiles--
|
||||
chassis.log_message("Fired from [src.name], targeting [target].")
|
||||
log_message("Fired from [src.name], targeting [target].")
|
||||
do_after_cooldown()
|
||||
return
|
||||
|
||||
@@ -297,6 +303,8 @@
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang
|
||||
name = "SGL-6 Grenade Launcher"
|
||||
icon_state = "mecha_grenadelnchr"
|
||||
projectile = /obj/item/weapon/flashbang
|
||||
fire_sound = 'bang.ogg'
|
||||
projectiles = 6
|
||||
missile_speed = 1.5
|
||||
projectile_energy_cost = 800
|
||||
@@ -306,11 +314,11 @@
|
||||
action(target)
|
||||
if(!action_checks(target)) return
|
||||
set_ready_state(0)
|
||||
var/obj/item/weapon/flashbang/F = new /obj/item/weapon/flashbang(chassis.loc)
|
||||
playsound(chassis, 'bang.ogg', 50, 1)
|
||||
var/obj/item/weapon/flashbang/F = new projectile(chassis.loc)
|
||||
playsound(chassis, fire_sound, 50, 1)
|
||||
F.throw_at(target, missile_range, missile_speed)
|
||||
projectiles--
|
||||
chassis.log_message("Fired from [src.name], targeting [target].")
|
||||
log_message("Fired from [src.name], targeting [target].")
|
||||
spawn(det_time)
|
||||
F.prime()
|
||||
do_after_cooldown()
|
||||
@@ -320,6 +328,8 @@
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar
|
||||
name = "Banana Mortar"
|
||||
icon_state = "mecha_bananamrtr"
|
||||
projectile = /obj/item/weapon/bananapeel
|
||||
fire_sound = 'bikehorn.ogg'
|
||||
projectiles = 15
|
||||
missile_speed = 1.5
|
||||
projectile_energy_cost = 100
|
||||
@@ -336,11 +346,11 @@
|
||||
action(target)
|
||||
if(!action_checks(target)) return
|
||||
set_ready_state(0)
|
||||
var/obj/item/weapon/bananapeel/B = new /obj/item/weapon/bananapeel(chassis.loc)
|
||||
playsound(chassis, 'bikehorn.ogg', 60, 1)
|
||||
var/obj/item/weapon/bananapeel/B = new projectile(chassis.loc)
|
||||
playsound(chassis, fire_sound, 60, 1)
|
||||
B.throw_at(target, missile_range, missile_speed)
|
||||
projectiles--
|
||||
chassis.log_message("Bananed from [src.name], targeting [target]. HONK!")
|
||||
log_message("Bananed from [src.name], targeting [target]. HONK!")
|
||||
do_after_cooldown()
|
||||
return
|
||||
|
||||
@@ -348,6 +358,8 @@
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar
|
||||
name = "Mousetrap Mortar"
|
||||
icon_state = "mecha_mousetrapmrtr"
|
||||
projectile = /obj/item/weapon/mousetrap
|
||||
fire_sound = 'bikehorn.ogg'
|
||||
projectiles = 15
|
||||
missile_speed = 1.5
|
||||
projectile_energy_cost = 100
|
||||
@@ -364,11 +376,11 @@
|
||||
action(target)
|
||||
if(!action_checks(target)) return
|
||||
set_ready_state(0)
|
||||
var/obj/item/weapon/mousetrap/M = new /obj/item/weapon/mousetrap(chassis.loc)
|
||||
var/obj/item/weapon/mousetrap/M = new projectile(chassis.loc)
|
||||
M.armed = 1
|
||||
playsound(chassis, 'bikehorn.ogg', 60, 1)
|
||||
playsound(chassis, fire_sound, 60, 1)
|
||||
M.throw_at(target, missile_range, missile_speed)
|
||||
projectiles--
|
||||
chassis.log_message("Launched a mouse-trap from [src.name], targeting [target]. HONK!")
|
||||
log_message("Launched a mouse-trap from [src.name], targeting [target]. HONK!")
|
||||
do_after_cooldown()
|
||||
return
|
||||
@@ -102,7 +102,8 @@
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/sleeper,
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun,
|
||||
///obj/item/mecha_parts/mecha_equipment/repair_droid,
|
||||
/obj/item/mecha_parts/mecha_equipment/plasma_generator,
|
||||
/obj/item/mecha_parts/mecha_equipment/generator,
|
||||
/obj/item/mecha_parts/mecha_equipment/jetpack,
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser,
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg,
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar,
|
||||
|
||||
@@ -39,16 +39,14 @@
|
||||
var/lights = 0
|
||||
var/lights_power = 6
|
||||
|
||||
//inner atmos machinery. Air tank mostly
|
||||
//inner atmos
|
||||
var/use_internal_tank = 0
|
||||
var/internal_tank_valve = ONE_ATMOSPHERE
|
||||
var/internal_tank_wire = null
|
||||
|
||||
var/obj/item/device/radio/radio = null
|
||||
var/obj/machinery/atmospherics/portables_connector/connected_port = null //filling the air tanks
|
||||
var/obj/machinery/portable_atmospherics/canister/internal_tank
|
||||
var/datum/gas_mixture/cabin_air
|
||||
var/obj/machinery/portable_atmospherics/canister/cabin
|
||||
var/obj/machinery/atmospherics/portables_connector/connected_port = null
|
||||
|
||||
var/obj/item/device/radio/radio = null
|
||||
|
||||
var/max_temperature = 2500
|
||||
var/internal_damage_threshold = 50 //health percentage below which internal damage is possible
|
||||
@@ -73,33 +71,20 @@
|
||||
/obj/mecha/New()
|
||||
..()
|
||||
events = new
|
||||
radio = new(src)
|
||||
radio.name = "[src] radio"
|
||||
radio.icon = icon
|
||||
radio.icon_state = icon_state
|
||||
radio.subspace_transmission = 1
|
||||
src.icon_state += "-open"
|
||||
icon_state += "-open"
|
||||
add_radio()
|
||||
add_cabin()
|
||||
if(!add_airtank()) //we check this here in case mecha does not have an internal tank available by default - WIP
|
||||
removeVerb(/obj/mecha/verb/connect_to_port)
|
||||
removeVerb(/obj/mecha/verb/toggle_internal_tank)
|
||||
src.spark_system.set_up(2, 0, src)
|
||||
src.spark_system.attach(src)
|
||||
cell = new(src)
|
||||
src.cell.charge = 15000
|
||||
src.cell.maxcharge = 15000
|
||||
|
||||
//misc global_iteration datums
|
||||
pr_int_temp_processor = new /datum/global_iterator/mecha_preserve_temp(list(src))
|
||||
pr_inertial_movement = new /datum/global_iterator/mecha_intertial_movement(null,0)
|
||||
pr_give_air = new /datum/global_iterator/mecha_tank_give_air(list(src))
|
||||
// pr_location_temp_check = new /datum/global_iterator/mecha_location_temp_check(list(src))
|
||||
pr_internal_damage = new /datum/global_iterator/mecha_internal_damage(list(src),0)
|
||||
|
||||
spark_system.set_up(2, 0, src)
|
||||
spark_system.attach(src)
|
||||
add_cell()
|
||||
add_iterators()
|
||||
removeVerb(/obj/mecha/verb/disconnect_from_port)
|
||||
removeVerb(/atom/movable/verb/pull)
|
||||
src.log_message("[src.name] created.")
|
||||
src.loc.Entered(src)
|
||||
log_message("[src.name] created.")
|
||||
loc.Entered(src)
|
||||
return
|
||||
|
||||
/obj/mecha/Del()
|
||||
@@ -121,6 +106,15 @@
|
||||
internal_tank = new /obj/machinery/portable_atmospherics/canister/air(src)
|
||||
return internal_tank
|
||||
|
||||
/obj/mecha/proc/add_cell(var/obj/item/weapon/cell/C=null)
|
||||
if(C)
|
||||
C.forceMove(src)
|
||||
cell = C
|
||||
return
|
||||
cell = new(src)
|
||||
cell.charge = 15000
|
||||
cell.maxcharge = 15000
|
||||
|
||||
/obj/mecha/proc/add_cabin()
|
||||
cabin_air = new
|
||||
cabin_air.temperature = T20C
|
||||
@@ -129,6 +123,19 @@
|
||||
cabin_air.nitrogen = N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature)
|
||||
return cabin_air
|
||||
|
||||
/obj/mecha/proc/add_radio()
|
||||
radio = new(src)
|
||||
radio.name = "[src] radio"
|
||||
radio.icon = icon
|
||||
radio.icon_state = icon_state
|
||||
radio.subspace_transmission = 1
|
||||
|
||||
/obj/mecha/proc/add_iterators()
|
||||
pr_int_temp_processor = new /datum/global_iterator/mecha_preserve_temp(list(src))
|
||||
pr_inertial_movement = new /datum/global_iterator/mecha_intertial_movement(null,0)
|
||||
pr_give_air = new /datum/global_iterator/mecha_tank_give_air(list(src))
|
||||
pr_internal_damage = new /datum/global_iterator/mecha_internal_damage(list(src),0)
|
||||
|
||||
/obj/mecha/proc/do_after(delay as num)
|
||||
sleep(delay)
|
||||
if(src)
|
||||
@@ -243,19 +250,25 @@
|
||||
user.forceMove(get_turf(src))
|
||||
user << "You climb out from [src]"
|
||||
return 0
|
||||
if(!can_move)
|
||||
return 0
|
||||
if(connected_port)
|
||||
if(world.time - last_message > 20)
|
||||
src.occupant_message("Unable to move while connected to the air system port")
|
||||
last_message = world.time
|
||||
return 0
|
||||
if(src.pr_inertial_movement.active())
|
||||
return 0
|
||||
if(state)
|
||||
occupant_message("<font color='red'>Maintenance protocols in effect</font>")
|
||||
return
|
||||
if(!get_charge())
|
||||
return domove(direction)
|
||||
|
||||
/obj/mecha/proc/domove(direction)
|
||||
return call((proc_res["dyndomove"]||src), "dyndomove")(direction)
|
||||
|
||||
/obj/mecha/proc/dyndomove(direction)
|
||||
if(!can_move)
|
||||
return 0
|
||||
if(src.pr_inertial_movement.active())
|
||||
return 0
|
||||
if(!has_charge(step_energy_drain))
|
||||
return 0
|
||||
var/move_result = 0
|
||||
if(hasInternalDamage(MECHA_INT_CONTROL_LOST))
|
||||
@@ -277,7 +290,6 @@
|
||||
src.log_message("Movement control lost. Inertial movement started.")
|
||||
if(do_after(step_in))
|
||||
can_move = 1
|
||||
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -518,7 +530,7 @@
|
||||
WR.crowbar_salvage += E
|
||||
E.forceMove(WR)
|
||||
E.equip_ready = 1
|
||||
E.reliability = rand(30,100)
|
||||
E.reliability = round(rand(E.reliability/3,E.reliability))
|
||||
else
|
||||
E.forceMove(T)
|
||||
E.destroy()
|
||||
@@ -587,7 +599,7 @@
|
||||
|
||||
/obj/mecha/emp_act(severity)
|
||||
if(get_charge())
|
||||
use_power(min(cell.charge, (cell.maxcharge/2)/severity))
|
||||
use_power((cell.charge/2)/severity)
|
||||
take_damage(50 / severity,"energy")
|
||||
src.log_message("EMP detected",1)
|
||||
check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1)
|
||||
@@ -1157,13 +1169,13 @@
|
||||
var/output = {"<html>
|
||||
<head><title>[src.name] data</title>
|
||||
<style>
|
||||
body {color: #00ff00; background: #000000; font-family:"Courier New", Courier, monospace; font-size: 12px;}
|
||||
body {color: #00ff00; background: #000000; font-family:"Lucida Console",monospace; font-size: 12px;}
|
||||
hr {border: 1px solid #0f0; color: #0f0; background-color: #0f0;}
|
||||
a {padding:2px 5px;;color:#0f0;}
|
||||
.wr {margin-bottom: 5px;}
|
||||
.header {cursor:pointer;}
|
||||
.open, .closed {background: #32CD32; color:#000; padding:1px 2px;}
|
||||
.links a {margin-bottom: 2px;}
|
||||
.links a {margin-bottom: 2px;padding-top:3px;}
|
||||
.visible {display: block;}
|
||||
.hidden {display: none;}
|
||||
</style>
|
||||
@@ -1198,6 +1210,7 @@
|
||||
"}
|
||||
return output
|
||||
|
||||
|
||||
/obj/mecha/proc/report_internal_damage()
|
||||
var/output = null
|
||||
var/list/dam_reports = list(
|
||||
@@ -1567,6 +1580,8 @@
|
||||
///// Power stuff /////
|
||||
///////////////////////
|
||||
|
||||
/obj/mecha/proc/has_charge(amount)
|
||||
return (get_charge()>=amount)
|
||||
|
||||
/obj/mecha/proc/get_charge()
|
||||
return call((proc_res["dyngetcharge"]||src), "dyngetcharge")()
|
||||
@@ -1579,7 +1594,7 @@
|
||||
return call((proc_res["dynusepower"]||src), "dynusepower")(amount)
|
||||
|
||||
/obj/mecha/proc/dynusepower(amount)
|
||||
if(get_charge()>=amount)
|
||||
if(get_charge())
|
||||
cell.use(amount)
|
||||
return 1
|
||||
return 0
|
||||
@@ -1624,15 +1639,16 @@
|
||||
cabin_air.merge(removed)
|
||||
else if(pressure_delta < 0) //cabin pressure higher than release pressure
|
||||
var/datum/gas_mixture/t_air = mecha.get_turf_air()
|
||||
pressure_delta = cabin_pressure - release_pressure
|
||||
if(t_air)
|
||||
pressure_delta = min(cabin_pressure - t_air.return_pressure(), cabin_pressure - release_pressure)
|
||||
if(pressure_delta > 0) //if location pressure is lower than cabin pressure
|
||||
transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION)
|
||||
var/datum/gas_mixture/removed = cabin_air.remove(transfer_moles)
|
||||
pressure_delta = min(cabin_pressure - t_air.return_pressure(), pressure_delta)
|
||||
if(pressure_delta > 0) //if location pressure is lower than cabin pressure
|
||||
transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION)
|
||||
var/datum/gas_mixture/removed = cabin_air.remove(transfer_moles)
|
||||
if(t_air)
|
||||
t_air.merge(removed)
|
||||
else //just delete the cabin gas, we're in space or some shit
|
||||
var/datum/gas_mixture/removed = cabin_air.remove_ratio(1)
|
||||
del(removed)
|
||||
else //just delete the cabin gas, we're in space or some shit
|
||||
del(removed)
|
||||
else
|
||||
return stop()
|
||||
return
|
||||
@@ -1652,7 +1668,7 @@
|
||||
|
||||
process(var/obj/mecha/mecha)
|
||||
if(!mecha.hasInternalDamage())
|
||||
return src.stop()
|
||||
return stop()
|
||||
if(mecha.hasInternalDamage(MECHA_INT_FIRE))
|
||||
if(!mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL) && prob(5))
|
||||
mecha.clearInternalDamage(MECHA_INT_FIRE)
|
||||
|
||||
@@ -89,10 +89,12 @@
|
||||
spawn_result()
|
||||
var/obj/item/mecha_parts/chassis/const_holder = holder
|
||||
const_holder.construct = new /datum/construction/reversible/mecha/ripley(const_holder)
|
||||
const_holder.icon = 'ripley_construct.dmi'
|
||||
const_holder.icon_state = "ripley_step_14"
|
||||
const_holder.density = 1
|
||||
const_holder.overlays.len = 0
|
||||
spawn()
|
||||
del src
|
||||
feedback_inc("mecha_ripley_created",1)
|
||||
return
|
||||
|
||||
|
||||
@@ -167,69 +169,93 @@
|
||||
switch(index)
|
||||
if(14)
|
||||
user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.")
|
||||
holder.icon_state = "ripley_step_13"
|
||||
if(13)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.")
|
||||
holder.icon_state = "ripley_step_12"
|
||||
else
|
||||
user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.")
|
||||
holder.icon_state = "ripley_step_14"
|
||||
if(12)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].")
|
||||
holder.icon_state = "ripley_step_11"
|
||||
else
|
||||
user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.")
|
||||
holder.icon_state = "ripley_step_13"
|
||||
if(11)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].")
|
||||
holder.icon_state = "ripley_step_10"
|
||||
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
|
||||
holder.icon_state = "ripley_step_12"
|
||||
if(10)
|
||||
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
|
||||
holder.icon_state = "ripley_step_9"
|
||||
else
|
||||
user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].")
|
||||
holder.icon_state = "ripley_step_11"
|
||||
if(9)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
|
||||
holder.icon_state = "ripley_step_8"
|
||||
else
|
||||
user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].")
|
||||
new /obj/item/weapon/circuitboard/mecha/ripley/main(get_turf(holder))
|
||||
holder.icon_state = "ripley_step_10"
|
||||
if(8)
|
||||
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
|
||||
holder.icon_state = "ripley_step_7"
|
||||
else
|
||||
user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
|
||||
holder.icon_state = "ripley_step_9"
|
||||
if(7)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
|
||||
holder.icon_state = "ripley_step_6"
|
||||
else
|
||||
user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].")
|
||||
new /obj/item/weapon/circuitboard/mecha/ripley/peripherals(get_turf(holder))
|
||||
holder.icon_state = "ripley_step_8"
|
||||
if(6)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].")
|
||||
holder.icon_state = "ripley_step_5"
|
||||
else
|
||||
user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
|
||||
holder.icon_state = "ripley_step_7"
|
||||
if(5)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.")
|
||||
holder.icon_state = "ripley_step_4"
|
||||
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
|
||||
holder.icon_state = "ripley_step_6"
|
||||
if(4)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].")
|
||||
holder.icon_state = "ripley_step_3"
|
||||
flick("ripley_step_3active",holder)
|
||||
else
|
||||
user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
|
||||
holder.icon_state = "ripley_step_5"
|
||||
if(3)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] installs external reinforced armor layer to [holder].", "You install external reinforced armor layer to [holder].")
|
||||
else
|
||||
user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].")
|
||||
holder.icon_state = "ripley_step_4"
|
||||
flick("ripley_step_3active",holder)
|
||||
if(2)
|
||||
if(diff==FORWARD)
|
||||
user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.")
|
||||
@@ -244,6 +270,11 @@
|
||||
user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.")
|
||||
return 1
|
||||
|
||||
spawn_result()
|
||||
..()
|
||||
feedback_inc("mecha_ripley_created",1)
|
||||
return
|
||||
|
||||
|
||||
|
||||
/datum/construction/mecha/gygax_chassis
|
||||
@@ -270,7 +301,6 @@
|
||||
const_holder.density = 1
|
||||
spawn()
|
||||
del src
|
||||
feedback_inc("mecha_gygax_created",1)
|
||||
return
|
||||
|
||||
|
||||
@@ -483,6 +513,10 @@
|
||||
user.visible_message("[user] unfastens Gygax Armour Plates.", "You unfasten Gygax Armour Plates.")
|
||||
return 1
|
||||
|
||||
spawn_result()
|
||||
..()
|
||||
feedback_inc("mecha_gygax_created",1)
|
||||
return
|
||||
|
||||
/datum/construction/mecha/firefighter_chassis
|
||||
steps = list(list("key"=/obj/item/mecha_parts/part/ripley_torso),//1
|
||||
@@ -508,7 +542,6 @@
|
||||
const_holder.density = 1
|
||||
spawn()
|
||||
del src
|
||||
feedback_inc("mecha_firefighter_created",1)
|
||||
return
|
||||
|
||||
|
||||
@@ -673,6 +706,11 @@
|
||||
user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.")
|
||||
return 1
|
||||
|
||||
spawn_result()
|
||||
..()
|
||||
feedback_inc("mecha_firefighter_created",1)
|
||||
return
|
||||
|
||||
|
||||
|
||||
/datum/construction/mecha/honker_chassis
|
||||
@@ -699,7 +737,6 @@
|
||||
const_holder.density = 1
|
||||
spawn()
|
||||
del src
|
||||
feedback_inc("mecha_honker_created",1)
|
||||
return
|
||||
|
||||
|
||||
@@ -748,8 +785,10 @@
|
||||
del used_atom
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
spawn_result()
|
||||
..()
|
||||
feedback_inc("mecha_honker_created",1)
|
||||
return
|
||||
|
||||
/datum/construction/mecha/durand_chassis
|
||||
steps = list(list("key"=/obj/item/mecha_parts/part/durand_torso),//1
|
||||
@@ -775,7 +814,6 @@
|
||||
const_holder.density = 1
|
||||
spawn()
|
||||
del src
|
||||
feedback_inc("mecha_durand_created",1)
|
||||
return
|
||||
|
||||
/datum/construction/mecha/durand
|
||||
@@ -860,6 +898,11 @@
|
||||
user.visible_message("[user] welds Durand Armour Plates to [holder].", "You weld Durand Armour Plates to [holder].")
|
||||
return 1
|
||||
|
||||
spawn_result()
|
||||
..()
|
||||
feedback_inc("mecha_durand_created",1)
|
||||
return
|
||||
|
||||
|
||||
/datum/construction/mecha/phazon_chassis
|
||||
result = "/obj/mecha/combat/phazon"
|
||||
@@ -907,7 +950,6 @@
|
||||
const_holder.density = 1
|
||||
spawn()
|
||||
del src
|
||||
feedback_inc("mecha_odysseus_created",1)
|
||||
return
|
||||
|
||||
|
||||
@@ -1058,4 +1100,9 @@
|
||||
user.visible_message("[user] welds external armor layer to [holder].", "You weld external armor layer to [holder].")
|
||||
else
|
||||
user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.")
|
||||
return 1
|
||||
return 1
|
||||
|
||||
spawn_result()
|
||||
..()
|
||||
feedback_inc("mecha_odysseus_created",1)
|
||||
return
|
||||
@@ -8,7 +8,7 @@
|
||||
desc = "Remains of some unfortunate mecha. Completely unrepairable."
|
||||
icon = 'mecha.dmi'
|
||||
density = 1
|
||||
anchored = 1
|
||||
anchored = 0
|
||||
opacity = 0
|
||||
var/list/welder_salvage = list(/obj/item/stack/sheet/plasteel,/obj/item/stack/sheet/metal,/obj/item/stack/rods)
|
||||
var/list/wirecutters_salvage = list(/obj/item/weapon/cable_coil)
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
max_temperature = 2500
|
||||
health = 250
|
||||
lights_power = 8
|
||||
damage_absorption = list("fire"=0.5,"bullet"=0.8,"bomb"=0.5)
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/ripley/firefighter
|
||||
list/damage_absorption = list("fire"=0.5,"bullet"=0.8,"bomb"=0.5)
|
||||
|
||||
/obj/mecha/working/ripley/deathripley
|
||||
desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE"
|
||||
@@ -52,7 +52,7 @@
|
||||
if(href_list["drop_from_cargo"])
|
||||
var/obj/O = locate(href_list["drop_from_cargo"])
|
||||
if(O && O in src.cargo)
|
||||
src.occupant << "\blue You unload [O]."
|
||||
src.occupant_message("\blue You unload [O].")
|
||||
O.loc = get_turf(src)
|
||||
src.cargo -= O
|
||||
var/turf/T = get_turf(O)
|
||||
|
||||
@@ -456,9 +456,25 @@
|
||||
set name = "Changelog"
|
||||
set category = "OOC"
|
||||
if (client)
|
||||
src << browse_rsc('postcardsmall.jpg')
|
||||
src << browse_rsc('somerights20.png')
|
||||
src << browse_rsc('88x31.png')
|
||||
src.getFiles('postcardsmall.jpg',
|
||||
'somerights20.png',
|
||||
'88x31.png',
|
||||
'bug-minus.png',
|
||||
'cross-circle.png',
|
||||
'hard-hat-exclamation.png',
|
||||
'image-minus.png',
|
||||
'image-plus.png',
|
||||
'music-minus.png',
|
||||
'music-plus.png',
|
||||
'tick-circle.png',
|
||||
'wrench-screwdriver.png',
|
||||
'spell-check.png',
|
||||
'burn-exclamation.png',
|
||||
'chevron.png',
|
||||
'chevron-expand.png',
|
||||
'changelog.css',
|
||||
'changelog.js'
|
||||
)
|
||||
src << browse('changelog.html', "window=changes;size=675x650")
|
||||
client.changes = 1
|
||||
|
||||
@@ -1125,4 +1141,14 @@ note dizziness decrements automatically in the mob's Life() proc.
|
||||
/mob/proc/setMaxHealth(var/newMaxHealth)
|
||||
maxHealth = newMaxHealth
|
||||
|
||||
// ++++ROCKDTBEN++++ MOB PROCS //END
|
||||
// ++++ROCKDTBEN++++ MOB PROCS //END
|
||||
|
||||
/*
|
||||
* Sends resource files to client cache
|
||||
*/
|
||||
/mob/proc/getFiles()
|
||||
if(!isemptylist(args))
|
||||
for(var/file in args)
|
||||
src << browse_rsc(file)
|
||||
return 1
|
||||
return 0
|
||||
@@ -446,8 +446,7 @@ atom
|
||||
luminosity = new_luminosity
|
||||
if(luminosity>0)
|
||||
sd_ApplyLum()
|
||||
|
||||
|
||||
/*
|
||||
sd_SetOpacity(new_opacity as num)
|
||||
/* if(opacity != new_opacity)
|
||||
var/list/affected = sd_StripLocalLum()
|
||||
@@ -541,6 +540,100 @@ atom
|
||||
|
||||
*/
|
||||
// end new_opacity = 0 block
|
||||
*/
|
||||
|
||||
|
||||
sd_SetOpacity(new_opacity as num)
|
||||
/* if(opacity != new_opacity)
|
||||
var/list/affected = sd_StripLocalLum()
|
||||
opacity = new_opacity
|
||||
sd_ApplyLocalLum(affected) */
|
||||
if(opacity == (new_opacity ? 1 : 0))
|
||||
return
|
||||
var/list/affected = new
|
||||
//spill
|
||||
var/atom/A
|
||||
var/turf/T
|
||||
var/turf/ATurf
|
||||
|
||||
for(A in range(sd_top_luminosity,src))
|
||||
if(A.luminosity) //atoms with no luminosity don't affect anything, so why should we check the fuckers?
|
||||
T = get_turf(A)
|
||||
if(T)
|
||||
var/list/V = view(A.luminosity,T)
|
||||
if(!(src in V))
|
||||
continue
|
||||
var/turfflag = 0
|
||||
if(A == T)
|
||||
turfflag = 1
|
||||
if(get_dist(A,src)<=A.luminosity+turfflag)
|
||||
affected[A] = V
|
||||
//if(sd_light_outside && (A in sd_light_spill_turfs))
|
||||
// if(!spill) spill=new
|
||||
// spill[A] = view(sd_light_outside, T)
|
||||
opacity = new_opacity
|
||||
if(opacity)
|
||||
for(A in affected)
|
||||
ATurf = get_turf(A)
|
||||
if(ATurf)
|
||||
for(T in affected[A]-view(A.luminosity, ATurf))
|
||||
T.sd_lumcount -= (A.luminosity-get_dist(A,T))
|
||||
|
||||
//if(T.tag == "sdd")
|
||||
// slog << "\red lc(1)-([A.luminosity-get_dist(A,T)]) from [A] ([A.x],[A.y])"
|
||||
// slog << "now [T.sd_lumcount]"
|
||||
|
||||
|
||||
T.sd_LumUpdate()
|
||||
/*
|
||||
for(A in spill)
|
||||
if(A.opacity && A!=src) continue
|
||||
ATurf = A
|
||||
while(ATurf && !istype(ATurf)) ATurf = ATurf.loc
|
||||
if(ATurf)
|
||||
//spill[A] -= view(sd_light_outside, A)
|
||||
for(T in (A==src)?spill[A]:(spill[A]-view(sd_light_outside,ATurf)))
|
||||
if(T.loc:sd_outside) continue
|
||||
T.sd_lumcount -= (sd_light_outside-get_dist(A,T))
|
||||
|
||||
//if(T.tag == "sdd")
|
||||
// slog << "\red lc(O)-([sd_light_outside-get_dist(A,T)]) from [A] ([A:x],[A:y])"
|
||||
// slog << "now [T.sd_lumcount]"
|
||||
|
||||
|
||||
T.sd_LumUpdate()
|
||||
*/
|
||||
|
||||
// end new_opacity = 1 block
|
||||
|
||||
else
|
||||
for(A in affected)
|
||||
ATurf = get_turf(A)
|
||||
if(ATurf)
|
||||
for(T in view(A.luminosity, ATurf) - affected[A])
|
||||
T.sd_lumcount += (A.luminosity-get_dist(A,T))
|
||||
//if(T.tag == "sdd")
|
||||
// slog << "\red lc(1)+([A.luminosity-get_dist(A,T)]) from [A] ([A.x],[A.y])"
|
||||
// slog << "now [T.sd_lumcount]"
|
||||
|
||||
T.sd_LumUpdate()
|
||||
/*
|
||||
for(A in spill)
|
||||
if(A.opacity) continue
|
||||
ATurf = A
|
||||
while(ATurf && !istype(ATurf)) ATurf = ATurf.loc
|
||||
if(ATurf)
|
||||
for(T in (A==src)?spill[A]:(view(sd_light_outside, ATurf)-spill[A]))
|
||||
if(T.loc:sd_outside) continue
|
||||
T.sd_lumcount += (sd_light_outside-get_dist(A,T))
|
||||
//if(T.tag == "sdd")
|
||||
// slog << "\red lc(O)+([sd_light_outside-get_dist(A,T)]) from [A] ([A:x],[A:y])"
|
||||
// slog << "now [T.sd_lumcount]"
|
||||
|
||||
T.sd_LumUpdate()
|
||||
|
||||
*/
|
||||
// end new_opacity = 0 block
|
||||
|
||||
|
||||
///
|
||||
|
||||
@@ -796,6 +796,14 @@ datum
|
||||
req_tech = list("materials" = 4, "engineering" = 3)
|
||||
build_path = "/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill"
|
||||
|
||||
mech_generator_nuclear
|
||||
name = "Exosuit Module Design (ExoNuclear Reactor)"
|
||||
desc = "Compact nuclear reactor module"
|
||||
id = "mech_generator_nuclear"
|
||||
build_type = MECHFAB
|
||||
req_tech = list("powerstorage"= 3, "engineering" = 3, "materials" = 3)
|
||||
build_path = "/obj/item/mecha_parts/mecha_equipment/generator/nuclear"
|
||||
|
||||
|
||||
////////////////////////////////////////
|
||||
//////////Disk Construction Disks///////
|
||||
|
||||
BIN
html/bug-minus.png
Normal file
|
After Width: | Height: | Size: 657 B |
BIN
html/burn-exclamation.png
Normal file
|
After Width: | Height: | Size: 727 B |
33
html/changelog.css
Normal file
@@ -0,0 +1,33 @@
|
||||
a img {border:none;}
|
||||
.bgimages16 li {
|
||||
padding:2px 10px 2px 30px;
|
||||
background-position:6px center;
|
||||
background-repeat:no-repeat;
|
||||
border:1px solid #ddd;
|
||||
border-left:4px solid #999;
|
||||
margin-bottom:2px;
|
||||
}
|
||||
.bugfix {background-image:url(bug-minus.png)}
|
||||
.wip {background-image:url(hard-hat-exclamation.png)}
|
||||
.tweak {background-image:url(wrench-screwdriver.png)}
|
||||
.soundadd {background-image:url(music-plus.png)}
|
||||
.sounddel {background-image:url(music-minus.png)}
|
||||
.rscdel {background-image:url(cross-circle.png)}
|
||||
.rscadd {background-image:url(tick-circle.png)}
|
||||
.imageadd {background-image:url(image-plus.png)}
|
||||
.imagedel {background-image:url(image-minus.png)}
|
||||
.spellcheck {background-image:url(spell-check.png)}
|
||||
.experiment {background-image:url(burn-exclamation.png)}
|
||||
.sansserif {font-family:Tahoma,sans-serif;font-size:12px;}
|
||||
.commit {margin-bottom:20px;font-size:100%;font-weight:normal;}
|
||||
.changes {list-style:none;margin:5px 0;padding:0 0 0 25px;font-size:0.8em;}
|
||||
.date {margin:10px 0;color:blue;border-bottom:2px solid #00f;width:60%;padding:2px 0;font-size:1em;font-weight:bold;}
|
||||
.author {padding-left:10px;margin:0;font-weight:bold;font-size:0.9em;}
|
||||
.drop {cursor:pointer;border:1px solid #999;display:inline;font-size:0.9em;padding:1px 20px 1px 5px;line-height:16px;}
|
||||
.hidden {display:none;}
|
||||
.indrop {margin:2px 0 0 0;clear:both;background:#fff;border:1px solid #ddd;padding:5px 10px;}
|
||||
.indrop p {margin:0;font-size:0.8em;line-height:16px;margin:1px 0;}
|
||||
.indrop img {margin-right:5px;vertical-align:middle;}
|
||||
.closed {background:url(chevron-expand.png) right center no-repeat;}
|
||||
.open {background:url(chevron.png) right center no-repeat;}
|
||||
.lic {font-size:9px;}
|
||||
87
html/changelog.js
Normal file
@@ -0,0 +1,87 @@
|
||||
/*
|
||||
function dropdowns() {
|
||||
var divs = document.getElementsByTagName('div');
|
||||
var headers = new Array();
|
||||
var links = new Array();
|
||||
for(var i=0;i<divs.length;i++){
|
||||
if(divs[i].className=='drop') {
|
||||
divs[i].className='drop closed';
|
||||
headers.push(divs[i]);
|
||||
}
|
||||
if(divs[i].className=='indrop') {
|
||||
divs[i].className='indrop hidden';
|
||||
links.push(divs[i]);
|
||||
}
|
||||
}
|
||||
for(var i=0;i<headers.length;i++){
|
||||
if(typeof(links[i])!== 'undefined' && links[i]!=null) {
|
||||
headers[i].onclick = (function(elem) {
|
||||
return function() {
|
||||
if(elem.className.search('visible')>=0) {
|
||||
elem.className = elem.className.replace('visible','hidden');
|
||||
this.className = this.className.replace('open','closed');
|
||||
}
|
||||
else {
|
||||
elem.className = elem.className.replace('hidden','visible');
|
||||
this.className = this.className.replace('closed','open');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
})(links[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
/*
|
||||
function filterchanges(type){
|
||||
var lists = document.getElementsByTagName('ul');
|
||||
for(var i in lists){
|
||||
if(lists[i].className && lists[i].className.search('changes')>=0) {
|
||||
for(var j in lists[i].childNodes){
|
||||
if(lists[i].childNodes[j].nodeType == 1){
|
||||
if(!type){
|
||||
lists[i].childNodes[j].style.display = 'block';
|
||||
}
|
||||
else if(lists[i].childNodes[j].className!=type) {
|
||||
lists[i].childNodes[j].style.display = 'none';
|
||||
}
|
||||
else {
|
||||
lists[i].childNodes[j].style.display = 'block';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
function dropdowns() {
|
||||
var drops = $('div.drop');
|
||||
var indrops = $('div.indrop');
|
||||
if(drops.length!=indrops.length){
|
||||
alert("Some coder fucked up with dropdowns");
|
||||
}
|
||||
drops.each(function(index){
|
||||
$(this).toggleClass('closed');
|
||||
$(indrops[index]).hide();
|
||||
$(this).click(function(){
|
||||
$(this).toggleClass('closed');
|
||||
$(this).toggleClass('open');
|
||||
$(indrops[index]).toggle();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function filterchanges(type){
|
||||
$('ul.changes li').each(function(){
|
||||
if(!type || $(this).hasClass(type)){
|
||||
$(this).show();
|
||||
}
|
||||
else {
|
||||
$(this).hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$(document).ready(function(){
|
||||
dropdowns();
|
||||
});
|
||||
BIN
html/chevron-expand.png
Normal file
|
After Width: | Height: | Size: 495 B |
BIN
html/chevron.png
Normal file
|
After Width: | Height: | Size: 498 B |
BIN
html/cross-circle.png
Normal file
|
After Width: | Height: | Size: 651 B |
BIN
html/hard-hat-exclamation.png
Normal file
|
After Width: | Height: | Size: 678 B |
BIN
html/image-minus.png
Normal file
|
After Width: | Height: | Size: 535 B |
BIN
html/image-plus.png
Normal file
|
After Width: | Height: | Size: 580 B |
BIN
html/music-minus.png
Normal file
|
After Width: | Height: | Size: 403 B |
BIN
html/music-plus.png
Normal file
|
After Width: | Height: | Size: 462 B |
BIN
html/spell-check.png
Normal file
|
After Width: | Height: | Size: 509 B |
BIN
html/tick-circle.png
Normal file
|
After Width: | Height: | Size: 660 B |
BIN
html/wrench-screwdriver.png
Normal file
|
After Width: | Height: | Size: 684 B |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
BIN
icons/mecha/mech_construct.dmi
Normal file
|
After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 119 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
BIN
icons/mecha/ripley_construct.dmi
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 42 KiB |
@@ -146,6 +146,7 @@
|
||||
#define FILE_DIR "icons"
|
||||
#define FILE_DIR "icons/48x48"
|
||||
#define FILE_DIR "icons/effects"
|
||||
#define FILE_DIR "icons/mecha"
|
||||
#define FILE_DIR "icons/misc"
|
||||
#define FILE_DIR "icons/mob"
|
||||
#define FILE_DIR "icons/obj"
|
||||
|
||||