/obj/structure/spirit_board name = "spirit board" desc = "A wooden board with letters etched into it, used in seances." icon = 'icons/obj/objects.dmi' icon_state = "spirit_board" density = 1 anchored = 0 var/virgin = 1 var/cooldown = 0 var/planchette = "A" var/lastuser = null /obj/structure/spirit_board/proc/announce_to_ghosts() for(var/mob/dead/observer/O in player_list) if(O.client) var/area/A = get_area(src) if(A) O << "\blue Someone has begun playing with a [src.name] in [A.name]!. (Teleport)" /obj/structure/spirit_board/examine() desc = "[initial(desc)] The planchette is sitting at \"[planchette]\"." ..() /obj/structure/spirit_board/attack_hand(mob/user as mob) if(..()) return spirit_board_pick_letter(user) /obj/structure/spirit_board/attack_ghost(mob/dead/observer/user as mob) spirit_board_pick_letter(user) /obj/structure/spirit_board/proc/spirit_board_pick_letter(var/mob/M) if(!spirit_board_checks(M)) return 0 if(virgin) virgin = 0 announce_to_ghosts() planchette = input("Choose the letter.", "Seance!") in list("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z") add_logs(M, src, "picked a letter on", addition="which was \"[planchette]\".") cooldown = world.time lastuser = M.ckey var/turf/T = loc sleep(rand(20,30)) if(T == loc) visible_message("The planchette slowly moves... and stops at the letter \"[planchette]\".") /obj/structure/spirit_board/proc/spirit_board_checks(var/mob/M) //cooldown var/bonus = 0 if(M.ckey == lastuser) bonus = 10 //Give some other people a chance, hog. if(cooldown > world.time - (30 + bonus)) return 0 //No feedback here, hiding the cooldown a little makes it harder to tell who's really picking letters. //lighting check var/light_amount = 0 var/turf/T = get_turf(src) var/atom/movable/lighting_overlay/LO = locate(/atom/movable/lighting_overlay) in T if(LO) light_amount = LO.get_clamped_lum(0.5)*10 else light_amount = 10 if(light_amount > 2) M << "It's too bright here to use [src.name]!" return 0 //mobs in range check var/users_in_range = 0 for(var/mob/living/L in orange(1,src)) if(L.ckey && L.client) if((world.time - L.client.inactivity) < (world.time - 300) || L.stat != CONSCIOUS || L.restrained())//no playing with braindeads or corpses or handcuffed dudes. M << "[L] doesn't seem to be paying attention..." else users_in_range++ if(users_in_range < 2) M << "There aren't enough people to use the [src.name]!" return 0 return 1