Files
2020-02-19 19:48:29 -08:00

334 lines
9.4 KiB
Plaintext

//Pick(1 tile), hammer(line across), drill(line in front), blaster(cone),
/obj/item/mining_head
name = "mining tool head"
desc = "A mining tool head."
icon = 'icons/obj/mining.dmi'
icon_state = "powerpick"
drill
name = "drill head"
desc = "A drill head."
icon_state = "drillhead"
hammer
name = "hammer head"
desc = "A hammer head."
icon_state = "hammerhead"
pick
name = "pick head"
desc = "A pick head."
icon_state = "pickhead"
blaster
name = "blaster head"
desc = "A blaster head."
icon_state = "blasterhead"
/obj/item/mining_mod
name = "mining mod"
desc = "A mod for mining tools."
icon = 'icons/obj/mining.dmi'
icon_state = "mod_none"
conc
name = "Concussive Mining Mod"
desc = "A mod for mining tools. Increases AOE."
icon_state = "mod_conc"
/obj/item/mining_tools
name = "mining tool"
desc = "A simple mining tool."
icon = 'icons/obj/mining.dmi'
inhand_image_icon = 'icons/mob/inhand/hand_tools.dmi'
icon_state = "powerpick"
item_state = "ppick"
var/blasting = 0 //Small Aoe damage around normal hit tiles.
var/powered = 0 //Undecided.
var/power = 5 //Damage to asteroid tiles.
var/hit_sound = 'sound/items/mining_drill.ogg'
flags = FPRINT | EXTRADELAY | TABLEPASS | CONDUCT | ONBELT
afterattack(atom/target as mob|obj|turf|area, mob/user as mob, var/reach)
if(user == target || (!isturf(target.loc) && !isturf(target)))
return
playsound(src.loc, hit_sound, 20, 1)
if(blasting)
playsound(src.loc, 'sound/items/mining_conc.ogg', 20, 1)
return use(user, target)
onMaterialChanged()
..()
if(istype(src.material))
src.power = max(20, src.material.getProperty("hard") * 4)
if(blasting)
src.power *= 0.90
return
proc/use(var/mob/user, var/atom/target)
return
buildTooltipContent()
var/Tcontent = ..()
Tcontent += "<br>"
Tcontent += "<div><img src='[resource("images/tooltips/mining.png")]' alt='' class='icon' /><span>Mining Power: [power]</span></div>"
return Tcontent
/obj/item/mining_tools/pick
name = "Mining Pick"
desc = "A mining pick. Affects only a single tile but has very high power."
icon_state = "pickaxe"
item_state = "pick"
hit_sound = 'sound/items/mining_pick.ogg'
onMaterialChanged()
..()
if(istype(src.material))
src.power = 0
src.power += max(10, src.material.getProperty("density") * 2)
src.power += max(10, src.material.getProperty("hard") * 2)
src.power *= 2.5
if(blasting)
src.power *= 0.90
src.power = round(src.power)
return
use(var/mob/user, var/atom/target)
var/attackDir = get_dir(user, target)
if(attackDir == NORTHEAST || attackDir == NORTHWEST || attackDir == SOUTHEAST || attackDir == SOUTHWEST)
attackDir = (prob(50) ? turn(attackDir, 45) : turn(attackDir, -45))
var/turf/start = get_step(user,attackDir)
var/obj/meleeeffect/pick/DA = new/obj/meleeeffect/pick(start)
SPAWN_DBG(2 SECONDS)
qdel(DA)
var/list/extra_dmg = list()
if(blasting)
extra_dmg |= range(1,start)
for(var/turf/T in extra_dmg)
if(istype(T,/turf/simulated/wall/asteroid))
var/obj/meleeeffect/conc/conc = new/obj/meleeeffect/conc(T)
SPAWN_DBG(1 SECOND) qdel(conc)
T:change_health(-(round(power/7)))
if(istype(start,/turf/simulated/wall/asteroid))
var/turf/simulated/wall/asteroid/A = start
A.change_health(-power)
return
/obj/item/mining_tools/blaster
name = "Mining Blaster"
desc = "A mining blaster. Affects a wide area but has a little bit less power."
icon_state = "blaster"
item_state = "drill"
hit_sound = 'sound/items/mining_blaster.ogg'
onMaterialChanged()
..()
if(istype(src.material))
src.power = max(20, src.material.getProperty("electrical") * 4)
src.power *= 0.80
if(blasting)
src.power *= 0.90
src.power = round(src.power)
return
use(var/mob/user, var/atom/target)
var/attackDir = get_dir(user, target)
if(attackDir == NORTHEAST || attackDir == NORTHWEST || attackDir == SOUTHEAST || attackDir == SOUTHWEST)
attackDir = (prob(50) ? turn(attackDir, 45) : turn(attackDir, -45))
var/turf/start = get_step(user,attackDir)
var/turf/TC = get_step(start,attackDir)
var/turf/TA = get_step(TC,turn(attackDir, 90))
var/turf/TB = get_step(TC,turn(attackDir, -90))
animate(start,color="#FFFF00", time=1)
animate(color="#AA0000", time=2)
animate(color="#FFFFFF", time=4)
animate(TC,color="#FFFF00", time=1)
animate(color="#AA0000", time=2)
animate(color="#FFFFFF", time=4)
animate(TA,color="#FFFF00", time=1)
animate(color="#AA0000", time=2)
animate(color="#FFFFFF", time=4)
animate(TB,color="#FFFF00", time=1)
animate(color="#AA0000", time=2)
animate(color="#FFFFFF", time=4)
var/obj/meleeeffect/blasterline/EA = new/obj/meleeeffect/blasterline(user.loc)
var/obj/meleeeffect/blasterline/EB = new/obj/meleeeffect/blasterline(start)
EA.dir = attackDir
EB.dir = turn(attackDir, 180)
animate(EA,alpha=0, time=5)
animate(EB,alpha=0, time=5)
SPAWN_DBG(6 DECI SECONDS)
qdel(EA)
qdel(EB)
var/list/extra_dmg = list()
if(blasting)
extra_dmg |= range(1,start)
extra_dmg |= range(1,TA)
extra_dmg |= range(1,TB)
extra_dmg |= range(1,TC)
for(var/turf/T in extra_dmg)
if(istype(T,/turf/simulated/wall/asteroid))
var/obj/meleeeffect/conc/conc = new/obj/meleeeffect/conc(T)
SPAWN_DBG(1 SECOND) qdel(conc)
T:change_health(-(round(power/7)))
if(istype(start,/turf/simulated/wall/asteroid))
var/turf/simulated/wall/asteroid/A = start
A.change_health(-power)
if(istype(TC,/turf/simulated/wall/asteroid))
var/turf/simulated/wall/asteroid/B = TC
B.change_health(-power)
if(istype(TA,/turf/simulated/wall/asteroid))
var/turf/simulated/wall/asteroid/C = TA
C.change_health(-power)
if(istype(TB,/turf/simulated/wall/asteroid))
var/turf/simulated/wall/asteroid/D = TB
D.change_health(-power)
return
/obj/item/mining_tools/hammer
name = "Mining Hammer"
desc = "A mining hammer. Affects a wide area."
icon_state = "powerhammer"
item_state = "hammer"
hit_sound = 'sound/items/mining_hammer.ogg'
force = 5
onMaterialChanged()
..()
if(istype(src.material))
src.power = max(20, src.material.getProperty("density") * 4)
if(blasting)
src.power *= 0.90
src.power = round(src.power)
return
use(var/mob/user, var/atom/target)
var/attackDir = get_dir(user, target)
if(attackDir == NORTHEAST || attackDir == NORTHWEST || attackDir == SOUTHEAST || attackDir == SOUTHWEST)
attackDir = (prob(50) ? turn(attackDir, 45) : turn(attackDir, -45))
var/turf/start = get_step(user,attackDir)
var/turf/middle = get_step(start,turn(attackDir, 90))
var/turf/end = get_step(start,turn(attackDir, -90))
var/obj/meleeeffect/hammer/DA = new/obj/meleeeffect/hammer(start)
var/obj/meleeeffect/hammer/DB = new/obj/meleeeffect/hammer(middle)
var/obj/meleeeffect/hammer/DC = new/obj/meleeeffect/hammer(end)
SPAWN_DBG(2 SECONDS)
qdel(DA)
qdel(DB)
qdel(DC)
var/list/extra_dmg = list()
if(blasting)
extra_dmg |= range(1,start)
extra_dmg |= range(1,middle)
extra_dmg |= range(1,end)
for(var/turf/T in extra_dmg)
if(istype(T,/turf/simulated/wall/asteroid))
var/obj/meleeeffect/conc/conc = new/obj/meleeeffect/conc(T)
SPAWN_DBG(1 SECOND) qdel(conc)
T:change_health(-(round(power/7)))
if(istype(start,/turf/simulated/wall/asteroid))
var/turf/simulated/wall/asteroid/A = start
A.change_health(-power)
if(istype(middle,/turf/simulated/wall/asteroid))
var/turf/simulated/wall/asteroid/B = middle
B.change_health(-power)
if(istype(end,/turf/simulated/wall/asteroid))
var/turf/simulated/wall/asteroid/C = end
C.change_health(-power)
return
/obj/item/mining_tools/drill
name = "Mining Drill"
desc = "A mining drill. Has a long range."
icon_state = "lasdrill"
item_state = "drill"
hit_sound = 'sound/items/mining_drill.ogg'
onMaterialChanged()
..()
if(istype(src.material))
src.power = max(20, src.material.getProperty("hard") * 4)
if(blasting)
src.power *= 0.90
src.power = round(src.power)
return
use(var/mob/user, var/atom/target)
var/attackDir = get_dir(user, target)
if(attackDir == NORTHEAST || attackDir == NORTHWEST || attackDir == SOUTHEAST || attackDir == SOUTHWEST)
attackDir = (prob(50) ? turn(attackDir, 45) : turn(attackDir, -45))
var/turf/start = get_step(user,attackDir)
var/turf/middle = get_step(start,attackDir)
var/turf/end = get_step(middle,attackDir)
var/anim_x = 0
var/anim_y = 0
switch(attackDir)
if(NORTH)
anim_x = 0
anim_y = 64
if(EAST)
anim_x = 64
anim_y = 0
if(SOUTH)
anim_x = 0
anim_y = -64
if(WEST)
anim_x = -64
anim_y = 0
var/obj/meleeeffect/drill/D = new/obj/meleeeffect/drill(start)
D.dir = attackDir
animate(D, pixel_x = anim_x, pixel_y = anim_y, time = 5, easing = QUAD_EASING)
SPAWN_DBG(2 SECONDS) qdel(D)
var/list/extra_dmg = list()
if(blasting)
extra_dmg |= range(1,start)
extra_dmg |= range(1,middle)
extra_dmg |= range(1,end)
for(var/turf/T in extra_dmg)
if(istype(T,/turf/simulated/wall/asteroid))
var/obj/meleeeffect/conc/conc = new/obj/meleeeffect/conc(T)
SPAWN_DBG(1 SECOND) qdel(conc)
T:change_health(-(round(power/7)))
if(istype(start,/turf/simulated/wall/asteroid))
var/turf/simulated/wall/asteroid/A = start
A.change_health(-power)
if(istype(middle,/turf/simulated/wall/asteroid))
var/turf/simulated/wall/asteroid/B = middle
B.change_health(-power)
if(istype(end,/turf/simulated/wall/asteroid))
var/turf/simulated/wall/asteroid/C = end
C.change_health(-power)
return