mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
Merge pull request #6584 from CHOMPStation2/upstream-merge-15138
[MIRROR] Adds altevian NPCs for event use
This commit is contained in:
@@ -39,3 +39,12 @@
|
||||
|
||||
/obj/item/weapon/storage/box/freezer
|
||||
can_hold = list(/obj/item/organ, /obj/item/weapon/reagent_containers/blood, /obj/item/weapon/reagent_containers/glass, /obj/item/weapon/reagent_containers/food)
|
||||
|
||||
/obj/item/weapon/storage/box/altevian_ammo
|
||||
name = "SAM .48 ammo box"
|
||||
desc = "A box of ratty ammo."
|
||||
icon_state = "secbox"
|
||||
starts_with = list(/obj/item/ammo_magazine/sam48 = 3)
|
||||
max_storage_space = ITEMSIZE_COST_NORMAL * 3
|
||||
drop_sound = 'sound/items/drop/ammobox.ogg'
|
||||
pickup_sound = 'sound/items/pickup/ammobox.ogg'
|
||||
|
||||
@@ -26,6 +26,12 @@
|
||||
var/corpseidjob = null // Needs to be in quotes, such as "Clown" or "Chef." This just determines what the ID reads as, not their access
|
||||
var/corpseidaccess = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access.
|
||||
var/corpseidicon = null //For setting it to be a gold, silver, CentCom etc ID
|
||||
var/species = SPECIES_HUMAN //defaults to generic-ass humans
|
||||
var/random_species = FALSE //flip to TRUE to randomize species from the list below
|
||||
var/list/random_species_list = list(SPECIES_HUMAN,SPECIES_TAJ,SPECIES_UNATHI,SPECIES_SKRELL)
|
||||
var/list/tail_type = null
|
||||
var/list/ear_type = null
|
||||
var/list/wing_type = null
|
||||
var/corpsesynthtype = 0 // 0 for organic, 1 for drone, 2 for posibrain
|
||||
var/corpsesynthbrand = "Unbranded"
|
||||
var/corpsesensormode = 0 //CHOMPAdd - For setting the suit sensors of a corpse. Default to 0 so we don't annoy medbay.
|
||||
@@ -35,6 +41,69 @@
|
||||
|
||||
/obj/effect/landmark/mobcorpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it.
|
||||
var/mob/living/carbon/human/M = new /mob/living/carbon/human (src.loc)
|
||||
if(random_species)
|
||||
var/random_pick = pick(random_species_list)
|
||||
M.set_species(random_pick)
|
||||
src.species = random_pick
|
||||
else
|
||||
M.set_species(species)
|
||||
if(tail_type && tail_type.len)
|
||||
if(tail_type[1] in tail_styles_list)
|
||||
M.tail_style = tail_styles_list[tail_type[1]]
|
||||
if(tail_type.len > 1)
|
||||
var/list/color_rgb_list = hex2rgb(tail_type[2])
|
||||
M.r_tail = color_rgb_list[1]
|
||||
M.g_tail = color_rgb_list[2]
|
||||
M.b_tail = color_rgb_list[3]
|
||||
if(tail_type.len > 2)
|
||||
color_rgb_list = hex2rgb(tail_type[3])
|
||||
M.r_tail2 = color_rgb_list[1]
|
||||
M.g_tail2 = color_rgb_list[2]
|
||||
M.b_tail2 = color_rgb_list[3]
|
||||
if(tail_type.len > 3)
|
||||
color_rgb_list = hex2rgb(tail_type[4])
|
||||
M.r_tail3 = color_rgb_list[1]
|
||||
M.g_tail3 = color_rgb_list[2]
|
||||
M.b_tail3 = color_rgb_list[3]
|
||||
M.update_tail_showing()
|
||||
if(ear_type && ear_type.len)
|
||||
if(ear_type[1] in ear_styles_list)
|
||||
M.ear_style = ear_styles_list[ear_type[1]]
|
||||
if(ear_type.len > 1)
|
||||
var/list/color_rgb_list = hex2rgb(ear_type[2])
|
||||
M.r_ears = color_rgb_list[1]
|
||||
M.g_ears = color_rgb_list[2]
|
||||
M.b_ears = color_rgb_list[3]
|
||||
if(ear_type.len > 2)
|
||||
color_rgb_list = hex2rgb(ear_type[3])
|
||||
M.r_ears2 = color_rgb_list[1]
|
||||
M.g_ears2 = color_rgb_list[2]
|
||||
M.b_ears2 = color_rgb_list[3]
|
||||
if(ear_type.len > 3)
|
||||
color_rgb_list = hex2rgb(ear_type[4])
|
||||
M.r_ears3 = color_rgb_list[1]
|
||||
M.g_ears3 = color_rgb_list[2]
|
||||
M.b_ears3 = color_rgb_list[3]
|
||||
M.update_hair()
|
||||
if(wing_type && wing_type.len)
|
||||
if(wing_type[1] in wing_styles_list)
|
||||
M.wing_style = wing_styles_list[wing_type[1]]
|
||||
if(wing_type.len > 1)
|
||||
var/list/color_rgb_list = hex2rgb(wing_type[2])
|
||||
M.r_wing = color_rgb_list[1]
|
||||
M.g_wing = color_rgb_list[2]
|
||||
M.b_wing = color_rgb_list[3]
|
||||
if(wing_type.len > 2)
|
||||
color_rgb_list = hex2rgb(wing_type[3])
|
||||
M.r_wing2 = color_rgb_list[1]
|
||||
M.g_wing2 = color_rgb_list[2]
|
||||
M.b_wing2 = color_rgb_list[3]
|
||||
if(wing_type.len > 3)
|
||||
color_rgb_list = hex2rgb(wing_type[4])
|
||||
M.r_wing3 = color_rgb_list[1]
|
||||
M.g_wing3 = color_rgb_list[2]
|
||||
M.b_wing3 = color_rgb_list[3]
|
||||
M.update_wing_showing()
|
||||
M.real_name = generateCorpseName()
|
||||
M.set_stat(DEAD) //Kills the new mob
|
||||
if(corpsesynthtype > 0)
|
||||
@@ -49,7 +118,7 @@
|
||||
O.robotize(corpsesynthbrand)
|
||||
if(src.corpseuniform)
|
||||
M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform)
|
||||
if(M.w_uniform)
|
||||
if(M.w_uniform) //CHOMPEdit
|
||||
M.w_uniform?:sensor_mode = corpsesensormode //CHOMPEdit
|
||||
if(src.corpsesuit)
|
||||
M.equip_to_slot_or_del(new src.corpsesuit(M), slot_wear_suit)
|
||||
@@ -63,8 +132,6 @@
|
||||
M.equip_to_slot_or_del(new src.corpseglasses(M), slot_glasses)
|
||||
if(src.corpsemask)
|
||||
M.equip_to_slot_or_del(new src.corpsemask(M), slot_wear_mask)
|
||||
if(src.corpsehelmet)
|
||||
M.equip_to_slot_or_del(new src.corpsehelmet(M), slot_head)
|
||||
if(src.corpsebelt)
|
||||
M.equip_to_slot_or_del(new src.corpsebelt(M), slot_belt)
|
||||
if(src.corpsepocket1)
|
||||
@@ -93,6 +160,10 @@
|
||||
W.assignment = corpseidjob
|
||||
W.registered_name = M.real_name
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
if(src.corpsehelmet)
|
||||
M.equip_voidhelm_to_slot_or_del_with_refit(new src.corpsehelmet(M), slot_head, src.species)
|
||||
if(src.corpsesuit)
|
||||
M.equip_voidsuit_to_slot_or_del_with_refit(new src.corpsesuit(M), slot_wear_suit, src.species)
|
||||
delete_me = 1
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -24,3 +24,19 @@
|
||||
var/number = rand(0,999)
|
||||
var/purpose = pick(list("Recon","Combat","Kill","Guard","Scout","Murder","Capture","Raid","Attack","Battle"))
|
||||
return "[letter]-[number] [purpose] Droid"
|
||||
|
||||
/obj/effect/landmark/mobcorpse/altevian
|
||||
name = "Altevian Naval Officer"
|
||||
corpseuniform = /obj/item/clothing/under/altevian
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/altevian_heartbreaker
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/swat
|
||||
corpsegloves = /obj/item/clothing/gloves/swat
|
||||
corpseradio = /obj/item/device/radio/headset
|
||||
corpsemask = /obj/item/clothing/mask/altevian_breath
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/altevian_heartbreaker
|
||||
corpseid = 1
|
||||
corpseidjob = "Altevian Navy"
|
||||
corpseidaccess = "Syndicate"
|
||||
species = SPECIES_ALTEVIAN
|
||||
ear_type = list(/datum/sprite_accessory/ears/altevian, "#777777", "#FFCCFF")
|
||||
tail_type = list(/datum/sprite_accessory/tail/altevian, "#FF9999")
|
||||
@@ -0,0 +1,131 @@
|
||||
/mob/living/simple_mob/humanoid/merc/altevian
|
||||
name = "altevian naval officer"
|
||||
desc = "Altevian Naval Slicer, adorned in the top of the line Heartbreaker suit. Armed with a handheld cutter."
|
||||
tt_desc = "E Rattus sapiens"
|
||||
icon = 'icons/mob/altevian_mercs_vr.dmi'
|
||||
icon_state = "merc_melee_cutter"
|
||||
icon_living = "merc_melee_cutter"
|
||||
icon_dead = "merc-dead"
|
||||
icon_gib = "merc_gib"
|
||||
|
||||
faction = "altevian"
|
||||
movement_cooldown = 1
|
||||
|
||||
status_flags = 0
|
||||
|
||||
response_help = "pokes"
|
||||
response_disarm = "shoves"
|
||||
response_harm = "hits"
|
||||
|
||||
harm_intent_damage = 5
|
||||
melee_damage_lower = 30
|
||||
melee_damage_upper = 30
|
||||
attack_armor_pen = 50
|
||||
attack_sharp = TRUE
|
||||
attack_edge = 1
|
||||
attacktext = list("slashed")
|
||||
armor = list(melee = 90, bullet = 90, laser = 90, energy = 90, bomb = 90, bio = 100, rad = 100) //matches stats of suit they drop. Basically tank. Rat tank. Ratank.
|
||||
|
||||
corpse = /obj/effect/landmark/mobcorpse/altevian
|
||||
loot_list = list(/obj/item/weapon/melee/energy/sword/altevian = 100)
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/merc
|
||||
say_list_type = /datum/say_list/merc/altevian
|
||||
|
||||
/datum/say_list/merc/altevian
|
||||
speak = list("Operations going along as planned.",
|
||||
"No news to report, Mission Control. All is clear.",
|
||||
"Salvage operations still underway, no updates yet, Mission Control.")
|
||||
emote_see = list("squeaks", "flicks their tail", "looks around")
|
||||
|
||||
say_understood = list("Order received.", "Understood, Mission Control.")
|
||||
say_cannot = list("Unable to fulfill that request.", "Sorry... Running into some issues.")
|
||||
say_maybe_target = list("Hey... You can't hide after causing us trouble, mate...", "If you're hiding... You better be hiding well...", "Yeah... You better have left after causing us trouble...")
|
||||
say_got_target = list("Mouse found!", "Hostile being culled!", "Removing unwanted salvage!", "Culling threats!", "Suppressing!")
|
||||
say_threaten = list("This area is marked for salvage by the Hegemony, please vacate the area until we're done!", "Sorry, but we're conducting operations here and civilians are not permitted around here for the time being!", "Please disperse from the area, or we will have to respond in kind.")
|
||||
say_stand_down = list("Thank you for listening! Please have a safe day!", "Carry along, and keep safe.", "You're cleared to depart, thank you for not causing problems.")
|
||||
say_escalate = list("Team, we have mice attempting to steal our salvage!", "We've warned you! Please know this is just us following orders!", "Apologies, but we have to attack due to failing to listen to our order!")
|
||||
|
||||
threaten_sound = 'sound/weapons/TargetOn.ogg'
|
||||
stand_down_sound = 'sound/weapons/TargetOff.ogg'
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/altevian/sapper
|
||||
desc = "Altevian Naval Sapper, adorned in the top of the line Heartbreaker suit. Armed with a giant fokken wrench."
|
||||
icon_state = "merc_melee_wrench"
|
||||
icon_living = "merc_melee_wrench"
|
||||
|
||||
melee_damage_lower = 25
|
||||
melee_damage_upper = 25
|
||||
attack_armor_pen = 0
|
||||
attack_sharp = FALSE
|
||||
attack_edge = 0
|
||||
attacktext = list("whacked", "slammed", "bashed", "clonked", "bonked")
|
||||
attack_sound = 'sound/weapons/smash.ogg'
|
||||
|
||||
loot_list = list(/obj/item/weapon/melee/altevian_wrench = 100)
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/altevian/ranged
|
||||
desc = "Altevian Naval Salvage Guard, adorned in the top of the line Heartbreaker suit. Armed with a small energy gun."
|
||||
icon_state = "merc_gun_smol"
|
||||
icon_living = "merc_gun_smol"
|
||||
|
||||
|
||||
melee_damage_lower = 15 // Let's just pretend they have tacknife
|
||||
melee_damage_upper = 15
|
||||
attack_armor_pen = 20
|
||||
base_attack_cooldown = 8
|
||||
|
||||
loot_list = list(/obj/item/weapon/gun/energy/altevian = 100)
|
||||
|
||||
needs_reload = TRUE
|
||||
reload_time = 1.5 SECONDS
|
||||
reload_max = 6
|
||||
projectiletype = /obj/item/projectile/beam/meeplaser
|
||||
projectilesound = 'sound/weapons/Laser.ogg'
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/merc/ranged
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/altevian/ranged/strong
|
||||
desc = "Altevian Naval Salvage Shield, adorned in the top of the line Heartbreaker suit. Armed with a large energy gun."
|
||||
icon_state = "merc_gun_big"
|
||||
icon_living = "merc_gun_big"
|
||||
|
||||
base_attack_cooldown = 8
|
||||
|
||||
loot_list = list(/obj/item/weapon/gun/energy/altevian/large = 100)
|
||||
|
||||
needs_reload = TRUE
|
||||
reload_time = 3 SECONDS
|
||||
reload_max = 12
|
||||
projectiletype = /obj/item/projectile/beam/meeplaser/strong
|
||||
projectilesound = 'sound/weapons/Laser.ogg'
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/altevian/ranged/ballistic
|
||||
desc = "Altevian Naval Shipbreaker, adorned in the top of the line Heartbreaker suit. Armed with a bolter gun."
|
||||
icon_state = "merc_gun_ballistic"
|
||||
icon_living = "merc_gun_ballistic"
|
||||
|
||||
base_attack_cooldown = 10
|
||||
|
||||
loot_list = list(/obj/item/weapon/storage/box/altevian_ammo = 100, /obj/item/weapon/gun/projectile/altevian = 100)
|
||||
|
||||
needs_reload = TRUE
|
||||
reload_time = 5 SECONDS
|
||||
reload_max = 5
|
||||
projectiletype = /obj/item/projectile/bullet/sam48
|
||||
projectilesound = 'sound/weapons/Gunshot_heavy.ogg'
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/altevian/neutral
|
||||
faction = "neutral"
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/altevian/sapper/neutral
|
||||
faction = "neutral"
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/altevian/ranged/neutral
|
||||
faction = "neutral"
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/altevian/ranged/strong/neutral
|
||||
faction = "neutral"
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/altevian/ranged/ballistic/neutral
|
||||
faction = "neutral"
|
||||
BIN
icons/mob/altevian_mercs_vr.dmi
Normal file
BIN
icons/mob/altevian_mercs_vr.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.5 KiB |
Reference in New Issue
Block a user