mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-07-16 02:17:06 +01:00
387cee9243
Extends and reworks how various extended information text (desc_info, desc_build, desc_upgrades) are handled to make object interactions and mechanics A.) much more clearly documented in-game and B.) much easier to support from the back-end. Almost certainly a candidate for test merge. Assembly/Disassembly instructions are noticeably sporadic, largely due to our current lack of a unified framework. That's a future thing I'd like to attack so that it can be handled programmatically, but for now I only targeted the biggest culprits as I came across them. --------- Signed-off-by: Batrachophreno <Batrochophreno@gmail.com>
200 lines
5.9 KiB
Plaintext
200 lines
5.9 KiB
Plaintext
/obj/item/battle_monsters/card
|
|
name = "battle monsters card"
|
|
desc = "A battle monster's card."
|
|
|
|
var/card_type = BATTLE_MONSTERS_CARDTYPE_MONSTER
|
|
var/datum/battle_monsters/element/prefix_datum
|
|
var/datum/battle_monsters/monster/root_datum
|
|
var/datum/battle_monsters/title/suffix_datum
|
|
|
|
var/datum/battle_monsters/spell/spell_datum
|
|
var/datum/battle_monsters/trap/trap_datum
|
|
|
|
w_class = WEIGHT_CLASS_TINY
|
|
drop_sound = null
|
|
|
|
//Card information here
|
|
|
|
/obj/item/battle_monsters/card/feedback_hints(mob/user, distance, is_adjacent)
|
|
. += ..()
|
|
|
|
if(facedown && src.loc != user)
|
|
. += SPAN_NOTICE("You can't examine \the [src] while it's face down!")
|
|
return
|
|
|
|
if(trap_datum)
|
|
SSbattle_monsters.ExamineTrapCard(user,trap_datum)
|
|
else if(spell_datum)
|
|
SSbattle_monsters.ExamineSpellCard(user,spell_datum)
|
|
else
|
|
SSbattle_monsters.ExamineMonsterCard(user,prefix_datum,root_datum,suffix_datum)
|
|
|
|
/obj/item/battle_monsters/card/Initialize(var/mapload,var/prefix,var/root,var/title,var/trap,var/spell)
|
|
. = ..()
|
|
Generate_Card(prefix, root, title, trap, spell)
|
|
|
|
/obj/item/battle_monsters/card/attackby(obj/item/attacking_item, mob/user)
|
|
if(istype(attacking_item,/obj/item/battle_monsters/card) && attacking_item != src)
|
|
var/obj/item/battle_monsters/card/adding_card = attacking_item
|
|
make_deck(user,adding_card)
|
|
|
|
/obj/item/battle_monsters/card/resolve_attackby(atom/A, mob/user, var/click_parameters)
|
|
if(istype(A,/obj/structure/table) || istype(A,/obj/structure/dueling_table))
|
|
user.visible_message(\
|
|
SPAN_NOTICE("\The [user] plays \the [src]!"),\
|
|
SPAN_NOTICE("You play \the [src]!")\
|
|
)
|
|
..(A, user, click_parameters)
|
|
|
|
/obj/item/battle_monsters/card/attack_self(mob/user as mob)
|
|
flip_card(user)
|
|
|
|
/obj/item/battle_monsters/card/proc/make_deck(var/mob/user,var/obj/item/battle_monsters/card/adding_card)
|
|
|
|
var/obj/item/battle_monsters/deck/new_deck = new(src.loc)
|
|
|
|
if(src.loc == user)
|
|
//Make a hand.
|
|
user.drop_from_inventory(src)
|
|
new_deck.icon_state = "hand"
|
|
user.put_in_inactive_hand(new_deck)
|
|
to_chat(user, SPAN_NOTICE("You combine \the [src] and the [adding_card] to form a hand."))
|
|
else
|
|
new_deck.set_dir(dir)
|
|
new_deck.pixel_x = pixel_x
|
|
new_deck.pixel_y = pixel_y
|
|
new_deck.layer = max(layer,new_deck.layer)
|
|
user.visible_message(\
|
|
SPAN_NOTICE("\The [user] combines \the [src] and the [adding_card] to form a deck."),\
|
|
SPAN_NOTICE("You combine \the [src] and the [adding_card] to form a deck.")\
|
|
)
|
|
|
|
new_deck.add_card(user,src)
|
|
new_deck.add_card(user,adding_card)
|
|
|
|
/obj/item/battle_monsters/card/proc/flip_card(var/mob/user)
|
|
facedown = !facedown
|
|
|
|
if(src.loc == user)
|
|
if(!facedown)
|
|
to_chat(user, SPAN_NOTICE("You reveal \the [name] to yourself, preparing to play it face up."))
|
|
else
|
|
to_chat(user, SPAN_NOTICE("You prepare \the [name] to be played face down."))
|
|
else
|
|
if(!facedown)
|
|
user.visible_message(\
|
|
SPAN_NOTICE("\The [user] flip the card face up and reveals \the [name]."),\
|
|
SPAN_NOTICE("You flip the card face up and reveal \the [name].")\
|
|
)
|
|
else
|
|
user.visible_message(\
|
|
SPAN_NOTICE("\The [user] flips \the [name] face down."),\
|
|
SPAN_NOTICE("You flip \the [name] face down.")\
|
|
)
|
|
|
|
update_icon()
|
|
|
|
/obj/item/battle_monsters/card/proc/Generate_Card(var/prefix,var/root,var/title,var/trap,var/spell)
|
|
|
|
if(trap)
|
|
trap_datum = SSbattle_monsters.FindMatchingTrap(trap,TRUE)
|
|
update_icon()
|
|
return
|
|
|
|
if(spell)
|
|
spell_datum = SSbattle_monsters.FindMatchingSpell(spell,TRUE)
|
|
update_icon()
|
|
return
|
|
|
|
if(prefix)
|
|
prefix_datum = SSbattle_monsters.FindMatchingPrefix(prefix,TRUE)
|
|
else
|
|
prefix_datum = SSbattle_monsters.GetRandomPrefix()
|
|
|
|
if(root)
|
|
root_datum = SSbattle_monsters.FindMatchingRoot(root,TRUE)
|
|
else
|
|
root_datum = SSbattle_monsters.GetRandomRoot()
|
|
|
|
var/rarity_score = prefix_datum.rarity_score + root_datum.rarity_score
|
|
|
|
if(title)
|
|
suffix_datum = SSbattle_monsters.FindMatchingSuffix(title,TRUE)
|
|
else if(rarity_score >= 3)
|
|
suffix_datum = SSbattle_monsters.GetRandomSuffix()
|
|
else
|
|
suffix_datum = SSbattle_monsters.FindMatchingSuffix("no_title",TRUE)
|
|
|
|
/obj/item/battle_monsters/card/update_icon()
|
|
|
|
ClearOverlays()
|
|
|
|
if(facedown)
|
|
icon_state = "back"
|
|
else
|
|
|
|
var/rounded_rarity_score
|
|
|
|
if(trap_datum)
|
|
rounded_rarity_score = trap_datum.rarity_score
|
|
else if(spell_datum)
|
|
rounded_rarity_score = spell_datum.rarity_score
|
|
else
|
|
rounded_rarity_score = prefix_datum.rarity_score + root_datum.rarity_score + suffix_datum.rarity_score
|
|
|
|
rounded_rarity_score = min(max(round(rounded_rarity_score,1),1),4)
|
|
|
|
icon_state = "front_r_[rounded_rarity_score]"
|
|
AddOverlays("front_label")
|
|
|
|
if(trap_datum && trap_datum.icon_state)
|
|
AddOverlays(trap_datum.icon_state)
|
|
|
|
if(spell_datum && spell_datum.icon_state)
|
|
AddOverlays(spell_datum.icon_state)
|
|
|
|
if(prefix_datum && prefix_datum.icon_state)
|
|
AddOverlays(prefix_datum.icon_state)
|
|
|
|
if(root_datum && root_datum.icon_state)
|
|
AddOverlays(root_datum.icon_state)
|
|
|
|
if(suffix_datum && suffix_datum.icon_state)
|
|
AddOverlays(suffix_datum.icon_state)
|
|
|
|
if(rounded_rarity_score >= 2)
|
|
AddOverlays("rarity_animation")
|
|
|
|
var/matrix/M = matrix()
|
|
switch(dir)
|
|
if(NORTH)
|
|
M.Turn(0)
|
|
if(SOUTH)
|
|
M.Turn(180)
|
|
if(WEST)
|
|
M.Turn(270)
|
|
if(EAST)
|
|
M.Turn(90)
|
|
|
|
transform = M
|
|
|
|
/obj/item/battle_monsters/card/MouseEntered(location, control, params)
|
|
. = ..()
|
|
if(!facedown || Adjacent(usr))
|
|
var/card_title = name
|
|
var/card_content = desc
|
|
if(trap_datum)
|
|
card_title = trap_datum.name
|
|
card_content = SSbattle_monsters.FormatSpellText(SSbattle_monsters.GetTrapFormatting(FALSE), trap_datum, FALSE)
|
|
else if(spell_datum)
|
|
card_title = spell_datum.name
|
|
card_content = SSbattle_monsters.FormatSpellText(SSbattle_monsters.GetSpellFormatting(FALSE), spell_datum, FALSE)
|
|
else
|
|
card_title = root_datum.name
|
|
card_content = SSbattle_monsters.FormatMonsterText(SSbattle_monsters.GetMonsterFormatting(FALSE), prefix_datum, root_datum, suffix_datum, FALSE)
|
|
openToolTip(usr, src, params, card_title, card_content)
|
|
|
|
/obj/item/battle_monsters/card/MouseExited(location, control, params)
|
|
. = ..()
|
|
closeToolTip(usr)
|