diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index b7c205698f5..bd82753d59b 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1195,6 +1195,13 @@ proc/get_mob_with_client_list() location = location.loc return null +/proc/get(atom/loc, type) + while(loc) + if(istype(loc, type)) + return loc + loc = loc.loc + return null + /proc/get_turf_or_move(turf/location) return get_turf(location) diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index 51501c2795c..c2ba3db8151 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -69,7 +69,7 @@ datum/controller/game_controller/proc/setup() datum/controller/game_controller/proc/setup_objects() world << "\red \b Initializing objects" sleep(-1) - for(var/obj/object in world) + for(var/atom/movable/object in world) object.initialize() world << "\red \b Initializing pipe networks" diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 4e44aa5f042..5ef738e2f79 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -119,7 +119,7 @@ var/moving = null var/list/parts = list( ) -/obj/effect/showcase +/obj/structure/showcase name = "Showcase" icon = 'icons/obj/stationobjs.dmi' icon_state = "showcase_1" diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 474aa85eff5..30afbcf6c68 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -38,8 +38,10 @@ dat += "
" dat += "Mastercrafted Armor Set
" dat += "
" + dat += "Staff of Animation
" + dat += "
" if(op) - dat += "Re-memorize Spells
" + dat += "Re-memorize Spells
" user << browse(dat, "window=radio") onclose(user, "radio") return @@ -54,7 +56,7 @@ if ( src.loc == usr || (in_range(src,usr) && istype(src.loc, /turf))) usr.set_machine(src) if(href_list["spell_choice"]) - if(src.uses >= 1 && src.max_uses >=1 && text2num(href_list["spell_choice"]) < 18) + if(src.uses >= 1 && src.max_uses >=1 && text2num(href_list["spell_choice"]) < 19) src.uses-- var/list/available_spells = list("Magic Missile","Fireball","Disintegrate","Disable Tech","Smoke","Blind","Mind Transfer","Forcewall","Blink","Teleport","Mutate","Ethereal Jaunt","Knock","Summon Guns","Staff of Change","Six Soul Stone Shards and the spell Artificer","Mastercrafted Armor Set") var/already_knows = 0 @@ -142,8 +144,13 @@ new /obj/item/clothing/head/helmet/space/rig/wizard(get_turf(usr)) src.temp = "An artefact suit of armor that allows you to cast spells while providing more protection against attacks and the void of space." src.max_uses-- + if("18") + feedback_add_details("wizard_spell_learned","SA") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + new /obj/item/weapon/gun/energy/staff/animate(get_turf(usr)) + src.temp = "An artefact that spits bolts of life-force which causes objects which are hit by it to animate and come to life! This magic doesn't affect machines." + src.max_uses-- - if (href_list["spell_choice"] == "18") + if (href_list["spell_choice"] == "19") var/area/wizard_station/A = locate() if(usr in A.contents) src.uses = src.max_uses diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 9b72f8cda04..5df86fd9554 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -44,7 +44,7 @@ else return null -/obj/proc/initialize() +/atom/movable/proc/initialize() return /obj/proc/updateUsrDialog() diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 610716c3c32..f686de963e1 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -9,6 +9,7 @@ var/projectilesound var/casingtype var/move_to_delay = 2 //delay for the automated movement. + var/list/friends = list() stop_automated_movement_when_pulled = 0 /mob/living/simple_animal/hostile/proc/FindTarget() @@ -21,6 +22,8 @@ var/mob/living/L = A if(L.faction == src.faction && !attack_same) continue + else if(L in friends) + continue else if(!L.stat) stance = HOSTILE_STANCE_ATTACK @@ -34,7 +37,7 @@ break return T -/mob/living/simple_animal/hostile/proc/MoveToTarget(var/step = 5) +/mob/living/simple_animal/hostile/proc/MoveToTarget() stop_automated_movement = 1 if(!target_mob || SA_attackable(target_mob)) stance = HOSTILE_STANCE_IDLE @@ -53,12 +56,13 @@ stop_automated_movement = 1 if(!target_mob || SA_attackable(target_mob)) LoseTarget() - return + return 0 if(!(target_mob in ListTargets())) LostTarget() - return + return 0 if(get_dist(src, target_mob) <= 1) //Attacking AttackingTarget() + return 1 /mob/living/simple_animal/hostile/proc/AttackingTarget() if(isliving(target_mob)) @@ -109,8 +113,6 @@ DestroySurroundings() AttackTarget() - - /mob/living/simple_animal/hostile/proc/OpenFire(target_mob) var/target = target_mob visible_message("\red [src] fires at [target]!", 1) diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm new file mode 100644 index 00000000000..60687c247bc --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -0,0 +1,183 @@ +// +// Abstract Class +// + +/mob/living/simple_animal/hostile/mimic + name = "crate" + desc = "A rectangular steel crate." + icon = 'icons/obj/storage.dmi' + icon_state = "crate" + icon_living = "crate" + + meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat + response_help = "touches the" + response_disarm = "pushes the" + response_harm = "hits the" + speed = -1 + maxHealth = 250 + health = 250 + + harm_intent_damage = 5 + melee_damage_lower = 8 + melee_damage_upper = 12 + attacktext = "attacks" + attack_sound = 'sound/weapons/bite.ogg' + + min_oxy = 0 + max_oxy = 0 + min_tox = 0 + max_tox = 0 + min_co2 = 0 + max_co2 = 0 + min_n2 = 0 + max_n2 = 0 + minbodytemp = 0 + + faction = "mimic" + move_to_delay = 8 + +/mob/living/simple_animal/hostile/mimic/FindTarget() + . = ..() + if(.) + emote("growls at [.]") + +/mob/living/simple_animal/hostile/mimic/Die() + ..() + visible_message("\red [src] stops moving!") + del(src) + + + +// +// Crate Mimic +// + + +// Aggro when you try to open them. Will also pickup loot when spawns and drop it when dies. +/mob/living/simple_animal/hostile/mimic/crate + + attacktext = "bites" + + stop_automated_movement = 1 + wander = 0 + var/attempt_open = 0 + +// Pickup loot +/mob/living/simple_animal/hostile/mimic/crate/initialize() + ..() + for(var/obj/item/I in loc) + I.loc = src + +/mob/living/simple_animal/hostile/mimic/crate/DestroySurroundings() + ..() + if(prob(90)) + icon_state = "[initial(icon_state)]open" + else + icon_state = initial(icon_state) + +/mob/living/simple_animal/hostile/mimic/crate/ListTargets() + if(attempt_open) + return view(src, 10) + return view(src, 1) + +/mob/living/simple_animal/hostile/mimic/crate/FindTarget() + . = ..() + if(.) + trigger() + +/mob/living/simple_animal/hostile/mimic/crate/AttackingTarget() + . = ..() + if(.) + icon_state = initial(icon_state) + +/mob/living/simple_animal/hostile/mimic/crate/proc/trigger() + if(!attempt_open) + visible_message("[src] starts to move!") + attempt_open = 1 + +/mob/living/simple_animal/hostile/mimic/crate/adjustBruteLoss(var/damage) + trigger() + ..(damage) + +/mob/living/simple_animal/hostile/mimic/crate/LoseTarget() + ..() + icon_state = initial(icon_state) + +/mob/living/simple_animal/hostile/mimic/crate/LostTarget() + ..() + icon_state = initial(icon_state) + +/mob/living/simple_animal/hostile/mimic/crate/Die() + + var/obj/structure/closet/crate/C = new(get_turf(src)) + // Put loot in crate + for(var/obj/O in src) + O.loc = C + ..() + +/mob/living/simple_animal/hostile/mimic/crate/AttackingTarget() + . =..() + var/mob/living/L = . + if(istype(L)) + if(prob(15)) + L.Weaken(2) + L.visible_message("\the [src] knocks down \the [L]!") + +// +// Copy Mimic +// + +var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/cable, /obj/structure/window) + +/mob/living/simple_animal/hostile/mimic/copy + + health = 100 + maxHealth = 100 + var/obj/item/staff = null // the staff that changed they, never attack the bearer of this staff + var/destroy_objects = 0 + +/mob/living/simple_animal/hostile/mimic/copy/New(loc, var/obj/copy, var/obj/item/staff) + ..(loc) + CopyObject(copy, staff) + +/mob/living/simple_animal/hostile/mimic/copy/Die() + + for(var/atom/movable/M in src) + M.loc = get_turf(src) + ..() + +/mob/living/simple_animal/hostile/mimic/copy/ListTargets() + // Return a list of targets that isn't the holder of our staff + return view(src, 7) - get(staff, /mob) + +/mob/living/simple_animal/hostile/mimic/copy/proc/CopyObject(var/obj/O, var/obj/item/staff) + + if((istype(O, /obj/item) || istype(O, /obj/structure)) && !is_type_in_list(O, protected_objects)) + + O.loc = src + name = O.name + desc = O.desc + icon = O.icon + icon_state = O.icon_state + icon_living = icon_state + + if(istype(O, /obj/structure)) + health = (anchored * 50) + 50 + destroy_objects = 1 + else if(istype(O, /obj/item)) + var/obj/item/I = O + health = 15 * I.w_class + melee_damage_lower = 2 + I.force + melee_damage_upper = 2 + I.force + move_to_delay = 2 * I.w_class + + maxHealth = health + if(staff) + src.staff = staff + return 1 + return + +/mob/living/simple_animal/hostile/mimic/copy/DestroySurroundings() + if(destroy_objects) + ..() + diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 38efa87cd60..e3be6a83b3f 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -20,6 +20,7 @@ var/meat_amount = 0 var/meat_type var/stop_automated_movement = 0 //Use this to temporarely stop random movement or to if you write special movement code for animals. + var/wander = 1 // Does the mob wander around when idle? var/stop_automated_movement_when_pulled = 1 //When set to 1 this stops the animal from moving when someone is pulling it. //Interaction @@ -95,7 +96,7 @@ AdjustParalysis(-1) //Movement - if(!client && !stop_automated_movement) + if(!client && !stop_automated_movement && wander) if(isturf(src.loc) && !resting && !buckled && canmove) //This is so it only moves if it's not inside a closet, gentics machine, etc. turns_since_move++ if(turns_since_move >= turns_per_move) @@ -186,12 +187,12 @@ //Atmos effect if(bodytemperature < minbodytemp) - health -= cold_damage_per_tick + adjustBruteLoss(cold_damage_per_tick) else if(bodytemperature > maxbodytemp) - health -= heat_damage_per_tick + adjustBruteLoss(heat_damage_per_tick) if(!atmos_suitable) - health -= unsuitable_atoms_damage + adjustBruteLoss(unsuitable_atoms_damage) return 1 /mob/living/simple_animal/Bumped(AM as mob|obj) @@ -241,11 +242,11 @@ M.attack_log += text("\[[time_stamp()]\] attacked [src.name] ([src.ckey])") src.attack_log += text("\[[time_stamp()]\] was attacked by [M.name] ([M.ckey])") var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) - health -= damage + adjustBruteLoss(damage) /mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj) if(!Proj) return - src.health -= Proj.damage + adjustBruteLoss(Proj.damage) return 0 /mob/living/simple_animal/attack_hand(mob/living/carbon/human/M as mob) @@ -264,6 +265,7 @@ return if (!(status_flags & CANPUSH)) return + var/obj/item/weapon/grab/G = new /obj/item/weapon/grab( M, M, src ) M.put_in_active_hand(G) @@ -277,17 +279,12 @@ if ((O.client && !( O.blinded ))) O.show_message(text("\red [] has grabbed [] passively!", M, src), 1) - if("hurt") - health -= harm_intent_damage + if("hurt", "disarm") + adjustBruteLoss(harm_intent_damage) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) O.show_message("\red [M] [response_harm] [src]") - if("disarm") - for(var/mob/O in viewers(src, null)) - if ((O.client && !( O.blinded ))) - O.show_message("\blue [M] [response_disarm] [src]") - return /mob/living/simple_animal/attack_alien(mob/living/carbon/alien/humanoid/M as mob) @@ -295,6 +292,7 @@ switch(M.a_intent) if ("help") + for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) O.show_message(text("\blue [M] caresses [src] with its scythe like arm."), 1) @@ -303,6 +301,7 @@ return if(!(status_flags & CANPUSH)) return + var/obj/item/weapon/grab/G = new /obj/item/weapon/grab( M, M, src ) M.put_in_active_hand(G) @@ -316,16 +315,10 @@ if ((O.client && !( O.blinded ))) O.show_message(text("\red [] has grabbed [] passively!", M, src), 1) - if("hurt") + if("hurt", "disarm") var/damage = rand(15, 30) visible_message("\red [M] has slashed at [src]!") - src.health -= damage - - - if("disarm") - var/damage = rand(15, 30) - visible_message("\red [M] has slashed at [src]!") - src.health -= damage + adjustBruteLoss(damage) return @@ -335,23 +328,25 @@ if("help") visible_message("\blue [L] rubs it's head against [src]") + else var/damage = rand(5, 10) visible_message("\red [L] bites [src]!") if(stat != DEAD) - src.health -= damage + adjustBruteLoss(damage) L.amount_grown = min(L.amount_grown + damage, L.max_grown) /mob/living/simple_animal/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri if(istype(O, /obj/item/stack/medical)) + if(stat != DEAD) var/obj/item/stack/medical/MED = O if(health < maxHealth) if(MED.amount >= 1) - health = min(maxHealth, health + MED.heal_brute) + adjustBruteLoss(-MED.heal_brute) MED.amount -= 1 if(MED.amount <= 0) del(MED) @@ -372,7 +367,7 @@ var/damage = O.force if (O.damtype == HALLOSS) damage = 0 - health -= damage + adjustBruteLoss(damage) for(var/mob/M in viewers(src, null)) if ((M.client && !( M.blinded ))) M.show_message("\red \b [src] has been attacked with the [O] by [user]. ") @@ -383,6 +378,7 @@ M.show_message("\red [user] gently taps [src] with the [O]. ") + /mob/living/simple_animal/movement_delay() var/tally = 0 //Incase I need to add stuff other than "speed" later @@ -409,19 +405,19 @@ flick("flash", flash) switch (severity) if (1.0) - health -= 500 + adjustBruteLoss(500) gib() return if (2.0) - health -= 60 + adjustBruteLoss(60) if(3.0) - health -= 30 + adjustBruteLoss(30) /mob/living/simple_animal/adjustBruteLoss(damage) - health -= damage + health = Clamp(health - damage, 0, maxHealth) /mob/living/simple_animal/proc/SA_attackable(target_mob) if (isliving(target_mob)) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index ad3eeb90926..fbba8b87be9 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -107,6 +107,7 @@ in_chamber.original = target in_chamber.loc = get_turf(user) in_chamber.starting = get_turf(user) + in_chamber.shot_from = src user.next_move = world.time + 4 in_chamber.silenced = silenced in_chamber.current = curloc diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 06e7e3107c3..7cad1c58876 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -64,6 +64,11 @@ obj/item/weapon/gun/energy/staff update_icon() return +/obj/item/weapon/gun/energy/staff/animate + name = "staff of animation" + desc = "An artefact that spits bolts of life-force which causes objects which are hit by it to animate and come to life! This magic doesn't affect machines." + projectile_type = "/obj/item/projectile/animate" + /obj/item/weapon/gun/energy/floragun name = "floral somatoray" desc = "A tool that discharges controlled radiation which induces mutation in plant cells." diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index fbf15d020b0..b9914f7baec 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -26,6 +26,7 @@ var/yo = null var/xo = null var/current = null + var/obj/shot_from = null // the object which shot us var/atom/original = null // the original target clicked var/turf/starting = null // the projectile's starting turf var/list/permutated = list() // we've passed through these atoms, don't try to hit them again @@ -61,9 +62,9 @@ Bump(atom/A as mob|obj|turf|area) if(A == firer) loc = A.loc - return //cannot shoot yourself + return 0 //cannot shoot yourself - if(bumped) return + if(bumped) return 0 var/forcedodge = 0 // force the projectile to pass bumped = 1 @@ -71,7 +72,7 @@ var/mob/M = A if(!istype(A, /mob/living)) loc = A.loc - return // nope.avi + return 0// nope.avi // check for dodge (i can't place in bullet_act because then things get wonky) if(!M.stat && !M.lying && (REFLEXES in M.augmentations) && prob(85)) @@ -104,7 +105,7 @@ else loc = A.loc permutated.Add(A) - return + return 0 if(istype(A,/turf)) for(var/obj/O in A) @@ -115,7 +116,7 @@ density = 0 invisibility = 101 del(src) - return + return 1 CanPass(atom/movable/mover, turf/target, height=0, air_group=0) diff --git a/code/modules/projectiles/projectile/animate.dm b/code/modules/projectiles/projectile/animate.dm new file mode 100644 index 00000000000..af229e6502f --- /dev/null +++ b/code/modules/projectiles/projectile/animate.dm @@ -0,0 +1,13 @@ +/obj/item/projectile/animate + name = "bolt of animation" + icon_state = "ice_1" + damage = 0 + damage_type = BURN + nodamage = 1 + flag = "energy" + +/obj/item/projectile/animate/Bump(var/atom/change) + . = ..() + if(istype(change, /obj/item) || istype(change, /obj/structure) && !is_type_in_list(change, protected_objects)) + var/obj/O = change + new /mob/living/simple_animal/hostile/mimic/copy(O.loc, O, shot_from) diff --git a/html/changelog.html b/html/changelog.html index 705ede6b550..f33443df306 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -48,6 +48,14 @@ Stuff which is in development and not yet visible to players or just code relate should be listed in the changelog upon commit tho. Thanks. --> +
+

02 December 2012

+

Giacom updated:

+ +
+

30 November 2012

Petethegoat updated:

diff --git a/maps/tgstation.2.0.9.dmm b/maps/tgstation.2.0.9.dmm index 20a136768ec..46664af07dc 100644 --- a/maps/tgstation.2.0.9.dmm +++ b/maps/tgstation.2.0.9.dmm @@ -4335,7 +4335,7 @@ "bFs" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/table,/obj/item/device/taperecorder{pixel_x = -3},/obj/item/device/paicard{pixel_x = 4},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "bFt" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "bFu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/hor) -"bFv" = (/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 4; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) +"bFv" = (/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 4; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/item/weapon/pen,/obj/item/weapon/pen,/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bFw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/toxins/mixing) "bFx" = (/obj/machinery/atmospherics/valve,/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing) "bFy" = (/turf/simulated/floor{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/mixing) @@ -4368,7 +4368,7 @@ "bFZ" = (/turf/simulated/floor,/area/storage/tech) "bGa" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/storage/tech) "bGb" = (/turf/simulated/wall/r_wall,/area/hallway/primary/aft) -"bGc" = (/obj/effect/showcase{icon_state = "showcase_3"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "showroomfloor"},/area/hallway/primary/aft) +"bGc" = (/obj/machinery/light/small{dir = 8},/obj/structure/showcase{icon_state = "showcase_2"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/hallway/primary/aft) "bGd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/primary/aft) "bGe" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor,/area/hallway/primary/aft) "bGf" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 31},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/hallway/primary/aft) @@ -4441,7 +4441,7 @@ "bHu" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/crew{pixel_x = -1; pixel_y = 1},/obj/item/weapon/circuitboard/card{pixel_x = 2; pixel_y = -2},/obj/item/weapon/circuitboard/communications{pixel_x = 5; pixel_y = -5},/turf/simulated/floor,/area/storage/tech) "bHv" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/borgupload{pixel_x = -1; pixel_y = 1},/obj/item/weapon/circuitboard/aiupload{pixel_x = 2; pixel_y = -2},/turf/simulated/floor,/area/storage/tech) "bHw" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/robotics{pixel_x = -2; pixel_y = 2},/obj/item/weapon/circuitboard/mecha_control{pixel_x = 1; pixel_y = -1},/turf/simulated/floor,/area/storage/tech) -"bHx" = (/obj/effect/showcase{icon_state = "showcase_2"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/hallway/primary/aft) +"bHx" = (/obj/structure/showcase{icon_state = "showcase_3"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/hallway/primary/aft) "bHy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/primary/aft) "bHz" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "cautioncorner"; dir = 2},/area/hallway/primary/aft) "bHA" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor{icon_state = "bot"},/area/atmos) @@ -4510,7 +4510,7 @@ "bIL" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/obj/structure/grille,/turf/simulated/floor/plating,/area/storage/tech) "bIM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/turf/simulated/floor/plating,/area/storage/tech) "bIN" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/obj/structure/grille,/turf/simulated/floor/plating,/area/storage/tech) -"bIO" = (/obj/effect/showcase{icon_state = "showcase_5"; pixel_x = -2},/turf/simulated/floor{icon_state = "showroomfloor"},/area/hallway/primary/aft) +"bIO" = (/obj/structure/showcase{icon_state = "showcase_4"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/hallway/primary/aft) "bIP" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor,/area/hallway/primary/aft) "bIQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor,/area/hallway/primary/aft) "bIR" = (/obj/machinery/atmospherics/pipe/manifold{color = "red"; dir = 1; icon_state = "manifold-r-f"; level = 1; name = "pipe manifold"},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "caution"; dir = 4},/area/hallway/primary/aft) @@ -4561,7 +4561,7 @@ "bJK" = (/turf/simulated/floor/airless{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/toxins/test_area) "bJL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/aft) "bJM" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/maintenance/aft) -"bJN" = (/obj/effect/showcase{icon_state = "showcase_4"; pixel_x = -2},/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "showroomfloor"},/area/hallway/primary/aft) +"bJN" = (/obj/machinery/light/small{dir = 8},/obj/structure/showcase{icon_state = "showcase_5"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/hallway/primary/aft) "bJO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/aft) "bJP" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/hallway/primary/aft) "bJQ" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "caution"; dir = 4},/area/hallway/primary/aft) @@ -7164,10 +7164,10 @@ "cHN" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (NORTHEAST)"; icon_state = "fakewindows"; dir = 5},/area/wizard_station) "cHO" = (/obj/item/trash/raisins,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) "cHP" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) -"cHQ" = (/obj/effect/showcase,/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station) +"cHQ" = (/obj/structure/showcase,/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station) "cHR" = (/obj/structure/table/reinforced,/obj/structure/kitchenspike,/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station) "cHS" = (/obj/structure/table/reinforced,/obj/structure/kitchenspike,/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station) -"cHT" = (/obj/effect/showcase,/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station) +"cHT" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/showcase,/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station) "cHU" = (/obj/effect/decal/remains/human,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station) "cHV" = (/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station) "cHW" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows2 (NORTH)"; icon_state = "fakewindows2"; dir = 1},/area/wizard_station) diff --git a/tgstation.dme b/tgstation.dme index 0d1d3fa45b7..5502dd9b06e 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -906,6 +906,7 @@ #include "code\modules\mob\living\simple_animal\hostile\faithless.dm" #include "code\modules\mob\living\simple_animal\hostile\hivebot.dm" #include "code\modules\mob\living\simple_animal\hostile\hostile.dm" +#include "code\modules\mob\living\simple_animal\hostile\mimic.dm" #include "code\modules\mob\living\simple_animal\hostile\pirate.dm" #include "code\modules\mob\living\simple_animal\hostile\russian.dm" #include "code\modules\mob\living\simple_animal\hostile\syndicate.dm" @@ -977,6 +978,7 @@ #include "code\modules\projectiles\guns\projectile\pistol.dm" #include "code\modules\projectiles\guns\projectile\revolver.dm" #include "code\modules\projectiles\guns\projectile\shotgun.dm" +#include "code\modules\projectiles\projectile\animate.dm" #include "code\modules\projectiles\projectile\beams.dm" #include "code\modules\projectiles\projectile\bullets.dm" #include "code\modules\projectiles\projectile\change.dm"