- Slight speed up for combat mechs.

- Added H.O.N.K construction.
- Removed unnecessary mecha parts.
- Fixed bug with switching intent while in mecha
- Tweaked mecha access permissions (maintenance hatch can be opened if player has any of the mecha internals_req_access permissions, piloting allowed only if player has all of operation_req_access permissions)

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1042 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
panurgomatic
2011-02-14 14:08:18 +00:00
parent 72af73347b
commit 110e48507b
12 changed files with 258 additions and 88 deletions
+1 -1
View File
@@ -115,7 +115,7 @@
V.show_message("[src.name] hits [target].", 1)
if(!istype(target, /turf/simulated/wall))
target:attackby(src,src.occupant)
else if(prob(2))
else if(prob(5))
target:dismantle_wall(1)
src.occupant_message("\blue You smash through the wall.")
src.visible_message("<b>[src.name] smashes through the wall</b>")
+1 -1
View File
@@ -2,7 +2,7 @@
desc = "Combat exosuit."
name = "Durand"
icon_state = "durand"
step_in = 8
step_in = 6
health = 350
deflect_chance = 12
max_temperature = 3000
+1 -1
View File
@@ -2,7 +2,7 @@
desc = "Security exosuit."
name = "Gygax"
icon_state = "gygax"
step_in = 6
step_in = 5
health = 300
deflect_chance = 10
max_temperature = 3500
+2 -1
View File
@@ -2,7 +2,7 @@
desc = "Heavy duty combat exosuit."
name = "Marauder"
icon_state = "marauder"
step_in = 10
step_in = 7
health = 400
deflect_chance = 25
max_temperature = 5000
@@ -112,6 +112,7 @@
/obj/mecha/combat/marauder/go_out()
if(src.occupant && src.occupant.client)
src.occupant.client.view = world.view
src.zoom = 0
..()
return
@@ -343,7 +343,6 @@
var/target_y = targloc.y
var/target_z = targloc.z
targloc = null
target = null
for(var/i=1 to min(projectiles, projectiles_per_shot))
targloc = locate(target_x+GaussRandRound(deviation,1),target_y+GaussRandRound(deviation,1),target_z)
if(!targloc || targloc == curloc)
@@ -378,7 +377,6 @@
var/target_y = targloc.y
var/target_z = targloc.z
targloc = null
target = null
spawn for(var/i=1 to min(projectiles, projectiles_per_shot))
if(!chassis) break
var/turf/curloc = get_turf(chassis)
+3
View File
@@ -17,6 +17,9 @@
spawn_result()
return
proc/action(atom/used_atom,mob/user as mob)
return
proc/check_step(atom/used_atom,mob/user as mob) //check last step only
var/valid_step = is_right_key(used_atom)
if(valid_step)
+17 -2
View File
@@ -19,7 +19,8 @@
"gold"=0,
"silver"=0,
"diamond"=0,
"plasma"=0
"plasma"=0,
"bananium"=0
)
var/res_max_amount = 200000
var/part_set
@@ -53,6 +54,16 @@
list("result"="/obj/item/mecha_parts/part/gygax_left_leg","time"=200,"metal"=35000),
list("result"="/obj/item/mecha_parts/part/gygax_right_leg","time"=200,"metal"=35000),
list("result"="/obj/item/mecha_parts/part/gygax_armour","time"=600,"metal"=75000,"diamond"=10000)
),
"H.O.N.K"=list(
list("result"="/obj/mecha_chassis/honker","time"=100,"metal"=20000),
list("result"="/obj/item/mecha_parts/part/honker_torso","time"=300,"metal"=35000,"glass"=10000,"bananium"=10000),
list("result"="/obj/item/mecha_parts/part/honker_head","time"=200,"metal"=15000,"glass"=5000,"bananium"=5000),
list("result"="/obj/item/mecha_parts/part/honker_left_arm","time"=200,"metal"=20000,"bananium"=5000),
list("result"="/obj/item/mecha_parts/part/honker_right_arm","time"=200,"metal"=20000,"bananium"=5000),
list("result"="/obj/item/mecha_parts/part/honker_left_leg","time"=200,"metal"=20000,"bananium"=5000),
list("result"="/obj/item/mecha_parts/part/honker_right_leg","time"=200,"metal"=20000,"bananium"=5000),
)
)
@@ -192,13 +203,14 @@
var/time = part["time"]
src.being_built = new path(src)
src.remove_resources(part)
flick("mechfab3", src)
src.icon_state = "mechfab3" //looks better than 'flick'
src.use_power = 2
spawn(time)
src.use_power = 1
src.being_built.Move(get_step(src,EAST))
src.icon_state = initial(src.icon_state)
src.visible_message("[src] beeps, \"The [src.being_built] is complete\".")
src.icon_state = initial(src.icon_state)
src.being_built = null
src.updateUsrDialog()
src.updateUsrDialog()
@@ -229,6 +241,9 @@
else if(istype(W, /obj/item/stack/sheet/glass))
material = "glass"
amnt = "g_amt"
else if(istype(W, /obj/item/stack/sheet/clown))
material = "bananium"
amnt = "g_amt"
else
return ..()
+16 -6
View File
@@ -90,7 +90,13 @@
if(mech_click == world.time) return
mech_click = world.time
*/
if(!location) return //probably GUI
if(istype(object, /obj/screen))
var/obj/screen/using = object
if(using.screen_loc == ui_acti || using.screen_loc == ui_iarrowleft || using.screen_loc == ui_iarrowright)//ignore all HUD objects save 'intent' and its arrows
return ..()
else
return
// if(!location) return //probably GUI
if(M.stat>0) return
if(!istype(object,/atom)) return
var/obj/mecha/Mech = M.loc
@@ -101,11 +107,12 @@
return ..()
/obj/mecha/proc/click_action(atom/target)
if(!istype(target,/turf) && !istype(target.loc,/turf)) return
// if(!istype(target,/turf) && !istype(target.loc,/turf)) return
if(!src.occupant) return
if(state || !cell || cell.charge<=0) return
if(src == target) return
if(!(get_dir(src,target) & src.dir))//wrong direction
var/dir_to_target = get_dir(src,target)
if(dir_to_target && !(get_dir(src,target) & src.dir))//wrong direction
return
if(get_dist(src,target)<=1)
src.melee_action(target)
@@ -684,13 +691,16 @@
if(!I || !istype(I, /obj/item/weapon/card/id) || !I.access) //not ID or no access
return 0
for(var/req in src.internals_req_access)
if(!(req in I.access)) //doesn't have this access
return 0
return 1
if(req in I.access)
return 1
return 0
/obj/mecha/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if(src.occupant)
user << "Unable to initiate maintenance protocol."
return
if(src.internals_access_allowed(usr))
if(state==0)
state = 1
+180 -72
View File
@@ -9,95 +9,44 @@
var/datum/construction/construct
flags = FPRINT | CONDUCT
attackby(obj/item/W as obj, mob/user as mob)
if(!construct || !construct.action(W, user))
..()
return
//////// Ripley chassis
/obj/mecha_chassis/ripley
name = "Ripley Chassis Frame"
name = "Ripley Chassis"
New()
..()
construct = new /datum/construction/mecha/ripley_chassis(src)
attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/mecha_parts))
if(construct)
construct.check_all_steps(W, user)
else
..()
return
/obj/mecha_chassis/ripley_full
name = "Ripley Chassis"
icon_state = "ripley_chassis"
New()
..()
construct = new /datum/construction/mecha/ripley(src)
attackby(obj/item/weapon/W as obj, mob/user as mob)
if(!construct || !construct.check_step(W, user))
..()
return
/////// Gygax chasis
/obj/mecha_chassis/gygax
name = "Gygax Chassis Frame"
name = "Gygax Chassis"
New()
..()
construct = new /datum/construction/mecha/gygax_chassis(src)
attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/mecha_parts))
if(construct)
construct.check_all_steps(W, user)
else
..()
return
/obj/mecha_chassis/gygax_full
name = "Gygax Chassis"
icon_state = "gygax_chassis"
New()
..()
construct = new /datum/construction/mecha/gygax(src)
attackby(obj/item/weapon/W as obj, mob/user as mob)
if(!construct || !construct.check_step(W, user))
..()
return
/////// Firefighter chassis
/obj/mecha_chassis/firefighter
name = "Ripley-on-Fire Chassis Frame"
name = "Ripley-on-Fire Chassis"
New()
..()
construct = new /datum/construction/mecha/firefighter_chassis(src)
attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/mecha_parts))
if(construct)
construct.check_all_steps(W, user)
else
..()
return
/obj/mecha_chassis/firefighter_full
name = "Ripley-on-Fire Chassis"
icon_state = "ripley_chassis"
/////// HONK chassis
/obj/mecha_chassis/honker
name = "H.O.N.K Chassis"
New()
..()
construct = new /datum/construction/mecha/firefighter(src)
attackby(obj/item/weapon/W as obj, mob/user as mob)
if(!construct || !construct.check_step(W, user))
..()
return
construct = new /datum/construction/mecha/honker_chassis(src)
/////////////////////////
////// Mecha Parts //////
@@ -186,6 +135,30 @@
icon_state = "ripley_r_leg"
////////// HONK
/obj/item/mecha_parts/part/honker_torso
name="H.O.N.K Torso"
icon_state = "honker_harness"
/obj/item/mecha_parts/part/honker_head
name="H.O.N.K Head"
icon_state = "honker_head"
/obj/item/mecha_parts/part/honker_left_arm
name="H.O.N.K Left Arm"
icon_state = "honker_l_arm"
/obj/item/mecha_parts/part/honker_right_arm
name="H.O.N.K Right Arm"
icon_state = "honker_r_arm"
/obj/item/mecha_parts/part/honker_left_leg
name="H.O.N.K Left Leg"
icon_state = "honker_l_leg"
/obj/item/mecha_parts/part/honker_right_leg
name="H.O.N.K Right Leg"
icon_state = "honker_r_leg"
/obj/item/mecha_parts/circuitboard
@@ -213,7 +186,7 @@
icon_state = "mcontroller"
gygax/targeting
name = "Circuit board (Weapon Control and Targeting module)"
name = "Circuit board (Gygax Weapon Control and Targeting module)"
icon_state = "mcontroller"
gygax/main
@@ -224,6 +197,19 @@
name = "Circuit board (Ripley-on-Fire Peripherals Control module)"
icon_state = "mcontroller"
honker/peripherals
name = "Circuit board (H.O.N.K Peripherals Control module)"
icon_state = "mcontroller"
honker/targeting
name = "Circuit board (H.O.N.K Weapon Control and Targeting module)"
icon_state = "mcontroller"
honker/main
name = "Circuit board (H.O.N.K Central Control module)"
icon_state = "mainboard"
////////////////////////////////
///// Construction datums //////
////////////////////////////////
@@ -268,19 +254,22 @@
)
custom_action(step, atom/used_atom, mob/user)
/*
switch(step)
if(5)
if(4)
if(3)
if(2)
if(1)
*/
user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]")
holder.overlays += used_atom.icon_state+"+o"
del used_atom
return 1
action(atom/used_atom,mob/user as mob)
return check_all_steps(used_atom,user)
spawn_result()
var/obj/mecha_chassis/const_holder = holder
const_holder.construct = new /datum/construction/mecha/ripley(const_holder)
const_holder.density = 1
spawn()
del src
return
/datum/construction/mecha/ripley
result = "/obj/mecha/working/ripley"
@@ -300,6 +289,9 @@
list("key"="/obj/item/weapon/wrench")//14
)
action(atom/used_atom,mob/user as mob)
return check_step(used_atom,user)
custom_action(step, atom/used_atom, mob/user)
if(!..())
return 0
@@ -356,6 +348,18 @@
del used_atom
return 1
action(atom/used_atom,mob/user as mob)
return check_all_steps(used_atom,user)
spawn_result()
var/obj/mecha_chassis/const_holder = holder
const_holder.construct = new /datum/construction/mecha/gygax(const_holder)
const_holder.density = 1
spawn()
del src
return
/datum/construction/mecha/gygax
result = "/obj/mecha/combat/gygax"
@@ -381,6 +385,9 @@
list("key"="/obj/item/weapon/wrench")//20
)
action(atom/used_atom,mob/user as mob)
return check_step(used_atom,user)
custom_action(step, atom/used_atom, mob/user)
if(!..())
return 0
@@ -452,6 +459,17 @@
del used_atom
return 1
action(atom/used_atom,mob/user as mob)
return check_all_steps(used_atom,user)
spawn_result()
var/obj/mecha_chassis/const_holder = holder
const_holder.construct = new /datum/construction/mecha/firefighter(const_holder)
const_holder.density = 1
spawn()
del src
return
/datum/construction/mecha/firefighter
result = "/obj/mecha/working/firefighter"
@@ -471,6 +489,10 @@
list("key"="/obj/item/weapon/wrench")//14
)
action(atom/used_atom,mob/user as mob)
return check_step(used_atom,user)
custom_action(step, atom/used_atom, mob/user)
if(!..())
return 0
@@ -511,6 +533,92 @@
/datum/construction/mecha/honker_chassis
result = "/obj/mecha_chassis/honker_full"
steps = list(list("key"="/obj/item/mecha_parts/part/honker_torso"),//1
list("key"="/obj/item/mecha_parts/part/honker_left_arm"),//2
list("key"="/obj/item/mecha_parts/part/honker_right_arm"),//3
list("key"="/obj/item/mecha_parts/part/honker_left_leg"),//4
list("key"="/obj/item/mecha_parts/part/honker_right_leg"),//5
list("key"="/obj/item/mecha_parts/part/honker_head")
)
action(atom/used_atom,mob/user as mob)
return check_all_steps(used_atom,user)
custom_action(step, atom/used_atom, mob/user)
user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]")
holder.overlays += used_atom.icon_state+"+o"
del used_atom
return 1
spawn_result()
var/obj/mecha_chassis/const_holder = holder
const_holder.construct = new /datum/construction/mecha/honker(const_holder)
const_holder.density = 1
spawn()
del src
return
/datum/construction/mecha/honker
result = "/obj/mecha/combat/honker"
steps = list(list("key"="/obj/item/weapon/bikehorn"),//1
list("key"="/obj/item/clothing/shoes/clown_shoes"),//2
list("key"="/obj/item/weapon/bikehorn"),//3
list("key"="/obj/item/clothing/mask/gas/clown_hat"),//4
list("key"="/obj/item/weapon/bikehorn"),//5
list("key"="/obj/item/weapon/mousetrap"),//6
list("key"="/obj/item/weapon/bikehorn"),//7
list("key"="/obj/item/weapon/bananapeel"),//8
list("key"="/obj/item/weapon/bikehorn"),//9
list("key"="/obj/item/mecha_parts/circuitboard/honker/targeting"),//10
list("key"="/obj/item/weapon/bikehorn"),//11
list("key"="/obj/item/mecha_parts/circuitboard/honker/peripherals"),//12
list("key"="/obj/item/weapon/bikehorn"),//13
list("key"="/obj/item/mecha_parts/circuitboard/honker/main"),//14
list("key"="/obj/item/weapon/bikehorn"),//15
)
action(atom/used_atom,mob/user as mob)
return check_step(used_atom,user)
custom_action(step, atom/used_atom, mob/user)
if(!..())
return 0
if(istype(used_atom, /obj/item/weapon/bikehorn))
playsound(holder, 'bikehorn.ogg', 50, 1)
user.visible_message("HONK!")
//TODO: better messages.
switch(step)
if(14)
user.visible_message("[user] installs the central control module into [holder].", "You install the central control module into [holder].")
del used_atom
if(12)
user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].")
del used_atom
if(10)
user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].")
del used_atom
if(8)
user.visible_message("[user] installs the banana peel into hONK1 socket.", "You install the banana peel into the hONK1 socket.")
del used_atom
if(6)
user.visible_message("[user] installs the mousetrap into hONK2 socket.", "You install the mousetrap into hONK2 socket.")
del used_atom
if(4)
user.visible_message("[user] puts clown wig and mask on [holder].", "You put clown wig and mask on [holder].")
del used_atom
if(2)
user.visible_message("[user] puts clown boots on [holder].", "You put clown boots on [holder].")
del used_atom
return 1
////////////////// misc ////////////////
+10 -2
View File
@@ -26,6 +26,8 @@
var/tool = locate(href_list["select_tool"])
if(tool)
src.selected_tool = tool
if (href_list["unlock_id_upload"])
add_req_access = 1
if (href_list["add_req_access"])
if(!add_req_access) return
var/access = text2num(href_list["add_req_access"])
@@ -78,6 +80,12 @@
else
return ..()
/obj/mecha/working/get_commands()
var/output = {"<a href='?src=\ref[src];unlock_id_upload=1'>Unlock ID upload panel</a><br>
"}
output += ..()
return output
/obj/mecha/working/proc/output_access_dialog(obj/item/weapon/card/id/id_card, mob/user)
if(!id_card || !user) return
@@ -88,9 +96,9 @@
for(var/a in id_card.access)
if(a in operation_req_access) continue
var/a_name = get_access_desc(a)
if(!a_name) continue
if(!a_name) continue //there's some strange access without a name
output += "[a_name] - <a href='?src=\ref[src];add_req_access=[a];user=\ref[user];id_card=\ref[id_card]'>Add</a><br>"
output += "<hr><a href='?src=\ref[src];finish_req_access=1;user=\ref[user]'>Finish</a>"
output += "<hr><a href='?src=\ref[src];finish_req_access=1;user=\ref[user]'>Finish</a> <font color='red'>(Warning! The ID upload panel will be locked. It can be unlocked only through Exosuit Interface.)</font>"
output += "</body></html>"
user << browse(output, "window=exosuit_add_access")
onclose(user, "exosuit_add_access")
+27
View File
@@ -378,6 +378,33 @@ datum
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/mecha_parts/circuitboard/gygax/targeting"
honker_main
name = "Circuit Design (\"H.O.N.K\" Central Control module)"
desc = "Allows for the construction of a \"H.O.N.K\" Central Control module."
id = "honker_main"
req_tech = list("programming" = 2, "robotics" = 3)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/mecha_parts/circuitboard/honker/main"
honker_peri
name = "Circuit Design (\"H.O.N.K\" Peripherals Control module)"
desc = "Allows for the construction of a \"H.O.N.K\" Peripheral Control module."
id = "honker_peri"
req_tech = list("programming" = 2, "robotics" = 3)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/mecha_parts/circuitboard/honker/peripherals"
honker_targ
name = "Circuit Design (\"H.O.N.K\" Weapons & Targeting Control module)"
desc = "Allows for the construction of a \"H.O.N.K\" Weapons & Targeting Control module."
id = "honker_targ"
req_tech = list("programming" = 2, "robotics" = 3)
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/mecha_parts/circuitboard/honker/targeting"
////////////////////////////////////////
//////////Disk Construction Disks///////
////////////////////////////////////////
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB