Files
Aurora.3/code/game/atom_procs.dm
n3ophyt3@gmail.com 10d382258f Made some "tactical" explosives for Noize
Use it on itself to set the timer length (defaults to 10 seconds)
  Can be applied to floors, walls, monkeys, whatever
  Whatever it is applied to suffers a max-severity ex_act()(turf turns to space, objects are destroyed, mobs gib), aside from walls, which are simply busted down to not even girder
  Minimal damage to everything else in range, as with a PDA bomb
  Fits in your pocket for convenient carry
  Replaces the piss-weak syndiebombs for anyone with a syndicate uplink, comes in 2-packs

Low-severity explosions do not have a 100% chance of knocking walls down to girders anymore.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@662 316c924e-a436-60f5-8080-3fe189b3f50e
2010-12-18 23:55:20 +00:00

404 lines
12 KiB
Plaintext

/atom/proc/MouseDrop_T()
return
/atom/proc/attack_hand(mob/user as mob)
return
/atom/proc/attack_paw(mob/user as mob)
return
/atom/proc/attack_ai(mob/user as mob)
return
//for aliens, it works the same as monkeys except for alien-> mob interactions which will be defined in the
//appropiate mob files
/atom/proc/attack_alien(mob/user as mob)
src.attack_paw(user)
return
/atom/proc/hand_h(mob/user as mob)
return
/atom/proc/hand_p(mob/user as mob)
return
/atom/proc/hand_a(mob/user as mob)
return
/atom/proc/hand_al(mob/user as mob)
src.hand_p(user)
return
/atom/proc/hitby(atom/movable/AM as mob|obj)
return
/atom/proc/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/device/detective_scanner))
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O << text("\red [src] has been scanned by [user] with the [W]")
else
if (!( istype(W, /obj/item/weapon/grab) ) && !(istype(W, /obj/item/weapon/plastique)) &&!(istype(W, /obj/item/weapon/cleaner)) && !(istype(W, /obj/item/weapon/plantbgone)) )
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O << text("\red <B>[] has been hit by [] with []</B>", src, user, W)
return
/atom/proc/add_fingerprint(mob/living/carbon/human/M as mob)
if ((!( istype(M, /mob/living/carbon/human) ) || !( istype(M.dna, /datum/dna) )))
return 0
if (!( src.flags ) & 256)
return
if (M.gloves)
if(src.fingerprintslast != M.key)
src.fingerprintshidden += text("(Wearing gloves). Real name: [], Key: []",M.real_name, M.key)
src.fingerprintslast = M.key
return 0
if (!( src.fingerprints ))
src.fingerprints = text("[]", md5(M.dna.uni_identity))
if(src.fingerprintslast != M.key)
src.fingerprintshidden += text("Real name: [], Key: []",M.real_name, M.key)
src.fingerprintslast = M.key
return 1
else
var/list/L = params2list(src.fingerprints)
L -= md5(M.dna.uni_identity)
while(L.len >= 3)
L -= L[1]
L += md5(M.dna.uni_identity)
src.fingerprints = list2params(L)
if(src.fingerprintslast != M.key)
src.fingerprintshidden += text("Real name: [], Key: []",M.real_name, M.key)
src.fingerprintslast = M.key
return
/atom/proc/add_blood(mob/living/carbon/human/M as mob)
if (!( istype(M, /mob/living/carbon/human) ))
return 0
if (!( src.flags ) & 256)
return
if (!( src.blood_DNA ))
if (istype(src, /obj/item))
var/obj/item/source2 = src
source2.icon_old = src.icon
var/icon/I = new /icon(src.icon, src.icon_state)
I.Blend(new /icon('blood.dmi', "thisisfuckingstupid"),ICON_ADD)
I.Blend(new /icon('blood.dmi', "itemblood"),ICON_MULTIPLY)
I.Blend(new /icon(src.icon, src.icon_state),ICON_UNDERLAY)
src.icon = I
src.blood_DNA = M.dna.unique_enzymes
src.blood_type = M.b_type
else if (istype(src, /turf/simulated))
var/turf/simulated/source2 = src
var/list/objsonturf = range(0,src)
var/i
for(i=1, i<=objsonturf.len, i++)
if(istype(objsonturf[i],/obj/decal/cleanable/blood))
return
var/obj/decal/cleanable/blood/this = new /obj/decal/cleanable/blood(source2)
this.blood_DNA = M.dna.unique_enzymes
this.blood_type = M.b_type
this.virus = new M.virus.type
this.virus.holder = this
else if (istype(src, /mob/living/carbon/human))
src.blood_DNA = M.dna.unique_enzymes
src.blood_type = M.b_type
else
return
else
var/list/L = params2list(src.blood_DNA)
L -= M.dna.unique_enzymes
while(L.len >= 3)
L -= L[1]
L += M.dna.unique_enzymes
src.blood_DNA = list2params(L)
return
// Only adds blood on the floor -- Skie
/atom/proc/add_blood_floor(mob/living/carbon/M as mob)
if( istype(M, /mob/living/carbon/monkey) )
if( istype(src, /turf/simulated) )
var/turf/simulated/source1 = src
var/obj/decal/cleanable/blood/this = new /obj/decal/cleanable/blood(source1)
this.blood_DNA = M.dna.unique_enzymes
this.virus = new M.virus.type
this.virus.holder = this
else if( istype(M, /mob/living/carbon/alien ))
if( istype(src, /turf/simulated) )
var/turf/simulated/source2 = src
var/obj/decal/cleanable/xenoblood/this = new /obj/decal/cleanable/xenoblood(source2)
this.virus = new M.virus.type
this.virus.holder = this
else if( istype(M, /mob/living/silicon/robot ))
if( istype(src, /turf/simulated) )
var/turf/simulated/source2 = src
var/obj/decal/cleanable/oil/this = new /obj/decal/cleanable/oil(source2)
this.virus = new M.virus.type
this.virus.holder = this
/atom/proc/clean_blood()
if (!( src.flags ) & 256)
return
if ( src.blood_DNA )
if (istype (src, /mob/living/carbon))
var/obj/item/source2 = src
source2.blood_DNA = null
var/icon/I = new /icon(source2.icon_old, source2.icon_state)
source2.icon = I
if (istype (src, /obj/item))
var/obj/item/source2 = src
source2.blood_DNA = null
var/icon/I = new /icon(source2.icon_old, source2.icon_state)
source2.icon = I
if (istype(src, /turf/simulated))
var/obj/item/source2 = src
source2.blood_DNA = null
var/icon/I = new /icon(source2.icon_old, source2.icon_state)
source2.icon = I
return
/atom/MouseDrop(atom/over_object as mob|obj|turf|area)
spawn( 0 )
if (istype(over_object, /atom))
over_object.MouseDrop_T(src, usr)
return
..()
return
/atom/Click(location,control,params)
//world << "atom.Click() on [src] by [usr] : src.type is [src.type]"
if(usr.client.buildmode)
build_click(usr, usr.client.buildmode, location, control, params, src)
return
return DblClick()
/atom/DblClick() //TODO: DEFERRED: REWRITE
// world << "checking if this shit gets called at all"
if (world.time <= usr:lastDblClick+2)
// world << "BLOCKED atom.DblClick() on [src] by [usr] : src.type is [src.type]"
return
else
// world << "atom.DblClick() on [src] by [usr] : src.type is [src.type]"
usr:lastDblClick = world.time
if (istype(usr, /mob/living/silicon/ai))
var/mob/living/silicon/ai/ai = usr
if (ai.control_disabled)
return
if (istype (usr, /mob/living/silicon/robot))
var/mob/living/silicon/robot/bot = usr
if (bot.lockcharge) return
..()
if(usr.in_throw_mode)
return usr:throw_item(src)
var/obj/item/W = usr.equipped()
if(istype(usr, /mob/living/silicon/hivebot)||istype(usr, /mob/living/silicon/robot))
if(!isnull(usr:module_active))
W = usr:module_active
else
W = null
if (W == src && usr.stat == 0)
spawn (0)
W.attack_self(usr)
return
if (((usr.paralysis || usr.stunned || usr.weakened) && !istype(usr, /mob/living/silicon/ai)) || usr.stat != 0)
return
if ((!( src in usr.contents ) && (((!( isturf(src) ) && (!( isturf(src.loc) ) && (src.loc && !( isturf(src.loc.loc) )))) || !( isturf(usr.loc) )) && (src.loc != usr.loc && (!( istype(src, /obj/screen) ) && !( usr.contents.Find(src.loc) ))))))
if (istype(usr, /mob/living/silicon/ai))
var/mob/living/silicon/ai/ai = usr
if (ai.control_disabled || ai.malfhacking)
return
else
return
var/t5 = in_range(src, usr) || src.loc == usr
if (istype(usr, /mob/living/silicon/ai))
t5 = 1
if ((istype(usr, /mob/living/silicon/robot) || istype(usr, /mob/living/silicon/hivebot)) && W == null)
t5 = 1
if (istype(src, /datum/organ) && src in usr.contents)
return
// world << "according to dblclick(), t5 is [t5]"
if (((t5 || (W && (W.flags & 16))) && !( istype(src, /obj/screen) )))
if (usr.next_move < world.time)
usr.prev_move = usr.next_move
usr.next_move = world.time + 10
else
return
if ((src.loc && (get_dist(src, usr) < 2 || src.loc == usr.loc)))
var/direct = get_dir(usr, src)
var/obj/item/weapon/dummy/D = new /obj/item/weapon/dummy( usr.loc )
var/ok = 0
if ( (direct - 1) & direct)
var/turf/Step_1
var/turf/Step_2
switch(direct)
if(5.0)
Step_1 = get_step(usr, NORTH)
Step_2 = get_step(usr, EAST)
if(6.0)
Step_1 = get_step(usr, SOUTH)
Step_2 = get_step(usr, EAST)
if(9.0)
Step_1 = get_step(usr, NORTH)
Step_2 = get_step(usr, WEST)
if(10.0)
Step_1 = get_step(usr, SOUTH)
Step_2 = get_step(usr, WEST)
else
if(Step_1 && Step_2)
var/check_1 = 0
var/check_2 = 0
if(step_to(D, Step_1))
check_1 = 1
for(var/obj/border_obstacle in Step_1)
if(border_obstacle.flags & ON_BORDER)
if(!border_obstacle.CheckExit(D, src))
check_1 = 0
for(var/obj/border_obstacle in get_turf(src))
if((border_obstacle.flags & ON_BORDER) && (src != border_obstacle))
if(!border_obstacle.CanPass(D, D.loc, 1, 0))
check_1 = 0
D.loc = usr.loc
if(step_to(D, Step_2))
check_2 = 1
for(var/obj/border_obstacle in Step_2)
if(border_obstacle.flags & ON_BORDER)
if(!border_obstacle.CheckExit(D, src))
check_2 = 0
for(var/obj/border_obstacle in get_turf(src))
if((border_obstacle.flags & ON_BORDER) && (src != border_obstacle))
if(!border_obstacle.CanPass(D, D.loc, 1, 0))
check_2 = 0
if(check_1 || check_2)
ok = 1
else
if(loc == usr.loc)
ok = 1
else
ok = 1
//Now, check objects to block exit that are on the border
for(var/obj/border_obstacle in usr.loc)
if(border_obstacle.flags & ON_BORDER)
if(!border_obstacle.CheckExit(D, src))
ok = 0
//Next, check objects to block entry that are on the border
for(var/obj/border_obstacle in get_turf(src))
if((border_obstacle.flags & ON_BORDER) && (src != border_obstacle))
if(!border_obstacle.CanPass(D, D.loc, 1, 0))
ok = 0
del(D)
if (!( ok ))
return 0
if (!( usr.restrained() ))
if (W)
if (t5)
src.attackby(W, usr)
if (W)
W.afterattack(src, usr, (t5 ? 1 : 0))
else
if (istype(usr, /mob/living/carbon/human))
src.attack_hand(usr, usr.hand)
else
if (istype(usr, /mob/living/carbon/monkey))
src.attack_paw(usr, usr.hand)
else
if (istype(usr, /mob/living/carbon/alien/humanoid))
src.attack_alien(usr, usr.hand)
else
if (istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)|| istype(usr, /mob/living/silicon/hivebot))
src.attack_ai(usr, usr.hand)
else
if (istype(usr, /mob/living/carbon/human))
src.hand_h(usr, usr.hand)
else
if (istype(usr, /mob/living/carbon/monkey))
src.hand_p(usr, usr.hand)
else
if (istype(usr, /mob/living/carbon/alien/humanoid))
src.hand_al(usr, usr.hand)
else
if (istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)|| istype(usr, /mob/living/silicon/hivebot))
src.hand_a(usr, usr.hand)
else
if (istype(src, /obj/screen))
usr.prev_move = usr.next_move
if (usr.next_move < world.time)
usr.next_move = world.time + 10
else
return
if (!( usr.restrained() ))
if ((W && !( istype(src, /obj/screen) )))
src.attackby(W, usr)
if (W)
W.afterattack(src, usr)
else
if (istype(usr, /mob/living/carbon/human))
src.attack_hand(usr, usr.hand)
else
if (istype(usr, /mob/living/carbon/monkey))
src.attack_paw(usr, usr.hand)
else
if (istype(usr, /mob/living/carbon/alien/humanoid))
src.attack_alien(usr, usr.hand)
else
if (istype(usr, /mob/living/carbon/human))
src.hand_h(usr, usr.hand)
else
if (istype(usr, /mob/living/carbon/monkey))
src.hand_p(usr, usr.hand)
else
if (istype(usr, /mob/living/carbon/alien/humanoid))
src.hand_al(usr, usr.hand)
return
/atom/proc/get_global_map_pos()
if(!global_map.len) return
var/cur_x = null
var/cur_y = null
var/list/y_arr = null
for(cur_x=1,cur_x<=global_map.len,cur_x++)
y_arr = global_map[cur_x]
cur_y = y_arr.Find(src.z)
if(cur_y)
break
// world << "X = [cur_x]; Y = [cur_y]"
if(cur_x && cur_y)
return list("x"=cur_x,"y"=cur_y)
else
return 0