Merge pull request #6584 from CHOMPStation2/upstream-merge-15138

[MIRROR] Adds altevian NPCs for event use
This commit is contained in:
Raeschen
2023-07-16 00:04:55 +02:00
committed by GitHub
5 changed files with 230 additions and 3 deletions

View File

@@ -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'

View File

@@ -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)

View File

@@ -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")

View File

@@ -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"

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB