- 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
This commit is contained in:
panurgomatic
2012-02-08 18:47:04 +00:00
parent 84e292a271
commit c754581c46
39 changed files with 967 additions and 434 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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>&nbsp;[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

View File

@@ -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

View File

@@ -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,

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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
///

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 657 B

BIN
html/burn-exclamation.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 727 B

33
html/changelog.css Normal file
View 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;}

File diff suppressed because one or more lines are too long

87
html/changelog.js Normal file
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 495 B

BIN
html/chevron.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 B

BIN
html/cross-circle.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 651 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 678 B

BIN
html/image-minus.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 B

BIN
html/image-plus.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 580 B

BIN
html/music-minus.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 403 B

BIN
html/music-plus.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 462 B

BIN
html/spell-check.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 509 B

BIN
html/tick-circle.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 660 B

BIN
html/wrench-screwdriver.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 684 B

View File

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 119 KiB

After

Width:  |  Height:  |  Size: 119 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

View File

@@ -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"