diff --git a/code/datums/achievements/achievements.dm b/code/datums/achievements/achievements.dm index e7caa961f043..074b916aa8ce 100644 --- a/code/datums/achievements/achievements.dm +++ b/code/datums/achievements/achievements.dm @@ -5,7 +5,7 @@ var/hidden = FALSE // Whether or not this achievement's description is hidden untill you accomplish this (doesn't apply to the online viewer) /datum/achievement/bubblegum - name = "Kick Ass and Chew Bubblegum." + name = "Kick Ass and Chew Bubblegum" desc = "Kill Bubblegum, the king of slaughter demons." //Should be improved(?) id = 1 @@ -40,3 +40,56 @@ desc = "Kill yourself using the nuclear authentication disk" id = 7 hidden = TRUE + +/datum/achievement/badass + name = "Badass Syndie" + desc = "As a traitor, complete your objectives without buying any items" + id = 8 + +/datum/achievement/jones + name = "Lead Lined" + desc = "Survive an explosion while inside of a freezer" + id = 9 + hidden = TRUE + +/datum/achievement/wizwin + name = "Scholars of the Arcane" + desc = "As a wizard, complete your objectives" + id = 10 + +/datum/achievement/cpr + name = "Breath of Life" + desc = "Perform CPR on someone..." + id = 11 + +/datum/achievement/anticpr + name = "Breath of Death" + desc = "... with incompatible lungs" + id = 12 + hidden = TRUE + +/datum/achievement/changelingwin + name = "The Thing" + desc = "As a changeling, complete your objectives" + id = 13 + +/datum/achievement/slingascend + name = "The Dark Shadow" + desc = "As a shadowling, ascend successfully" + id = 14 + +/datum/achievement/death + name = "Flatlined" + desc = "You died" + id = 15 + +/datum/achievement/cremated + name = "Back to Carbon" + desc = "Get cremated" + id = 16 + +/datum/achievement/cremated_alive + name = "Burn in Hell" + desc = "Get cremated... alive" + id = 17 + hidden = TRUE diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm index e33d231db5eb..8e70649f534e 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm @@ -23,6 +23,9 @@ /obj/structure/closet/secure_closet/freezer/ex_act() if(!jones) jones = TRUE + for(var/mob/I in contents) + if(I.client && I.stat != DEAD) + SSachievements.unlock_achievement(/datum/achievement/jones, I.client) else ..() diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index e50fa5f82d2d..b96a443887ef 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -261,8 +261,14 @@ GLOBAL_LIST_EMPTY(crematoriums) update_icon() for(var/mob/living/M in conts) - if (M.stat != DEAD) + if(M.stat != DEAD) M.emote("scream") + if(M.client) + if(M.stat != DEAD) + SSachievements.unlock_achievement(/datum/achievement/cremated_alive, M.client) //they are in body and alive, give achievement + SSachievements.unlock_achievement(/datum/achievement/cremated, M.client) //they are in body, but dead, they can have one achievement + else if(M.oobe_client) //they might be ghosted if they are dead, we'll allow it. + SSachievements.unlock_achievement(/datum/achievement/cremated, M.oobe_client) //no burning alive achievement if you are ghosted though if(user) log_combat(user, M, "cremated") else diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index 69cb5e125a31..6dee8174de05 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -568,6 +568,7 @@ if(changelingwin) parts += "The changeling was successful!" + SSachievements.unlock_achievement(/datum/achievement/changelingwin, owner.current.client) //changeling wins, give achivement else parts += "The changeling has failed." diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index 2de67e6bfca9..91be0d5526da 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -398,6 +398,7 @@ if(TC_uses==0 && traitorwin) var/static/icon/badass = icon('icons/badass.dmi', "badass") uplink_text += "[icon2html(badass, world)]" + SSachievements.unlock_achievement(/datum/achievement/badass, owner.current.client) result += uplink_text result += objectives_text diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index cdf68addf530..6effc95ebc15 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -304,6 +304,7 @@ if(wizardwin) parts += "The wizard was successful!" + SSachievements.unlock_achievement(/datum/achievement/wizwin, owner.current.client) //wizard wins, give achievement else parts += "The wizard has failed!" diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 3f2a47b7b821..607f176ec01e 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -47,6 +47,9 @@ var/datum/antagonist/hivemind/hive = mind.has_antag_datum(/datum/antagonist/hivemind) hive.destroy_hive() + if(client) + SSachievements.unlock_achievement(/datum/achievement/death, client) + /mob/living/carbon/human/proc/makeSkeleton() ADD_TRAIT(src, TRAIT_DISFIGURED, TRAIT_GENERIC) set_species(/datum/species/skeleton) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index b20e1fa135f0..02a5e7338a0e 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -643,15 +643,18 @@ SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "perform_cpr", /datum/mood_event/perform_cpr) C.cpr_time = world.time log_combat(src, C, "CPRed") + SSachievements.unlock_achievement(/datum/achievement/cpr, client) // yogs start - can't CPR people with ash walker lungs whithout having them yourself if(they_breathe && they_ashlung && !we_ashlung) C.adjustOxyLoss(anticpr) C.updatehealth() to_chat(C, "You feel a breath of fresh air enter your lungs... you feel worse...") + SSachievements.unlock_achievement(/datum/achievement/anticpr, client) //you can get both achievements at the same time I guess else if(they_breathe && they_lung && we_ashlung) C.adjustOxyLoss(anticpr) C.updatehealth() to_chat(C, "You feel a breath of fresh air enter your lungs... you feel worse...") + SSachievements.unlock_achievement(/datum/achievement/anticpr, client) //yogs end else if(they_breathe && they_lung) var/suff = min(C.getOxyLoss(), 7) diff --git a/yogstation/code/modules/antagonists/shadowling/special_shadowling_abilities.dm b/yogstation/code/modules/antagonists/shadowling/special_shadowling_abilities.dm index 8b3fcd1d7c0d..0fcbb44f378f 100644 --- a/yogstation/code/modules/antagonists/shadowling/special_shadowling_abilities.dm +++ b/yogstation/code/modules/antagonists/shadowling/special_shadowling_abilities.dm @@ -164,6 +164,7 @@ SEND_SOUND(M, sound('sound/hallucinations/veryfar_noise.ogg')) for(var/obj/machinery/power/apc/A in GLOB.apcs_list) A.overload_lighting() + SSachievements.unlock_achievement(/datum/achievement/slingascend, H.client) var/mob/A = new /mob/living/simple_animal/ascendant_shadowling(H.loc) for(var/X in H.mind.spell_list) var/obj/effect/proc_holder/spell/S = X