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