mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-22 08:01:06 +00:00
190 lines
5.8 KiB
Plaintext
190 lines
5.8 KiB
Plaintext
/obj/item/battle_monsters/deck
|
|
name = "battle monsters deck"
|
|
icon_state = "stack"
|
|
w_class = ITEMSIZE_SMALL
|
|
var/list/stored_card_names = list()
|
|
var/deck_size = 52
|
|
|
|
/obj/item/battle_monsters/deck/Initialize()
|
|
. = ..()
|
|
update_icon()
|
|
|
|
/obj/item/battle_monsters/deck/proc/get_top_card()
|
|
return stored_card_names[stored_card_names.len]
|
|
|
|
/obj/item/battle_monsters/deck/proc/get_bottom_card()
|
|
return stored_card_names[1]
|
|
|
|
/obj/item/battle_monsters/deck/proc/add_card(var/user, var/obj/item/battle_monsters/card/added_card)
|
|
|
|
if(added_card.spell_datum)
|
|
stored_card_names += "spell_type,[added_card.spell_datum.id],no_title"
|
|
else if(added_card.trap_datum)
|
|
stored_card_names += "trap_type,[added_card.trap_datum.id],no_title"
|
|
else
|
|
stored_card_names += "[added_card.prefix_datum.id],[added_card.root_datum.id],[added_card.suffix_datum.id]"
|
|
|
|
qdel(added_card)
|
|
|
|
update_icon()
|
|
|
|
/obj/item/battle_monsters/deck/proc/take_card(var/mob/user)
|
|
|
|
if(icon_state == "stack") //Deck form
|
|
user.visible_message(\
|
|
span("notice","\The [user] draws a card from their [src]."),\
|
|
span("notice","You draw a card from their [src].")\
|
|
)
|
|
else
|
|
user.visible_message(\
|
|
span("notice","\The [user] takes a card from their hand."),\
|
|
span("notice","You take a card from your hand.")\
|
|
)
|
|
|
|
take_specific_card(user,get_top_card())
|
|
|
|
/obj/item/battle_monsters/deck/proc/take_specific_card(var/mob/user, var/card_id)
|
|
if(card_id in stored_card_names)
|
|
var/obj/item/battle_monsters/card/new_card = SSbattlemonsters.CreateCard(card_id,src.loc)
|
|
|
|
if(!user.get_active_hand())
|
|
user.put_in_active_hand(new_card)
|
|
else if(!user.get_inactive_hand())
|
|
user.put_in_inactive_hand(new_card)
|
|
else
|
|
to_chat(user,span("notice","Your hands are full!"))
|
|
return
|
|
|
|
new_card.pickup(user)
|
|
stored_card_names -= card_id
|
|
|
|
|
|
if(stored_card_names.len <= 0)
|
|
qdel(src)
|
|
return
|
|
|
|
update_icon()
|
|
|
|
/obj/item/battle_monsters/deck/MouseDrop_T(var/atom/movable/C, mob/user) //Dropping C onto the card
|
|
|
|
if(istype(C,/obj/item/battle_monsters/deck/))
|
|
|
|
var/obj/item/battle_monsters/deck/added_deck = C
|
|
stored_card_names += added_deck.stored_card_names
|
|
|
|
user.visible_message(\
|
|
span("notice","\The [user] combines two decks together."),\
|
|
span("notice","You combine two decks together.")\
|
|
)
|
|
|
|
qdel(C)
|
|
return
|
|
|
|
. = ..()
|
|
|
|
/obj/item/battle_monsters/deck/update_icon()
|
|
if(icon_state == "hand")
|
|
name = "hand of [stored_card_names.len] battlemonster cards"
|
|
else
|
|
name = "deck of [stored_card_names.len] battlemonster cards"
|
|
|
|
. = ..()
|
|
|
|
/obj/item/battle_monsters/deck/verb/toggle_mode()
|
|
set category = "Object"
|
|
set name = "Change Deck Type"
|
|
set src in view(1)
|
|
|
|
if (use_check_and_message(usr, USE_DISALLOW_SILICONS))
|
|
return
|
|
|
|
if(icon_state == "hand")
|
|
usr.visible_message(\
|
|
span("notice","\The [usr] turns their hand into a stack of cards."),\
|
|
span("notice","You turn your hand into a stack of cards.")\
|
|
)
|
|
icon_state = "stack"
|
|
else
|
|
usr.visible_message(\
|
|
span("notice","\The [usr] turns their stack of cards into a hand."),\
|
|
span("notice","You turn your stack of cards into a hand.")\
|
|
)
|
|
icon_state = "hand"
|
|
|
|
update_icon()
|
|
|
|
/obj/item/battle_monsters/deck/verb/shuffle_deck()
|
|
set category = "Object"
|
|
set name = "Shuffle Deck"
|
|
set src in view(1)
|
|
|
|
if (use_check_and_message(usr, USE_DISALLOW_SILICONS))
|
|
return
|
|
|
|
usr.visible_message(\
|
|
span("notice","\The [usr] shuffles \the [src]."),\
|
|
span("notice","You shuffle \the [src].")\
|
|
)
|
|
|
|
playsound(src.loc, 'sound/items/cardshuffle.ogg', 100, 1, -4)
|
|
|
|
stored_card_names = shuffle(stored_card_names)
|
|
|
|
/obj/item/battle_monsters/deck/attack_hand(var/mob/user)
|
|
if(isturf(src.loc))
|
|
take_card(user)
|
|
else
|
|
. = ..()
|
|
|
|
/obj/item/battle_monsters/deck/attackby(var/obj/item/attacking, var/mob/user)
|
|
if(istype(attacking,/obj/item/battle_monsters/card) && attacking != src)
|
|
var/obj/item/battle_monsters/card/adding_card = attacking
|
|
add_card(user,adding_card)
|
|
|
|
/obj/item/battle_monsters/deck/attack_self(mob/user)
|
|
|
|
if(user != src.loc) //Idk how this is possible but you never know.
|
|
to_chat(user,span("notice","You'll have to pick up \the [src] to examine the cards!"))
|
|
return
|
|
|
|
if(icon_state != "hand")
|
|
user.visible_message(\
|
|
span("notice","\The [usr] begins searching through \the [src]..."),\
|
|
span("notice","You begin searching through your deck...")\
|
|
)
|
|
if(!do_after(user, 5 + stored_card_names.len, act_target = src))
|
|
user.visible_message(\
|
|
span("notice","\The [usr] stops and thinks better of it."),\
|
|
span("notice","You stop and think better of it.")\
|
|
)
|
|
return
|
|
|
|
BrowseDeck(user)
|
|
|
|
/obj/item/battle_monsters/deck/proc/BrowseDeck(var/mob/user)
|
|
var/browse_data = ""
|
|
for(var/cardname in stored_card_names)
|
|
var/list/splitstring = dd_text2List(cardname,",")
|
|
var/formatted_data
|
|
if(splitstring[1] == "spell_type")
|
|
formatted_data = SSbattlemonsters.FormatSpellText(SSbattlemonsters.GetSpellFormatting(),SSbattlemonsters.FindMatchingSpell(splitstring[2]))
|
|
else if(splitstring[1] == "trap_type")
|
|
formatted_data = SSbattlemonsters.FormatSpellText(SSbattlemonsters.GetTrapFormatting(),SSbattlemonsters.FindMatchingTrap(splitstring[2]))
|
|
else
|
|
var/datum/battle_monsters/element/prefix_datum = SSbattlemonsters.FindMatchingPrefix(splitstring[1])
|
|
var/datum/battle_monsters/monster/root_datum = SSbattlemonsters.FindMatchingRoot(splitstring[2])
|
|
var/datum/battle_monsters/title/suffix_datum = SSbattlemonsters.FindMatchingSuffix(splitstring[3])
|
|
formatted_data = SSbattlemonsters.FormatMonsterText(SSbattlemonsters.GetMonsterFormatting(),prefix_datum,root_datum,suffix_datum)
|
|
|
|
browse_data = "[formatted_data]<br><a href='?src=\ref[src];selection=[cardname]'>Draw Card</a><br><hr>[browse_data]"
|
|
|
|
user << browse(browse_data, "window=battlemonsters_hand")
|
|
|
|
/obj/item/battle_monsters/deck/Topic(href,href_list)
|
|
if(..())
|
|
return 1
|
|
|
|
if(href_list["selection"])
|
|
take_specific_card(usr, href_list["selection"])
|
|
BrowseDeck(usr)
|