diff --git a/code/modules/instruments/songs/_song.dm b/code/modules/instruments/songs/_song.dm index 463398d2f2..d842dbc003 100644 --- a/code/modules/instruments/songs/_song.dm +++ b/code/modules/instruments/songs/_song.dm @@ -303,3 +303,19 @@ return TRUE var/obj/structure/musician/M = parent return M.should_stop_playing(user) + +/datum/song/holoparasite + var/mob/living/simple_animal/hostile/guardian/stand + +/datum/song/holoparasite/New(atom/parent, list/instrument_ids) + . = ..() + stand = istype(parent, /mob/living/simple_animal/hostile/guardian) && parent + +/datum/song/holoparasite/updateDialog() + stand.ui_interact(src) + +/datum/song/holoparasite/should_stop_playing(mob/user) + return FALSE + +/datum/song/holoparasite/check_can_use(mob/user) + return (user == stand) diff --git a/code/modules/instruments/songs/editor.dm b/code/modules/instruments/songs/editor.dm index d9595797d7..8c5171667a 100644 --- a/code/modules/instruments/songs/editor.dm +++ b/code/modules/instruments/songs/editor.dm @@ -109,8 +109,11 @@ linenum++ updateDialog(usr) // make sure updates when complete +/datum/song/proc/check_can_use(mob/user) + return user.canUseTopic(parent, TRUE, FALSE, FALSE, FALSE) + /datum/song/Topic(href, href_list) - if(!usr.canUseTopic(parent, TRUE, FALSE, FALSE, FALSE)) + if(!check_can_use(usr)) usr << browse(null, "window=instrument") usr.unset_machine() return diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index 1839fb05b5..fb24b0fc09 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -60,11 +60,13 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians var/magic_fluff_string = "You draw the Coder, symbolizing bugs and errors. This shouldn't happen! Submit a bug report!" var/tech_fluff_string = "BOOT SEQUENCE COMPLETE. ERROR MODULE LOADED. THIS SHOULDN'T HAPPEN. Submit a bug report!" var/carp_fluff_string = "CARP CARP CARP SOME SORT OF HORRIFIC BUG BLAME THE CODERS CARP CARP CARP" + /// sigh, fine. + var/datum/song/holoparasite/music_datum /mob/living/simple_animal/hostile/guardian/Initialize(mapload, theme) GLOB.parasites += src updatetheme(theme) - + music_datum = new(src, get_allowed_instrument_ids()) . = ..() /mob/living/simple_animal/hostile/guardian/med_hud_set_health() @@ -84,8 +86,16 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians /mob/living/simple_animal/hostile/guardian/Destroy() GLOB.parasites -= src + QDEL_NULL(music_datum) return ..() +/mob/living/simple_animal/hostile/guardian/verb/music_interact() + set name = "Access Internal Synthesizer" + set desc = "Access your internal musical synthesizer" + set category = "IC" + + music_datum.ui_interact(src) + /mob/living/simple_animal/hostile/guardian/proc/updatetheme(theme) //update the guardian's theme if(!theme) theme = pick("magic", "tech", "carp")