From 2a9a4f657b23f4dcfdc64ee3b3e75f87dcf5ecd1 Mon Sep 17 00:00:00 2001 From: Screemonster Date: Mon, 6 Feb 2017 06:49:33 +0000 Subject: [PATCH] Adds the gopher and equipment, better icon for weasel --- code/game/mecha/micro/micro.dm | 23 ++-- code/game/mecha/micro/micro_equipment.dm | 150 ++++++++++++++++++++++- code/game/mecha/micro/security.dm | 33 +++-- code/game/mecha/micro/utility.dm | 24 ++++ icons/mecha/mecha_equipment_vr.dmi | Bin 3737 -> 4584 bytes icons/mecha/micro.dmi | Bin 2830 -> 4028 bytes vorestation.dme | 1 + 7 files changed, 202 insertions(+), 29 deletions(-) create mode 100644 code/game/mecha/micro/utility.dm diff --git a/code/game/mecha/micro/micro.dm b/code/game/mecha/micro/micro.dm index 617034696b1..6d0d108bb86 100644 --- a/code/game/mecha/micro/micro.dm +++ b/code/game/mecha/micro/micro.dm @@ -3,6 +3,7 @@ force = 10 //still a robot anchored = 0 //light enough to push and pull, but you still can't just walk past them. Like people on non-help. opacity = 0 //small enough to see around, like people. + step_energy_drain = 2 // They're light and small. A compact is gonna get better MPG than a truck. var/melee_cooldown = 10 var/melee_can_hit = 1 var/list/destroyable_obj = list(/obj/mecha, /obj/structure/window, /obj/structure/grille, /turf/simulated/wall) @@ -239,19 +240,6 @@ onclose(occupant, "sam", src) return */ -/obj/mecha/micro/moved_inside(var/mob/living/carbon/human/H as mob) - if(..()) - if(H.client) - H.client.mouse_pointer_icon = file("icons/mecha/mecha_mouse.dmi") - return 1 - else - return 0 - -/obj/mecha/micro/go_out() - if(src.occupant && src.occupant.client) - src.occupant.client.mouse_pointer_icon = initial(src.occupant.client.mouse_pointer_icon) - ..() - return /obj/mecha/micro/Topic(href,href_list) ..() @@ -298,5 +286,12 @@ playsound(src,'sound/mecha/mechmove04.ogg',40,1) return result +/obj/mecha/micro/mechsteprand() + var/result = step_rand(src) + if(result) + playsound(src,'sound/mecha/mechmove04.ogg',40,1) + return result + /obj/effect/decal/mecha_wreckage/micro - icon = 'icons/mecha/micro.dmi' \ No newline at end of file + icon = 'icons/mecha/micro.dmi' + diff --git a/code/game/mecha/micro/micro_equipment.dm b/code/game/mecha/micro/micro_equipment.dm index c855e94031e..19aebfca18f 100644 --- a/code/game/mecha/micro/micro_equipment.dm +++ b/code/game/mecha/micro/micro_equipment.dm @@ -1,7 +1,12 @@ //DO NOT ADD MECHA PARTS TO THE GAME WITH THE DEFAULT "SPRITE ME" SPRITE! //I'm annoyed I even have to tell you this! SPRITE FIRST, then commit. +///////////////////////////// +//// WEAPONS BELOW //// +///////////////////////////// + /obj/item/mecha_parts/mecha_equipment/weapon/energy/microlaser + w_class = ITEMSIZE_LARGE desc = "A mounted laser-carbine for light exosuits." equip_cooldown = 10 // same as the laser carbine name = "\improper WS-19 \"Torch\" laser carbine" @@ -10,9 +15,10 @@ energy_drain = 50 projectile = /obj/item/projectile/beam fire_sound = 'sound/weapons/Laser.ogg' - required_type = list(/obj/mecha/micro) + required_type = list(/obj/mecha/micro/sec) /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/microheavy + w_class = ITEMSIZE_LARGE desc = "A mounted laser cannon for light exosuits." equip_cooldown = 30 // same as portable name = "\improper PC-20 \"Lance\" light laser cannon" @@ -21,9 +27,10 @@ energy_drain = 120 projectile = /obj/item/projectile/beam/heavylaser fire_sound = 'sound/weapons/lasercannonfire.ogg' - required_type = list(/obj/mecha/micro) + required_type = list(/obj/mecha/micro/sec) /obj/item/mecha_parts/mecha_equipment/weapon/energy/microtaser + w_class = ITEMSIZE_LARGE desc = "A mounted taser for light exosuits." name = "\improper TS-12 \"Suppressor\" integrated taser" icon = 'icons/mecha/mecha_equipment_vr.dmi' @@ -32,9 +39,10 @@ equip_cooldown = 10 projectile = /obj/item/projectile/beam/stun fire_sound = 'sound/weapons/Taser.ogg' - required_type = list(/obj/mecha/micro) + required_type = list(/obj/mecha/micro/sec) /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/microshotgun + w_class = ITEMSIZE_LARGE desc = "A mounted combat shotgun with integrated ammo-lathe." name = "\improper Remington C-12 \"Boomstick\"" icon = 'icons/mecha/mecha_equipment_vr.dmi' @@ -47,8 +55,8 @@ projectiles = 6 projectiles_per_shot = 1 deviation = 0.7 - projectile_energy_cost = 25 - required_type = list(/obj/mecha/micro) + projectile_energy_cost = 100 + required_type = list(/obj/mecha/micro/sec) Topic(href,href_list) ..() @@ -72,6 +80,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/microflashbang + w_class = ITEMSIZE_LARGE desc = "A mounted grenade launcher for smaller mechs." name = "\improper FP-20 mounted grenade launcher" icon = 'icons/mecha/mecha_equipment_vr.dmi' @@ -81,4 +90,133 @@ projectile_energy_cost = 800 equip_cooldown = 30 det_time = 15 - required_type = list(/obj/mecha/micro) \ No newline at end of file + required_type = list(/obj/mecha/micro/sec) + + +///////////////////////////// +//// UTILITY TOOLS BELOW //// +///////////////////////////// + +/obj/item/mecha_parts/mecha_equipment/tool/drill/micro + w_class = ITEMSIZE_LARGE + name = "drill" + desc = "This is the drill that'll sorta poke holes in the heavens!" + icon = 'icons/mecha/mecha_equipment_vr.dmi' + icon_state = "microdrill" + equip_cooldown = 30 + energy_drain = 10 + force = 15 + required_type = list(/obj/mecha/micro/utility) + + action(atom/target) + if(!action_checks(target)) return + if(isobj(target)) + var/obj/target_obj = target + if(!target_obj.vars.Find("unacidable") || target_obj.unacidable) return + set_ready_state(0) + chassis.use_power(energy_drain) + chassis.visible_message("[chassis] starts to drill [target]", "You hear the drill.") + occupant_message("You start to drill [target]") + 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)) + var/turf/simulated/wall/W = target + if(W.reinf_material) + occupant_message("[target] is too durable to drill through.") + else + log_message("Drilled through [target]") + target.ex_act(2) + 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.GetDrilled() + log_message("Drilled through [target]") + var/obj/item/mecha_parts/mecha_equipment/tool/micro/orescoop/ore_box = (locate(/obj/item/mecha_parts/mecha_equipment/tool/micro/orescoop) in chassis.equipment) + if(ore_box) + for(var/obj/item/weapon/ore/ore in range(chassis,1)) + if(get_dir(chassis,ore)&chassis.dir) + if (ore_box.contents.len >= ore_box.orecapacity) + occupant_message("The ore compartment is full.") + return 1 + else + ore.Move(ore_box) + else if(target.loc == C) + log_message("Drilled through [target]") + target.ex_act(2) + return 1 + + +/obj/item/mecha_parts/mecha_equipment/tool/micro/orescoop + w_class = ITEMSIZE_LARGE + name = "Mounted ore box" + desc = "A mounted ore scoop and hopper, for gathering ores." + icon = 'icons/mecha/mecha_equipment_vr.dmi' + icon_state = "microscoop" + equip_cooldown = 5 + energy_drain = 0 + required_type = list(/obj/mecha/micro/utility) + var/orecapacity = 500 + + action(atom/target) + if(!action_checks(target)) return + set_ready_state(0) + chassis.use_power(energy_drain) + chassis.visible_message("[chassis] sweeps around with its ore scoop.") + occupant_message("You sweep around the area with the scoop.") + 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) + for(var/obj/item/weapon/ore/ore in range(chassis,1)) + if(get_dir(chassis,ore)&chassis.dir) + if (contents.len >= orecapacity) + occupant_message("The ore compartment is full.") + return 1 + else + ore.Move(src) + return 1 + + Topic(href,href_list) + ..() + if (href_list["empty_box"]) + if(contents.len < 1) + occupant_message("The ore compartment is empty.") + return + for (var/obj/item/weapon/ore/O in contents) + contents -= O + O.loc = chassis.loc + occupant_message("Ore compartment emptied.") + + get_equip_info() + return "[..()]
Empty ore compartment" + +/obj/item/mecha_parts/mecha_equipment/tool/orescoop/verb/empty_box() //so you can still get the ore out if someone detaches it from the mech + set name = "Empty Ore compartment" + set category = "Object" + set src in view(1) + + if(!istype(usr, /mob/living/carbon/human)) //Only living, intelligent creatures with hands can empty ore boxes. + usr << "\red You are physically incapable of emptying the ore box." + return + + if( usr.stat || usr.restrained() ) + return + + if(!Adjacent(usr)) //You can only empty the box if you can physically reach it + usr << "You cannot reach the ore box." + return + + add_fingerprint(usr) + + if(contents.len < 1) + usr << "\red The ore box is empty" + return + + for (var/obj/item/weapon/ore/O in contents) + contents -= O + O.loc = src.loc + usr << "\blue You empty the ore box" + + return diff --git a/code/game/mecha/micro/security.dm b/code/game/mecha/micro/security.dm index 9f7a8ff8966..e3b43846d28 100644 --- a/code/game/mecha/micro/security.dm +++ b/code/game/mecha/micro/security.dm @@ -1,32 +1,47 @@ -/obj/mecha/micro/polecat //figured give 'em the names of small predatory critters +/obj/mecha/micro/sec/moved_inside(var/mob/living/carbon/human/H as mob) + if(..()) + if(H.client) + H.client.mouse_pointer_icon = file("icons/mecha/mecha_mouse.dmi") + return 1 + else + return 0 + +/obj/mecha/micro/sec/go_out() + if(src.occupant && src.occupant.client) + src.occupant.client.mouse_pointer_icon = initial(src.occupant.client.mouse_pointer_icon) + ..() + return + +/obj/mecha/micro/sec/polecat //figured give 'em the names of small predatory critters desc = "A hardened security vehicle for micro crewmembers. To them, it's a superheavy tank. To everyone else, it's kinda cute." name = "Polecat" icon_state = "polecat" initial_icon = "polecat" step_in = 2 // human running speed - dir_in = 1 //Facing North. + dir_in = 2 //Facing south. health = 150 + step_energy_drain = 4 // less efficient than base micromech, but still a micromech. deflect_chance = 10 damage_absorption = list("brute"=0.75,"fire"=1,"bullet"=0.8,"laser"=0.7,"energy"=0.85,"bomb"=1) max_temperature = 15000 infra_luminosity = 6 var/overload = 0 var/overload_coeff = 2 - wreckage = /obj/effect/decal/mecha_wreckage/micro/polecat + wreckage = /obj/effect/decal/mecha_wreckage/micro/sec/polecat internal_damage_threshold = 35 max_equip = 3 -/obj/effect/decal/mecha_wreckage/micro/polecat +/obj/effect/decal/mecha_wreckage/micro/sec/polecat name = "Polecat wreckage" icon_state = "polecat-broken" -/obj/mecha/micro/weasel - desc = "A light scout exosuit for micro crewmembers, built for fast reconnaisance. Yes, it IS a miner borg chassis with wheels attached to the legs. ." +/obj/mecha/micro/sec/weasel + desc = "A light scout exosuit for micro crewmembers, built for fast reconnaisance." name = "Weasel" icon_state = "weasel" initial_icon = "weasel" step_in = 1 // zoom zoom - dir_in = 1 //Facing North. + dir_in = 2 //Facing south. health = 100 deflect_chance = 5 damage_absorption = list("brute"=1,"fire"=1,"bullet"=0.9,"laser"=0.8,"energy"=0.85,"bomb"=1) @@ -34,10 +49,10 @@ infra_luminosity = 6 var/overload = 0 var/overload_coeff = 2 - wreckage = /obj/effect/decal/mecha_wreckage/micro/weasel + wreckage = /obj/effect/decal/mecha_wreckage/micro/sec/weasel internal_damage_threshold = 20 max_equip = 2 -/obj/effect/decal/mecha_wreckage/micro/weasel +/obj/effect/decal/mecha_wreckage/micro/sec/weasel name = "Weasel wreckage" icon_state = "weasel-broken" diff --git a/code/game/mecha/micro/utility.dm b/code/game/mecha/micro/utility.dm new file mode 100644 index 00000000000..6f5fd6616f7 --- /dev/null +++ b/code/game/mecha/micro/utility.dm @@ -0,0 +1,24 @@ + + +/obj/mecha/micro/utility/gopher //figured give 'em the names of small predatory critters + desc = "A tough little utility mech for micro crewmembers, based on a miner borg chassis." + name = "Gopher" + icon_state = "gopher" + initial_icon = "gopher" + step_in = 3 + dir_in = 2 //Facing south. + health = 100 + deflect_chance = 10 + damage_absorption = list("brute"=0.9,"fire"=1,"bullet"=1,"laser"=1,"energy"=1,"bomb"=1) + max_temperature = 15000 + infra_luminosity = 6 + var/overload = 0 + var/overload_coeff = 2 + wreckage = /obj/effect/decal/mecha_wreckage/micro/utility/gopher + internal_damage_threshold = 35 + max_equip = 2 + +/obj/effect/decal/mecha_wreckage/micro/utility/gopher + name = "Gopher wreckage" + icon_state = "gopher-broken" + diff --git a/icons/mecha/mecha_equipment_vr.dmi b/icons/mecha/mecha_equipment_vr.dmi index 74873476b5cad007b0773becbe51d403446fd5bd..7bb519d706bc82d64e008c94ca43f463cfa347ba 100644 GIT binary patch literal 4584 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 LX)0F8TZR4yOmxd( literal 3737 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 X!RJ*91#AfXUlX7X)>bQ5u@3tWuEs|F diff --git a/icons/mecha/micro.dmi b/icons/mecha/micro.dmi index 90011b87756027686cde468ac5d3602f4661610b..91984e132a3a8e933fc86a66f37e6459d090af8f 100644 GIT binary patch delta 3917 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%0D3;4lVlL^BRj! z-=yz7v*8pGHxZ0(N2AeglYI8f7F}P*P4ZoT^l*E7`|yGUuZduTIu<`%U0ppi$!E`O z*Vlm?H52^tMF|=#F4Ykreedt}x=G)Ab|dYlF4MH>f8WD4EO5%1q)q?(F2(|)D1Wu< zf8WLU1A#2;wCR7}$4Ht=WbLk1|NAZ{U?zAcN3c=#3*BTxCa+f^ADoTYpR4y%&M*WZCH{0zfKd!l=f1~GE=gFN`=VXG7`X9}}IMx); z=stRuOhf@Bfvz@!4f-GRiisA8-QPECNZ)3043cslY|;NTzs)AbQs2^kMajvjM{>q*y*7JrZn)-kx+N13^rx>Qs~d zcObZ>Oho%3MeywG=?Ef#q{^jVltpXA88IndEwWTomO>r;}!VFFhZ`I*oEkx|Ljf bGqL{x5QhWAbPfrP00000NkvXXu0mjf@+5!9 delta 2729 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 diff --git a/vorestation.dme b/vorestation.dme index 2d102904522..b4887f2124a 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -728,6 +728,7 @@ #include "code\game\mecha\micro\micro.dm" #include "code\game\mecha\micro\micro_equipment.dm" #include "code\game\mecha\micro\security.dm" +#include "code\game\mecha\micro\utility.dm" #include "code\game\mecha\working\hoverpod.dm" #include "code\game\mecha\working\ripley.dm" #include "code\game\mecha\working\working.dm"