diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm index 24afdc5845b..0446b78190c 100644 --- a/code/_onclick/hud/action.dm +++ b/code/_onclick/hud/action.dm @@ -1,8 +1,3 @@ -#define AB_ITEM 1 -#define AB_SPELL 2 -#define AB_INNATE 3 -#define AB_GENERIC 4 - #define AB_CHECK_RESTRAINED 1 #define AB_CHECK_STUNNED 2 #define AB_CHECK_LYING 4 @@ -178,12 +173,12 @@ /datum/hud/proc/ButtonNumberToScreenCoords(number) // TODO : Make this zero-indexed for readabilty var/row = round((number-1)/AB_MAX_COLUMNS) var/col = ((number - 1)%(AB_MAX_COLUMNS)) + 1 - + var/coord_col = "+[col-1]" var/coord_col_offset = 4+2*col - + var/coord_row = "[row ? -row : "+0"]" - + return "WEST[coord_col]:[coord_col_offset],NORTH[coord_row]:-6" /datum/hud/proc/SetButtonCoords(obj/screen/button,number) diff --git a/code/modules/mob/living/carbon/human/species_types.dm b/code/modules/mob/living/carbon/human/species_types.dm index 9222cf227c8..a434d6edada 100644 --- a/code/modules/mob/living/carbon/human/species_types.dm +++ b/code/modules/mob/living/carbon/human/species_types.dm @@ -250,7 +250,7 @@ datum/species/human/spec_death(gibbed, mob/living/carbon/human/H) /datum/species/jelly/slime/spec_life(mob/living/carbon/human/H) if(recently_changed) - var/datum/action/split_body/S = new + var/datum/action/innate/split_body/S = new S.Grant(H) for(var/datum/reagent/toxin/slimejelly/S in H.reagents.reagent_list) @@ -264,20 +264,20 @@ datum/species/human/spec_death(gibbed, mob/living/carbon/human/H) ..() -/datum/action/split_body +/datum/action/innate/split_body name = "Split Body" - action_type = AB_INNATE check_flags = AB_CHECK_ALIVE button_icon_state = "split" background_icon_state = "bg_alien" -/datum/action/split_body/Activate() +/datum/action/innate/split_body/CheckRemoval() var/mob/living/carbon/human/H = owner - if(!ishuman(owner) || !H.dna || !H.dna.species || H.dna.species.id != "slime") - owner << "Your biology is no longer compatible!" - Remove(owner) - return + if(!ishuman(H) || !H.dna || !H.dna.species || H.dna.species.id != "slime") + return 1 + return 0 +/datum/action/innate/split_body/Activate() + var/mob/living/carbon/human/H = owner H << "You focus intently on moving your body while standing perfectly still..." H.notransform = 1 for(var/datum/reagent/toxin/slimejelly/S in H.reagents.reagent_list) @@ -293,8 +293,8 @@ datum/species/human/spec_death(gibbed, mob/living/carbon/human/H) spare.Move(get_step(H.loc, pick(NORTH,SOUTH,EAST,WEST))) S.volume = 80 H.notransform = 0 - var/datum/action/swap_body/callforward = new /datum/action/swap_body() - var/datum/action/swap_body/callback = new /datum/action/swap_body() + var/datum/action/innate/swap_body/callforward = new /datum/action/innate/swap_body() + var/datum/action/innate/swap_body/callback = new /datum/action/innate/swap_body() callforward.body = spare callforward.Grant(H) callback.body = H @@ -306,16 +306,21 @@ datum/species/human/spec_death(gibbed, mob/living/carbon/human/H) H << "...but there is not enough of you to go around! You must attain more mass to split!" H.notransform = 0 -/datum/action/swap_body +/datum/action/innate/swap_body name = "Swap Body" - action_type = AB_INNATE check_flags = AB_CHECK_ALIVE button_icon_state = "slimeswap" background_icon_state = "bg_alien" var/mob/living/carbon/human/body -/datum/action/swap_body/Activate() - if(!body || !istype(body) || body.stat != CONSCIOUS || qdeleted(body)) +/datum/action/innate/swap_body/CheckRemoval() + var/mob/living/carbon/human/H = owner + if(!ishuman(H) || !H.dna || !H.dna.species || H.dna.species.id != "slime") + return 1 + return 0 + +/datum/action/innate/swap_body/Activate() + if(!body || !istype(body) || !body.dna || !body.dna.species || !body.dna.species.id != "slime" || body.stat == DEAD || qdeleted(body)) owner << "Something is wrong, you cannot sense your other body!" Remove(owner) return