Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Horror Form Lings! [Requires Work] [WIP] #448

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions NTstation13.dme
Original file line number Diff line number Diff line change
Expand Up @@ -254,13 +254,20 @@
#include "code\game\gamemodes\changeling\changeling_power.dm"
#include "code\game\gamemodes\changeling\evolution_menu.dm"
#include "code\game\gamemodes\changeling\traitor_chan.dm"
#include "code\game\gamemodes\changeling\changeling-horror-mob\changeling_horror.dm"
#include "code\game\gamemodes\changeling\changeling-horror-mob\death.dm"
#include "code\game\gamemodes\changeling\changeling-horror-mob\head_spider.dm"
#include "code\game\gamemodes\changeling\changeling-horror-mob\interactions.dm"
#include "code\game\gamemodes\changeling\changeling-horror-mob\life.dm"
#include "code\game\gamemodes\changeling\changeling-horror-mob\update_icons.dm"
#include "code\game\gamemodes\changeling\powers\absorb.dm"
#include "code\game\gamemodes\changeling\powers\digitalcamo.dm"
#include "code\game\gamemodes\changeling\powers\epinephrine.dm"
#include "code\game\gamemodes\changeling\powers\fakedeath.dm"
#include "code\game\gamemodes\changeling\powers\fleshmend.dm"
#include "code\game\gamemodes\changeling\powers\glands.dm"
#include "code\game\gamemodes\changeling\powers\hivemind.dm"
#include "code\game\gamemodes\changeling\powers\horrorform.dm"
#include "code\game\gamemodes\changeling\powers\humanform.dm"
#include "code\game\gamemodes\changeling\powers\lesserform.dm"
#include "code\game\gamemodes\changeling\powers\mimic_voice.dm"
Expand Down
5 changes: 5 additions & 0 deletions NTstation13.int
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
// BEGIN_INTERNALS
/*
MAP_ICON_TYPE: 0
LAST_COMPILE_VERSION: 503.1224
WINDOW: icons\mob\animal.dmi;code\game\gamemodes\changeling\changeling-horror-mob\changeling_horror.dm;code\game\gamemodes\changeling\changeling-horror-mob\update_icons.dm;code\modules\mob\living\carbon\monkey\update_icons.dm
DIR: code code\game code\game\gamemodes code\game\gamemodes\changeling code\game\gamemodes\changeling\changeling-horror-mob code\modules code\modules\mob code\modules\mob\living code\modules\mob\living\carbon code\modules\mob\living\carbon\monkey icons icons\mob
FILE: code\game\gamemodes\changeling\changeling-horror-mob\update_icons.dm
LAST_COMPILE_TIME: 1399564164
AUTO_FILE_DIR: OFF
*/
// END_INTERNALS
2 changes: 2 additions & 0 deletions code/_onclick/hud/hud.dm
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,8 @@ datum/hud/New(mob/owner)
monkey_hud(ui_style)
else if(isbrain(mymob))
brain_hud(ui_style)
else if(ishorror(mymob))
changelinghorror_hud(ui_style)
else if(islarva(mymob))
larva_hud()
else if(isalien(mymob))
Expand Down
134 changes: 134 additions & 0 deletions code/_onclick/hud/other_mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,137 @@
mymob.client.screen = null

mymob.client.screen += list(blobpwrdisplay, blobhealthdisplay)


/datum/hud/proc/changelinghorror_hud(ui_style = 'icons/mob/screen_midnight.dmi') //Not really deserving of it's own File - RR
adding = list()
other = list()

var/obj/screen/using
var/obj/screen/inventory/inv_box

lingchemdisplay = new /obj/screen()
lingchemdisplay.name = "chemical storage"
lingchemdisplay.icon_state = "power_display"
lingchemdisplay.screen_loc = ui_lingchemdisplay
lingchemdisplay.layer = 20
lingchemdisplay.invisibility = 101

lingstingdisplay = new /obj/screen()
lingstingdisplay.name = "current sting"
lingstingdisplay.screen_loc = ui_lingstingdisplay
lingstingdisplay.layer = 20
lingstingdisplay.invisibility = 101

mymob.pullin = new /obj/screen()
mymob.pullin.icon = ui_style
mymob.pullin.icon_state = "pull0"
mymob.pullin.name = "pull"
mymob.pullin.screen_loc = ui_pull_resist

inv_box = new /obj/screen/inventory()
inv_box.name = "r_hand"
inv_box.icon = ui_style
inv_box.icon_state = "hand_r_inactive"
if(mymob && !mymob.hand)
inv_box.icon_state = "hand_r_active"
inv_box.screen_loc = ui_rhand
inv_box.slot_id = slot_r_hand
inv_box.layer = 19
r_hand_hud_object = inv_box
adding += inv_box

inv_box = new /obj/screen/inventory()
inv_box.name = "l_hand"
inv_box.icon = ui_style
inv_box.icon_state = "hand_l_inactive"
if(mymob && mymob.hand)
inv_box.icon_state = "hand_l_active"
inv_box.screen_loc = ui_lhand
inv_box.slot_id = slot_l_hand
inv_box.layer = 19
l_hand_hud_object = inv_box
adding += inv_box

using = new /obj/screen()
using.name = "drop"
using.icon = ui_style
using.icon_state = "act_drop"
using.screen_loc = ui_drop_throw
using.layer = 19
adding += using

mymob.throw_icon = new /obj/screen()
mymob.throw_icon.icon = ui_style
mymob.throw_icon.icon_state = "act_throw_off"
mymob.throw_icon.name = "throw/catch"
mymob.throw_icon.screen_loc = ui_drop_throw

using = new /obj/screen()
using.name = "mov_intent"
using.icon = ui_style
using.icon_state = (mymob.m_intent == "run" ? "running" : "walking")
using.screen_loc = ui_zonesel
using.layer = 20
adding += using
move_intent = using

using = new /obj/screen()
using.name = "act_intent"
using.icon_state = mymob.a_intent
using.screen_loc = ui_acti
using.layer = 20
adding += using
action_intent = using

using = new /obj/screen()
using.name = "equip"
using.icon = ui_style
using.icon_state = "act_equip"
using.screen_loc = ui_equip
using.layer = 20
adding += using

using = new /obj/screen()
using.name = "hand"
using.icon = ui_style
using.icon_state = "swap_1_m"
using.screen_loc = ui_swaphand1
using.layer = 19
adding += using

using = new /obj/screen()
using.name = "hand"
using.icon = ui_style
using.icon_state = "swap_2"
using.screen_loc = ui_swaphand2
using.layer = 19
adding += using

using = new /obj/screen()
using.name = "resist"
using.icon = ui_style
using.icon_state = "act_resist"
using.screen_loc = ui_pull_resist
using.layer = 19
adding += using

mymob.bodytemp = new /obj/screen()
mymob.bodytemp.icon_state = "temp1"
mymob.bodytemp.name = "body temperature"
mymob.bodytemp.screen_loc = ui_temp

mymob.healths = new /obj/screen()
mymob.healths.icon_state = "health0"
mymob.healths.name = "health"
mymob.healths.screen_loc = ui_health

mymob.fire = new /obj/screen()
mymob.fire.icon_state = "fire0"
mymob.fire.name = "fire"
mymob.fire.screen_loc = ui_fire

mymob.client.screen = null

mymob.client.screen += list(lingchemdisplay, lingstingdisplay, mymob.pullin, mymob.healths, mymob.bodytemp, mymob.fire, mymob.throw_icon)
mymob.client.screen += adding + other
27 changes: 27 additions & 0 deletions code/_onclick/other_mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -123,3 +123,30 @@
*/
/mob/new_player/ClickOn()
return


/*
Horror Form Changelings:
Unique Attack features need passing to unique proc
*/

/mob/living/carbon/changelinghorror/UnarmedAttack(var/atom/A)
A.attack_horror(src)

/atom/proc/attack_horror(mob/user as mob)
user.attack_alien(src) //Where we haven't handled a special case, let alien handle it.

/mob/living/carbon/changelinghorror/RestrainedClickOn(var/atom/A)
return


/*
Changeling Head Spiders:
Just a proc override to let them use the takeover proc
*/
/mob/living/simple_animal/head_spider/UnarmedAttack(var/atom/A)
if(!iscarbon(A))
A.attack_animal(src)

var/mob/living/carbon/C = A
attempt_takeover(C)
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@

/mob/living/carbon/changelinghorror
icon = 'icons/mob/changelinghorror.dmi'
name = "Shambling Abomination"
desc = "What disgusting horror birthed this monstrosity?"
maxHealth = 350
health = 350
factions = list("changeling")
var/Default_Damage = 30
var/oxygen_alert = 0
var/toxins_alert = 0
var/fire_alert = 0
var/pressure_alert = 0


/mob/living/carbon/changelinghorror/assimilant
maxHealth = 200
health = 200
Default_Damage = 20


/mob/living/carbon/changelinghorror/Stat()
..()
statpanel("Status")
stat(null, text("Intent: []", a_intent))
stat(null, text("Move Mode: []", m_intent))
if(client && mind)
if(client.statpanel == "Status")
if(mind.changeling)
stat("Chemical Storage:", "[mind.changeling.chem_charges]/[mind.changeling.chem_storage]")
stat("Absorbed DNA", mind.changeling.absorbedcount)
return


/mob/living/carbon/changelinghorror/say(var/message)
if (!message)
return

if (src.client)
if(client.prefs.muted & MUTE_IC)
src << "You cannot send IC messages (muted)."
return
if (src.client.handle_spam_prevention(message,MUTE_IC))
return

if (stat)
return

horror_say(message)


/mob/living/carbon/changelinghorror/proc/horror_say(var/message)
log_say("[key_name(src)] : [message]")

message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))

if(!message)
return

var/message_a = say_quote(message)
var/rendered = "<i><span class='game say'><span class='name'>[name]</span> <span class='message'>[message_a]</span></span></i>"


visible_message(rendered)








17 changes: 17 additions & 0 deletions code/game/gamemodes/changeling/changeling-horror-mob/death.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@

/mob/living/carbon/changelinghorror/death(gibbed)
if(stat == DEAD)
return
if(healths)
healths.icon_state = "health5"
stat = DEAD
dizziness = 0
jitteriness = 0

if(!gibbed)
update_canmove()
if(client)
if(blind)
blind.layer = 0

return ..(gibbed)
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@

/mob/living/simple_animal/head_spider
name = "Unknown-Head Spider"
desc = "You can't quite make out who it looks like..."
icon = 'icons/mob/changelinghorror.dmi'
icon_state = "head_spider"
icon_living = "head_spider"
icon_dead = "head_spider_dead"

speak_chance = 0
turns_per_move = 5
response_help = "thinks better of touching"
response_disarm = "cautiously shoves"
response_harm = "hits"
speed = 0
maxHealth = 40
health = 40

harm_intent_damage = 0
melee_damage_lower = 0
melee_damage_upper = 0
attacktext = "leaps at"

min_oxy = 0
max_oxy = 0
min_tox = 0
max_tox = 0
min_co2 = 0
max_co2 = 0
min_n2 = 0
max_n2 = 0
minbodytemp = 0

factions = list("changeling")

var/datum/dna/active_dna

/mob/living/simple_animal/head_spider/proc/attempt_takeover(mob/living/carbon/Victim)
if(!istype(Victim))
return

if(ischangeling(Victim) || ishorror(Victim))
src << "<span class='warning'>We will not Assimilate our own kind!</span>"
return

if(ishuman(Victim)) //Only humans have a head slot
var/mob/living/carbon/human/HV = Victim
if(HV.head)
if(HV.head.flags_inv & HIDEFACE)
src << "<span class='warning'>Their [HV.head.name] prevents you from attatching!</span>"
return

if(Victim.wear_mask)
if(Victim.wear_mask.flags_inv & MASKCOVERSMOUTH)
src << "<span class='warning'>Their [Victim.wear_mask.name] prevents you from Attatching!</span>"
return

//"Revive" previous changeling inside of Victim

visible_message("<span class='danger'>The [name] is trying to climb onto [Victim]!</span>","<span class='danger'>We are climbing [Victim], we must hold still!</span>")

if(!do_after(src,20))
visible_message("<span class='danger'>The [name] falls off of [Victim]!</span>","<span class='danger'>We have fallen!</span>")
return


if(mind && mind.changeling)
Victim.visible_message("<span class='danger'>The [name] climbs onto [Victim]'s head!</span>","<span class='danger'>The [name] climbs onto your head!</span>")
Victim.ghostize(0)
mind.transfer_to(Victim)
Victim << "<span class='danger'>Assimilation Complete!</span>" //Victim = ling here
qdel(src)

return


/mob/living/simple_animal/head_spider/Die()
if(ticker && ticker.mode)
ticker.mode.check_win() //our mind is (should be) a Ling

..()
Loading