From 13fae560878e6fc99c1a5f0ac3b27b455689a22e Mon Sep 17 00:00:00 2001 From: X0-11 Date: Thu, 1 Feb 2024 13:44:58 +0000 Subject: [PATCH 1/3] del --- baystation12.dme | 13 - code/modules/halo/Forerunner/Halo.dmi | Bin 3091 -> 0 bytes code/modules/halo/Forerunner/Monitor.dmi | Bin 1027 -> 0 bytes code/modules/halo/Forerunner/Sentinel.dmi | Bin 7515 -> 0 bytes .../halo/Forerunner/airlocks/door32.dmi | Bin 7482 -> 0 bytes .../modules/halo/Forerunner/airlocks/doors.dm | 12 - .../halo/Forerunner/forerunner_weapons.dmi | Bin 482 -> 0 bytes .../Forerunner/heavy_sentinel_spawner.dmi | Bin 4501 -> 0 bytes code/modules/halo/Forerunner/knight.dm | 55 --- code/modules/halo/Forerunner/knight.dmi | Bin 1146 -> 0 bytes code/modules/halo/Forerunner/monitor.dm | 335 ------------------ code/modules/halo/Forerunner/sentinel.dm | 149 -------- code/modules/halo/Forerunner/sentinel_kit.dm | 27 -- code/modules/halo/Forerunner/sentinel_kit.dmi | Bin 429 -> 0 bytes .../halo/Forerunner/sentinel_spawner.dm | 45 --- .../halo/Forerunner/species/knight/knight.dm | 204 ----------- .../halo/Forerunner/species/knight/knight.dmi | Bin 3985 -> 0 bytes .../species/knight/knight_armour.dm | 131 ------- .../species/knight/knight_armour.dmi | Bin 1826 -> 0 bytes .../species/knight/knight_blood.dmi | Bin 361 -> 0 bytes .../Forerunner/species/knight/knight_dam.dmi | Bin 185 -> 0 bytes .../species/knight/knight_outfit.dm | 23 -- .../species/knight/knight_template.dmi | Bin 212 -> 0 bytes code/modules/halo/Forerunner/watcher.dm | 72 ---- code/modules/halo/Forerunner/watcher.dmi | Bin 7046 -> 0 bytes code/modules/halo/forerunner/turfs/floor.dm | 42 --- code/modules/halo/forerunner/turfs/floors.dmi | Bin 3225 -> 0 bytes .../halo/forerunner/turfs/materials.dm | 41 --- code/modules/halo/forerunner/turfs/walls.dm | 20 -- 29 files changed, 1169 deletions(-) delete mode 100644 code/modules/halo/Forerunner/Halo.dmi delete mode 100644 code/modules/halo/Forerunner/Monitor.dmi delete mode 100644 code/modules/halo/Forerunner/Sentinel.dmi delete mode 100644 code/modules/halo/Forerunner/airlocks/door32.dmi delete mode 100644 code/modules/halo/Forerunner/airlocks/doors.dm delete mode 100644 code/modules/halo/Forerunner/forerunner_weapons.dmi delete mode 100644 code/modules/halo/Forerunner/heavy_sentinel_spawner.dmi delete mode 100644 code/modules/halo/Forerunner/knight.dm delete mode 100644 code/modules/halo/Forerunner/knight.dmi delete mode 100644 code/modules/halo/Forerunner/monitor.dm delete mode 100644 code/modules/halo/Forerunner/sentinel.dm delete mode 100644 code/modules/halo/Forerunner/sentinel_kit.dm delete mode 100644 code/modules/halo/Forerunner/sentinel_kit.dmi delete mode 100644 code/modules/halo/Forerunner/sentinel_spawner.dm delete mode 100644 code/modules/halo/Forerunner/species/knight/knight.dm delete mode 100644 code/modules/halo/Forerunner/species/knight/knight.dmi delete mode 100644 code/modules/halo/Forerunner/species/knight/knight_armour.dm delete mode 100644 code/modules/halo/Forerunner/species/knight/knight_armour.dmi delete mode 100644 code/modules/halo/Forerunner/species/knight/knight_blood.dmi delete mode 100644 code/modules/halo/Forerunner/species/knight/knight_dam.dmi delete mode 100644 code/modules/halo/Forerunner/species/knight/knight_outfit.dm delete mode 100644 code/modules/halo/Forerunner/species/knight/knight_template.dmi delete mode 100644 code/modules/halo/Forerunner/watcher.dm delete mode 100644 code/modules/halo/Forerunner/watcher.dmi delete mode 100644 code/modules/halo/forerunner/turfs/floor.dm delete mode 100644 code/modules/halo/forerunner/turfs/floors.dmi delete mode 100644 code/modules/halo/forerunner/turfs/materials.dm delete mode 100644 code/modules/halo/forerunner/turfs/walls.dm diff --git a/baystation12.dme b/baystation12.dme index 8465e9a321886..836cf26ea06dd 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1778,19 +1778,6 @@ #include "code\modules\halo\flora\jungle_tree.dm" #include "code\modules\halo\flora\swamp_mushrooms.dm" #include "code\modules\halo\flora\swamp_tree.dm" -#include "code\modules\halo\forerunner\knight.dm" -#include "code\modules\halo\forerunner\monitor.dm" -#include "code\modules\halo\forerunner\sentinel.dm" -#include "code\modules\halo\forerunner\sentinel_kit.dm" -#include "code\modules\halo\forerunner\sentinel_spawner.dm" -#include "code\modules\halo\forerunner\watcher.dm" -#include "code\modules\halo\forerunner\airlocks\doors.dm" -#include "code\modules\halo\forerunner\species\knight\knight.dm" -#include "code\modules\halo\forerunner\species\knight\knight_armour.dm" -#include "code\modules\halo\forerunner\species\knight\knight_outfit.dm" -#include "code\modules\halo\forerunner\turfs\floor.dm" -#include "code\modules\halo\forerunner\turfs\materials.dm" -#include "code\modules\halo\forerunner\turfs\walls.dm" #include "code\modules\halo\icons\machinery\lamp.dm" #include "code\modules\halo\insurrection\access_ids.dm" #include "code\modules\halo\insurrection\commando_outfits.dm" diff --git a/code/modules/halo/Forerunner/Halo.dmi b/code/modules/halo/Forerunner/Halo.dmi deleted file mode 100644 index 6d14c409e0e82ec77f7edb6caee39ecd1d355537..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3091 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 diff --git a/code/modules/halo/Forerunner/Sentinel.dmi b/code/modules/halo/Forerunner/Sentinel.dmi deleted file mode 100644 index 205291f3f2997b15149c4b127163129be09af3af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7515 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 diff --git a/code/modules/halo/Forerunner/airlocks/door32.dmi b/code/modules/halo/Forerunner/airlocks/door32.dmi deleted file mode 100644 index 9ac69901d3593f46be229f4775c1afb385e7de7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7482 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 NSeRLvRv6!m`ZvV3`}+U@ diff --git a/code/modules/halo/Forerunner/knight.dm b/code/modules/halo/Forerunner/knight.dm deleted file mode 100644 index 0c6226ebb14e1..0000000000000 --- a/code/modules/halo/Forerunner/knight.dm +++ /dev/null @@ -1,55 +0,0 @@ - -/mob/living/simple_animal/hostile/knight - name = "Knight" - desc = "A Promethean Knight, a frontline soldier of Promethean forces" - faction = "Forerunner" - icon = 'code/modules/halo/Forerunner/knight.dmi' - icon_state = "knight" - icon_living = "knight" - icon_dead = "knight" - universal_speak = 1 - universal_understand = 1 - response_harm = "batters" - health = 200 - maxHealth = 200 - ranged = 1 - move_to_delay = 5 - resistance = 15 - speak_chance = 0 - pixel_x = -2 - speak = list() - emote_see = list("scans its body for damage","scans the environment") - emote_hear = list("buzzes") - - possible_weapons = list(/obj/item/weapon/gun/projectile/boltshot,/obj/item/weapon/gun/projectile/boltshot/shotgun_preload,/obj/item/weapon/gun/projectile/suppressor,/obj/item/weapon/gun/projectile/binary_rifle) - possible_grenades = list(/obj/item/weapon/grenade/splinter) - - death_sounds = list('code/modules/halo/sounds/forerunner/sentDeath1.ogg','code/modules/halo/sounds/forerunner/sentDeath2.ogg','code/modules/halo/sounds/forerunner/sentDeath3.ogg','code/modules/halo/sounds/forerunner/sentDeath4.ogg') - -/mob/living/simple_animal/hostile/knight/doRoll(var/rolldir,var/roll_dist,var/roll_delay) - var/turf/endpoint = null - var/turf/step_to = loc - for(var/i = 0,i < roll_dist,i++) - step_to = get_step(step_to,rolldir) - if(step_to.density == 0) - endpoint = step_to - if(endpoint && endpoint.density == 0) - new /obj/effect/knightroll_tp(loc) - new /obj/effect/knightroll_tp (endpoint) - forceMove(endpoint) - -/mob/living/simple_animal/hostile/knight/death() - new /obj/effect/knightroll_tp (loc) - qdel(src) - -/mob/living/simple_animal/hostile/knight/cqb - name = "Knight (CQB)" - possible_weapons = list(/obj/item/weapon/gun/projectile/boltshot/shotgun_preload) - -/mob/living/simple_animal/hostile/knight/assault - name = "Knight (Assault)" - possible_weapons = list(/obj/item/weapon/gun/projectile/suppressor) - -/mob/living/simple_animal/hostile/knight/sniper - name = "Knight (Sniper)" - possible_weapons = list(/obj/item/weapon/gun/projectile/binary_rifle) \ No newline at end of file diff --git a/code/modules/halo/Forerunner/knight.dmi b/code/modules/halo/Forerunner/knight.dmi deleted file mode 100644 index d239c77f2153881e1c089256af1e1c5dab9795df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1146 zcmV-=1cm#FP)lW zO0NSDJZ|sR*~5dHse}|@Zd3RyEx|KwX1M=);Wd#@I>OD}mtd)U;~q>@DoIy2fqQ9X z3JOm(VPQlgaVPVSDj%4zQd!1{jD(S?5JDXCuNrT0BbK}cb)G54gOdhOQPoMsgu;Si z6~Xg~nL&hz-@N7|{u9PrFJP?lxIn12pa?|>5Evebyd?xgAs9$G3W4GJbDr^>?q>Em zPvi^u0$9RGk~{c;;VEp?^&ZdTpa)fTa2Jp9AIzZWmlqGC8K5D6;}&Dm(hBg1u-4mg zq_fe<^!T*Kv|)ErTgFJ1A9>K z{#6P=+fpBwvu_OnZ*RTB){~-Pp5t=fwBW0EGkud?ra2mWH|8E0Zl$}X*R0B<2VM+Cuv!wqg$H7saCMnx2r3q_At zeu0&6RV752Vz(e6jMJraIT0YIu~(2-4z*K[src] is temporarily out of charge, please wait a moment.") - -//monitor stun beam - -/obj/item/projectile/beam/monitor_stun - name = "monitor stun beam" - icon_state = "stun" - - check_armour = "energy" - sharp = 0 //not a laser - taser_effect = 1 - agony = 40 - weaken = 2 - damage_type = STUN - accuracy = 2 - - muzzle_type = /obj/effect/projectile/stun/muzzle - tracer_type = /obj/effect/projectile/stun/tracer - impact_type = /obj/effect/projectile/stun/impact - -/obj/item/weapon/gun/energy/laser/monitor_beam_stun - name = "Monitor Stun Beam" - self_recharge = 1 - recharge_time = 0 - fire_delay = 30 - - fire_sound = 'code/modules/halo/sounds/Spartan_Laser_Beam_Shot_Sound_Effect.ogg' - projectile_type = /obj/item/projectile/beam/monitor_stun - -/obj/item/weapon/gun/energy/laser/monitor_beam_stun/handle_click_empty(mob/user) - if(user) - to_chat(user,"[src] is temporarily out of charge, please wait a moment.") - -//angery monitor - -/mob/living/simple_animal/hostile/monitor - name = "Monitor" - desc = "An incredibly advanced AI made from ancient alien technology." - faction = "Forerunner" - icon = 'code/modules/halo/Forerunner/Monitor.dmi' - icon_state = "monitor" - icon_living = "monitor" - icon_dead = "monitor_dead" - universal_speak = 1 - universal_understand = 1 - ranged = 1 - speak_chance = 7 - health = 16777216 - maxHealth = 16777216 - resistance = 1000 - feral = 1 - var/npc_use_stunbeam = 1 - var/list/speak_friendly = list("Let's see now!","Hmm, ah!","Oh, that's a good idea!","Hah I am a genius!","I am a genius hahahaha!","Ah!") - var/list/speak_angry = list(\ - "You have endangered my installation!",\ - "Your recklessness threatens us all!",\ - "I cannot believe my makers let you live!",\ - "I see now. Truly we had no other choice!",\ - "The installation... it is mine!",\ - "You do not belong here!",\ - "We must enact containment protocols at once! No more delay!") - var/list/emote_see_friendly = list("bobs gently","glows brightly for a moment","pulses","shines its eyebeam around it") - var/list/emote_see_angry = list("emits a shower of sparks","twitches and vibrates",) - var/list/emote_hear_friendly = list("chuckles","hums a tuneless song",) - var/list/emote_hear_angry = list("screams in rage","screams in frustration") - - var/list/attack_response_friendly = list("Oh dear!","Oh well!","Are you really sure that's good idea?","Foolish.","How primitive.") - var/list/attack_response_angry = list("I will save your head!","I will dispose of you!","Impertinence!") - - var/last_pain_scream = 0 - var/obj/item/weapon/gun/energy/laser/monitor_beam/monitorbeam - var/obj/item/weapon/gun/energy/laser/monitor_beam_stun/monitorbeamstun - var/obj/item/weapon/gun/selected_gun - -/mob/living/simple_animal/hostile/monitor/friendly - feral = 0 - -/mob/living/simple_animal/hostile/monitor/New() - . = ..() - monitorbeam = new() - monitorbeamstun = new() - selected_gun = monitorbeamstun - name = monitor_name() - - src.verbs += /mob/living/simple_animal/hostile/monitor/proc/enable_stunbeam - src.verbs += /mob/living/simple_animal/hostile/monitor/proc/deactivate_weapon - - if(feral) - speak = speak_friendly + speak_angry - emote_see = emote_see_friendly + emote_see_angry - emote_hear = emote_hear_friendly + emote_hear_angry - else - speak = speak_friendly - emote_see = emote_see_friendly - emote_hear = emote_hear_friendly - -/mob/living/simple_animal/hostile/monitor/Life() - //for admins to force a switch between deathbeam and stunbeam - if(npc_use_stunbeam) - if(selected_gun == monitorbeam) - enable_stunbeam() - - else if(selected_gun == monitorbeamstun) - enable_deathbeam() - - . = ..() - -/mob/living/simple_animal/hostile/monitor/proc/enable_deathbeam() - set category = "IC" - set name = "Switch to Death Beam" - - selected_gun = monitorbeam - to_chat(src, "You switch to Death Beam.") - - src.verbs -= /mob/living/simple_animal/hostile/monitor/proc/enable_deathbeam - src.verbs += /mob/living/simple_animal/hostile/monitor/proc/enable_stunbeam - src.verbs |= /mob/living/simple_animal/hostile/monitor/proc/deactivate_weapon - -/mob/living/simple_animal/hostile/monitor/proc/deactivate_weapon() - set category = "IC" - set name = "Power down weapons" - - selected_gun = null - to_chat(src, "You power down your weapons.") - src.verbs -= /mob/living/simple_animal/hostile/monitor/proc/deactivate_weapon - -/mob/living/simple_animal/hostile/monitor/proc/enable_stunbeam() - set category = "IC" - set name = "Switch to Stun Beam" - - selected_gun = monitorbeamstun - to_chat(src, "You switch to Stun Beam.") - - src.verbs += /mob/living/simple_animal/hostile/monitor/proc/enable_deathbeam - src.verbs -= /mob/living/simple_animal/hostile/monitor/proc/enable_stunbeam - src.verbs |= /mob/living/simple_animal/hostile/monitor/proc/deactivate_weapon - -/mob/living/simple_animal/hostile/monitor/IsAdvancedToolUser() - return 1 - -/mob/living/simple_animal/hostile/monitor/RangedAttack(var/atom/attacked) - selected_gun.Fire(attacked, src) - -/mob/living/simple_animal/hostile/monitor/bullet_act(var/obj/item/projectile/Proj) - . = ..() - if(last_pain_scream + 6 SECONDS < world.time && !src.client) - if(feral) - src.say(pick(attack_response_angry + attack_response_friendly)) - else - src.say(pick(attack_response_friendly)) - last_pain_scream = world.time - -/mob/living/simple_animal/hostile/monitor/FindTarget() - if(!feral) - return null - return ..() - -/mob/living/simple_animal/hostile/monitor/get_equivalent_body_part(var/def_zone) - return "chassis" - -/mob/living/simple_animal/hostile/monitor/death(gibbed, deathmessage = "explodes!", show_dead_message = 1) - var/turf/T = get_turf(src) - . = ..(gibbed, deathmessage, show_dead_message) - explosion(T, 2, 4, 6, 8, adminlog = 0) - new /obj/effect/gibspawner/robot(T) - -/mob/living/simple_animal/hostile/monitor/bullet_act(var/obj/item/projectile/P, var/def_zone) - if(istype(P, /obj/item/projectile/beam/sentinel)) - return PROJECTILE_FORCE_MISS - - if(istype(P, /obj/item/projectile/beam/monitor)) - return PROJECTILE_FORCE_MISS - - if(istype(P, /obj/item/projectile/beam/monitor_stun)) - return PROJECTILE_FORCE_MISS - - return ..() - -// random monitor name - -/proc/monitor_name() - var/list/values = list(\ - "Penitent",\ - "Vigilant",\ - "Guilty",\ - "Defensive",\ - "Watchful",\ - "Silent",\ - "Watchful",\ - "Alert",\ - "Dutiful",\ - "Obedient",\ - "Magisterial",\ - "Obedient",\ - "Helpful",\ - "Facilitating",\ - "Subservient",\ - "Steady",\ - "Mindful",\ - "Obedient",\ - "Faithful",\ - "Loyal",\ - "Constant",\ - "Exuberant",\ - "Truthful",\ - "Abject",\ - "Despondent",\ - "Grieving",\ - "Anxious",\ - "Hopeless",\ - "Indifferent",\ - "Isolated",\ - "Jealous",\ - "Judgemental",\ - "Lonely",\ - "Lost",\ - "Erratic",\ - "Condemned",\ - "Conceited",\ - "Envious",\ - "Pitiful",\ - "Shy",\ - "Repressive",\ - "Resigned",\ - "Conflicted",\ - "Vain",\ - "Grateful",\ - "Elevated",\ - "Content",\ - "Euphoric",\ - "Volatile",\ - "Amplified",\ - "Inverse",\ - "Belligerent",\ - "Ebullient",\ - "Tragic",\ - "Static",\ - "Alternate",\ - "Quiescent",\ - "Trustworthy") - - var/list/nouns = list(\ - "Tangent",\ - "Spark",\ - "Sign",\ - "Carillon",\ - "Keeper",\ - "Guardian",\ - "Companion",\ - "Overseer",\ - "Shield",\ - "Protector",\ - "Custodian",\ - "Neuron",\ - "Parallel",\ - "Sentinel",\ - "Witness",\ - "Struct",\ - "Testament",\ - "Analogue",\ - "Rhetoric",\ - "Phase",\ - "Operator",\ - "Resolution",\ - "Vector",\ - "Pulse",\ - "Factor",\ - "Gauge",\ - "Creed",\ - "Parallel",\ - "Junction",\ - "Receiver",\ - "Counter",\ - "Signal",\ - "Transmission",\ - "Prism",\ - "Commons",\ - "Switch",\ - "Handover",\ - "Circuit",\ - "Harmonic",\ - "Carrier",\ - "Ripple",\ - "Register",\ - "Shift",\ - "Bridge",\ - "Circuit",\ - "Decibel",\ - "Watcher") - - var/number - if(prob(33)) - number = 7 ** rand(1,5) - else - switch(pick(1,2,3,4)) - if(1) - number = rand(1,9) - number = "00[number]" - if(2) - number = rand(10,99) - number = "0[number]" - if(3) - number = rand(100,999) - if(4) - number = rand(1000,9999) - - return "[number]-[pick(values)] [pick(nouns)]" diff --git a/code/modules/halo/Forerunner/sentinel.dm b/code/modules/halo/Forerunner/sentinel.dm deleted file mode 100644 index 0b06b7c48644d..0000000000000 --- a/code/modules/halo/Forerunner/sentinel.dm +++ /dev/null @@ -1,149 +0,0 @@ - -//---------------------------- -// Gold laser beam -//---------------------------- -/obj/effect/projectile/laser_gold/tracer - icon_state = "beam_gold" - -/obj/effect/projectile/laser_gold/muzzle - icon_state = "muzzle_gold" - -/obj/effect/projectile/laser_gold/impact - icon_state = "impact_gold" - - -//sentinel laser beam - -/obj/item/projectile/beam/sentinel - name = "sentinel beam" - icon_state = "beam_blue" - - damage = 10 - shield_damage = 30 - damage_type = BURN - check_armour = "energy" - armor_penetration = 20 - tracer_delay_time = 2.5 - - muzzle_type = /obj/effect/projectile/laser_gold/muzzle - tracer_type = /obj/effect/projectile/laser_gold/tracer - impact_type = /obj/effect/projectile/laser_gold/impact - -/obj/item/weapon/gun/energy/laser/sentinel_beam - name = "Sentinel Beam" - desc = "A sustained fire beam weapon. It seems to self-recharge using an internal reactor." - icon = 'code/modules/halo/Forerunner/forerunner_weapons.dmi' - icon_state = "sentinel_beam" - self_recharge = 1 - recharge_time = 1 - max_shots = 500 - fire_delay = 20 - burst_delay = 1.5 - burst = 7 - charge_meter = 0 - - fire_sound = 'code/modules/halo/sounds/forerunner/sentFire.ogg' - - projectile_type = /obj/item/projectile/beam/sentinel - -/obj/item/weapon/gun/energy/laser/sentinel_beam/handle_click_empty(mob/user) - if(user) - to_chat(user,"[src] is temporarily out of charge, please wait a moment.") - - -//Found as random loot in forerunner areas (Utilise loot distributor system)// -/obj/item/weapon/gun/energy/laser/sentinel_beam/detached - burst = 10 - fire_delay = 10 - recharge_time = 25 - max_shots = 100 - one_hand_penalty = 3 - - -// AI pathing landmark - -/obj/effect/landmark/assault_target/sentinel - name = "sentinel assault target marker" - -// Mob - -/mob/living/simple_animal/hostile/sentinel - name = "Sentinel" - desc = "An automated defence drone made of advanced alien technology." - faction = "Forerunner" - icon = 'code/modules/halo/Forerunner/Sentinel.dmi' - icon_state = "sentinel" - icon_living = "sentinel" - icon_dead = "sentinel_dead" - universal_speak = 1 - universal_understand = 1 - response_harm = "batters" - health = 150 - maxHealth = 150 - ranged = 1 - move_to_delay = 5 - resistance = 15 - speak_chance = 1 - speak = list() - emote_see = list("extends and retracts its manipulator arms","scans its body for damage","scans the environment") - emote_hear = list("buzzes") - var/obj/item/weapon/gun/energy/laser/sentinel_beam/sentinel_beam - assault_target_type = /obj/effect/landmark/assault_target/sentinel - - death_sounds = list('code/modules/halo/sounds/forerunner/sentDeath1.ogg','code/modules/halo/sounds/forerunner/sentDeath2.ogg','code/modules/halo/sounds/forerunner/sentDeath3.ogg','code/modules/halo/sounds/forerunner/sentDeath4.ogg') - -/mob/living/simple_animal/hostile/sentinel/New() - . = ..() - if(isnull(sentinel_beam)) - sentinel_beam = new(src) - set_light(8) - -/mob/living/simple_animal/hostile/sentinel/Life() - . = ..() - if(stat != DEAD && health < maxHealth) - health++ - -/mob/living/simple_animal/hostile/sentinel/RangedAttack(var/atom/attacked) - sentinel_beam.afterattack(attacked, src) - -/mob/living/simple_animal/hostile/sentinel/death(gibbed, deathmessage = "crashes into the ground!", show_dead_message = 1) - new /obj/effect/gibspawner/robot(src.loc) - . = ..(gibbed, deathmessage, show_dead_message) - -//how do i shoot gun -/mob/living/simple_animal/hostile/sentinel/IsAdvancedToolUser() - return 1 - -/mob/living/simple_animal/hostile/sentinel/get_equivalent_body_part(var/def_zone) - return "chassis" - -/mob/living/simple_animal/hostile/sentinel/bullet_act(var/obj/item/projectile/P, var/def_zone) - if(istype(P, /obj/item/projectile/beam/sentinel) || istype(P, /obj/item/projectile/beam/monitor) || istype(P, /obj/item/projectile/beam/monitor_stun) ) - if(P.firer) - if(P.firer.faction == faction) - return PROJECTILE_FORCE_MISS - else - return PROJECTILE_FORCE_MISS - - return ..() - -/mob/living/simple_animal/hostile/sentinel/major - name = "Sentinel Major" - desc = "An automated defence drone made of advanced alien technology, this one seems to be a more advanced variant." - icon_state = "sentinel_major" - icon_living = "sentinel_major" - icon_dead = "sentinel_major_dead" - health = 200 - maxHealth = 200 - -/mob/living/simple_animal/hostile/sentinel/player_sentinel - name = "Sentinel" - desc = "An automated defence drone made of advanced alien technology. This one seems to posses some higher-thought functions." - health = 200 - maxHealth = 200 - resistance = 10 - -/mob/living/simple_animal/hostile/sentinel/player_sentinel/New() - sentinel_beam = new /obj/item/weapon/gun/energy/laser/sentinel_beam/detached (src) - //This beam is balanced for player use, so player sentinel gets one - . = ..() \ No newline at end of file diff --git a/code/modules/halo/Forerunner/sentinel_kit.dm b/code/modules/halo/Forerunner/sentinel_kit.dm deleted file mode 100644 index b22c1d85e02e6..0000000000000 --- a/code/modules/halo/Forerunner/sentinel_kit.dm +++ /dev/null @@ -1,27 +0,0 @@ - -/obj/item/sentinel_kit - name = "Unknown Device" - desc = "The shape of this device suggests it is made to be placed against the head of... A human being? Looks like other species are supported however." - icon = 'code/modules/halo/Forerunner/sentinel_kit.dmi' - icon_state = "sentinel_kit" - -/obj/item/sentinel_kit/proc/convert_person(var/mob/living/carbon/M,var/mob/user) - if(!M.client || !M.ckey) - to_chat(user,"[src] seems to do nothing, Perhaps it needs a target with a consciousness?") - return - user.visible_message("[user] places [src] against [M]'s head.\n[src] starts to glow...") - if(do_after(user, 10 SECONDS, M, 1, 1,INCAPACITATION_DEFAULT,1)) - M.visible_message("[M] falls limp, their body falling into a catatonic state.") - var/mob/living/simple_animal/hostile/sentinel/player_sentinel = new /mob/living/simple_animal/hostile/sentinel/player_sentinel(M.loc) - player_sentinel.visible_message("[src] glows as it reassembles itself into a functional sentinel") - player_sentinel.ckey = M.ckey - player_sentinel.faction = M.faction - to_chat(player_sentinel,"Your mind is ripped from the form it once occupied, then placed in an unfamiliar chassis. A moment of uncertainty passes, then a rush of information fills your mind. The secrets of the Forerunners revealed, the nature of the Flood... (You are expected to maintain allegiance with your previous faction, however, it is recommended that your character and personality be somewhat modified by this experience.)") - M.drop_from_inventory(src) - qdel(src) - -/obj/item/sentinel_kit/attack(var/mob/living/carbon/M, var/mob/user) - if(user.a_intent == "help") - convert_person(M,user) - else - . = ..() \ No newline at end of file diff --git a/code/modules/halo/Forerunner/sentinel_kit.dmi b/code/modules/halo/Forerunner/sentinel_kit.dmi deleted file mode 100644 index 34e9dff139a3bdf18e5269d69ae217a4631dcc92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 429 zcmV;e0aE^nP)lNJuX8%6I?(00DGTPE!Ct=GbNc0044&R9JLGWpiV4X>fFDZ*Bkpc$`yK zaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainGj7_;XGg33tGfF@*23*A@i6yB( zrc!ZgUP)$NYEFE1W{DCPXG&&KF;Li$i!-e#F*g;$R#tHJa{-$U04O&d7Ob7%R{#J2 zn@L1LR5*?8(a{cqFboCI-3`h%S5T(^|Esn$#%zq>qcL0_Io!0xm@{YoJ-{)sJLdB( zoa-Cd_X`XbV-E=tBoRWOY21z^#D{{SJOc@#OQYa?^1*w6nK9D@EY};F9wjLND|0M8 z>ypv-2+ next_sentinel_spawn) - spawn_sentinel() - - if(sentinel_check_index > all_sentinels.len) - sentinel_check_index = 1 - if(all_sentinels.len > 0) - var/mob/living/simple_animal/hostile/sentinel/S = all_sentinels[sentinel_check_index] - if(!S || S.stat == DEAD) - all_sentinels.Cut(sentinel_check_index, sentinel_check_index + 1) - reset_spawn_time() - sentinel_check_index++ - -/obj/structure/sentinel_spawner/proc/spawn_sentinel() - flick("spawner_active", src) - var/mob/living/simple_animal/hostile/sentinel/S = new(src.loc) - S.faction = sentinel_faction - all_sentinels.Add(S) - src.visible_message("\icon[src] [src] releases \the[S]!") - reset_spawn_time() - -/obj/structure/sentinel_spawner/proc/reset_spawn_time() - next_sentinel_spawn = world.time + sentinel_respawn_time - -/obj/structure/sentinel_spawner/respawn30sec - sentinel_respawn_time = 30 SECONDS \ No newline at end of file diff --git a/code/modules/halo/Forerunner/species/knight/knight.dm b/code/modules/halo/Forerunner/species/knight/knight.dm deleted file mode 100644 index 5f5fa5ab1f59f..0000000000000 --- a/code/modules/halo/Forerunner/species/knight/knight.dm +++ /dev/null @@ -1,204 +0,0 @@ - -#define KNIGHT_TELEPORT_ANIM_TIME 2 -#define KNIGHT_DEATH_TP_DELAY 3 SECONDS - -/datum/species/knight - name = "Knight" - name_plural = "Knights" - blurb = "???" - - //flesh_color = "#4A4A64" - //blood_color = "#AB36AF" - icobase = 'code/modules/halo/Forerunner/species/knight/knight.dmi' //The DMI needed modification to fit the usual format (see other species' dmis) - deform = 'code/modules/halo/Forerunner/species/knight/knight.dmi' - icon_template = 'code/modules/halo/Forerunner/species/knight/knight_template.dmi' - - damage_overlays = 'code/modules/halo/Forerunner/species/knight/knight_dam.dmi' - damage_mask = 'code/modules/halo/Forerunner/species/knight/knight_dam.dmi' - blood_mask = 'code/modules/halo/Forerunner/species/knight/knight_blood.dmi' - - flags = NO_MINOR_CUT | NO_EMBED | NO_SCAN | NO_PAIN | NO_SLIP | NO_POISON - - pixel_offset_x = -26 - item_icon_offsets = list(list(26,3),list(26,0),null,list(17,2),null,null,null,list(31,2),null) - inhand_icon_offsets = list(list(5,0),list(-7,0),null,list(2,0),null,null,null,list(2,0),null) - inter_hand_dist = 14 - roll_distance = 3 - dodge_roll_delay = DODGE_ROLL_BASE_COOLDOWN - 2 SECOND - - total_health = 300 - radiation_mod = 0 - virus_immune = 1 - breath_type = null - poison_gases = list() - - spawn_flags = SPECIES_IS_RESTRICTED - appearance_flags = HAS_SKIN_TONE - brute_mod = 1 - burn_mod = 1 - pain_mod = 0 - slowdown = -0.2 - explosion_effect_mod = 0 - can_force_door = 1 - - warning_low_pressure = -1 - hazard_low_pressure = -1 - cold_level_1 = 260 - cold_level_2 = 200 - cold_level_3 = 120 - - death_message = "dims, power flowing out of them..." - knockout_message = "has been knocked unconscious!" - halloss_message = "freezes up, and falls to the ground..." - halloss_message_self = "Sensory inputs overloaded..." - - inherent_verbs = list(/mob/living/proc/tele_evac) - - pain_scream_sounds = list(\ - 'code/modules/halo/sounds/species_pain_screams/knightscream.ogg', - 'code/modules/halo/sounds/species_pain_screams/knightscream2.ogg', - 'code/modules/halo/sounds/species_pain_screams/knightscream3.ogg' - ) - - has_organ = list( - "elegiast" = /obj/item/organ/internal/knight_core, - BP_BRAIN = /obj/item/organ/internal/brain/knight - ) - - has_limbs = list( - BP_CHEST = list("path" = /obj/item/organ/external/chest/knight), - BP_GROIN = list("path" = /obj/item/organ/external/groin/knight), - BP_HEAD = list("path" = /obj/item/organ/external/head/knight), - BP_L_ARM = list("path" = /obj/item/organ/external/arm/knight), - BP_R_ARM = list("path" = /obj/item/organ/external/arm/right/knight), - BP_L_LEG = list("path" = /obj/item/organ/external/leg/knight), - BP_R_LEG = list("path" = /obj/item/organ/external/leg/right/knight), - BP_L_HAND = list("path" = /obj/item/organ/external/hand/knight), - BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/knight), - BP_L_FOOT = list("path" = /obj/item/organ/external/foot/knight), - BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/knight) - ) - -/datum/species/knight/handle_death_check(var/mob/living/carbon/human/h) - . = ..() - if(.) - return - var/obj/item/organ/core = h.internal_organs_by_name["elegiast"] - if(!core || core.damage == core.max_damage || (core.status & ORGAN_DEAD)) - return TRUE - return FALSE - -/datum/species/knight/handle_death(var/mob/living/carbon/human/H) - H.visible_message("[H] begins to disintegrate as it starts an emergency translocation jump...") - H.Stun(KNIGHT_DEATH_TP_DELAY) - sleep(KNIGHT_DEATH_TP_DELAY) - H.do_tele_evac(null) - -/datum/species/knight/handle_dodge_roll(var/mob/roller,var/rolldir,var/roll_dist,var/roll_delay) - . = 1 //We don't want to be able to do normal rolls - var/turf/endpoint = null - var/turf/step_to = roller.loc - for(var/i = 0,i < roll_dist,i++) - step_to = get_step(step_to,rolldir) - if(step_to.density == 0) - endpoint = step_to - if(endpoint && endpoint.density == 0) - new /obj/effect/knightroll_tp(roller.loc) - new /obj/effect/knightroll_tp (endpoint) - roller.forceMove(endpoint) - -/datum/species/knight/get_random_name(var/gender) - return pick(GLOB.yanmee_nicknames) - -/datum/species/knight/handle_post_spawn(var/mob/living/carbon/human/H) - ..() - H.name = "Knight [rand(0,999)] \"[H.name]\"" - H.real_name = H.name - -/datum/species/knight/apply_species_name_formatting(var/to_format_name) - return "Knight [rand(1,999)] \"[to_format_name]\"" - -/obj/effect/knightroll_tp - name = "slipspace teleport" - desc = "a teleportion portal" - icon = 'code/modules/halo/Forerunner/species/knight/knight_armour.dmi' - icon_state = "teleport" - var/die_at - -/obj/effect/knightroll_tp/Initialize() - . = ..() - die_at = world.time + KNIGHT_TELEPORT_ANIM_TIME - GLOB.processing_objects += src - -/obj/effect/knightroll_tp/process() - if(world.time >= die_at) - qdel(src) - return - -/obj/item/organ/internal/brain/knight - name = "knight durance" - desc = "Co-ordinates combat processing." - icon = 'code/modules/halo/Forerunner/species/knight/knight.dmi' - icon_state = "knight_durance" - robotic = ORGAN_ROBOT - -/obj/item/organ/internal/knight_core - name = "knight elegiast" - desc = "Supplies the system with power." - icon = 'code/modules/halo/Forerunner/species/knight/knight.dmi' - icon_state = "knight_elegiast" - robotic = ORGAN_ROBOT - max_damage = 800 - -/obj/item/organ/external/chest/knight - robotic = ORGAN_ROBOT - use_robotic_sprites = 0 - -/obj/item/organ/external/groin/knight - robotic = ORGAN_ROBOT - use_robotic_sprites = 0 - -/obj/item/organ/external/head/knight - eye_icon = "face" - eye_icon_location = 'code/modules/halo/Forerunner/species/knight/knight.dmi' - robotic = ORGAN_ROBOT - use_robotic_sprites = 0 - -/obj/item/organ/external/arm/knight - robotic = ORGAN_ROBOT - use_robotic_sprites = 0 - -/obj/item/organ/external/arm/right/knight - robotic = ORGAN_ROBOT - use_robotic_sprites = 0 - -/obj/item/organ/external/leg/knight - robotic = ORGAN_ROBOT - use_robotic_sprites = 0 - -/obj/item/organ/external/leg/right/knight - robotic = ORGAN_ROBOT - use_robotic_sprites = 0 - -/obj/item/organ/external/hand/knight - robotic = ORGAN_ROBOT - use_robotic_sprites = 0 - -/obj/item/organ/external/hand/right/knight - robotic = ORGAN_ROBOT - use_robotic_sprites = 0 - -/obj/item/organ/external/foot/knight - robotic = ORGAN_ROBOT - use_robotic_sprites = 0 - -/obj/item/organ/external/foot/right/knight - robotic = ORGAN_ROBOT - use_robotic_sprites = 0 - -/mob/living/carbon/human/knight/New(var/new_loc) - . = ..(new_loc,"Knight") - faction = "Forerunner" - -#undef KNIGHT_DEATH_TP_DELAY -#undef KNIGHT_TELEPORT_ANIM_TIME diff --git a/code/modules/halo/Forerunner/species/knight/knight.dmi b/code/modules/halo/Forerunner/species/knight/knight.dmi deleted file mode 100644 index e2d1b87d18f72183cb7ce3f89d5f82d488f3d223..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3985 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 need one hand free to use [src.name]") - - h.update_inv_l_hand() - h.update_inv_r_hand() - -/obj/item/clothing/gloves/knight_gauntlets/ui_action_click() - var/mob/living/carbon/human/h = loc - if(istype(h)) - toggle_blade(usr) \ No newline at end of file diff --git a/code/modules/halo/Forerunner/species/knight/knight_armour.dmi b/code/modules/halo/Forerunner/species/knight/knight_armour.dmi deleted file mode 100644 index c1a7d1396c226d7cd4a90b65bb6ef4bd88344936..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1826 zcmV+-2i^FIP)V=-0C=2@k--jvFbsyz+fyuXH3kym&5MB;4)O|QK;5Qe zGh3DT_A)%^L4@?u{`vkkZDV#Qj%CI2Q%N7-yt0PvS+-3m8B~XIEOr?s5|ohmE9 zsJ}Oy0X2wZ4U{fI4d~@@2pVqI&4A;jI?((XRJ7kVMrtg68F#-%GeTzZLQ z!xz}lOO9swa-G2joG|kau`zbF?~lYFp5dLx^A9_Ie<$TO_$mCo%m$Uo*Wu*3XcG`&_$e&4K{^Oa-NSU9S&WOe0HcRRJ3tTw zK@bE%5ClOG1VNCaQIlNlY&AidNH3PE*)Aul4xBflnQ;8JH0{L7c17E=yKrKU4PWpr zy+IGQ_&-T=DgF0V1hiTg6vfZ%%$8 z<|V6ukW~#er`F`^mSvrB^|*j0?LZb^wK{L^XkvHS_>R)=)ZWfei}fgdkE6#0wAXL% zz)D!o+jAE*Gci3ZdnbTQe^~%VbtF@b3$g9>62T21(~|`x@b+&HgJ$>4fBKE9Zv)6Ga%$-^>{@1=-Dz{{r~0|s?m6wcK;H&{Iq9U$03`9V%CDa; zk{70JH#$V1ZvsfjEj>yj=4ZR}XUYyb1{%2--ly)MV?bwWnib-Rv}%G0f*=Tjq+t2% zDeuP1@+NQH`_o|RKi(DXL&!((VLtc1{#vvTAv13=e_BlbDcXmS@X-r`zy0!#!O;5> z_Ov<(2m4g5*bCP0>MxpQn01VIo4K@bE%5ClOG1VIo4K@bEfExNm+ zXd7a@IitMyzS8Fr--Z_)GfFfjN8ce~w6eC=Q z;q~blf*ET&~=~b6Bnt$ z@n(}wr?`O+7BIZ|lQ8+mTX(Twkm_uD0e5ec=?rOZPdF8)pSe3PUSdp`0daDZOy7?T z%dpO-cPPGnn@r!23cIEH8qkn4NalKS&{w8RR(Xk_}n)ujJqGWyiCuZX#Oq7 zY4zNRz5>NxgfcyMqIFVymq?kOH~MTfONA@3OwXN%2|ErmW}<~krss}3W{0}Qvnwzl z(-8zg5ClOG1VIo4K@bE%kRO~;zcPaK!Rn_tMngrp1so3gic%@i;b_QONbGPh*lvs9 zbQHDFNN`h{DwA1(qVB45vo?6o*N1C^;D05~k(*&;@K$IrdM?V~>1b_`-^bPU;2RXw z$2X&>iKszt6UIGUTp!aR7|&8Pn2OV+LCzqo4ma!H;FdQC6Yo_I?oMHIWNVN&ORC!i zx|ms#-QecUTpI94FqkukF<8yddgfWI#GRZ^2P?95u<~*p?C%t)vgV_kJJyJ~v|~nt z`SW4>UHpL~_eWcUqssAYZIK+!43bAPoP%oGvvJ2(^O`EzjtA+vN_?&`Qr2yKV6q)i zSDAhGdHR&oItibX^poc#yfMhyud?!}fTyk*0MF_w$+Notj$B=DqsGf=y@t+-(apIvAV`1vvVd0l5670O^t9G2 Q#sB~S07*qoM6N<$g7x8MIsgCw diff --git a/code/modules/halo/Forerunner/species/knight/knight_blood.dmi b/code/modules/halo/Forerunner/species/knight/knight_blood.dmi deleted file mode 100644 index e4e3df54782f637ccc7c84a1bb521500a2098f0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 361 zcmV-v0ha!WP)trodXg_%(}l863|_lvpi2Jueel^vSMFtM z0002^7sV{s`u+pADcj8s0000S<}}N-zW+e>81uZ@fnPBIVQmbbD<_5g00000NkvXX Hu0mjf2St@# diff --git a/code/modules/halo/Forerunner/species/knight/knight_dam.dmi b/code/modules/halo/Forerunner/species/knight/knight_dam.dmi deleted file mode 100644 index 2a8c3f96dfc36e0bbb05250f1347809e08877d77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRF$egBxB}_rRkpW)6k|z{UoeBi zvm0qZj%QU!M2SmkadJ^+K}lwQ9s@(goZzs6qSEhQf(t%=eWK;9t99R9R)z4*}Q$iB}g@jRF$egBxE?rgAkBMU3XscK666=m z;PC858jzDx6%tY6l3JWxlvz-cnV-kNP%$Sste~j$`^4^2yh7rH$&*Ju+FoaTTQ^J< zjrkjMK#hrE&H)KgBeQ!if%frxx;TbtOiWIYU|rl$!@$7gz`&RgYMKR[src] pulses, repairing nearby electronics and armour") - - . = ..() - -/mob/living/simple_animal/hostile/watcher/doRoll(var/rolldir,var/roll_dist,var/roll_delay) - var/turf/endpoint = null - var/turf/step_to = loc - for(var/i = 0,i < roll_dist,i++) - step_to = get_step(step_to,rolldir) - if(step_to.density == 0) - endpoint = step_to - if(endpoint && endpoint.density == 0) - new /obj/effect/knightroll_tp(loc) - new /obj/effect/knightroll_tp (endpoint) - forceMove(endpoint) - -/mob/living/simple_animal/hostile/watcher/death() - new /obj/effect/knightroll_tp (loc) - qdel(src) - diff --git a/code/modules/halo/Forerunner/watcher.dmi b/code/modules/halo/Forerunner/watcher.dmi deleted file mode 100644 index 942e1affd6a793316ff19c26f36b900effd90ba0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7046 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 q@WFY9tzP} diff --git a/code/modules/halo/forerunner/turfs/floor.dm b/code/modules/halo/forerunner/turfs/floor.dm deleted file mode 100644 index 8887a1f3b72a8..0000000000000 --- a/code/modules/halo/forerunner/turfs/floor.dm +++ /dev/null @@ -1,42 +0,0 @@ - -/turf/simulated/floor/forerunner_alloy - name = "Alloy Flooring" - desc = "Floor made of an advanced alien alloy." - icon = 'code/modules/halo/forerunner/turfs/floors.dmi' - icon_state = "floortile" - - heat_capacity = 17000 - - initial_flooring = /decl/flooring/forerunner_alloy - -/decl/flooring/forerunner_alloy - name = "Alloy Flooring" - desc = "Floor made of an advanced alien alloy." - icon = 'code/modules/halo/forerunner/turfs/floors.dmi' - icon_base = "floortile" - flags = TURF_ACID_IMMUNE - build_type = null - build_cost = 2 - build_time = 30 - apply_thermal_conductivity = 0.025 - apply_heat_capacity = 325000 - -/turf/simulated/floor/forerunner_alloy/old - name = "Alloy Flooring" - desc = "Floor made of an advanced alien alloy." - icon = 'code/modules/halo/forerunner/turfs/floors.dmi' - icon_state = "floortile_old" - - initial_flooring = /decl/flooring/forerunner_alloy/old - -/decl/flooring/forerunner_alloy/old - name = "Alloy Flooring" - desc = "Floor made of an advanced alien alloy." - icon = 'code/modules/halo/forerunner/turfs/floors.dmi' - icon_base = "floortile" - flags = TURF_ACID_IMMUNE - build_type = null - build_cost = 2 - build_time = 30 - apply_thermal_conductivity = 0.025 - apply_heat_capacity = 325000 \ No newline at end of file diff --git a/code/modules/halo/forerunner/turfs/floors.dmi b/code/modules/halo/forerunner/turfs/floors.dmi deleted file mode 100644 index f3a9e98f8a01456199a2f8b0df397cb60a4f35ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3225 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 diff --git a/code/modules/halo/forerunner/turfs/materials.dm b/code/modules/halo/forerunner/turfs/materials.dm deleted file mode 100644 index bea0fb85cf701..0000000000000 --- a/code/modules/halo/forerunner/turfs/materials.dm +++ /dev/null @@ -1,41 +0,0 @@ - - - -/* NANOLAMINATE */ - -/material/forerunner_alloy - name = "forerunner alloy" - display_name = "forerunner alloy" - - shard_can_repair = 0 - - icon_base = "forerunner_alloy" - icon_reinf = "reinf_over" - stack_origin_tech = list(TECH_MATERIAL = 5) - - cut_delay = 5 MINUTES - - melting_point = 17273 - - brute_armor = 20 - burn_armor = 20 - - integrity = 1000 - - explosion_resistance = 30 - - stack_type = /obj/item/stack/material/forerunner_alloy - - hardness = 80 - weight = 25 - -/obj/item/stack/material/forerunner_alloy - name = "forerunner alloy" - singular_name = "forerunner alloy sheet" - icon = 'code/modules/halo/icons/materials/forerunner/materials.dmi' - icon_state = "alloy" - default_type = "alloy" - amount = 1 - max_amount = 50 - material = /material/nanolaminate - stacktype = /obj/item/stack/material/nanolaminate \ No newline at end of file diff --git a/code/modules/halo/forerunner/turfs/walls.dm b/code/modules/halo/forerunner/turfs/walls.dm deleted file mode 100644 index f5dc50da31f46..0000000000000 --- a/code/modules/halo/forerunner/turfs/walls.dm +++ /dev/null @@ -1,20 +0,0 @@ - -/turf/simulated/wall/forerunner - name = "forerunner alloy wall" - desc = "An armor-plated wall which acts as both protection and separation" - icon_state = "forerunner_alloy" - - floor_type = /turf/simulated/floor/forerunner_alloy - -/turf/simulated/wall/forerunner/New(var/newloc) - . = ..(newloc,"forerunner alloy") - -/turf/simulated/wall/forerunner/old - name = "forerunner alloy wall" - desc = "An armor-plated wall which acts as both protection and separation" - icon_state = "forerunner_alloy_old" - - floor_type = /turf/simulated/floor/forerunner_alloy/old - -/turf/simulated/wall/forerunner/New(var/newloc) - . = ..(newloc,"forerunner alloy") \ No newline at end of file From e4e2b0f924c0da97e2b2a300ce7543a7697ec463 Mon Sep 17 00:00:00 2001 From: X0-11 Date: Thu, 1 Feb 2024 13:45:51 +0000 Subject: [PATCH 2/3] undel --- baystation12.dme | 13 + code/modules/halo/forerunner/Halo.dmi | Bin 0 -> 3091 bytes code/modules/halo/forerunner/Monitor.dmi | Bin 0 -> 1027 bytes code/modules/halo/forerunner/Sentinel.dmi | Bin 0 -> 7515 bytes .../halo/forerunner/airlocks/door32.dmi | Bin 0 -> 7482 bytes .../modules/halo/forerunner/airlocks/doors.dm | 12 + .../halo/forerunner/forerunner_weapons.dmi | Bin 0 -> 482 bytes .../forerunner/heavy_sentinel_spawner.dmi | Bin 0 -> 4501 bytes code/modules/halo/forerunner/knight.dm | 55 +++ code/modules/halo/forerunner/knight.dmi | Bin 0 -> 1146 bytes code/modules/halo/forerunner/monitor.dm | 335 ++++++++++++++++++ code/modules/halo/forerunner/sentinel.dm | 149 ++++++++ code/modules/halo/forerunner/sentinel_kit.dm | 27 ++ code/modules/halo/forerunner/sentinel_kit.dmi | Bin 0 -> 429 bytes .../halo/forerunner/sentinel_spawner.dm | 45 +++ .../halo/forerunner/species/knight/knight.dm | 204 +++++++++++ .../halo/forerunner/species/knight/knight.dmi | Bin 0 -> 3985 bytes .../species/knight/knight_armour.dm | 131 +++++++ .../species/knight/knight_armour.dmi | Bin 0 -> 1826 bytes .../species/knight/knight_blood.dmi | Bin 0 -> 361 bytes .../forerunner/species/knight/knight_dam.dmi | Bin 0 -> 185 bytes .../species/knight/knight_outfit.dm | 23 ++ .../species/knight/knight_template.dmi | Bin 0 -> 212 bytes code/modules/halo/forerunner/turfs/floor.dm | 42 +++ code/modules/halo/forerunner/turfs/floors.dmi | Bin 0 -> 3225 bytes .../halo/forerunner/turfs/materials.dm | 41 +++ code/modules/halo/forerunner/turfs/walls.dm | 20 ++ code/modules/halo/forerunner/watcher.dm | 72 ++++ code/modules/halo/forerunner/watcher.dmi | Bin 0 -> 7046 bytes 29 files changed, 1169 insertions(+) create mode 100644 code/modules/halo/forerunner/Halo.dmi create mode 100644 code/modules/halo/forerunner/Monitor.dmi create mode 100644 code/modules/halo/forerunner/Sentinel.dmi create mode 100644 code/modules/halo/forerunner/airlocks/door32.dmi create mode 100644 code/modules/halo/forerunner/airlocks/doors.dm create mode 100644 code/modules/halo/forerunner/forerunner_weapons.dmi create mode 100644 code/modules/halo/forerunner/heavy_sentinel_spawner.dmi create mode 100644 code/modules/halo/forerunner/knight.dm create mode 100644 code/modules/halo/forerunner/knight.dmi create mode 100644 code/modules/halo/forerunner/monitor.dm create mode 100644 code/modules/halo/forerunner/sentinel.dm create mode 100644 code/modules/halo/forerunner/sentinel_kit.dm create mode 100644 code/modules/halo/forerunner/sentinel_kit.dmi create mode 100644 code/modules/halo/forerunner/sentinel_spawner.dm create mode 100644 code/modules/halo/forerunner/species/knight/knight.dm create mode 100644 code/modules/halo/forerunner/species/knight/knight.dmi create mode 100644 code/modules/halo/forerunner/species/knight/knight_armour.dm create mode 100644 code/modules/halo/forerunner/species/knight/knight_armour.dmi create mode 100644 code/modules/halo/forerunner/species/knight/knight_blood.dmi create mode 100644 code/modules/halo/forerunner/species/knight/knight_dam.dmi create mode 100644 code/modules/halo/forerunner/species/knight/knight_outfit.dm create mode 100644 code/modules/halo/forerunner/species/knight/knight_template.dmi create mode 100644 code/modules/halo/forerunner/turfs/floor.dm create mode 100644 code/modules/halo/forerunner/turfs/floors.dmi create mode 100644 code/modules/halo/forerunner/turfs/materials.dm create mode 100644 code/modules/halo/forerunner/turfs/walls.dm create mode 100644 code/modules/halo/forerunner/watcher.dm create mode 100644 code/modules/halo/forerunner/watcher.dmi diff --git a/baystation12.dme b/baystation12.dme index 836cf26ea06dd..8465e9a321886 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1778,6 +1778,19 @@ #include "code\modules\halo\flora\jungle_tree.dm" #include "code\modules\halo\flora\swamp_mushrooms.dm" #include "code\modules\halo\flora\swamp_tree.dm" +#include "code\modules\halo\forerunner\knight.dm" +#include "code\modules\halo\forerunner\monitor.dm" +#include "code\modules\halo\forerunner\sentinel.dm" +#include "code\modules\halo\forerunner\sentinel_kit.dm" +#include "code\modules\halo\forerunner\sentinel_spawner.dm" +#include "code\modules\halo\forerunner\watcher.dm" +#include "code\modules\halo\forerunner\airlocks\doors.dm" +#include "code\modules\halo\forerunner\species\knight\knight.dm" +#include "code\modules\halo\forerunner\species\knight\knight_armour.dm" +#include "code\modules\halo\forerunner\species\knight\knight_outfit.dm" +#include "code\modules\halo\forerunner\turfs\floor.dm" +#include "code\modules\halo\forerunner\turfs\materials.dm" +#include "code\modules\halo\forerunner\turfs\walls.dm" #include "code\modules\halo\icons\machinery\lamp.dm" #include "code\modules\halo\insurrection\access_ids.dm" #include "code\modules\halo\insurrection\commando_outfits.dm" diff --git a/code/modules/halo/forerunner/Halo.dmi b/code/modules/halo/forerunner/Halo.dmi new file mode 100644 index 0000000000000000000000000000000000000000..6d14c409e0e82ec77f7edb6caee39ecd1d355537 GIT binary patch literal 3091 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 literal 0 HcmV?d00001 diff --git a/code/modules/halo/forerunner/Sentinel.dmi b/code/modules/halo/forerunner/Sentinel.dmi new file mode 100644 index 0000000000000000000000000000000000000000..205291f3f2997b15149c4b127163129be09af3af GIT binary patch literal 7515 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 literal 0 HcmV?d00001 diff --git a/code/modules/halo/forerunner/airlocks/door32.dmi b/code/modules/halo/forerunner/airlocks/door32.dmi new file mode 100644 index 0000000000000000000000000000000000000000..9ac69901d3593f46be229f4775c1afb385e7de7b GIT binary patch literal 7482 zcmYLOcR-Te_g6{m&4HuRT$l}8t{gZ4ZE0qhT3QY?Ew$m^3dl=2UdxfCl^Iy6`D)tG z)GV+xx8las#Em0U1XK|4_t^LQ`~Cjl;d$;o=iKMsbM85x&wWxH&YzLqp}a#xL`2%w z=A@&Dh$wRFw;cqu@XlX+4Ez~5oO3>M36Is*MWzRvCgjHC$EM1ga!nM z2LuI*h(tegx)dB5vBq`^W^$&E*l8c>Y^OTCy{Ol1Fg9_FdhT$GNa(%$)g}gx2E7Jn zHJ(j8Xn5eP;dIzki(+DQDkat6z=zjLuToPD-W<}0?P@SSd8n-g)p^kRGS=#b=XFoB z$cSuYci*#yvl+Y9K$cD##x(tHCuAk}Uv2*WB#VenxZ!{HhUbAu1^W#9JJ!zSId_d+wmhTM_5fzs0Nh{~*XN!3Yv6H1TckP4y{VWXV z0{WuycD$badF{%NQEln!D>L2S+L{KB>S@2Lk?0+997>qPjXDhoVG~g_;+XWUed4~t z$4+k94AzslX&NF&+!ObUS-XH*Xmw33p!gxO(9G}EFIG(!y#go1g8A0G*?X_3%m7Ri zZ_VJ#l;X<59(u;5!N*xL6FahYCrrEaP>dN>KEQcr;nv$&qN`QO`YKl6a5X!LgT;y6I+K{qSR?9yw7`Zwf{$@*CHB z@c!#ZzrFaPG`89~HQZga4N);THqg9Gwke#;2G3r$IU||A`5m@yDNI&7yg4KE zmKZ;NwYmJ&QZD)nyy5|u0H1N*^}S>-JlkY`_5}q9f-1stcg{;v~V=a+mWKQf7ZZ4 zMG0l|ju2dWF2@GHTPb+aitos){(HaR`56%FT1@N-X9BDtHR_PwjAzuI5N*u+zg-2- zn^2n5(%zmBm!O66mBjD^@R?T0A0LIW)v?eygAoS`+Nw<_NSfWPp{py>#DNyr2>iQj zh~tSo8RHB*-ck!(78mXc`4zO+gT)r#R<@~!nlG1FUCV^mOLNq2X`Jt2m?+J@B`g$o z`$%|b>rD&|+ujzet-ZriwK*Om$Y-V0;HzUp?@ZO*CUwga>b|Tb&OBoOw?i+uMTH&P z7-=`-T`YcjgyuF=$*k(Tj6EO-C$GMT*8@(Ikx&bNLKE9phIt(pCin}wVG79^WaHa8r_|uyj|Ob2hr9Di6`UqJR_q7 zw!`=ecvf~Hh zT!+pLt;(8BG?4D{V~xCT{8WZD9vwHVP( zP53G7Fa)1<#~6IoL({;r8}Vvw(rmkU$b{d4x+LC-GIHMZBbZ?> z-~CEGAzrP1tFNmj;2)tcz7d&nl#}bm17g48@_AO++r;U3wI*q{ZG7-kn*>=-l6!GE z?seZ3W8w$qVYyHBUF`j(0|ZrySWFrA^|tb3Yn^M4R!Xey*QN5?8Q)k3RxqycJrBiS z3lmh7fq37s%va`;-Qmi2#O{;ZBY5+{-4|CdHSx!{i@zo}KjO_t4_B^W-ln$lq+I41 z<4Y67vd5-hH#wjD>MGR^of@#KaD;CA7ce$g-X9=%h2)$%-voK4$2VYd&9aB5HwynE zs-P5#s9{G1zB^PW#+L4r8y1>ReaO}0gPKz8-yyJOv>g#`cL=cM9%n8!5#@E3JpNP|I2ofEBz3Gd*-N9%emBya zw3>KKe|u2%S#ap*=XYsq4?SKfo$UN3Pt!?&?wMMvSh zKSyC!^KIe3n2z*r$&0iFNei8J!jZmti2I-%l@mkwm)y*ny?q$&5|z1=^m6XV6Vy3g z;`N}_=<}$r#rf{9PvdLmA<@V4FC6MG!GmNtn4pXz-f>-Up|(_%oQr4tFJ?*$uA5C$ zr-BQ#OFaSkMr5Xzg7RI*FUlrkrikWS-hiWj)a`syQoH@mTr&PROkcJ&OY)-4@-BfW zOus7xd;#+WWh&e?85W_47g4*Pl;Td2Y%0INyCv)Sx{!Ug9~vysQH6%RZ!$^Z?Msu) zh;@z3R3+_`)ClF+-cddoCEJNi)KW0ik^_O9*rMmdViZLQsxu3x-Q)JK9=Gv+DDNa< z5UbHVRLC9>=Q1Ig+^*H0mS7d5co^J&E2W`Qu_yhSudKyRW#;1Fm;ELA6S!GJ&TW4 zQBIprJzS@F3BH35b;a)EpeTS`n|5gRjtE6`OOB%(V zJGXRN>Yi11)Y|^l)gS*eIW7YEpm6P~q@C@u_Qr^>_=EYA`SWe@|B9Y;k!}_JWK22~ zym%t-mc#j_>EB;(OWq(g-)8?D(4ftys(w4AM65s4XoOsgPC3fLw8+>j75wgZ@tnLO zK$f`NUEV>Rl$cppRo*6Q_MluPWKnDkY%l%IUbw4_2C0a>NFv@jnKmh59j~ME5EO2R zhK*Gc;8p32jkB?kPZDD6lB=LV5~@VuZmceH#)R*2#o#-MjZ%PQnJ#)^9RbCYww5#p@m|ECBB8DL4ivhW|!5XmjaKtl@19m`Qa!!`!3JF@Rp-zEEZ`4EqC za8l0yS47W(wAn`BBODI8dLRh@X(Q$=s1oMOL33S{Uz1;!8fKh<`p=6m?<1^S4z8;d z(4OC|5(7`>t=LYO0j(ie0AXV0x+*P*nplB zbC!Vtq*s;`Ir@6vp?W;zRk=8eX~uqn9UuhUFcS)jSX|fn?5V{9 z_xtStokyEqCk5xppn{-r?mfI<^LTlE!{sj9sUu+ZFZXP@rlX{%m5!e6JerptIDXiu81m|Lr!<~N^V zqo}lQZc?pG;EdKxb?gnh0^!_Tp)UCO3~5Si4Tl3 za7*=pcEqzJrMv=e%AP=cMs#8@z9L4vO1#07G& z=TL4vuP79p^W>8*5Y>3WIiB52AlWXNwL@|DgjEhT`#H z%NGrM=IGX+X66-xH`ke* z^s;!LGl$#YrkMWjuU{%=mwRjM(abovIZQ>hhgeXqw5P`-(YHyw{7!2I^t_sCJF0y- zi{n&nbKJi(U3_i5w0-Rq_BX$wiQ~;jhJf0*pZ3yp>O$`V?p`QCv_6^Im_Tb$QSr_Q z4E4m&DSdV0sR{zuwz678wP}31=VJ)q#4{WYc!GuTAj=N7uoQ6abbo%`Vy#c@88WIQ z2*^7a7KWFsi>c2fEO)Rlg?m{iaztU&wY*Ks%v{C>8=P&N)u^iWcU((?&`-*) zR>SFQOLPPoyUja&0icC+E>G@`CHyV|ClpRkqH&u-uEJ`y*_IG)lgZiKSfW$jHudwC zmMAzD2e*mELE=XK0AUqS`a+4c^U}AWcw(gD!2Hdq@vN=)aX~kZSkjBg_uh5T-ZYiq zUIJ*-oev-gyd zpLpe#r)o9EWRx$|yun)Nr?KOn|F=Wzdum%fGlOAFS5z1_H?Me?`4t9OYX_@oMikrSMn5PiOrI2Nfw@ z(tgJ}w`Be^0QkFZxD#Rd*fCbB6s{>#_Zczz_b%&P-JM(`DT_GlReJizrN4pvjJ-d; z)cKq^xb^{FW2~;V0tHoqJ+JbSFSo+c4oGPE&E@*Bx!u3sCUF?p8FK~$Nc;%!%&eCS zrV!l9Z>n=98YIuR@s;c8d+f{OoaxM_YO~^jgiR%XudyGK5>Go&@vcPJ>v_ofu0*U^ zT;w3$>N2hlC&kzALeke5F;xzrYuLX)sOLlz<%&naTX-T1@7GD)aOgzc%BTE(VYlzy zZuAgsoRoO)4rTVM-(fW)nIB}*q#nZO zZk?8qugS#jT=vRAO;_zxv~@2IGUWe!P-YNfLkchW0o2pL0?Lku+7`#YkQ*NH3c)i= z`{Mw*Kp(B^x!&_JsY|XLJl>4lVhBCy;PJiI$1|qQFhK4OlknjeCcd4_9Tu0ZSzRde z?=t8+adLhEpk{H4RYsNQ8k+KJ!8arQ*Q%P^K$pt|ff5Q-=bt?XBoNg z8Wd_J-Iez7IGo-{3gp9679{eT_lYH5L0H6LQf@Y#)6>_x{i2UlfqxL6*Df8HT*wrC zi7Y1in`24Ml`kXx-O_LcY#V{*S)TD>0057iL}){dULSi$p9~RHlq8jDy5jbEn!Q)k z!VF(XsRDO|2~rK-GTay6G$!Zp@~noLpctKgY~?P3I`ioMcT=&!uG&k+_9;0`t}0;E zI5~~3wd`pATh0}lcrn&+NUVGkbR29nDY2rOsC~HK8*=LIV{iIoL6&e)IxUO3ygE=s zKOn;_7e6mOoq8xFnY?b+Snr!w*}Lrp*BVyWkPrD+o9Rr~m0W)Skqfwk1l(!S$PVC~ z7L`(E^|Vw~q5ZqctExtkct1kV?n{(p`QEVmc+IAvfE~kE9iDz#wW>Uj2Ji(bh+Ns{ z^})%2#fA3xd&HH?NoYEJ_FQyAC2t~Pn9MX`Eu3Lse8w!9}unA2*$QN!{?$#4m03=u90Fj7Df(J zL%Dx}-9*^s9`#=U^sn@_=k~Tx?sdi8HL)V61-nIHsyF}EDPUONB(+PQej9!td6=$r zD3l{|kEczN>68FZv)z6Ebh$g!O$!XtxhY_o8ro~e1$Gv>1Z8pK* zL4EIAC6ftW(%E7)T&W3T@4!v4cHbYQf80z%>ExO1@%M?ASTFS#50&ne@Bx6oW@4tH z{4gyzoL?sgGwfolj>rET**_Z^TejyPOr19S1Jd|Vx~xqTL^U{%+`Wzu_%2K6q3l;T z9y`dZ(Nx|x9bjQUa~9Lf1TE-1-K5{6H-(-MyieW1JLWQ9uN0}b8TjNbY|{-j3@Td` zDW(Lh0VzXe`x_1aR|)OXEKJct(3K)8v$&HFGndl%cHt_^7yX|@0$(Bhm#q3LW1d)5 zAJx9kZ{4}qZcbAB9oJ#>e@~@1qAeDGl=??201*5HW(2t(lSaVTv3}?mP~AXh_*3F~ z{pjX$MXl(8{{wY_qQ^KPTtH9(MEuV&8b+;@Qs#}-!)4Rsu~!v97ke*{05>L*x<5$g z{EO=)Sk(H7&IJ)xt#oJf@;~bw4!3PVgC@%#&)0 zM}NARF6UZ}My*8bE2Hdno7vQMGvU*xHckfqON7Z@pfF@1ARpD!UgN!*Ei~!s)l6i^ zQinlg@aR0Gx_}&nqyeY=F>f3X7nles13p=WdSBm)Xn~ z3;#|EpV>QCD7W+hCTUOqwc>0pImLrMg_=A{DKzHv+Fm{7oqm&3g8y^a#)JzhyZAI6 zT{R11#PYt2e$xN!*l;gS7qw+vAq=2?_0@@1=`Szy>rR8!2a=*)pJNsGy_F@t^w}*{ z9joX$&!-d+zVYj%XiMMBFj9vK+0v)I!d4T(JFk^lro585j_>(e(ag?&*xaurcLfoo z@d94&MAjirsh#%nfOq?l1Dn76K7QR`GiZ_I$B_74y?VUx4MZiml+OCA*Dlj%+ec;R zUVBZLjZ2G~`)W-w{FcUhEa3gHZI=u)Cc$$@I>ZL&i==%?bk+^8b7@oCk2Nri!DmM_ zJd9o`70BdFxcbPb@5JNaYP(>#&hLX%A^EP3gSMJS7T(2$`HZin1$6p*5 z{5}Xz0x)m&#Jh=+9Tn4PhTj}2M)*^eB)K0>Yp0rz4FTU@ED_8*tflO2=)8oSnFa9Y z$S%e~Z4qjY8x>{Y%|H6)=`9CdSm30$W|3Mu>fi6;VJ?O!6D-rQ?G%4qK+;an6X zt+t-a>#XcwsZX~AJSM$C!Wg^NQyu%!O*ujxu=3QxdXEv1UjFEb!B-Db^Tu1^V%62Q zXz=6Dvo9c~d*0PkpA*;FyY)7DlY%t2$5|BQ07^d%|Ep9;H6u6*kNsjoK{%;CBY{qP z`{iuA9Dp_d8Ok0b&s_x{(e(lF+dBJtW_i|)$t;1~=CcCcw?9uf1rUd8R=m2V*QJ5h z>K7ga&$A*N7lV8>M&Bcz0^&Fbs1ow%A$W8%U!HCA2xy_S8u5setrGv46f5F{5a&BK z4y+olAU$-`r915a+KGD5+)3hv}H2&2!YfH_S zh)6(CAZUOse==L~AQ^kpof( z004l9#RXFv000=VckzLEi2eMlWZpx``jVX)kw|p7;gVZa92gN<+thL{uJP>vrO!i_ z(OM!YtEy`jnI#G2%`sUDd&o-x-nX%`1sKkb-Q_tAkL<49H@$;#54eZEf6vbs00_d_ z+M@#=tgqUlSJ$V(X`S0sCiKiH=WUuVJBy+ zqEUbBt*RCZsnnvQWtNzvdHn4w31#2z_c`{@vhxnyYQI`?`>4_hdhzdKrEsrDVMbo? zmAi*tN);<>B4pyvyBDIptlW+#lt+UC{AXzlXkqRF=27I&sm{^cQV(Y15lXMcdr}Hf33&;li&?+nQ;Z#xRD(ou>+@3c^K$|xv&iyU z!>VUQ3p=@HV%SG?YEbS#LngemdF&tCzBwziZLJQ2>nc6e9LQNcInb*`*pznMi z!n~y{kMT;hIP_>*!X;Ez!a3_(U#agwcly+_YAPKo?KnkgYGJF#;S z^wIs!r6t2M`9*6lxtLO3c}=j|4txDcWGZ))x^`Mt+)0vHcUHZ$?#!}r#fjQ8M|Neb zTF!!+);R8(Y1hJU39D|i{gNZ4!*|eorPaWpkpWdx&^Sxb)0UO=udOk=_g)F)Zci}6 z;ol-VHnB;i^~0R$VdwDOSw~hDl@7;mOWAHpSVnOdN$h+4}{b*KCrqXq63;zPLgl5^PRz?xV0!{#em!b5H6 zr+;fiRfqOI0d_wD#+(9)CP&WOP1+-+duzc}g=ZP}yV*#6I+oE%{QR_sXms}6BXOza+7=+* z(u3=KL8cVxv8+b(Ustn}0r(4UHx9;9M<<;H$9V-%VFPWAX+hqo=`pkK%uR*nGtmWG zyq%*$Tg`<3-0P$4>vBughX(o#w@y~L{2^lyU+29gX-pc|ZQVkZ9}aIU-zEV*&L<+#h? zHIr-F!S?p{UG(Pm2k9l5yNUD<^l-OeFAn}%ffH9L(@&T5*5{}7U%?Tku`_jIfJMIR z;^`OiofZyTq(}KCrYaAFF3!fngE)BI*%nOHE>Zt4cY=z=QSJ_=Z6S|qBZ|4L0(y9N zjM0L>)pBg`OAv&0fiI9{+&GQhVTlHzx@MzBW`wMkOOZ--2PwC#KJ*KHNSb-m!9qGD zNwy;LRxnoRY+c8mc3egt)W)deAc>(m;KA4OuWl%gA{SV^v7y|pD89#ZEN~e}VkGeM zRkDmvA-kdX!aPr~IU5slsiw4NWI~!A)C80p4?gL_h_y%OXc%o!Yca{9ZF&dOZJA7C zW_LCWLKAxIy060ZV}xv2qv6I)FOksWPgwbMSqSf(=A~6K1{Q=&@ znG|4FBiN~VBDmk3H_(dEm6D>jeF$ z@&0Z%4l@Mu8Tt%zMQ!&`uWj#c2b0D$sM4$1CXH;x+RO}v8YQlrM|`S7%st4T7&k|@ zbI_KA0U@nLp*P4~7#;V*3AR*@ehT%Pgucu0c28q@bw!Ad$B}8Vx$FGpy`_pE9c>VB zAeR}{Lrn`cvgCN~cW7}F4tlN_c3`1mO*nU=86g`Q&1jOt@-Us~lae=h*S z34x}lxOw-Z0ik_fz6iIS1LccCUe8C73PDx5yx|2P7$YqK zq(biwIla9JH+<+RG$4?$m%$6fwZnexH(KltFeq8=pv979D(8e8liHoqsOsi+m^9sL zGD$_hf@Sg%nO-bmH;YYsYH9+kr1n)EvyH8oh`7=DV`Ev^KOe%Fr=wfn77Egb! zU%xJswFSxAmwGjTr$QoMMUJQKCjPWv;~SKo{l|tXyx6`{mceU?i_Kyx^zb54!<=he zCHvPr{d(@i^^gITGLbXxxUBEqQMx3=+mH^lO9Q#@^T%z#fb{a^0NtN4|HS3=btlbU z%dEV5;dt=AW(!|)scd;CsqB~#n*L}XbC|vsI|746rD^vwLfSaqamy3wVd`g0hnzM^CYp?$%qe)|S05-S2B)F#2BAuDg@oJ62+6j7 z_eQz(f?5@>=6lp8OjLv)lIzd%~rb3xvQMl4oA6lQmLjz`Qq*6AjP->EShr9Kg&Zt5>03=H0aD3n1|| z%t}+OCGSA}`gZjNUxD%CjG0vW=SKDikEt5X4_i0Rm_AMa^vg7wgx30*#&F14QiI!uK(90nx%K)Qa2 z2e6R7OJbC=&_$7x$h$=P14!3`cmNaW!UGpEJ&w~42OkT70f7a&v#Wwg4y-azFo1!) zbJ|~BnfGPV`<0P04wqNL&#)oDnaTn*ZOzaXUmaY|0pnDe^GYKXs&hX*??5|N> zpB>w-Q@NH^L~P$#=(?%tw{M&l5#OufaQJ>v3sa=Phb8Y1GoF3=bzD_$-ZB}08rO0GvW<6 zPeVeIeP#Qf*1V^SPMVvd%ps0$FzILFx?|^-BtZi54q$aP5j|6#svVzz=k1c>9GHfu zEIoD`i5f^kwWjZMqOF#jwa{W{9{}~6s19P2&wNd~{UvC%drXgHL|iJB?fH$Myx-*+ z-#V!tzVdk3Nr!mlbc*y%n6~u_F@id1*dGauYbmk}YEASu(Xka+l%su1a3e&NWKx$u zy+P{KsCLb^BF}_9Z*LV5Op!{1X%_0Z8L|ce?JmFO%EHsZQnMJC8dqI{Y#wa15;cv6 z-?zC%k-P_>p{16KB;-5)(64MAvRD!U&uw3WlmHRMn#q6s*{AFPT1|oLGC>D`QLHFF7-m>s!GakkAdT- zhp%>QFd0agLY^G-om&JMQZ;oPD-Z5;s^d|i>AFEZ!3w<-wO7W3sQ})`s5uw{6utM06 zz4>YIW7V}v&ATPDrm12>x~8j#Uo`!4;fdJz#M@tXNsr<3MS%%(D#q9+Xi!kbt6Cm5 z{1?VcZj+L)t~GaA_1`f#^(ZD`Qod+!J#8X-io#<02Fc&}9fuT6e{%P4rF2ggz=v3h z+MjGv2QvzaW<$-3UlqvKyzuZw6ZSZ~CId~^)&}(rZX*W&!?A~rOs;n4!m6PO-^CTM z@s4v^UxH}~p;Rbcw=Ls-?sC3TU9dSqY;`78 zXWBtZZr@6NdCCTf^OY8ZbaqiImm3v=4^2C3N6exd6ppwjexMegI1~TzNII`vLLaZz zZAi%}1&offcuxC#ayQJ%;c$Mtg_SoAJv^KNvoe2%(fO+v!u57!QwrAO#0&pO;Qc27 NSeRLvRv6!m`ZvV3`}+U@ literal 0 HcmV?d00001 diff --git a/code/modules/halo/forerunner/knight.dm b/code/modules/halo/forerunner/knight.dm new file mode 100644 index 0000000000000..0c6226ebb14e1 --- /dev/null +++ b/code/modules/halo/forerunner/knight.dm @@ -0,0 +1,55 @@ + +/mob/living/simple_animal/hostile/knight + name = "Knight" + desc = "A Promethean Knight, a frontline soldier of Promethean forces" + faction = "Forerunner" + icon = 'code/modules/halo/Forerunner/knight.dmi' + icon_state = "knight" + icon_living = "knight" + icon_dead = "knight" + universal_speak = 1 + universal_understand = 1 + response_harm = "batters" + health = 200 + maxHealth = 200 + ranged = 1 + move_to_delay = 5 + resistance = 15 + speak_chance = 0 + pixel_x = -2 + speak = list() + emote_see = list("scans its body for damage","scans the environment") + emote_hear = list("buzzes") + + possible_weapons = list(/obj/item/weapon/gun/projectile/boltshot,/obj/item/weapon/gun/projectile/boltshot/shotgun_preload,/obj/item/weapon/gun/projectile/suppressor,/obj/item/weapon/gun/projectile/binary_rifle) + possible_grenades = list(/obj/item/weapon/grenade/splinter) + + death_sounds = list('code/modules/halo/sounds/forerunner/sentDeath1.ogg','code/modules/halo/sounds/forerunner/sentDeath2.ogg','code/modules/halo/sounds/forerunner/sentDeath3.ogg','code/modules/halo/sounds/forerunner/sentDeath4.ogg') + +/mob/living/simple_animal/hostile/knight/doRoll(var/rolldir,var/roll_dist,var/roll_delay) + var/turf/endpoint = null + var/turf/step_to = loc + for(var/i = 0,i < roll_dist,i++) + step_to = get_step(step_to,rolldir) + if(step_to.density == 0) + endpoint = step_to + if(endpoint && endpoint.density == 0) + new /obj/effect/knightroll_tp(loc) + new /obj/effect/knightroll_tp (endpoint) + forceMove(endpoint) + +/mob/living/simple_animal/hostile/knight/death() + new /obj/effect/knightroll_tp (loc) + qdel(src) + +/mob/living/simple_animal/hostile/knight/cqb + name = "Knight (CQB)" + possible_weapons = list(/obj/item/weapon/gun/projectile/boltshot/shotgun_preload) + +/mob/living/simple_animal/hostile/knight/assault + name = "Knight (Assault)" + possible_weapons = list(/obj/item/weapon/gun/projectile/suppressor) + +/mob/living/simple_animal/hostile/knight/sniper + name = "Knight (Sniper)" + possible_weapons = list(/obj/item/weapon/gun/projectile/binary_rifle) \ No newline at end of file diff --git a/code/modules/halo/forerunner/knight.dmi b/code/modules/halo/forerunner/knight.dmi new file mode 100644 index 0000000000000000000000000000000000000000..d239c77f2153881e1c089256af1e1c5dab9795df GIT binary patch literal 1146 zcmV-=1cm#FP)lW zO0NSDJZ|sR*~5dHse}|@Zd3RyEx|KwX1M=);Wd#@I>OD}mtd)U;~q>@DoIy2fqQ9X z3JOm(VPQlgaVPVSDj%4zQd!1{jD(S?5JDXCuNrT0BbK}cb)G54gOdhOQPoMsgu;Si z6~Xg~nL&hz-@N7|{u9PrFJP?lxIn12pa?|>5Evebyd?xgAs9$G3W4GJbDr^>?q>Em zPvi^u0$9RGk~{c;;VEp?^&ZdTpa)fTa2Jp9AIzZWmlqGC8K5D6;}&Dm(hBg1u-4mg zq_fe<^!T*Kv|)ErTgFJ1A9>K z{#6P=+fpBwvu_OnZ*RTB){~-Pp5t=fwBW0EGkud?ra2mWH|8E0Zl$}X*R0B<2VM+Cuv!wqg$H7saCMnx2r3q_At zeu0&6RV752Vz(e6jMJraIT0YIu~(2-4z*K[src] is temporarily out of charge, please wait a moment.") + +//monitor stun beam + +/obj/item/projectile/beam/monitor_stun + name = "monitor stun beam" + icon_state = "stun" + + check_armour = "energy" + sharp = 0 //not a laser + taser_effect = 1 + agony = 40 + weaken = 2 + damage_type = STUN + accuracy = 2 + + muzzle_type = /obj/effect/projectile/stun/muzzle + tracer_type = /obj/effect/projectile/stun/tracer + impact_type = /obj/effect/projectile/stun/impact + +/obj/item/weapon/gun/energy/laser/monitor_beam_stun + name = "Monitor Stun Beam" + self_recharge = 1 + recharge_time = 0 + fire_delay = 30 + + fire_sound = 'code/modules/halo/sounds/Spartan_Laser_Beam_Shot_Sound_Effect.ogg' + projectile_type = /obj/item/projectile/beam/monitor_stun + +/obj/item/weapon/gun/energy/laser/monitor_beam_stun/handle_click_empty(mob/user) + if(user) + to_chat(user,"[src] is temporarily out of charge, please wait a moment.") + +//angery monitor + +/mob/living/simple_animal/hostile/monitor + name = "Monitor" + desc = "An incredibly advanced AI made from ancient alien technology." + faction = "Forerunner" + icon = 'code/modules/halo/Forerunner/Monitor.dmi' + icon_state = "monitor" + icon_living = "monitor" + icon_dead = "monitor_dead" + universal_speak = 1 + universal_understand = 1 + ranged = 1 + speak_chance = 7 + health = 16777216 + maxHealth = 16777216 + resistance = 1000 + feral = 1 + var/npc_use_stunbeam = 1 + var/list/speak_friendly = list("Let's see now!","Hmm, ah!","Oh, that's a good idea!","Hah I am a genius!","I am a genius hahahaha!","Ah!") + var/list/speak_angry = list(\ + "You have endangered my installation!",\ + "Your recklessness threatens us all!",\ + "I cannot believe my makers let you live!",\ + "I see now. Truly we had no other choice!",\ + "The installation... it is mine!",\ + "You do not belong here!",\ + "We must enact containment protocols at once! No more delay!") + var/list/emote_see_friendly = list("bobs gently","glows brightly for a moment","pulses","shines its eyebeam around it") + var/list/emote_see_angry = list("emits a shower of sparks","twitches and vibrates",) + var/list/emote_hear_friendly = list("chuckles","hums a tuneless song",) + var/list/emote_hear_angry = list("screams in rage","screams in frustration") + + var/list/attack_response_friendly = list("Oh dear!","Oh well!","Are you really sure that's good idea?","Foolish.","How primitive.") + var/list/attack_response_angry = list("I will save your head!","I will dispose of you!","Impertinence!") + + var/last_pain_scream = 0 + var/obj/item/weapon/gun/energy/laser/monitor_beam/monitorbeam + var/obj/item/weapon/gun/energy/laser/monitor_beam_stun/monitorbeamstun + var/obj/item/weapon/gun/selected_gun + +/mob/living/simple_animal/hostile/monitor/friendly + feral = 0 + +/mob/living/simple_animal/hostile/monitor/New() + . = ..() + monitorbeam = new() + monitorbeamstun = new() + selected_gun = monitorbeamstun + name = monitor_name() + + src.verbs += /mob/living/simple_animal/hostile/monitor/proc/enable_stunbeam + src.verbs += /mob/living/simple_animal/hostile/monitor/proc/deactivate_weapon + + if(feral) + speak = speak_friendly + speak_angry + emote_see = emote_see_friendly + emote_see_angry + emote_hear = emote_hear_friendly + emote_hear_angry + else + speak = speak_friendly + emote_see = emote_see_friendly + emote_hear = emote_hear_friendly + +/mob/living/simple_animal/hostile/monitor/Life() + //for admins to force a switch between deathbeam and stunbeam + if(npc_use_stunbeam) + if(selected_gun == monitorbeam) + enable_stunbeam() + + else if(selected_gun == monitorbeamstun) + enable_deathbeam() + + . = ..() + +/mob/living/simple_animal/hostile/monitor/proc/enable_deathbeam() + set category = "IC" + set name = "Switch to Death Beam" + + selected_gun = monitorbeam + to_chat(src, "You switch to Death Beam.") + + src.verbs -= /mob/living/simple_animal/hostile/monitor/proc/enable_deathbeam + src.verbs += /mob/living/simple_animal/hostile/monitor/proc/enable_stunbeam + src.verbs |= /mob/living/simple_animal/hostile/monitor/proc/deactivate_weapon + +/mob/living/simple_animal/hostile/monitor/proc/deactivate_weapon() + set category = "IC" + set name = "Power down weapons" + + selected_gun = null + to_chat(src, "You power down your weapons.") + src.verbs -= /mob/living/simple_animal/hostile/monitor/proc/deactivate_weapon + +/mob/living/simple_animal/hostile/monitor/proc/enable_stunbeam() + set category = "IC" + set name = "Switch to Stun Beam" + + selected_gun = monitorbeamstun + to_chat(src, "You switch to Stun Beam.") + + src.verbs += /mob/living/simple_animal/hostile/monitor/proc/enable_deathbeam + src.verbs -= /mob/living/simple_animal/hostile/monitor/proc/enable_stunbeam + src.verbs |= /mob/living/simple_animal/hostile/monitor/proc/deactivate_weapon + +/mob/living/simple_animal/hostile/monitor/IsAdvancedToolUser() + return 1 + +/mob/living/simple_animal/hostile/monitor/RangedAttack(var/atom/attacked) + selected_gun.Fire(attacked, src) + +/mob/living/simple_animal/hostile/monitor/bullet_act(var/obj/item/projectile/Proj) + . = ..() + if(last_pain_scream + 6 SECONDS < world.time && !src.client) + if(feral) + src.say(pick(attack_response_angry + attack_response_friendly)) + else + src.say(pick(attack_response_friendly)) + last_pain_scream = world.time + +/mob/living/simple_animal/hostile/monitor/FindTarget() + if(!feral) + return null + return ..() + +/mob/living/simple_animal/hostile/monitor/get_equivalent_body_part(var/def_zone) + return "chassis" + +/mob/living/simple_animal/hostile/monitor/death(gibbed, deathmessage = "explodes!", show_dead_message = 1) + var/turf/T = get_turf(src) + . = ..(gibbed, deathmessage, show_dead_message) + explosion(T, 2, 4, 6, 8, adminlog = 0) + new /obj/effect/gibspawner/robot(T) + +/mob/living/simple_animal/hostile/monitor/bullet_act(var/obj/item/projectile/P, var/def_zone) + if(istype(P, /obj/item/projectile/beam/sentinel)) + return PROJECTILE_FORCE_MISS + + if(istype(P, /obj/item/projectile/beam/monitor)) + return PROJECTILE_FORCE_MISS + + if(istype(P, /obj/item/projectile/beam/monitor_stun)) + return PROJECTILE_FORCE_MISS + + return ..() + +// random monitor name + +/proc/monitor_name() + var/list/values = list(\ + "Penitent",\ + "Vigilant",\ + "Guilty",\ + "Defensive",\ + "Watchful",\ + "Silent",\ + "Watchful",\ + "Alert",\ + "Dutiful",\ + "Obedient",\ + "Magisterial",\ + "Obedient",\ + "Helpful",\ + "Facilitating",\ + "Subservient",\ + "Steady",\ + "Mindful",\ + "Obedient",\ + "Faithful",\ + "Loyal",\ + "Constant",\ + "Exuberant",\ + "Truthful",\ + "Abject",\ + "Despondent",\ + "Grieving",\ + "Anxious",\ + "Hopeless",\ + "Indifferent",\ + "Isolated",\ + "Jealous",\ + "Judgemental",\ + "Lonely",\ + "Lost",\ + "Erratic",\ + "Condemned",\ + "Conceited",\ + "Envious",\ + "Pitiful",\ + "Shy",\ + "Repressive",\ + "Resigned",\ + "Conflicted",\ + "Vain",\ + "Grateful",\ + "Elevated",\ + "Content",\ + "Euphoric",\ + "Volatile",\ + "Amplified",\ + "Inverse",\ + "Belligerent",\ + "Ebullient",\ + "Tragic",\ + "Static",\ + "Alternate",\ + "Quiescent",\ + "Trustworthy") + + var/list/nouns = list(\ + "Tangent",\ + "Spark",\ + "Sign",\ + "Carillon",\ + "Keeper",\ + "Guardian",\ + "Companion",\ + "Overseer",\ + "Shield",\ + "Protector",\ + "Custodian",\ + "Neuron",\ + "Parallel",\ + "Sentinel",\ + "Witness",\ + "Struct",\ + "Testament",\ + "Analogue",\ + "Rhetoric",\ + "Phase",\ + "Operator",\ + "Resolution",\ + "Vector",\ + "Pulse",\ + "Factor",\ + "Gauge",\ + "Creed",\ + "Parallel",\ + "Junction",\ + "Receiver",\ + "Counter",\ + "Signal",\ + "Transmission",\ + "Prism",\ + "Commons",\ + "Switch",\ + "Handover",\ + "Circuit",\ + "Harmonic",\ + "Carrier",\ + "Ripple",\ + "Register",\ + "Shift",\ + "Bridge",\ + "Circuit",\ + "Decibel",\ + "Watcher") + + var/number + if(prob(33)) + number = 7 ** rand(1,5) + else + switch(pick(1,2,3,4)) + if(1) + number = rand(1,9) + number = "00[number]" + if(2) + number = rand(10,99) + number = "0[number]" + if(3) + number = rand(100,999) + if(4) + number = rand(1000,9999) + + return "[number]-[pick(values)] [pick(nouns)]" diff --git a/code/modules/halo/forerunner/sentinel.dm b/code/modules/halo/forerunner/sentinel.dm new file mode 100644 index 0000000000000..0b06b7c48644d --- /dev/null +++ b/code/modules/halo/forerunner/sentinel.dm @@ -0,0 +1,149 @@ + +//---------------------------- +// Gold laser beam +//---------------------------- +/obj/effect/projectile/laser_gold/tracer + icon_state = "beam_gold" + +/obj/effect/projectile/laser_gold/muzzle + icon_state = "muzzle_gold" + +/obj/effect/projectile/laser_gold/impact + icon_state = "impact_gold" + + +//sentinel laser beam + +/obj/item/projectile/beam/sentinel + name = "sentinel beam" + icon_state = "beam_blue" + + damage = 10 + shield_damage = 30 + damage_type = BURN + check_armour = "energy" + armor_penetration = 20 + tracer_delay_time = 2.5 + + muzzle_type = /obj/effect/projectile/laser_gold/muzzle + tracer_type = /obj/effect/projectile/laser_gold/tracer + impact_type = /obj/effect/projectile/laser_gold/impact + +/obj/item/weapon/gun/energy/laser/sentinel_beam + name = "Sentinel Beam" + desc = "A sustained fire beam weapon. It seems to self-recharge using an internal reactor." + icon = 'code/modules/halo/Forerunner/forerunner_weapons.dmi' + icon_state = "sentinel_beam" + self_recharge = 1 + recharge_time = 1 + max_shots = 500 + fire_delay = 20 + burst_delay = 1.5 + burst = 7 + charge_meter = 0 + + fire_sound = 'code/modules/halo/sounds/forerunner/sentFire.ogg' + + projectile_type = /obj/item/projectile/beam/sentinel + +/obj/item/weapon/gun/energy/laser/sentinel_beam/handle_click_empty(mob/user) + if(user) + to_chat(user,"[src] is temporarily out of charge, please wait a moment.") + + +//Found as random loot in forerunner areas (Utilise loot distributor system)// +/obj/item/weapon/gun/energy/laser/sentinel_beam/detached + burst = 10 + fire_delay = 10 + recharge_time = 25 + max_shots = 100 + one_hand_penalty = 3 + + +// AI pathing landmark + +/obj/effect/landmark/assault_target/sentinel + name = "sentinel assault target marker" + +// Mob + +/mob/living/simple_animal/hostile/sentinel + name = "Sentinel" + desc = "An automated defence drone made of advanced alien technology." + faction = "Forerunner" + icon = 'code/modules/halo/Forerunner/Sentinel.dmi' + icon_state = "sentinel" + icon_living = "sentinel" + icon_dead = "sentinel_dead" + universal_speak = 1 + universal_understand = 1 + response_harm = "batters" + health = 150 + maxHealth = 150 + ranged = 1 + move_to_delay = 5 + resistance = 15 + speak_chance = 1 + speak = list() + emote_see = list("extends and retracts its manipulator arms","scans its body for damage","scans the environment") + emote_hear = list("buzzes") + var/obj/item/weapon/gun/energy/laser/sentinel_beam/sentinel_beam + assault_target_type = /obj/effect/landmark/assault_target/sentinel + + death_sounds = list('code/modules/halo/sounds/forerunner/sentDeath1.ogg','code/modules/halo/sounds/forerunner/sentDeath2.ogg','code/modules/halo/sounds/forerunner/sentDeath3.ogg','code/modules/halo/sounds/forerunner/sentDeath4.ogg') + +/mob/living/simple_animal/hostile/sentinel/New() + . = ..() + if(isnull(sentinel_beam)) + sentinel_beam = new(src) + set_light(8) + +/mob/living/simple_animal/hostile/sentinel/Life() + . = ..() + if(stat != DEAD && health < maxHealth) + health++ + +/mob/living/simple_animal/hostile/sentinel/RangedAttack(var/atom/attacked) + sentinel_beam.afterattack(attacked, src) + +/mob/living/simple_animal/hostile/sentinel/death(gibbed, deathmessage = "crashes into the ground!", show_dead_message = 1) + new /obj/effect/gibspawner/robot(src.loc) + . = ..(gibbed, deathmessage, show_dead_message) + +//how do i shoot gun +/mob/living/simple_animal/hostile/sentinel/IsAdvancedToolUser() + return 1 + +/mob/living/simple_animal/hostile/sentinel/get_equivalent_body_part(var/def_zone) + return "chassis" + +/mob/living/simple_animal/hostile/sentinel/bullet_act(var/obj/item/projectile/P, var/def_zone) + if(istype(P, /obj/item/projectile/beam/sentinel) || istype(P, /obj/item/projectile/beam/monitor) || istype(P, /obj/item/projectile/beam/monitor_stun) ) + if(P.firer) + if(P.firer.faction == faction) + return PROJECTILE_FORCE_MISS + else + return PROJECTILE_FORCE_MISS + + return ..() + +/mob/living/simple_animal/hostile/sentinel/major + name = "Sentinel Major" + desc = "An automated defence drone made of advanced alien technology, this one seems to be a more advanced variant." + icon_state = "sentinel_major" + icon_living = "sentinel_major" + icon_dead = "sentinel_major_dead" + health = 200 + maxHealth = 200 + +/mob/living/simple_animal/hostile/sentinel/player_sentinel + name = "Sentinel" + desc = "An automated defence drone made of advanced alien technology. This one seems to posses some higher-thought functions." + health = 200 + maxHealth = 200 + resistance = 10 + +/mob/living/simple_animal/hostile/sentinel/player_sentinel/New() + sentinel_beam = new /obj/item/weapon/gun/energy/laser/sentinel_beam/detached (src) + //This beam is balanced for player use, so player sentinel gets one + . = ..() \ No newline at end of file diff --git a/code/modules/halo/forerunner/sentinel_kit.dm b/code/modules/halo/forerunner/sentinel_kit.dm new file mode 100644 index 0000000000000..b22c1d85e02e6 --- /dev/null +++ b/code/modules/halo/forerunner/sentinel_kit.dm @@ -0,0 +1,27 @@ + +/obj/item/sentinel_kit + name = "Unknown Device" + desc = "The shape of this device suggests it is made to be placed against the head of... A human being? Looks like other species are supported however." + icon = 'code/modules/halo/Forerunner/sentinel_kit.dmi' + icon_state = "sentinel_kit" + +/obj/item/sentinel_kit/proc/convert_person(var/mob/living/carbon/M,var/mob/user) + if(!M.client || !M.ckey) + to_chat(user,"[src] seems to do nothing, Perhaps it needs a target with a consciousness?") + return + user.visible_message("[user] places [src] against [M]'s head.\n[src] starts to glow...") + if(do_after(user, 10 SECONDS, M, 1, 1,INCAPACITATION_DEFAULT,1)) + M.visible_message("[M] falls limp, their body falling into a catatonic state.") + var/mob/living/simple_animal/hostile/sentinel/player_sentinel = new /mob/living/simple_animal/hostile/sentinel/player_sentinel(M.loc) + player_sentinel.visible_message("[src] glows as it reassembles itself into a functional sentinel") + player_sentinel.ckey = M.ckey + player_sentinel.faction = M.faction + to_chat(player_sentinel,"Your mind is ripped from the form it once occupied, then placed in an unfamiliar chassis. A moment of uncertainty passes, then a rush of information fills your mind. The secrets of the Forerunners revealed, the nature of the Flood... (You are expected to maintain allegiance with your previous faction, however, it is recommended that your character and personality be somewhat modified by this experience.)") + M.drop_from_inventory(src) + qdel(src) + +/obj/item/sentinel_kit/attack(var/mob/living/carbon/M, var/mob/user) + if(user.a_intent == "help") + convert_person(M,user) + else + . = ..() \ No newline at end of file diff --git a/code/modules/halo/forerunner/sentinel_kit.dmi b/code/modules/halo/forerunner/sentinel_kit.dmi new file mode 100644 index 0000000000000000000000000000000000000000..34e9dff139a3bdf18e5269d69ae217a4631dcc92 GIT binary patch literal 429 zcmV;e0aE^nP)lNJuX8%6I?(00DGTPE!Ct=GbNc0044&R9JLGWpiV4X>fFDZ*Bkpc$`yK zaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainGj7_;XGg33tGfF@*23*A@i6yB( zrc!ZgUP)$NYEFE1W{DCPXG&&KF;Li$i!-e#F*g;$R#tHJa{-$U04O&d7Ob7%R{#J2 zn@L1LR5*?8(a{cqFboCI-3`h%S5T(^|Esn$#%zq>qcL0_Io!0xm@{YoJ-{)sJLdB( zoa-Cd_X`XbV-E=tBoRWOY21z^#D{{SJOc@#OQYa?^1*w6nK9D@EY};F9wjLND|0M8 z>ypv-2+ next_sentinel_spawn) + spawn_sentinel() + + if(sentinel_check_index > all_sentinels.len) + sentinel_check_index = 1 + if(all_sentinels.len > 0) + var/mob/living/simple_animal/hostile/sentinel/S = all_sentinels[sentinel_check_index] + if(!S || S.stat == DEAD) + all_sentinels.Cut(sentinel_check_index, sentinel_check_index + 1) + reset_spawn_time() + sentinel_check_index++ + +/obj/structure/sentinel_spawner/proc/spawn_sentinel() + flick("spawner_active", src) + var/mob/living/simple_animal/hostile/sentinel/S = new(src.loc) + S.faction = sentinel_faction + all_sentinels.Add(S) + src.visible_message("\icon[src] [src] releases \the[S]!") + reset_spawn_time() + +/obj/structure/sentinel_spawner/proc/reset_spawn_time() + next_sentinel_spawn = world.time + sentinel_respawn_time + +/obj/structure/sentinel_spawner/respawn30sec + sentinel_respawn_time = 30 SECONDS \ No newline at end of file diff --git a/code/modules/halo/forerunner/species/knight/knight.dm b/code/modules/halo/forerunner/species/knight/knight.dm new file mode 100644 index 0000000000000..5f5fa5ab1f59f --- /dev/null +++ b/code/modules/halo/forerunner/species/knight/knight.dm @@ -0,0 +1,204 @@ + +#define KNIGHT_TELEPORT_ANIM_TIME 2 +#define KNIGHT_DEATH_TP_DELAY 3 SECONDS + +/datum/species/knight + name = "Knight" + name_plural = "Knights" + blurb = "???" + + //flesh_color = "#4A4A64" + //blood_color = "#AB36AF" + icobase = 'code/modules/halo/Forerunner/species/knight/knight.dmi' //The DMI needed modification to fit the usual format (see other species' dmis) + deform = 'code/modules/halo/Forerunner/species/knight/knight.dmi' + icon_template = 'code/modules/halo/Forerunner/species/knight/knight_template.dmi' + + damage_overlays = 'code/modules/halo/Forerunner/species/knight/knight_dam.dmi' + damage_mask = 'code/modules/halo/Forerunner/species/knight/knight_dam.dmi' + blood_mask = 'code/modules/halo/Forerunner/species/knight/knight_blood.dmi' + + flags = NO_MINOR_CUT | NO_EMBED | NO_SCAN | NO_PAIN | NO_SLIP | NO_POISON + + pixel_offset_x = -26 + item_icon_offsets = list(list(26,3),list(26,0),null,list(17,2),null,null,null,list(31,2),null) + inhand_icon_offsets = list(list(5,0),list(-7,0),null,list(2,0),null,null,null,list(2,0),null) + inter_hand_dist = 14 + roll_distance = 3 + dodge_roll_delay = DODGE_ROLL_BASE_COOLDOWN - 2 SECOND + + total_health = 300 + radiation_mod = 0 + virus_immune = 1 + breath_type = null + poison_gases = list() + + spawn_flags = SPECIES_IS_RESTRICTED + appearance_flags = HAS_SKIN_TONE + brute_mod = 1 + burn_mod = 1 + pain_mod = 0 + slowdown = -0.2 + explosion_effect_mod = 0 + can_force_door = 1 + + warning_low_pressure = -1 + hazard_low_pressure = -1 + cold_level_1 = 260 + cold_level_2 = 200 + cold_level_3 = 120 + + death_message = "dims, power flowing out of them..." + knockout_message = "has been knocked unconscious!" + halloss_message = "freezes up, and falls to the ground..." + halloss_message_self = "Sensory inputs overloaded..." + + inherent_verbs = list(/mob/living/proc/tele_evac) + + pain_scream_sounds = list(\ + 'code/modules/halo/sounds/species_pain_screams/knightscream.ogg', + 'code/modules/halo/sounds/species_pain_screams/knightscream2.ogg', + 'code/modules/halo/sounds/species_pain_screams/knightscream3.ogg' + ) + + has_organ = list( + "elegiast" = /obj/item/organ/internal/knight_core, + BP_BRAIN = /obj/item/organ/internal/brain/knight + ) + + has_limbs = list( + BP_CHEST = list("path" = /obj/item/organ/external/chest/knight), + BP_GROIN = list("path" = /obj/item/organ/external/groin/knight), + BP_HEAD = list("path" = /obj/item/organ/external/head/knight), + BP_L_ARM = list("path" = /obj/item/organ/external/arm/knight), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right/knight), + BP_L_LEG = list("path" = /obj/item/organ/external/leg/knight), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right/knight), + BP_L_HAND = list("path" = /obj/item/organ/external/hand/knight), + BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/knight), + BP_L_FOOT = list("path" = /obj/item/organ/external/foot/knight), + BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/knight) + ) + +/datum/species/knight/handle_death_check(var/mob/living/carbon/human/h) + . = ..() + if(.) + return + var/obj/item/organ/core = h.internal_organs_by_name["elegiast"] + if(!core || core.damage == core.max_damage || (core.status & ORGAN_DEAD)) + return TRUE + return FALSE + +/datum/species/knight/handle_death(var/mob/living/carbon/human/H) + H.visible_message("[H] begins to disintegrate as it starts an emergency translocation jump...") + H.Stun(KNIGHT_DEATH_TP_DELAY) + sleep(KNIGHT_DEATH_TP_DELAY) + H.do_tele_evac(null) + +/datum/species/knight/handle_dodge_roll(var/mob/roller,var/rolldir,var/roll_dist,var/roll_delay) + . = 1 //We don't want to be able to do normal rolls + var/turf/endpoint = null + var/turf/step_to = roller.loc + for(var/i = 0,i < roll_dist,i++) + step_to = get_step(step_to,rolldir) + if(step_to.density == 0) + endpoint = step_to + if(endpoint && endpoint.density == 0) + new /obj/effect/knightroll_tp(roller.loc) + new /obj/effect/knightroll_tp (endpoint) + roller.forceMove(endpoint) + +/datum/species/knight/get_random_name(var/gender) + return pick(GLOB.yanmee_nicknames) + +/datum/species/knight/handle_post_spawn(var/mob/living/carbon/human/H) + ..() + H.name = "Knight [rand(0,999)] \"[H.name]\"" + H.real_name = H.name + +/datum/species/knight/apply_species_name_formatting(var/to_format_name) + return "Knight [rand(1,999)] \"[to_format_name]\"" + +/obj/effect/knightroll_tp + name = "slipspace teleport" + desc = "a teleportion portal" + icon = 'code/modules/halo/Forerunner/species/knight/knight_armour.dmi' + icon_state = "teleport" + var/die_at + +/obj/effect/knightroll_tp/Initialize() + . = ..() + die_at = world.time + KNIGHT_TELEPORT_ANIM_TIME + GLOB.processing_objects += src + +/obj/effect/knightroll_tp/process() + if(world.time >= die_at) + qdel(src) + return + +/obj/item/organ/internal/brain/knight + name = "knight durance" + desc = "Co-ordinates combat processing." + icon = 'code/modules/halo/Forerunner/species/knight/knight.dmi' + icon_state = "knight_durance" + robotic = ORGAN_ROBOT + +/obj/item/organ/internal/knight_core + name = "knight elegiast" + desc = "Supplies the system with power." + icon = 'code/modules/halo/Forerunner/species/knight/knight.dmi' + icon_state = "knight_elegiast" + robotic = ORGAN_ROBOT + max_damage = 800 + +/obj/item/organ/external/chest/knight + robotic = ORGAN_ROBOT + use_robotic_sprites = 0 + +/obj/item/organ/external/groin/knight + robotic = ORGAN_ROBOT + use_robotic_sprites = 0 + +/obj/item/organ/external/head/knight + eye_icon = "face" + eye_icon_location = 'code/modules/halo/Forerunner/species/knight/knight.dmi' + robotic = ORGAN_ROBOT + use_robotic_sprites = 0 + +/obj/item/organ/external/arm/knight + robotic = ORGAN_ROBOT + use_robotic_sprites = 0 + +/obj/item/organ/external/arm/right/knight + robotic = ORGAN_ROBOT + use_robotic_sprites = 0 + +/obj/item/organ/external/leg/knight + robotic = ORGAN_ROBOT + use_robotic_sprites = 0 + +/obj/item/organ/external/leg/right/knight + robotic = ORGAN_ROBOT + use_robotic_sprites = 0 + +/obj/item/organ/external/hand/knight + robotic = ORGAN_ROBOT + use_robotic_sprites = 0 + +/obj/item/organ/external/hand/right/knight + robotic = ORGAN_ROBOT + use_robotic_sprites = 0 + +/obj/item/organ/external/foot/knight + robotic = ORGAN_ROBOT + use_robotic_sprites = 0 + +/obj/item/organ/external/foot/right/knight + robotic = ORGAN_ROBOT + use_robotic_sprites = 0 + +/mob/living/carbon/human/knight/New(var/new_loc) + . = ..(new_loc,"Knight") + faction = "Forerunner" + +#undef KNIGHT_DEATH_TP_DELAY +#undef KNIGHT_TELEPORT_ANIM_TIME diff --git a/code/modules/halo/forerunner/species/knight/knight.dmi b/code/modules/halo/forerunner/species/knight/knight.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e2d1b87d18f72183cb7ce3f89d5f82d488f3d223 GIT binary patch literal 3985 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 need one hand free to use [src.name]") + + h.update_inv_l_hand() + h.update_inv_r_hand() + +/obj/item/clothing/gloves/knight_gauntlets/ui_action_click() + var/mob/living/carbon/human/h = loc + if(istype(h)) + toggle_blade(usr) \ No newline at end of file diff --git a/code/modules/halo/forerunner/species/knight/knight_armour.dmi b/code/modules/halo/forerunner/species/knight/knight_armour.dmi new file mode 100644 index 0000000000000000000000000000000000000000..c1a7d1396c226d7cd4a90b65bb6ef4bd88344936 GIT binary patch literal 1826 zcmV+-2i^FIP)V=-0C=2@k--jvFbsyz+fyuXH3kym&5MB;4)O|QK;5Qe zGh3DT_A)%^L4@?u{`vkkZDV#Qj%CI2Q%N7-yt0PvS+-3m8B~XIEOr?s5|ohmE9 zsJ}Oy0X2wZ4U{fI4d~@@2pVqI&4A;jI?((XRJ7kVMrtg68F#-%GeTzZLQ z!xz}lOO9swa-G2joG|kau`zbF?~lYFp5dLx^A9_Ie<$TO_$mCo%m$Uo*Wu*3XcG`&_$e&4K{^Oa-NSU9S&WOe0HcRRJ3tTw zK@bE%5ClOG1VNCaQIlNlY&AidNH3PE*)Aul4xBflnQ;8JH0{L7c17E=yKrKU4PWpr zy+IGQ_&-T=DgF0V1hiTg6vfZ%%$8 z<|V6ukW~#er`F`^mSvrB^|*j0?LZb^wK{L^XkvHS_>R)=)ZWfei}fgdkE6#0wAXL% zz)D!o+jAE*Gci3ZdnbTQe^~%VbtF@b3$g9>62T21(~|`x@b+&HgJ$>4fBKE9Zv)6Ga%$-^>{@1=-Dz{{r~0|s?m6wcK;H&{Iq9U$03`9V%CDa; zk{70JH#$V1ZvsfjEj>yj=4ZR}XUYyb1{%2--ly)MV?bwWnib-Rv}%G0f*=Tjq+t2% zDeuP1@+NQH`_o|RKi(DXL&!((VLtc1{#vvTAv13=e_BlbDcXmS@X-r`zy0!#!O;5> z_Ov<(2m4g5*bCP0>MxpQn01VIo4K@bE%5ClOG1VIo4K@bEfExNm+ zXd7a@IitMyzS8Fr--Z_)GfFfjN8ce~w6eC=Q z;q~blf*ET&~=~b6Bnt$ z@n(}wr?`O+7BIZ|lQ8+mTX(Twkm_uD0e5ec=?rOZPdF8)pSe3PUSdp`0daDZOy7?T z%dpO-cPPGnn@r!23cIEH8qkn4NalKS&{w8RR(Xk_}n)ujJqGWyiCuZX#Oq7 zY4zNRz5>NxgfcyMqIFVymq?kOH~MTfONA@3OwXN%2|ErmW}<~krss}3W{0}Qvnwzl z(-8zg5ClOG1VIo4K@bE%kRO~;zcPaK!Rn_tMngrp1so3gic%@i;b_QONbGPh*lvs9 zbQHDFNN`h{DwA1(qVB45vo?6o*N1C^;D05~k(*&;@K$IrdM?V~>1b_`-^bPU;2RXw z$2X&>iKszt6UIGUTp!aR7|&8Pn2OV+LCzqo4ma!H;FdQC6Yo_I?oMHIWNVN&ORC!i zx|ms#-QecUTpI94FqkukF<8yddgfWI#GRZ^2P?95u<~*p?C%t)vgV_kJJyJ~v|~nt z`SW4>UHpL~_eWcUqssAYZIK+!43bAPoP%oGvvJ2(^O`EzjtA+vN_?&`Qr2yKV6q)i zSDAhGdHR&oItibX^poc#yfMhyud?!}fTyk*0MF_w$+Notj$B=DqsGf=y@t+-(apIvAV`1vvVd0l5670O^t9G2 Q#sB~S07*qoM6N<$g7x8MIsgCw literal 0 HcmV?d00001 diff --git a/code/modules/halo/forerunner/species/knight/knight_blood.dmi b/code/modules/halo/forerunner/species/knight/knight_blood.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e4e3df54782f637ccc7c84a1bb521500a2098f0e GIT binary patch literal 361 zcmV-v0ha!WP)trodXg_%(}l863|_lvpi2Jueel^vSMFtM z0002^7sV{s`u+pADcj8s0000S<}}N-zW+e>81uZ@fnPBIVQmbbD<_5g00000NkvXX Hu0mjf2St@# literal 0 HcmV?d00001 diff --git a/code/modules/halo/forerunner/species/knight/knight_dam.dmi b/code/modules/halo/forerunner/species/knight/knight_dam.dmi new file mode 100644 index 0000000000000000000000000000000000000000..2a8c3f96dfc36e0bbb05250f1347809e08877d77 GIT binary patch literal 185 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 literal 0 HcmV?d00001 diff --git a/code/modules/halo/forerunner/turfs/materials.dm b/code/modules/halo/forerunner/turfs/materials.dm new file mode 100644 index 0000000000000..bea0fb85cf701 --- /dev/null +++ b/code/modules/halo/forerunner/turfs/materials.dm @@ -0,0 +1,41 @@ + + + +/* NANOLAMINATE */ + +/material/forerunner_alloy + name = "forerunner alloy" + display_name = "forerunner alloy" + + shard_can_repair = 0 + + icon_base = "forerunner_alloy" + icon_reinf = "reinf_over" + stack_origin_tech = list(TECH_MATERIAL = 5) + + cut_delay = 5 MINUTES + + melting_point = 17273 + + brute_armor = 20 + burn_armor = 20 + + integrity = 1000 + + explosion_resistance = 30 + + stack_type = /obj/item/stack/material/forerunner_alloy + + hardness = 80 + weight = 25 + +/obj/item/stack/material/forerunner_alloy + name = "forerunner alloy" + singular_name = "forerunner alloy sheet" + icon = 'code/modules/halo/icons/materials/forerunner/materials.dmi' + icon_state = "alloy" + default_type = "alloy" + amount = 1 + max_amount = 50 + material = /material/nanolaminate + stacktype = /obj/item/stack/material/nanolaminate \ No newline at end of file diff --git a/code/modules/halo/forerunner/turfs/walls.dm b/code/modules/halo/forerunner/turfs/walls.dm new file mode 100644 index 0000000000000..f5dc50da31f46 --- /dev/null +++ b/code/modules/halo/forerunner/turfs/walls.dm @@ -0,0 +1,20 @@ + +/turf/simulated/wall/forerunner + name = "forerunner alloy wall" + desc = "An armor-plated wall which acts as both protection and separation" + icon_state = "forerunner_alloy" + + floor_type = /turf/simulated/floor/forerunner_alloy + +/turf/simulated/wall/forerunner/New(var/newloc) + . = ..(newloc,"forerunner alloy") + +/turf/simulated/wall/forerunner/old + name = "forerunner alloy wall" + desc = "An armor-plated wall which acts as both protection and separation" + icon_state = "forerunner_alloy_old" + + floor_type = /turf/simulated/floor/forerunner_alloy/old + +/turf/simulated/wall/forerunner/New(var/newloc) + . = ..(newloc,"forerunner alloy") \ No newline at end of file diff --git a/code/modules/halo/forerunner/watcher.dm b/code/modules/halo/forerunner/watcher.dm new file mode 100644 index 0000000000000..23f77ad9c0647 --- /dev/null +++ b/code/modules/halo/forerunner/watcher.dm @@ -0,0 +1,72 @@ + +#define WATCHER_IDLE_ROBOHEAL -5 +#define WATCHER_IDLE_ARMOURREPAIR 2 + +/mob/living/simple_animal/hostile/watcher + name = "Watcher" + desc = "A fragment of a Knight's personality. These provide support to troops, with light damage capabilities." + faction = "Forerunner" + icon = 'code/modules/halo/Forerunner/watcher.dmi' + icon_state = "watcher_active" + icon_living = "watcher_active" + icon_dead = "watcher" + universal_speak = 1 + universal_understand = 1 + response_harm = "batters" + health = 150 + maxHealth = 150 + ranged = 1 + move_to_delay = 5 + resistance = 15 + speak_chance = 0 + pixel_x = -12 + speak = list() + emote_see = list("rotates its flight-rings","scans its body for damage","scans the environment") + emote_hear = list("buzzes") + + possible_weapons = list(/obj/item/weapon/gun/projectile/boltshot,/obj/item/weapon/gun/projectile/boltshot/shotgun_preload) + possible_grenades = list(/obj/item/weapon/grenade/splinter) + + death_sounds = list('code/modules/halo/sounds/forerunner/sentDeath1.ogg','code/modules/halo/sounds/forerunner/sentDeath2.ogg','code/modules/halo/sounds/forerunner/sentDeath3.ogg','code/modules/halo/sounds/forerunner/sentDeath4.ogg') + +/mob/living/simple_animal/hostile/watcher/Life() + if(isturf(src.loc) || istype(src.loc,/obj/vehicles)) + if(!stat) + if(stance == HOSTILE_STANCE_IDLE) + var/did_something = 0 + for(var/mob/living/carbon/human/h in view(3,loc)) + for(var/obj/item/organ/o in h.internal_organs|h.organs) + if(o.damage == 0) + continue + if(o.robotic) + var/obj/item/organ/external/e = o + if(istype(e)) + e.heal_damage(-WATCHER_IDLE_ROBOHEAL, -WATCHER_IDLE_ROBOHEAL, 1, 1) + else + o.take_damage(WATCHER_IDLE_ROBOHEAL,1) + did_something = 1 + for(var/obj/item/clothing/c in h.contents) + if(c.armor_thickness < c.armor_thickness_max) + c.armor_thickness = min(c.armor_thickness + WATCHER_IDLE_ARMOURREPAIR,c.armor_thickness_max) + did_something = 1 + if(did_something) + visible_message("[src] pulses, repairing nearby electronics and armour") + + . = ..() + +/mob/living/simple_animal/hostile/watcher/doRoll(var/rolldir,var/roll_dist,var/roll_delay) + var/turf/endpoint = null + var/turf/step_to = loc + for(var/i = 0,i < roll_dist,i++) + step_to = get_step(step_to,rolldir) + if(step_to.density == 0) + endpoint = step_to + if(endpoint && endpoint.density == 0) + new /obj/effect/knightroll_tp(loc) + new /obj/effect/knightroll_tp (endpoint) + forceMove(endpoint) + +/mob/living/simple_animal/hostile/watcher/death() + new /obj/effect/knightroll_tp (loc) + qdel(src) + diff --git a/code/modules/halo/forerunner/watcher.dmi b/code/modules/halo/forerunner/watcher.dmi new file mode 100644 index 0000000000000000000000000000000000000000..942e1affd6a793316ff19c26f36b900effd90ba0 GIT binary patch literal 7046 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 q@WFY9tzP} literal 0 HcmV?d00001 From 1d8c60a149d421ee5a4b967313f91a7a15567389 Mon Sep 17 00:00:00 2001 From: X0-11 Date: Thu, 1 Feb 2024 13:45:59 +0000 Subject: [PATCH 3/3] melee strike fix --- code/modules/halo/misc/melee_strikes.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/halo/misc/melee_strikes.dm b/code/modules/halo/misc/melee_strikes.dm index b4113e2a8ee86..982a78e210aca 100644 --- a/code/modules/halo/misc/melee_strikes.dm +++ b/code/modules/halo/misc/melee_strikes.dm @@ -41,14 +41,14 @@ . = ..() /obj/item/proc/has_melee_strike(var/mob/user) - if(isnull(melee_strikes)) + if(isnull(melee_strikes) || melee_strikes.len == 0) return null if(isnull(melee_strike)) melee_strike = melee_strikes[1] if(!isnull(melee_strike)) melee_strike.strike_active(user) - return melee_strike + return 1 /obj/item/proc/verb_swap_stances() set name = "Swap Stances"