mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-01-23 07:42:16 +00:00
Adds sounds for turning on flashlights, flares, flipping coins, shuffling deck of cards, using lighters and zippos, drills, sonic jackhammers, bikes and some weapon related sounds.
307 lines
7.0 KiB
Plaintext
307 lines
7.0 KiB
Plaintext
/datum/playingcard
|
|
var/name = "playing card"
|
|
var/card_icon = "card_back"
|
|
var/back_icon = "card_back"
|
|
|
|
/obj/item/weapon/deck
|
|
w_class = 2
|
|
icon = 'icons/obj/playing_cards.dmi'
|
|
var/list/cards = list()
|
|
|
|
/obj/item/weapon/deck/holder
|
|
name = "card box"
|
|
desc = "A small leather case to show how classy you are compared to everyone else."
|
|
icon_state = "card_holder"
|
|
|
|
/obj/item/weapon/deck/cards
|
|
name = "deck of cards"
|
|
desc = "A simple deck of playing cards."
|
|
icon_state = "deck"
|
|
|
|
/obj/item/weapon/deck/cards/New()
|
|
..()
|
|
|
|
var/datum/playingcard/P
|
|
for(var/suit in list("spades","clubs","diamonds","hearts"))
|
|
|
|
var/colour
|
|
if(suit == "spades" || suit == "clubs")
|
|
colour = "black_"
|
|
else
|
|
colour = "red_"
|
|
|
|
for(var/number in list("ace","two","three","four","five","six","seven","eight","nine","ten"))
|
|
P = new()
|
|
P.name = "[number] of [suit]"
|
|
P.card_icon = "[colour]num"
|
|
P.back_icon = "card_back"
|
|
cards += P
|
|
|
|
for(var/number in list("jack","queen","king"))
|
|
P = new()
|
|
P.name = "[number] of [suit]"
|
|
P.card_icon = "[colour]col"
|
|
P.back_icon = "card_back"
|
|
cards += P
|
|
|
|
|
|
for(var/i = 0,i<2,i++)
|
|
P = new()
|
|
P.name = "joker"
|
|
P.card_icon = "joker"
|
|
cards += P
|
|
|
|
/obj/item/weapon/deck/attackby(obj/O as obj, mob/user as mob)
|
|
if(istype(O,/obj/item/weapon/hand))
|
|
var/obj/item/weapon/hand/H = O
|
|
for(var/datum/playingcard/P in H.cards)
|
|
cards += P
|
|
qdel(O)
|
|
user << "You place your cards on the bottom of \the [src]."
|
|
return
|
|
..()
|
|
|
|
/obj/item/weapon/deck/verb/draw_card()
|
|
|
|
set category = "Object"
|
|
set name = "Draw"
|
|
set desc = "Draw a card from a deck."
|
|
set src in view(1)
|
|
|
|
if(usr.stat || !Adjacent(usr)) return
|
|
|
|
if(!istype(usr,/mob/living/carbon))
|
|
return
|
|
|
|
var/mob/living/carbon/user = usr
|
|
|
|
if(!cards.len)
|
|
usr << "There are no cards in the deck."
|
|
return
|
|
|
|
var/obj/item/weapon/hand/H
|
|
if(user.l_hand && istype(user.l_hand,/obj/item/weapon/hand))
|
|
H = user.l_hand
|
|
else if(user.r_hand && istype(user.r_hand,/obj/item/weapon/hand))
|
|
H = user.r_hand
|
|
else
|
|
H = new(get_turf(src))
|
|
user.put_in_hands(H)
|
|
|
|
if(!H || !user) return
|
|
|
|
var/datum/playingcard/P = cards[1]
|
|
H.cards += P
|
|
cards -= P
|
|
H.update_icon()
|
|
user.visible_message("\The [user] draws a card.")
|
|
user << "It's the [P]."
|
|
|
|
/obj/item/weapon/deck/verb/deal_card()
|
|
|
|
set category = "Object"
|
|
set name = "Deal"
|
|
set desc = "Deal a card from a deck."
|
|
set src in view(1)
|
|
|
|
if(usr.stat || !Adjacent(usr)) return
|
|
|
|
if(!cards.len)
|
|
usr << "There are no cards in the deck."
|
|
return
|
|
|
|
var/list/players = list()
|
|
for(var/mob/living/player in viewers(3))
|
|
if(!player.stat)
|
|
players += player
|
|
//players -= usr
|
|
|
|
var/mob/living/M = input("Who do you wish to deal a card?") as null|anything in players
|
|
if(!usr || !src || !M) return
|
|
|
|
deal_at(usr, M)
|
|
|
|
/obj/item/weapon/deck/proc/deal_at(mob/user, mob/target)
|
|
var/obj/item/weapon/hand/H = new(get_step(user, user.dir))
|
|
|
|
H.cards += cards[1]
|
|
cards -= cards[1]
|
|
H.concealed = 1
|
|
H.update_icon()
|
|
if(user==target)
|
|
user.visible_message("\The [user] deals a card to \himself.")
|
|
else
|
|
user.visible_message("\The [user] deals a card to \the [target].")
|
|
H.throw_at(get_step(target,target.dir),10,1,H)
|
|
|
|
/obj/item/weapon/hand/attackby(obj/O as obj, mob/user as mob)
|
|
if(istype(O,/obj/item/weapon/hand))
|
|
var/obj/item/weapon/hand/H = O
|
|
for(var/datum/playingcard/P in cards)
|
|
H.cards += P
|
|
H.concealed = src.concealed
|
|
user.drop_from_inventory(src,user.loc)
|
|
qdel(src)
|
|
H.update_icon()
|
|
return
|
|
..()
|
|
|
|
/obj/item/weapon/deck/attack_self(var/mob/user as mob)
|
|
|
|
var/list/newcards = list()
|
|
while(cards.len)
|
|
var/datum/playingcard/P = pick(cards)
|
|
newcards += P
|
|
cards -= P
|
|
cards = newcards
|
|
playsound(src.loc, 'sound/items/cardshuffle.ogg', 100, 1, -4)
|
|
user.visible_message("\The [user] shuffles [src].")
|
|
|
|
/obj/item/weapon/deck/MouseDrop(atom/over)
|
|
if(!usr || !over) return
|
|
if(!Adjacent(usr) || !over.Adjacent(usr)) return // should stop you from dragging through windows
|
|
|
|
if(!ishuman(over) || !(over in viewers(3))) return
|
|
|
|
if(!cards.len)
|
|
usr << "There are no cards in the deck."
|
|
return
|
|
|
|
deal_at(usr, over)
|
|
|
|
/obj/item/weapon/pack/
|
|
name = "card pack"
|
|
desc = "For those with disposible income."
|
|
|
|
icon_state = "card_pack"
|
|
icon = 'icons/obj/playing_cards.dmi'
|
|
w_class = 1
|
|
var/list/cards = list()
|
|
|
|
|
|
/obj/item/weapon/pack/attack_self(var/mob/user as mob)
|
|
user.visible_message("[user] rips open \the [src]!")
|
|
var/obj/item/weapon/hand/H = new()
|
|
|
|
H.cards += cards
|
|
cards.Cut();
|
|
user.drop_item()
|
|
qdel(src)
|
|
|
|
H.update_icon()
|
|
user.put_in_active_hand(H)
|
|
|
|
/obj/item/weapon/hand
|
|
name = "hand of cards"
|
|
desc = "Some playing cards."
|
|
icon = 'icons/obj/playing_cards.dmi'
|
|
icon_state = "empty"
|
|
w_class = 1
|
|
|
|
var/concealed = 0
|
|
var/list/cards = list()
|
|
|
|
/obj/item/weapon/hand/verb/discard()
|
|
|
|
set category = "Object"
|
|
set name = "Discard"
|
|
set desc = "Place a card from your hand in front of you."
|
|
|
|
var/list/to_discard = list()
|
|
for(var/datum/playingcard/P in cards)
|
|
to_discard[P.name] = P
|
|
var/discarding = input("Which card do you wish to put down?") as null|anything in to_discard
|
|
|
|
if(!discarding || !to_discard[discarding] || !usr || !src) return
|
|
|
|
var/datum/playingcard/card = to_discard[discarding]
|
|
qdel(to_discard)
|
|
|
|
var/obj/item/weapon/hand/H = new(src.loc)
|
|
H.cards += card
|
|
cards -= card
|
|
H.concealed = 0
|
|
H.update_icon()
|
|
src.update_icon()
|
|
usr.visible_message("\The [usr] plays \the [discarding].")
|
|
H.loc = get_step(usr,usr.dir)
|
|
|
|
if(!cards.len)
|
|
qdel(src)
|
|
|
|
/obj/item/weapon/hand/attack_self(var/mob/user as mob)
|
|
concealed = !concealed
|
|
update_icon()
|
|
user.visible_message("\The [user] [concealed ? "conceals" : "reveals"] their hand.")
|
|
|
|
/obj/item/weapon/hand/examine(mob/user)
|
|
..(user)
|
|
if((!concealed || src.loc == user) && cards.len)
|
|
user << "It contains: "
|
|
for(var/datum/playingcard/P in cards)
|
|
user << "The [P.name]."
|
|
|
|
/obj/item/weapon/hand/update_icon(var/direction = 0)
|
|
|
|
if(!cards.len)
|
|
qdel(src)
|
|
return
|
|
else if(cards.len > 1)
|
|
name = "hand of cards"
|
|
desc = "Some playing cards."
|
|
else
|
|
name = "a playing card"
|
|
desc = "A playing card."
|
|
|
|
overlays.Cut()
|
|
|
|
|
|
if(cards.len == 1)
|
|
var/datum/playingcard/P = cards[1]
|
|
var/image/I = new(src.icon, (concealed ? "[P.back_icon]" : "[P.card_icon]") )
|
|
I.pixel_x += (-5+rand(10))
|
|
I.pixel_y += (-5+rand(10))
|
|
overlays += I
|
|
return
|
|
|
|
var/offset = Floor(20/cards.len)
|
|
|
|
var/matrix/M = matrix()
|
|
if(direction)
|
|
switch(direction)
|
|
if(NORTH)
|
|
M.Translate( 0, 0)
|
|
if(SOUTH)
|
|
M.Translate( 0, 4)
|
|
if(WEST)
|
|
M.Turn(90)
|
|
M.Translate( 3, 0)
|
|
if(EAST)
|
|
M.Turn(90)
|
|
M.Translate(-2, 0)
|
|
var/i = 0
|
|
for(var/datum/playingcard/P in cards)
|
|
var/image/I = new(src.icon, (concealed ? "[P.back_icon]" : "[P.card_icon]") )
|
|
//I.pixel_x = origin+(offset*i)
|
|
switch(direction)
|
|
if(SOUTH)
|
|
I.pixel_x = 8-(offset*i)
|
|
if(WEST)
|
|
I.pixel_y = -6+(offset*i)
|
|
if(EAST)
|
|
I.pixel_y = 8-(offset*i)
|
|
else
|
|
I.pixel_x = -7+(offset*i)
|
|
I.transform = M
|
|
overlays += I
|
|
i++
|
|
|
|
/obj/item/weapon/hand/dropped(mob/user as mob)
|
|
if(locate(/obj/structure/table, loc))
|
|
src.update_icon(user.dir)
|
|
else
|
|
update_icon()
|
|
|
|
/obj/item/weapon/hand/pickup(mob/user as mob)
|
|
src.update_icon()
|