diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index a854023ab9..ef3e653ba5 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -515,7 +515,25 @@ Traitors and the like can also be revived with the previous role mostly intact. if(new_character.mind) new_character.mind.loaded_from_ckey = picked_ckey new_character.mind.loaded_from_slot = picked_slot +<<<<<<< HEAD //VOREStation Add End +||||||| parent of 278c3eaa3f... Merge pull request #9761 from VOREStation/upstream-merge-7891 + + for(var/lang in picked_client.prefs.alternate_languages) + var/datum/language/chosen_language = GLOB.all_languages[lang] + if(chosen_language) + if(is_lang_whitelisted(src,chosen_language) || (new_character.species && (chosen_language.name in new_character.species.secondary_langs))) + new_character.add_language(lang) + //VOREStation Add End +======= + //VOREStation Add End + + for(var/lang in picked_client.prefs.alternate_languages) + var/datum/language/chosen_language = GLOB.all_languages[lang] + if(chosen_language) + if(is_lang_whitelisted(src,chosen_language) || (new_character.species && (chosen_language.name in new_character.species.secondary_langs))) + new_character.add_language(lang) +>>>>>>> 278c3eaa3f... Merge pull request #9761 from VOREStation/upstream-merge-7891 //If desired, apply equipment. if(equipment) diff --git a/code/modules/mining/ore.dm b/code/modules/mining/ore.dm index b067a35633..f740951817 100644 --- a/code/modules/mining/ore.dm +++ b/code/modules/mining/ore.dm @@ -113,7 +113,15 @@ icon_state = "slag" material = null +<<<<<<< HEAD /obj/item/weapon/ore/New() +||||||| parent of 278c3eaa3f... Merge pull request #9761 from VOREStation/upstream-merge-7891 +/obj/item/weapon/ore/New() + ..() +======= +/obj/item/weapon/ore/Initialize() + ..() +>>>>>>> 278c3eaa3f... Merge pull request #9761 from VOREStation/upstream-merge-7891 randpixel_xy() /obj/item/weapon/ore/attackby(obj/item/weapon/W as obj, mob/user as mob) diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm index d5ba330c0d..c3c18ecaf2 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm @@ -1,141 +1,141 @@ -// Mecha simple_mobs are essentially fake mechs. Generally tough and scary to fight. -// By default, they're automatically piloted by some kind of drone AI. They can be set to be "piloted" instead with a var. -// Tries to be as similar to the real deal as possible. - -/mob/living/simple_mob/mechanical/mecha - name = "mecha" - desc = "A big stompy mech!" - icon = 'icons/mecha/mecha.dmi' - - faction = "syndicate" - movement_cooldown = 5 - movement_sound = "mechstep" // This gets fed into playsound(), which can also take strings as a 'group' of sound files. - turn_sound = 'sound/mecha/mechturn.ogg' - maxHealth = 300 - mob_size = MOB_LARGE - - // Very close to the base 'damage_absorption' var on the base mecha class. - armor = list( - "melee" = 20, - "bullet" = 10, - "laser" = 0, - "energy" = 0, - "bomb" = 0, - "bio" = 100, - "rad" = 100 - ) - - response_help = "taps on" - response_disarm = "knocks on" - response_harm = "uselessly hits" - harm_intent_damage = 0 - - ai_holder_type = /datum/ai_holder/simple_mob/melee - say_list_type = /datum/say_list/malf_drone - - var/datum/effect/effect/system/spark_spread/sparks - var/wreckage = /obj/effect/decal/mecha_wreckage/gygax/dark - var/pilot_type = null // Set to spawn a pilot when destroyed. Setting this also makes the mecha vulnerable to things that affect sentient minds. - var/deflect_chance = 10 // Chance to outright stop an attack, just like a normal exosuit. - var/has_repair_droid = FALSE // If true, heals 2 damage every tick and gets a repair droid overlay. - - -/mob/living/simple_mob/mechanical/mecha/Initialize() - sparks = new (src) - sparks.set_up(3, 1, src) - sparks.attach(src) - - if(!pilot_type) - name = "autonomous [initial(name)]" - desc = "[initial(desc)] It appears to be piloted by a drone intelligence." - else - say_list_type = /datum/say_list/merc - - if(has_repair_droid) - update_icon() - - return ..() - -/mob/living/simple_mob/mechanical/mecha/Destroy() - qdel_null(sparks) - return ..() - -/mob/living/simple_mob/mechanical/mecha/death() - ..(0,"explodes!") // Do everything else first. - - // Make the exploding more convincing with an actual explosion and some sparks. - sparks.start() - explosion(get_turf(src), 0, 0, 1, 3) - - // 'Eject' our pilot, if one exists. - if(pilot_type) - var/mob/living/L = new pilot_type(loc) - L.faction = src.faction - - new wreckage(loc) // Leave some wreckage. - - qdel(src) // Then delete us since we don't actually have a body. - -/mob/living/simple_mob/mechanical/mecha/handle_special() - if(has_repair_droid) - adjustBruteLoss(-2) - adjustFireLoss(-2) - adjustToxLoss(-2) - adjustOxyLoss(-2) - adjustCloneLoss(-2) - ..() - -/mob/living/simple_mob/mechanical/mecha/update_icon() - ..() // Cuts everything else, so do that first. - if(has_repair_droid) - add_overlay(image(icon = 'icons/mecha/mecha_equipment.dmi', icon_state = "repair_droid")) - -/mob/living/simple_mob/mechanical/mecha/bullet_act() - . = ..() - sparks.start() - -/mob/living/simple_mob/mechanical/mecha/speech_bubble_appearance() - return pilot_type ? "" : ..() - -// Piloted mechs are controlled by (presumably) something humanoid so they are vulnerable to certain things. -/mob/living/simple_mob/mechanical/mecha/is_sentient() - return pilot_type ? TRUE : FALSE - -/* -// Real mechs can't turn and run at the same time. This tries to simulate that. -// Commented out because the AI can't handle it sadly. -/mob/living/simple_mob/mechanical/mecha/SelfMove(turf/n, direct) - if(direct != dir) - set_dir(direct) - return FALSE // We didn't actually move, and returning FALSE means the mob can try to actually move almost immediately and not have to wait the full movement cooldown. - return ..() -*/ - -/mob/living/simple_mob/mechanical/mecha/bullet_act(obj/item/projectile/P) - if(prob(deflect_chance)) - visible_message(span("warning", "\The [P] is deflected by \the [src]'s armor!")) - deflect_sprite() - return 0 - return ..() - -/mob/living/simple_mob/mechanical/mecha/proc/deflect_sprite() - var/image/deflect_image = image('icons/effects/effects.dmi', "deflect_static") - add_overlay(deflect_image) - sleep(1 SECOND) - cut_overlay(deflect_image) - qdel(deflect_image) -// flick_overlay_view(deflect_image, src, duration = 1 SECOND, gc_after = TRUE) - -/mob/living/simple_mob/mechanical/mecha/attackby(obj/item/I, mob/user) - if(prob(deflect_chance)) - visible_message(span("warning", "\The [user]'s [I] bounces off \the [src]'s armor!")) - deflect_sprite() - user.setClickCooldown(user.get_attack_speed(I)) - return - ..() - -/mob/living/simple_mob/mechanical/mecha/ex_act(severity) - if(prob(deflect_chance)) - severity++ // This somewhat misleadingly makes it less severe. - deflect_sprite() - ..(severity) \ No newline at end of file +// Mecha simple_mobs are essentially fake mechs. Generally tough and scary to fight. +// By default, they're automatically piloted by some kind of drone AI. They can be set to be "piloted" instead with a var. +// Tries to be as similar to the real deal as possible. + +/mob/living/simple_mob/mechanical/mecha + name = "mecha" + desc = "A big stompy mech!" + icon = 'icons/mecha/mecha.dmi' + + faction = "syndicate" + movement_cooldown = 5 + movement_sound = "mechstep" // This gets fed into playsound(), which can also take strings as a 'group' of sound files. + turn_sound = 'sound/mecha/mechturn.ogg' + maxHealth = 300 + mob_size = MOB_LARGE + + // Very close to the base 'damage_absorption' var on the base mecha class. + armor = list( + "melee" = 20, + "bullet" = 10, + "laser" = 0, + "energy" = 0, + "bomb" = 0, + "bio" = 100, + "rad" = 100 + ) + + response_help = "taps on" + response_disarm = "knocks on" + response_harm = "uselessly hits" + harm_intent_damage = 0 + + ai_holder_type = /datum/ai_holder/simple_mob/melee + say_list_type = /datum/say_list/malf_drone + + var/datum/effect/effect/system/spark_spread/sparks + var/wreckage = /obj/effect/decal/mecha_wreckage/gygax/dark + var/pilot_type = null // Set to spawn a pilot when destroyed. Setting this also makes the mecha vulnerable to things that affect sentient minds. + var/deflect_chance = 10 // Chance to outright stop an attack, just like a normal exosuit. + var/has_repair_droid = FALSE // If true, heals 2 damage every tick and gets a repair droid overlay. + + +/mob/living/simple_mob/mechanical/mecha/Initialize() + sparks = new (src) + sparks.set_up(3, 1, src) + sparks.attach(src) + + if(!pilot_type) + name = "autonomous [initial(name)]" + desc = "[initial(desc)] It appears to be piloted by a drone intelligence." + else + say_list_type = /datum/say_list/merc + + if(has_repair_droid) + update_icon() + + return ..() + +/mob/living/simple_mob/mechanical/mecha/Destroy() + qdel_null(sparks) + return ..() + +/mob/living/simple_mob/mechanical/mecha/death() + ..(0,"explodes!") // Do everything else first. + + // Make the exploding more convincing with an actual explosion and some sparks. + sparks.start() + explosion(get_turf(src), 0, 0, 1, 3) + + // 'Eject' our pilot, if one exists. + if(pilot_type) + var/mob/living/L = new pilot_type(loc) + L.faction = src.faction + + new wreckage(loc) // Leave some wreckage. + + qdel(src) // Then delete us since we don't actually have a body. + +/mob/living/simple_mob/mechanical/mecha/handle_special() + if(has_repair_droid) + adjustBruteLoss(-2) + adjustFireLoss(-2) + adjustToxLoss(-2) + adjustOxyLoss(-2) + adjustCloneLoss(-2) + ..() + +/mob/living/simple_mob/mechanical/mecha/update_icon() + ..() // Cuts everything else, so do that first. + if(has_repair_droid) + add_overlay(image(icon = 'icons/mecha/mecha_equipment.dmi', icon_state = "repair_droid")) + +/mob/living/simple_mob/mechanical/mecha/bullet_act() + . = ..() + sparks.start() + +/mob/living/simple_mob/mechanical/mecha/speech_bubble_appearance() + return pilot_type ? "" : ..() + +// Piloted mechs are controlled by (presumably) something humanoid so they are vulnerable to certain things. +/mob/living/simple_mob/mechanical/mecha/is_sentient() + return pilot_type ? TRUE : FALSE + +/* +// Real mechs can't turn and run at the same time. This tries to simulate that. +// Commented out because the AI can't handle it sadly. +/mob/living/simple_mob/mechanical/mecha/SelfMove(turf/n, direct) + if(direct != dir) + set_dir(direct) + return FALSE // We didn't actually move, and returning FALSE means the mob can try to actually move almost immediately and not have to wait the full movement cooldown. + return ..() +*/ + +/mob/living/simple_mob/mechanical/mecha/bullet_act(obj/item/projectile/P) + if(prob(deflect_chance)) + visible_message(span("warning", "\The [P] is deflected by \the [src]'s armor!")) + deflect_sprite() + return 0 + return ..() + +/mob/living/simple_mob/mechanical/mecha/proc/deflect_sprite() + var/image/deflect_image = image('icons/effects/effects.dmi', "deflect_static") + add_overlay(deflect_image) + sleep(1 SECOND) + cut_overlay(deflect_image) + qdel(deflect_image) +// flick_overlay_view(deflect_image, src, duration = 1 SECOND, gc_after = TRUE) + +/mob/living/simple_mob/mechanical/mecha/attackby(obj/item/I, mob/user) + if(prob(deflect_chance)) + visible_message(span("warning", "\The [user]'s [I] bounces off \the [src]'s armor!")) + deflect_sprite() + user.setClickCooldown(user.get_attack_speed(I)) + return + ..() + +/mob/living/simple_mob/mechanical/mecha/ex_act(severity) + if(prob(deflect_chance)) + severity++ // This somewhat misleadingly makes it less severe. + deflect_sprite() + ..(severity)