diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 60de851b86d..ee31b36be25 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -2,6 +2,8 @@ * Crayons */ +#define CRAYON_MESSAGE_MAX_LENGTH 16 + /obj/item/toy/crayon name = "crayon" desc = "A colourful crayon. Looks tasty. Mmmm..." @@ -21,8 +23,14 @@ var/dat var/busy = FALSE var/list/validSurfaces = list(/turf/simulated/floor) - var/times_eaten = 0 //How many times this crayon has been gnawed on - var/max_bites = 4 //How many times a crayon can be bitten before being depleted. You eated it + /// How many times this crayon has been gnawed on + var/times_eaten = 0 + /// How many times a crayon can be bitten before being depleted. You eated it + var/max_bites = 4 + /// The stored message in the crayon. + var/preset_message + /// The index of the character in the message that will be drawn next. + var/preset_message_index = 0 /obj/item/toy/crayon/suicide_act(mob/user) user.visible_message("[user] is jamming the [name] up [user.p_their()] nose and into [user.p_their()] brain. It looks like [user.p_theyre()] trying to commit suicide.") @@ -36,8 +44,15 @@ update_window(user) /obj/item/toy/crayon/proc/update_window(mob/living/user as mob) - dat += "

Currently selected: [drawtype]


" - dat += "Random letterPick letter" + var/current_drawtype = drawtype + if(preset_message_index > 0) + current_drawtype = copytext(preset_message, 1, preset_message_index) + current_drawtype += "[preset_message[preset_message_index]]" + current_drawtype += copytext(preset_message, preset_message_index + 1) + current_drawtype = uppertext(current_drawtype) + dat += "

Currently selected: [current_drawtype]


" + dat += "Random letterPick letter
" + dat += "Message" dat += "
" dat += "

Runes:


" dat += "Random rune" @@ -64,6 +79,7 @@ /obj/item/toy/crayon/Topic(href, href_list, hsrc) var/temp = "a" + preset_message_index = 0 switch(href_list["type"]) if("random_letter") temp = pick(letters) @@ -73,6 +89,13 @@ temp = "rune[rand(1, 8)]" if("random_graffiti") temp = pick(graffiti) + if("message") + var/regex/graffiti_chars = regex("\[^a-zA-Z0-9+\\-!?=%&,.#\\/\]", "g") + var/new_preset = input(usr, "Set the message. Max length [CRAYON_MESSAGE_MAX_LENGTH] characters.") + new_preset = copytext(new_preset, 1, CRAYON_MESSAGE_MAX_LENGTH) + preset_message = lowertext(graffiti_chars.Replace(new_preset, "")) + log_admin("[key_name(usr)] has set the message of [src] to \"[preset_message]\".") + preset_message_index = 1 else temp = href_list["type"] if((usr.restrained() || usr.stat || !usr.is_in_active_hand(src))) @@ -85,7 +108,10 @@ if(busy) return if(is_type_in_list(target,validSurfaces)) var/temp = "rune" - if(letters.Find(drawtype)) + if(preset_message_index > 0) + temp = "letter" + drawtype = preset_message[preset_message_index] + else if(letters.Find(drawtype)) temp = "letter" else if(graffiti.Find(drawtype)) temp = "graffiti" @@ -95,6 +121,13 @@ var/obj/effect/decal/cleanable/crayon/C = new /obj/effect/decal/cleanable/crayon(target,colour,drawtype,temp) C.add_hiddenprint(user) to_chat(user, "You finish drawing [temp].") + + if(preset_message_index > 0) + preset_message_index++ + if(preset_message_index > length(preset_message)) + preset_message_index = 1 + update_window(usr) + if(uses) uses-- if(!uses) @@ -319,3 +352,5 @@ var/image/I = image('icons/obj/crayons.dmi',icon_state = "[capped ? "spraycan_cap_colors" : "spraycan_colors"]") I.color = colour . += I + +#undef CRAYON_MESSAGE_MAX_LENGTH diff --git a/icons/effects/crayondecal.dmi b/icons/effects/crayondecal.dmi index 36d68514d44..48ae9463ce8 100644 Binary files a/icons/effects/crayondecal.dmi and b/icons/effects/crayondecal.dmi differ