Merge pull request #1256 from Krausus/MonkeyProblems-201506050026

Fixes Monkey Issues (Changelings, HUD, thinking they're people)
This commit is contained in:
ZomgPonies
2015-06-05 03:55:24 -04:00
9 changed files with 136 additions and 79 deletions
+1 -1
View File
@@ -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))
+77 -23
View File
@@ -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
+6 -8
View File
@@ -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 << "<B>You are now [H.species.name]. </B>"
H << "<B>You are now a [H.species.name]. </B>"
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 << "<B>You are now [H.species.name]. </B>"
if(H.hud_used)
H.hud_used.instantiate()
H << "<B>You are now a [H.species.name]. </B>"
qdel(animation)
return H
+1 -1
View File
@@ -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 << "<span class='warning'>[T] is not compatible with our biology.</span>"
return
@@ -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 << "<span class='warning'>We cannot do that in this form!</span>"
return 0
var/datum/changeling/c = user.mind.changeling
@@ -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 << "<span class='danger'>We can't remove our evolutions in this form!</span>"
return
if(canrespec)
@@ -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 << "<span class='notice'>We transform our appearance.</span>"
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
@@ -14,7 +14,6 @@
if(user.has_brain_worms())
user << "<span class='warning'>We cannot perform this ability at the present time!</span>"
return
user << "<span class='warning'>Our genes cry out!</span>"
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
+38
View File
@@ -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