Reveals 17/8/26

All Summer reveals (including high-res art)
All recent hBP09 reveals
Ability for plus-minus signs for arts
Internally, arts are now dictionaries instead of lists
Ability to directly reattach a support from one holomem to another
This commit is contained in:
Gabriel John Wallace Johnson
2026-08-17 14:02:36 -04:00
parent c782475e94
commit a1fd71498a
140 changed files with 2079 additions and 2442 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -46,11 +46,6 @@ texture = ExtResource("4_onx1c")
expand_mode = 1
stretch_mode = 4
[node name="ScrollIconTimer" type="Timer" parent="InfoVBox/Icons/ScrollIcon" unique_id=459691171]
unique_name_in_owner = true
wait_time = 2.0
one_shot = true
[node name="LockVBox" type="VBoxContainer" parent="InfoVBox/Icons" unique_id=501657068]
layout_mode = 1
anchors_preset = 1

View File

@@ -1588,6 +1588,7 @@ func _on_close_error_pressed() -> void:
func _not_real():
#This is all for POT generation
#Do not call this function
tr("MESSAGE_MULLIGAN")
tr("MESSAGE_DRAW")
tr("MESSAGE_DRAWX")
@@ -1673,6 +1674,7 @@ func _not_real():
tr("MESSAGE_ARCHIVE_HOLOMEM_PLAY")
tr("MESSAGE_ARCHIVE_CHEER_ATTACH")
tr("MESSAGE_ATTACHED_CHEER_ATTACH")
tr("MESSAGE_ATTACHED_SUPPORT_ATTACH")
tr("MESSAGE_ENDTURN")
tr("MESSAGE_DIERESULT")
tr("MESSAGE_RPS")
@@ -1761,6 +1763,7 @@ func _not_real():
tr("YOU_MESSAGE_ARCHIVE_HOLOMEM_PLAY")
tr("YOU_MESSAGE_ARCHIVE_CHEER_ATTACH")
tr("YOU_MESSAGE_ATTACHED_CHEER_ATTACH")
tr("YOU_MESSAGE_ATTACHED_SUPPORT_ATTACH")
tr("YOU_MESSAGE_ENDTURN")
tr("YOU_MESSAGE_DIERESULT")
tr("YOU_MESSAGE_RPS")

View File

@@ -140,8 +140,8 @@ func setup_info(number,art_code,back=null,load_art=true) -> void:
cost_dict.Yellow += 1
"N":
cost_dict.Any += 1
holomem_arts.append([art.artIndex,cost_dict,art.damage,bool(art.hasPlus),bool(art.hasEffect),null if !art.has("advantage") else art.advantage,null if !art.has("advantage") else art.advantageAmount])
holomem_arts.sort_custom(func(a,b): return a[0] < b[0]) #Order arts by index
holomem_arts.append({"index":art.artIndex,"cost":cost_dict,"damage":art.damage,"hasPlus":bool(art.hasPlus),"hasMinus":bool(art.hasMinus),"hasEffect":bool(art.hasEffect),"advantage":null if !art.has("advantage") else art.advantage,"advantageAmount":null if !art.has("advantage") else art.advantageAmount})
holomem_arts.sort_custom(func(a,b): return a.index < b.index) #Order arts by index
holomem_effects = []
if card_data.has("effect"):
holomem_effects.append(card_data.effect)
@@ -289,32 +289,40 @@ func full_desc():
for art in holomem_arts:
result += "\n\n[center]"
for i in range(art[1].White):
for i in range(art.cost.White):
result += "[img=18]res://CheerIcons/WhiteArts.webp[/img]"
for i in range(art[1].Green):
for i in range(art.cost.Green):
result += "[img=18]res://CheerIcons/GreenArts.webp[/img]"
for i in range(art[1].Red):
for i in range(art.cost.Red):
result += "[img=18]res://CheerIcons/RedArts.webp[/img]"
for i in range(art[1].Blue):
for i in range(art.cost.Blue):
result += "[img=18]res://CheerIcons/BlueArts.webp[/img]"
for i in range(art[1].Purple):
for i in range(art.cost.Purple):
result += "[img=18]res://CheerIcons/PurpleArts.webp[/img]"
for i in range(art[1].Yellow):
for i in range(art.cost.Yellow):
result += "[img=18]res://CheerIcons/YellowArts.webp[/img]"
for i in range(art[1].Any):
for i in range(art.cost.Any):
result += "[img=18]res://CheerIcons/ColorlessArts.webp[/img]"
result += " " + Settings.trans("%s_ART_%s_NAME" % [cardNumber, art[0]]).replace("[", "[lb]")
result += " " + str(art[2]) + ("+" if art[3] else "")
if art[5] != null:
if art[6] in [null, 50]:
result += " [img=40]res://Icons/tokkou_50_%s.png[/img]" % art[5].to_lower()
elif art[6] == 30:
result += " [img=40]res://Icons/tokkou_30_%s.png[/img]" % art[5].to_lower()
result += " " + Settings.trans("%s_ART_%s_NAME" % [cardNumber, art.index]).replace("[", "[lb]")
result += " " + str(art.damage)
if art.hasPlus and art.hasMinus:
result += "±"
elif art.hasPlus:
result += "+"
elif art.hasMinus:
result += "-"
if art.advantage != null:
if art.advantageAmount in [null, 50]:
result += " [img=40]res://Icons/tokkou_50_%s.png[/img]" % art.advantage.to_lower()
elif art.advantageAmount == 30:
result += " [img=40]res://Icons/tokkou_30_%s.png[/img]" % art.advantage.to_lower()
else:
result += " (+%d [img=18]res://CheerIcons/%s.webp[/img])" % [art[6], art[5]]
result += " (+%d [img=18]res://CheerIcons/%s.webp[/img])" % [art.advantageAmount, art.advantage]
result += "[/center]"
if art[4]:
result += "\n\n" + Settings.trans("%s_ART_%s_EFFECT" % [cardNumber, art[0]]).replace("[", "[lb]")
if art.hasEffect:
result += "\n\n" + Settings.trans("%s_ART_%s_EFFECT" % [cardNumber, art.index]).replace("[", "[lb]")
var costText = ""
for i in range(default_baton_pass_cost):

View File

@@ -389,7 +389,7 @@ func _holomem_filter(holomem_to_check) -> bool:
if holomem_filter.Advantage != null:
var found_art_with_correct_advantage = false
for possible_art in holomem_to_check.holomem_arts:
if possible_art[5] == holomem_filter.Advantage:
if possible_art.advantage == holomem_filter.Advantage:
found_art_with_correct_advantage = true
break
if !found_art_with_correct_advantage:

View File

@@ -70,7 +70,7 @@ func _new_info(top_card, card_to_show) -> void:
cheer_result[attached_card.cheer_color].append(preview)
else:
showing_card_ids.append(attached_card.cardID)
result.append([attached_card.cardFront,attached_card.full_desc()])
result.append([attached_card.cardFront,attached_card.full_desc(),attached_card])
#If at least 5 cheer of the same color, condense into one cheer icon with number
for cheer_color in cheer_result:

View File

@@ -1294,7 +1294,7 @@ func _on_card_clicked(card_id : int) -> void:
if is_turn:
if !actualCard.rested and currentZone in [centerZone, collabZone] and !(first_turn and player1) and !is_goldfishing:
for art in actualCard.holomem_arts:
popup.add_item(Settings.trans("%s_ART_%s_NAME" % [actualCard.cardNumber, art[0]]), 80+art[0])
popup.add_item(Settings.trans("%s_ART_%s_NAME" % [actualCard.cardNumber, art.index]), 80+art.index)
var found_other = [actualCard.cardNumber]
var current_index = 0
@@ -1302,8 +1302,8 @@ func _on_card_clicked(card_id : int) -> void:
var found_card = all_cards[find_in_zone(zone)]
if found_card.cardNumber not in found_other:
for art in found_card.holomem_arts:
%PopupSubMenu.add_item(Settings.trans("%s_ART_%s_NAME" % [found_card.cardNumber, art[0]]), 80)
%PopupSubMenu.set_item_metadata(current_index, {"holomem_number":found_card.cardNumber, "card_id":found_card.cardID, "art_index":art[0]})
%PopupSubMenu.add_item(Settings.trans("%s_ART_%s_NAME" % [found_card.cardNumber, art.index]), 80)
%PopupSubMenu.set_item_metadata(current_index, {"holomem_number":found_card.cardNumber, "card_id":found_card.cardID, "art_index":art.index})
current_index += 1
if current_index > 0:
@@ -1616,6 +1616,10 @@ func _on_list_card_clicked(card_id):
if life.size() < 6:
popup.add_item(tr("LIST_CHEER_LIFE"),603)
"Support":
if currentAttached != null and all_occupied_zones().size() > 1:
popup.add_item(tr("LIST_ATTACHED_SUPPORT_ATTACH"),642)
if currentFuda in [deck,archive,holopower] and actualCard.cardType != "Cheer" and revealed.size() < 10:
popup.add_item(tr("LIST_CARD_REVEAL"), 630)
@@ -1767,8 +1771,8 @@ func _popup_from_id(id, metadata = null):
actualCard = all_cards[metadata["card_id"]]
art_index = metadata["art_index"]
for art in actualCard.holomem_arts:
if art[0] == art_index:
oppSide.art_base_damage = art[2]
if art.index == art_index:
oppSide.art_base_damage = art.damage
break
100: #Play to Back
@@ -1923,6 +1927,11 @@ func _popup_from_id(id, metadata = null):
var possibleZones = all_bloomable_zones(all_cards[currentCard])[Settings.bloomCode.Instant]
showZoneSelection(possibleZones)
currentPrompt = 624
642: #Attach Support From Attach
hideLookAt(false)
var possibleZones = all_occupied_zones()
showZoneSelection(possibleZones)
currentPrompt = 642
901: #Goldfish Zone Damage
set_prompt("PROMPT_DAMAGE", 20, 3)

View File

@@ -1159,6 +1159,19 @@ class Side:
await self.tell_others("Attach Card", {"attachee_info" : await actualCard.to_dict(), "attach_to_info": await attachTo.to_dict()})
except IndexError:
return
case 642: #Attach Support From Attach
try:
currentAttached = self.cards[data["currentAttached"]]
await self.remove_from_attached(currentCard,currentAttached)
actualCard = self.cards[currentCard]
attachTo = self.cards[self.zones[chosenZone]]
await self.send_message(self.player,"MESSAGE_ATTACHED_SUPPORT_ATTACH",{"attachName":actualCard.number+"_NAME","toName":attachTo.number+"_NAME","fromName":currentAttached.number + "_NAME"},
{"toZone":chosenZone,"fromZone":await self.find_what_zone(currentAttached.id)})
await attachTo.attach(actualCard)
await self.tell_player("Attach Card", {"attachee" : actualCard.id, "attach_to": attachTo.id})
await self.tell_others("Attach Card", {"attachee_info" : await actualCard.to_dict(), "attach_to_info": await attachTo.to_dict()})
except IndexError:
return
case _:
pass

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
27/7/2026
17/8/2026

View File

@@ -1 +1 @@
1.2.3.0
1.2.3.1

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 204 KiB

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 215 KiB

After

Width:  |  Height:  |  Size: 209 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 208 KiB

After

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 175 KiB

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 181 KiB

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 184 KiB

After

Width:  |  Height:  |  Size: 162 KiB

Some files were not shown because too many files have changed in this diff Show More