diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index 28d0757f3e5..ff1c87d62c2 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -175,7 +175,7 @@ datum/hud/New(mob/owner)
var/ui_alpha = mymob.client.prefs.UI_style_alpha
if(issmall(mymob))
- monkey_hud(ui_style)
+ monkey_hud(ui_style, ui_color, ui_alpha)
else if(ishuman(mymob))
human_hud(ui_style, ui_color, ui_alpha) // Pass the player the UI style chosen in preferences
else if(isbrain(mymob))
diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm
index 095de121300..ce5493d22e8 100644
--- a/code/_onclick/hud/monkey.dm
+++ b/code/_onclick/hud/monkey.dm
@@ -1,7 +1,8 @@
-/datum/hud/proc/monkey_hud(var/ui_style='icons/mob/screen1_old.dmi')
+/datum/hud/proc/monkey_hud(var/ui_style='icons/mob/screen1_White.dmi', var/ui_color = "#ffffff", var/ui_alpha = 255)
src.adding = list()
src.other = list()
+ src.hotkeybuttons = list() //These can be disabled for hotkey usersx
var/obj/screen/using
var/obj/screen/inventory/inv_box
@@ -10,8 +11,10 @@
using.name = "act_intent"
using.dir = SOUTHWEST
using.icon = ui_style
- using.icon_state = (mymob.a_intent == "harm" ? "harm" : mymob.a_intent)
+ using.icon_state = "intent_"+mymob.a_intent
using.screen_loc = ui_acti
+ using.color = ui_color
+ using.alpha = ui_alpha
using.layer = 20
src.adding += using
action_intent = using
@@ -26,6 +29,7 @@
using.name = "help"
using.icon = ico
using.screen_loc = ui_acti
+ using.alpha = ui_alpha
using.layer = 21
src.adding += using
help_intent = using
@@ -37,6 +41,7 @@
using.name = "disarm"
using.icon = ico
using.screen_loc = ui_acti
+ using.alpha = ui_alpha
using.layer = 21
src.adding += using
disarm_intent = using
@@ -48,6 +53,7 @@
using.name = "grab"
using.icon = ico
using.screen_loc = ui_acti
+ using.alpha = ui_alpha
using.layer = 21
src.adding += using
grab_intent = using
@@ -59,6 +65,7 @@
using.name = "harm"
using.icon = ico
using.screen_loc = ui_acti
+ using.alpha = ui_alpha
using.layer = 21
src.adding += using
hurt_intent = using
@@ -72,6 +79,8 @@
using.icon_state = (mymob.m_intent == "run" ? "running" : "walking")
using.screen_loc = ui_movi
using.layer = 20
+ using.color = ui_color
+ using.alpha = ui_alpha
src.adding += using
move_intent = using
@@ -81,6 +90,8 @@
using.icon_state = "act_drop"
using.screen_loc = ui_drop_throw
using.layer = 19
+ using.color = ui_color
+ using.alpha = ui_alpha
src.adding += using
inv_box = new /obj/screen/inventory()
@@ -93,6 +104,8 @@
inv_box.screen_loc = ui_rhand
inv_box.slot_id = slot_r_hand
inv_box.layer = 19
+ inv_box.color = ui_color
+ inv_box.alpha = ui_alpha
src.r_hand_hud_object = inv_box
src.adding += inv_box
@@ -106,25 +119,31 @@
inv_box.screen_loc = ui_lhand
inv_box.slot_id = slot_l_hand
inv_box.layer = 19
+ inv_box.color = ui_color
+ inv_box.alpha = ui_alpha
src.l_hand_hud_object = inv_box
src.adding += inv_box
- using = new /obj/screen()
+ using = new /obj/screen/inventory()
using.name = "hand"
using.dir = SOUTH
using.icon = ui_style
using.icon_state = "hand1"
using.screen_loc = ui_swaphand1
using.layer = 19
+ using.color = ui_color
+ using.alpha = ui_alpha
src.adding += using
- using = new /obj/screen()
+ using = new /obj/screen/inventory()
using.name = "hand"
using.dir = SOUTH
using.icon = ui_style
using.icon_state = "hand2"
using.screen_loc = ui_swaphand2
using.layer = 19
+ using.color = ui_color
+ using.alpha = ui_alpha
src.adding += using
inv_box = new /obj/screen/inventory()
@@ -135,6 +154,8 @@
inv_box.screen_loc = ui_monkey_mask
inv_box.slot_id = slot_wear_mask
inv_box.layer = 19
+ inv_box.color = ui_color
+ inv_box.alpha = ui_alpha
src.adding += inv_box
inv_box = new /obj/screen/inventory()
@@ -145,6 +166,8 @@
inv_box.screen_loc = ui_back
inv_box.slot_id = slot_back
inv_box.layer = 19
+ inv_box.color = ui_color
+ inv_box.alpha = ui_alpha
src.adding += inv_box
mymob.throw_icon = new /obj/screen()
@@ -152,6 +175,9 @@
mymob.throw_icon.icon_state = "act_throw_off"
mymob.throw_icon.name = "throw"
mymob.throw_icon.screen_loc = ui_drop_throw
+ mymob.throw_icon.color = ui_color
+ mymob.throw_icon.alpha = ui_alpha
+ src.hotkeybuttons += mymob.throw_icon
mymob.oxygen = new /obj/screen()
mymob.oxygen.icon = ui_style
@@ -195,54 +221,82 @@
mymob.healths.name = "health"
mymob.healths.screen_loc = ui_health
+ mymob.healthdoll = new /obj/screen()
+ mymob.healthdoll.icon = ui_style
+ mymob.healthdoll.icon_state = "healthdoll_DEAD"
+ mymob.healthdoll.name = "health doll"
+ mymob.healthdoll.screen_loc = ui_healthdoll
+
+ mymob.nutrition_icon = new /obj/screen()
+ mymob.nutrition_icon.icon = ui_style
+ mymob.nutrition_icon.icon_state = "nutrition0"
+ mymob.nutrition_icon.name = "nutrition"
+ mymob.nutrition_icon.screen_loc = ui_nutrition
+
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
+ src.hotkeybuttons += mymob.pullin
mymob.blind = new /obj/screen()
mymob.blind.icon = 'icons/mob/screen1_full.dmi'
mymob.blind.icon_state = "blackimageoverlay"
- mymob.blind.name = " "
+ mymob.blind.name = "blind"
mymob.blind.screen_loc = "1,1"
+ mymob.blind.mouse_opacity = 0
mymob.blind.layer = 0
+ mymob.damageoverlay = new /obj/screen()
+ mymob.damageoverlay.icon = 'icons/mob/screen1_full.dmi'
+ mymob.damageoverlay.icon_state = "oxydamageoverlay0"
+ mymob.damageoverlay.name = "dmg"
+ mymob.damageoverlay.screen_loc = "1,1"
+ mymob.damageoverlay.mouse_opacity = 0
+ mymob.damageoverlay.layer = 18.1 //The black screen overlay sets layer to 18 to display it, this one has to be just on top.
+
mymob.flash = new /obj/screen()
mymob.flash.icon = ui_style
mymob.flash.icon_state = "blank"
mymob.flash.name = "flash"
- mymob.flash.screen_loc = "1,1 to 15,15"
+ mymob.flash.screen_loc = "1,1 to 17,17"
mymob.flash.layer = 17
- mymob.zone_sel = new /obj/screen/zone_sel()
+ mymob.pain = new /obj/screen( null )
+
+ mymob.zone_sel = new /obj/screen/zone_sel( null )
mymob.zone_sel.icon = ui_style
+ mymob.zone_sel.color = ui_color
+ mymob.zone_sel.alpha = ui_alpha
mymob.zone_sel.overlays.Cut()
mymob.zone_sel.overlays += image('icons/mob/zone_sel.dmi', "[mymob.zone_sel.selecting]")
//Handle the gun settings buttons
mymob.gun_setting_icon = new /obj/screen/gun/mode(null)
+ //mymob.gun_setting_icon.color = ui_color
+ mymob.gun_setting_icon.alpha = ui_alpha
+
+ mymob.item_use_icon = new /obj/screen/gun/item(null)
+ //mymob.item_use_icon.color = ui_color
+ mymob.item_use_icon.alpha = ui_alpha
+
+ /*mymob.gun_move_icon = new /obj/screen/gun/move(null)
+ //mymob.gun_move_icon.color = ui_color
+ mymob.gun_move_icon.alpha = ui_alpha
+
+ mymob.gun_run_icon = new /obj/screen/gun/run(null)
+ //mymob.gun_run_icon.color = ui_color
+ mymob.gun_run_icon.alpha = ui_alpha*/
+
if (mymob.client)
if (mymob.client.gun_mode) // If in aim mode, correct the sprite
mymob.gun_setting_icon.dir = 2
- for(var/obj/item/weapon/gun/G in mymob) // If targeting someone, display other buttons
- if (G.target)
- mymob.item_use_icon = new /obj/screen/gun/item(null)
- if (mymob.client.target_can_click)
- mymob.item_use_icon.dir = 1
- src.adding += mymob.item_use_icon
- /*mymob.gun_move_icon = new /obj/screen/gun/move(null)
- if (mymob.client.target_can_move)
- mymob.gun_move_icon.dir = 1
- mymob.gun_run_icon = new /obj/screen/gun/run(null)
- if (mymob.client.target_can_run)
- mymob.gun_run_icon.dir = 1
- src.adding += mymob.gun_run_icon
- src.adding += mymob.gun_move_icon*/
+
mymob.client.screen = null
- mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.pressure, mymob.toxin, mymob.bodytemp, mymob.internals, mymob.fire, mymob.healths, mymob.pullin, mymob.blind, mymob.flash, mymob.gun_setting_icon) //, mymob.hands, mymob.rest, mymob.sleep, mymob.mach )
- mymob.client.screen += src.adding + src.other
+ mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.pressure, mymob.toxin, mymob.bodytemp, mymob.internals, mymob.fire, mymob.healths, mymob.healthdoll, mymob.nutrition_icon, mymob.pullin, mymob.blind, mymob.flash, mymob.damageoverlay, mymob.gun_setting_icon) //, mymob.hands, mymob.rest, mymob.sleep) //, mymob.mach )
+ mymob.client.screen += src.adding + src.hotkeybuttons
return
diff --git a/code/game/dna/genes/monkey.dm b/code/game/dna/genes/monkey.dm
index 15f01b36f55..d260575a89b 100644
--- a/code/game/dna/genes/monkey.dm
+++ b/code/game/dna/genes/monkey.dm
@@ -14,8 +14,6 @@
if(issmall(H)) // Already a monkey
return
for(var/obj/item/W in H)
- if (W==H.w_uniform) // will be torn
- continue
if(istype(W,/obj/item/organ))
continue
H.unEquip(W)
@@ -43,9 +41,9 @@
H.set_species(H.species.primitive_form)
if(H.hud_used)
- H.hud_used.monkey_hud()
+ H.hud_used.instantiate()
- H << "You are now [H.species.name]. "
+ H << "You are now a [H.species.name]. "
qdel(animation)
return H
@@ -81,12 +79,12 @@
H.gib()
return
- if(H.hud_used)
- H.hud_used.human_hud()
-
H.set_species(H.species.greater_form)
- H << "You are now [H.species.name]. "
+ if(H.hud_used)
+ H.hud_used.instantiate()
+
+ H << "You are now a [H.species.name]. "
qdel(animation)
return H
\ No newline at end of file
diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm
index f9f5f309e03..00c199d7332 100644
--- a/code/game/gamemodes/changeling/changeling.dm
+++ b/code/game/gamemodes/changeling/changeling.dm
@@ -288,7 +288,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
return
var/mob/living/carbon/human/T = target
- if(!istype(T))
+ if(!istype(T) || issmall(T))
user << "[T] is not compatible with our biology."
return
diff --git a/code/game/gamemodes/changeling/changeling_power.dm b/code/game/gamemodes/changeling/changeling_power.dm
index 27bba094711..496688835bb 100644
--- a/code/game/gamemodes/changeling/changeling_power.dm
+++ b/code/game/gamemodes/changeling/changeling_power.dm
@@ -49,7 +49,7 @@
/obj/effect/proc_holder/changeling/proc/can_sting(var/mob/user, var/mob/target)
if(!ishuman(user)) //typecast everything from mob to carbon from this point onwards
return 0
- if(req_human && !ishuman(user))
+ if(req_human && (!ishuman(user) || issmall(user)))
user << "We cannot do that in this form!"
return 0
var/datum/changeling/c = user.mind.changeling
diff --git a/code/game/gamemodes/changeling/evolution_menu.dm b/code/game/gamemodes/changeling/evolution_menu.dm
index 9077dee6bfb..0ffce0ba172 100644
--- a/code/game/gamemodes/changeling/evolution_menu.dm
+++ b/code/game/gamemodes/changeling/evolution_menu.dm
@@ -336,7 +336,7 @@ var/list/sting_paths
//Reselect powers
/datum/changeling/proc/lingRespec(var/mob/user)
- if(!ishuman(user))
+ if(!ishuman(user) || issmall(user))
user << "We can't remove our evolutions in this form!"
return
if(canrespec)
diff --git a/code/game/gamemodes/changeling/powers/humanform.dm b/code/game/gamemodes/changeling/powers/humanform.dm
index 42e0bb3dad1..77a200c907d 100644
--- a/code/game/gamemodes/changeling/powers/humanform.dm
+++ b/code/game/gamemodes/changeling/powers/humanform.dm
@@ -8,7 +8,7 @@
//Transform into a human.
-/obj/effect/proc_holder/changeling/humanform/sting_action(var/mob/living/carbon/user)
+/obj/effect/proc_holder/changeling/humanform/sting_action(var/mob/living/carbon/human/user)
var/datum/changeling/changeling = user.mind.changeling
var/list/names = list()
for(var/datum/dna/DNA in (changeling.absorbed_dna+changeling.protected_dna))
@@ -24,51 +24,18 @@
if(!user)
return 0
user << "We transform our appearance."
+ user.dna.SetSEState(MONKEYBLOCK,0)
+ domutcheck(user, null) // Do a pre-mutcheck to cleanly switch from monkey form.
user.dna = chosen_dna
+ user.real_name = chosen_dna.real_name
+ user.flavor_text = ""
+ if(ishuman(user))
+ user.set_species()
+ user.UpdateAppearance()
+ domutcheck(user, null)
- var/list/implants = list()
- for (var/obj/item/weapon/implant/I in user) //Still preserving implants
- implants += I
-
- for(var/obj/item/W in src)
- user.unEquip(W)
- if (user.client)
- user.client.screen -= W
- if (W)
- W.loc = user.loc
- W.dropped(user)
- W.layer = initial(W.layer)
-
- var/mob/living/carbon/human/O = new /mob/living/carbon/human( user, delay_ready_dna=1 )
- if (user.dna.GetUIState(DNA_UI_GENDER))
- O.gender = FEMALE
- else
- O.gender = MALE
- O.dna = user.dna.Clone()
- user.dna = null
- O.real_name = chosen_dna.real_name
- O.set_species()
- for(var/obj/T in user)
- del(T)
-
- O.loc = user.loc
-
- O.UpdateAppearance()
- domutcheck(O, null)
- O.setToxLoss(user.getToxLoss())
- O.adjustBruteLoss(user.getBruteLoss())
- O.setOxyLoss(user.getOxyLoss())
- O.adjustFireLoss(user.getFireLoss())
- O.stat = user.stat
- for (var/obj/item/weapon/implant/I in implants)
- I.loc = O
- I.implanted = O
-
- user.mind.transfer_to(O)
- O.changeling_update_languages(changeling.absorbed_languages)
- O.mind.changeling.purchasedpowers -= src
+ changeling.purchasedpowers -= src
//O.mind.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/lesserform(null)
feedback_add_details("changeling_powers","LFT")
- qdel(user)
return 1
diff --git a/code/game/gamemodes/changeling/powers/lesserform.dm b/code/game/gamemodes/changeling/powers/lesserform.dm
index 44aae09ae9f..8a80af6707e 100644
--- a/code/game/gamemodes/changeling/powers/lesserform.dm
+++ b/code/game/gamemodes/changeling/powers/lesserform.dm
@@ -14,7 +14,6 @@
if(user.has_brain_worms())
user << "We cannot perform this ability at the present time!"
return
- user << "Our genes cry out!"
var/mob/living/carbon/human/H = user
@@ -29,5 +28,6 @@
for(var/obj/item/weapon/implant/W in H)
implants += W
H.monkeyize()
+ changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null)
feedback_add_details("changeling_powers","LF")
return 1
\ No newline at end of file
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index ae1b8d0cecc..e91c10432e3 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -295,7 +295,45 @@
/obj/item/proc/mob_can_equip(M as mob, slot, disable_warning = 0)
if(!slot) return 0
if(!M) return 0
+ if(issmall(M))
+ //START MONKEY
+ var/mob/living/carbon/human/H = M
+ switch(slot)
+ if(slot_l_hand)
+ if(H.l_hand)
+ return 0
+ return 1
+ if(slot_r_hand)
+ if(H.r_hand)
+ return 0
+ return 1
+ if(slot_wear_mask)
+ if(H.wear_mask)
+ return 0
+ if( !(slot_flags & SLOT_MASK) )
+ return 0
+ return 1
+ if(slot_back)
+ if(H.back)
+ return 0
+ if( !(slot_flags & SLOT_BACK) )
+ return 0
+ return 1
+ if(slot_handcuffed)
+ if(H.handcuffed)
+ return 0
+ if(!istype(src, /obj/item/weapon/restraints/handcuffs))
+ return 0
+ return 1
+ if(slot_in_backpack)
+ if (H.back && istype(H.back, /obj/item/weapon/storage/backpack))
+ var/obj/item/weapon/storage/backpack/B = H.back
+ if(B.contents.len < B.storage_slots && w_class <= B.max_w_class)
+ return 1
+ return 0
+ return 0 //Unsupported slot
+ //END MONKEY
if(ishuman(M))
//START HUMAN
var/mob/living/carbon/human/H = M