diff --git a/APIs/GetCosmetics.php b/APIs/GetCosmetics.php index 6ce3d5117..6c2cdf473 100644 --- a/APIs/GetCosmetics.php +++ b/APIs/GetCosmetics.php @@ -58,6 +58,27 @@ $cardBack->name = "Force Fam"; $cardBack->id = 14; $response->cardBacks[] = $cardBack; +$cardBack->name = "Holocron Card Club"; +$cardBack->id = 15; +$response->cardBacks[] = $cardBack; +$cardBack->name = "Maclunky Gaming"; +$cardBack->id = 16; +$response->cardBacks[] = $cardBack; +$cardBack->name = "The Cantina Crew"; +$cardBack->id = 17; +$response->cardBacks[] = $cardBack; +$cardBack->name = "Rajeux TCG"; +$cardBack->id = 18; +$response->cardBacks[] = $cardBack; +$cardBack->name = "Under The Twin Suns"; +$cardBack->id = 19; +$response->cardBacks[] = $cardBack; +$cardBack->name = "Too Many Hans"; +$cardBack->id = 20; +$response->cardBacks[] = $cardBack; +$cardBack->name = "Porg Depot"; +$cardBack->id = 21; +$response->cardBacks[] = $cardBack; $response->playmats = []; if(IsUserLoggedIn()) { diff --git a/AllyAbilities.php b/AllyAbilities.php index 9dc08b896..c8f07f8e0 100644 --- a/AllyAbilities.php +++ b/AllyAbilities.php @@ -9,6 +9,14 @@ function CreateBattleDroid($player, $from = "-") { return PlayAlly("3463348370", $player, from:$from); //Battle Droid } +function CreateXWing($player, $from = "-") { + return PlayAlly("9415311381", $player, from:$from); //X-Wing +} + +function CreateTieFighter($player, $from = "-") { + return PlayAlly("7268926664", $player, from:$from); //Tie Fighter +} + function PlayAlly($cardID, $player, $subCards = "-", $from = "-", $owner = null, $cloned = false, $playCardEffect = false) { $uniqueID = GetUniqueId(); @@ -809,17 +817,17 @@ function AllyDestroyedAbility($player, $cardID, $uniqueID, $lostAbilities, break; case "6861397107"://First Order Stormtrooper $otherPlayer = $player == 1 ? 2 : 1; - IndirectDamage($otherPlayer, 1); + IndirectDamage($otherPlayer, 1, true); break; case "8287246260"://Droid Missile Platform $otherPlayer = $player == 1 ? 2 : 1; - IndirectDamage($otherPlayer, 3); + IndirectDamage($otherPlayer, 3, true); break; - case "7389195577"://Zyggerian Starhopper + case "7389195577"://Zygerrian Starhopper $otherPlayer = $player == 1 ? 2 : 1; - IndirectDamage($otherPlayer, 2); + IndirectDamage($otherPlayer, 2, true); break; - case "1519837763": + case "1519837763"://Shuttle ST-149 ShuttleST149($player); break; //AllyDestroyedAbility End @@ -1256,14 +1264,15 @@ function AllyAttackedAbility($attackTarget, $index) { function AddAllyPlayAbilityLayers($cardID, $from, $uniqueID = "-", $resourcesPaid=-1) { global $currentPlayer; - $allies = &GetAllies($currentPlayer); - for($i=0; $iLostAbilities($playedCardID)) return false; $thisIsNewlyPlayedAlly = $thisAlly->UniqueID() == $playedCardUniqueID; - if($player == $currentPlayer) { + + // When you play a card + if ($player == $currentPlayer) { switch($cardID) { case "415bde775d"://Hondo Ohnaka Leader Unit return $from == "RESOURCES"; @@ -1305,12 +1316,12 @@ function AllyHasPlayCardAbility($playedCardID, $playedCardUniqueID, $from, $card return !$thisIsNewlyPlayedAlly && DefinedTypesContains($playedCardID, "Unit") && TraitContains($playedCardID, "Separatist", $player); default: break; } - } else { + } else { // When an opponent plays a card switch ($cardID) { case "5555846790"://Saw Gerrera return DefinedTypesContains($playedCardID, "Event", $currentPlayer); case "7200475001"://Ki-Adi Mundi - return IsCoordinateActive($player) && GetClassState($currentPlayer, $CS_NumCardsPlayed) == 2; + return IsCoordinateActive($player) && $thisAlly->NumUses() > 0 && GetClassState($currentPlayer, $CS_NumCardsPlayed) == 2; case "4935319539"://Krayt Dragon return true; case "0199085444"://Lux Bonteri @@ -1318,166 +1329,208 @@ function AllyHasPlayCardAbility($playedCardID, $playedCardUniqueID, $from, $card default: break; } } + + // When anyone plays a card + switch($cardID) { + default: break; + } + return false; } -function AllyPlayCardAbility($cardID, $player="", $from="-", $abilityID="-", $uniqueID='-') -{ +function AllyPlayCardAbility($player, $cardID, $uniqueID, $numUses, $playedCardID, $from) { global $currentPlayer; - if($player == "") $player = $currentPlayer; - $allies = &GetAllies($player); - $index = SearchAlliesForUniqueID($uniqueID, $player); - switch($abilityID) - { - case "415bde775d"://Hondo Ohnaka Leader Unit - if($from == "RESOURCES") { - AddDecisionQueue("MULTIZONEINDICES", $player, "MYALLY&THEIRALLY"); - AddDecisionQueue("SETDQCONTEXT", $player, "Choose a unit to give an experience token", 1); - AddDecisionQueue("MAYCHOOSEMULTIZONE", $player, "<-", 1); - AddDecisionQueue("MZOP", $player, "ADDEXPERIENCE", 1); - } - break; - case "0052542605"://Bossk - if(DefinedTypesContains($cardID, "Event", $player)) { - AddDecisionQueue("MULTIZONEINDICES", $player, "MYALLY&THEIRALLY"); - AddDecisionQueue("SETDQCONTEXT", $player, "Choose a unit to deal 2 damage to"); + $otherPlayer = $player == 1 ? 2 : 1; + $ally = new Ally($uniqueID, $player); // Important: ally could be defeated by the time this function is called. So, use $ally->Exists() to check if the ally still exists. + + // When you play a card + if ($player == $currentPlayer) { + switch($cardID) { + case "415bde775d"://Hondo Ohnaka Leader Unit + if($from == "RESOURCES") { + AddDecisionQueue("MULTIZONEINDICES", $player, "MYALLY&THEIRALLY"); + AddDecisionQueue("SETDQCONTEXT", $player, "Choose a unit to give an experience token", 1); + AddDecisionQueue("MAYCHOOSEMULTIZONE", $player, "<-", 1); + AddDecisionQueue("MZOP", $player, "ADDEXPERIENCE", 1); + } + break; + case "0052542605"://Bossk + if(DefinedTypesContains($playedCardID, "Event", $player)) { + AddDecisionQueue("MULTIZONEINDICES", $player, "MYALLY&THEIRALLY"); + AddDecisionQueue("SETDQCONTEXT", $player, "Choose a unit to deal 2 damage to"); + AddDecisionQueue("MAYCHOOSEMULTIZONE", $player, "<-", 1); + AddDecisionQueue("MZOP", $player, "DEALDAMAGE,2,$player,1", 1); + } + break; + case "3434956158"://Fives + if(DefinedTypesContains($playedCardID, "Event", $player)) { + MZMoveCard($player, "MYDISCARD:trait=Clone;definedType=Unit", "MYBOTDECK", may:true, context:"Choose a Clone unit to put on the bottom of your deck"); + AddDecisionQueue("DRAW", $player, "-", 1); + } + break; + case "0961039929"://Colonel Yularen + if(DefinedTypesContains($playedCardID, "Unit", $player) && AspectContains($playedCardID, "Command", $player)) { + Restore(1, $player); + } + break; + case "3f7f027abd"://Quinlan Vos + $cost = CardCost($playedCardID); + AddDecisionQueue("MULTIZONEINDICES", $player, "THEIRALLY:maxCost=" . $cost); + AddDecisionQueue("SETDQCONTEXT", $player, "Choose a unit to deal 1 damage", 1); AddDecisionQueue("MAYCHOOSEMULTIZONE", $player, "<-", 1); - AddDecisionQueue("MZOP", $player, "DEALDAMAGE,2,$player,1", 1); - } - break; - case "3434956158"://Fives - if(DefinedTypesContains($cardID, "Event", $player)) { - MZMoveCard($currentPlayer, "MYDISCARD:trait=Clone;definedType=Unit", "MYBOTDECK", may:true, context:"Choose a Clone unit to put on the bottom of your deck"); - AddDecisionQueue("DRAW", $player, "-", 1); - } - break; - case "0961039929"://Colonel Yularen - if(DefinedTypesContains($cardID, "Unit", $player) && AspectContains($cardID, "Command", $player)) { - Restore(1, $player); - } - break; - case "3f7f027abd"://Quinlan Vos - $cost = CardCost($cardID); - AddDecisionQueue("MULTIZONEINDICES", $player, "THEIRALLY:maxCost=" . $cost); - AddDecisionQueue("SETDQCONTEXT", $player, "Choose a unit to deal 1 damage", 1); - AddDecisionQueue("MAYCHOOSEMULTIZONE", $player, "<-", 1); - AddDecisionQueue("MZOP", $player, "DEALDAMAGE,1,$player", 1); - break; - case "9850906885"://Maz Kanata - if(DefinedTypesContains($cardID, "Unit", $player)) { - $me = new Ally("MYALLY-" . $index, $player); - $me->Attach("2007868442");//Experience token - } - break; - case "5907868016"://Fighters for Freedom - if(AspectContains($cardID, "Aggression", $player)) { - $otherPlayer = ($player == 1 ? 2 : 1); - DealDamageAsync($otherPlayer, 1, "DAMAGE", "5907868016"); - WriteLog(CardLink("5907868016", "5907868016") . " is dealing 1 damage."); - } - break; - case "9610332938"://Poggle the Lesser - $me = new Ally("MYALLY-" . $index, $player); - if (!$me->IsExhausted()) { - AddDecisionQueue("SETDQCONTEXT", $player, "Choose if you want to create a Battle Droid token"); - AddDecisionQueue("YESNO", $player, "-"); - AddDecisionQueue("NOPASS", $player, "-"); - AddDecisionQueue("PASSPARAMETER", $player, $me->MZIndex(), 1); - AddDecisionQueue("MZOP", $player, "REST", 1); - AddDecisionQueue("PASSPARAMETER", $player, "3463348370", 1); - AddDecisionQueue("PLAYALLY", $player, "", 1); - } - break; - case "0142631581"://Mas Amedda - $me = new Ally("MYALLY-" . $index, $player); - if(!$me->IsExhausted()) { - AddDecisionQueue("SETDQCONTEXT", $player, "Choose if you want to search for a unit"); - AddDecisionQueue("YESNO", $player, "-"); - AddDecisionQueue("NOPASS", $player, "-"); - AddDecisionQueue("PASSPARAMETER", $player, $me->MZIndex(), 1); - AddDecisionQueue("MZOP", $player, "REST", 1); - AddDecisionQueue("SEARCHDECKTOPX", $player, "4;1;include-definedType-Unit"); - AddDecisionQueue("ADDHAND", $player, "-", 1); - AddDecisionQueue("REVEALCARDS", $player, "-", 1); - } - break; - case "8031540027"://Dengar - if(DefinedTypesContains($cardID, "Upgrade", $player)) { - global $CS_LayerTarget; - $target = GetClassState($player, $CS_LayerTarget); - AddDecisionQueue("YESNO", $player, "Do you want to deal 1 damage from " . CardLink($allies[$index], $allies[$index]) . "?"); - AddDecisionQueue("NOPASS", $player, "-"); - AddDecisionQueue("PASSPARAMETER", $player, $target, 1); - AddDecisionQueue("MZOP", $player, "DEALDAMAGE,1,$player,1", 1); - } - break; - case "0981852103"://Lady Proxima - if(TraitContains($cardID, "Underworld", $player)) { - $otherPlayer = $player == 1 ? 2 : 1; - DealDamageAsync($otherPlayer, 1, "DAMAGE", "0981852103"); - } - break; - case "3589814405"://tactical droid commander - if(TraitContains($cardID, "Separatist", $player)) { - AddLayer("TRIGGER", $currentPlayer, "3589814405", CardCost($cardID)); - } - break; - case "724979d608"://Cad Bane Leader Unit - $cadIndex = SearchAlliesForCard($player, "724979d608"); - if($cadIndex != "") { - $cadbane = new Ally("MYALLY-" . $cadIndex, $player); - if(!LeaderAbilitiesIgnored() && $from != 'PLAY' && $cadbane->NumUses() > 0 && TraitContains($cardID, "Underworld", $currentPlayer)) { - AddLayer("TRIGGER", $currentPlayer, "724979d608"); + AddDecisionQueue("MZOP", $player, "DEALDAMAGE,1,$player", 1); + break; + case "9850906885"://Maz Kanata + if ($ally->Exists() && DefinedTypesContains($playedCardID, "Unit", $player)) { + $ally->Attach("2007868442");//Experience token } - } - break; - case "4088c46c4d"://The Mandalorian Leader Unit - if(!LeaderAbilitiesIgnored() && DefinedTypesContains($cardID, "Upgrade", $player)) { - AddLayer("TRIGGER", $currentPlayer, "4088c46c4d"); - } - break; - case "3952758746"://Toro Calican - $toroIndex = SearchAlliesForCard($player, "3952758746"); - if($toroIndex != "") { - $toroCalican = new Ally("MYALLY-" . $toroIndex, $player); - if(TraitContains($cardID, "Bounty Hunter", $currentPlayer) && $toroCalican->NumUses() > 0){ - AddLayer("TRIGGER", $currentPlayer, "3952758746"); + break; + case "5907868016"://Fighters for Freedom + if(AspectContains($playedCardID, "Aggression", $player)) { + DealDamageAsync($otherPlayer, 1, "DAMAGE", "5907868016"); + WriteLog(CardLink("5907868016", "5907868016") . " is dealing 1 damage."); } - } - break; - case "3010720738"://Tobias Beckett - $tobiasBeckett = New Ally("MYALLY-" . $index, $player); - if($tobiasBeckett->NumUses() > 0 && !DefinedTypesContains($cardID, "Unit", $player)) { - $playedCardCost = CardCost($cardID); - AddDecisionQueue("MULTIZONEINDICES", $player, "MYALLY:maxCost=" . $playedCardCost . "&THEIRALLY:maxCost=" . $playedCardCost); - AddDecisionQueue("MZFILTER", $player, "status=1", 1); - AddDecisionQueue("SETDQCONTEXT", $player, "Choose a unit to exhaust with Tobias Beckett", 1); + break; + case "9610332938"://Poggle the Lesser + if ($ally->Exists() && !$ally->IsExhausted()) { + AddDecisionQueue("SETDQCONTEXT", $player, "Choose if you want to create a Battle Droid token"); + AddDecisionQueue("YESNO", $player, "-"); + AddDecisionQueue("NOPASS", $player, "-"); + AddDecisionQueue("PASSPARAMETER", $player, $ally->MZIndex(), 1); + AddDecisionQueue("MZOP", $player, "REST", 1); + AddDecisionQueue("PASSPARAMETER", $player, "3463348370", 1); + AddDecisionQueue("PLAYALLY", $player, "", 1); + } + break; + case "0142631581"://Mas Amedda + if($ally->Exists() && !$ally->IsExhausted()) { + AddDecisionQueue("SETDQCONTEXT", $player, "Choose if you want to search for a unit"); + AddDecisionQueue("YESNO", $player, "-"); + AddDecisionQueue("NOPASS", $player, "-"); + AddDecisionQueue("PASSPARAMETER", $player, $ally->MZIndex(), 1); + AddDecisionQueue("MZOP", $player, "REST", 1); + AddDecisionQueue("SEARCHDECKTOPX", $player, "4;1;include-definedType-Unit"); + AddDecisionQueue("ADDHAND", $player, "-", 1); + AddDecisionQueue("REVEALCARDS", $player, "-", 1); + } + break; + case "8031540027"://Dengar + if(DefinedTypesContains($playedCardID, "Upgrade", $player)) { + global $CS_LayerTarget; + $target = GetClassState($player, $CS_LayerTarget); + AddDecisionQueue("YESNO", $player, "if you want to deal 1 damage from " . CardLink($cardID, $cardID) . "?"); + AddDecisionQueue("NOPASS", $player, "-"); + AddDecisionQueue("PASSPARAMETER", $player, $target, 1); + AddDecisionQueue("MZOP", $player, "DEALDAMAGE,1,$player,1", 1); + } + break; + case "0981852103"://Lady Proxima + if(TraitContains($playedCardID, "Underworld", $player)) { + DealDamageAsync($otherPlayer, 1, "DAMAGE", "0981852103"); + } + break; + case "3589814405"://Tactical Droid Commander + if(TraitContains($playedCardID, "Separatist", $player)) { + $playedCardCost = CardCost($playedCardID); + AddDecisionQueue("MULTIZONEINDICES", $player, "THEIRALLY:maxCost=".$playedCardCost); + AddDecisionQueue("SETDQCONTEXT", $player, "Choose a unit to exhaust", 1); + AddDecisionQueue("MAYCHOOSEMULTIZONE", $player, "<-", 1); + AddDecisionQueue("MZOP", $player, "REST", 1); + } + break; + case "724979d608"://Cad Bane Leader Unit + if (!LeaderAbilitiesIgnored() && $from != 'PLAY' && $numUses > 0 && TraitContains($playedCardID, "Underworld", $player)) { + AddDecisionQueue("YESNO", $player, "if you want use Cad Bane's ability"); + AddDecisionQueue("NOPASS", $player, "-"); + AddDecisionQueue("MULTIZONEINDICES", $otherPlayer, "MYALLY", 1); + AddDecisionQueue("SETDQCONTEXT", $otherPlayer, "Choose a unit to deal 2 damage to", 1); + AddDecisionQueue("CHOOSEMULTIZONE", $otherPlayer, "<-", 1); + AddDecisionQueue("MZOP", $otherPlayer, "DEALDAMAGE,2", 1); + + if ($ally->Exists()) { + AddDecisionQueue("PASSPARAMETER", $player, $ally->MZIndex(), 1); + AddDecisionQueue("ADDMZUSES", $player, "-1", 1); + } + } + break; + case "4088c46c4d"://The Mandalorian Leader Unit + if(!LeaderAbilitiesIgnored() && DefinedTypesContains($playedCardID, "Upgrade", $player)) { + AddDecisionQueue("MULTIZONEINDICES", $player, "THEIRALLY:maxHealth=6"); + AddDecisionQueue("SETDQCONTEXT", $player, "Choose a unit to exhaust", 1); + AddDecisionQueue("MAYCHOOSEMULTIZONE", $player, "<-", 1); + AddDecisionQueue("MZOP", $player, "REST", 1); + } + break; + case "3952758746"://Toro Calican + if (TraitContains($playedCardID, "Bounty Hunter", $player) && $numUses > 0){ + AddDecisionQueue("YESNO", $player, "if you want to use Toro Calican's ability"); + AddDecisionQueue("NOPASS", $player, "-"); + AddDecisionQueue("PASSPARAMETER", $player, "MYALLY-" . LastAllyIndex($player), 1); + AddDecisionQueue("MZOP", $player, "DEALDAMAGE,1", 1); + + if ($ally->Exists()) { + AddDecisionQueue("PASSPARAMETER", $player, $ally->MZIndex(), 1); + AddDecisionQueue("MZOP", $player, "READY", 1); + AddDecisionQueue("ADDMZUSES", $player, "-1", 1); + } + } + break; + case "3010720738"://Tobias Beckett + if ($numUses > 0 && !DefinedTypesContains($playedCardID, "Unit", $player)) { + $playedCardCost = CardCost($playedCardID); + AddDecisionQueue("MULTIZONEINDICES", $player, "MYALLY:maxCost=" . $playedCardCost . "&THEIRALLY:maxCost=" . $playedCardCost); + AddDecisionQueue("MZFILTER", $player, "status=1", 1); + AddDecisionQueue("SETDQCONTEXT", $player, "Choose a unit to exhaust with Tobias Beckett", 1); + AddDecisionQueue("MAYCHOOSEMULTIZONE", $player, "<-", 1); + AddDecisionQueue("MZOP", $player, "REST", 1); + + if ($ally->Exists()) { + AddDecisionQueue("PASSPARAMETER", $player, $ally->MZIndex(), 1); + AddDecisionQueue("ADDMZUSES", $player, "-1", 1); + } + } + break; + default: break; + } + } else { // When an oponent plays a card + switch($cardID) { + case "7200475001"://Ki-Adi Mundi + if ($numUses > 0) { + AddDecisionQueue("YESNO", $player, "if you want use Ki-Adi Mundi's ability"); + AddDecisionQueue("NOPASS", $player, "-"); + AddDecisionQueue("DRAW", $player, "-", 1); + AddDecisionQueue("DRAW", $player, "-", 1); + + if ($ally->Exists()) { + AddDecisionQueue("PASSPARAMETER", $player, $ally->MZIndex(), 1); + AddDecisionQueue("ADDMZUSES", $player, "-1", 1); + } + } + break; + case "5555846790"://Saw Gerrera + DealDamageAsync($otherPlayer, 2, "DAMAGE", "5555846790"); + break; + case "4935319539"://Krayt Dragon + if ($playedCardID == "0345124206") break; //Clone - When Clone is played, Krayt Dragon's ability is not triggered. It'll be triggered later after the Clone's resolution with the new printed attributes. + $damage = CardCost($playedCardID); + AddDecisionQueue("MULTIZONEINDICES", $player, "THEIRALLY:arena=Ground"); + AddDecisionQueue("PREPENDLASTRESULT", $player, "THEIRCHAR-0,"); + AddDecisionQueue("SETDQCONTEXT", $player, "Choose a card to deal " . $damage . " damage to"); AddDecisionQueue("MAYCHOOSEMULTIZONE", $player, "<-", 1); - AddDecisionQueue("MZOP", $player, "REST", 1); - AddDecisionQueue("PASSPARAMETER", $player, "MYALLY-" . $index, 1); - AddDecisionQueue("ADDMZUSES", $player, -1, 1); - } - break; - default: break; + AddDecisionQueue("MZOP", $player, "DEALDAMAGE," . $damage, 1); + break; + case "0199085444"://Lux Bonteri + AddDecisionQueue("MULTIZONEINDICES", $player, "MYALLY&THEIRALLY"); + AddDecisionQueue("SETDQCONTEXT", $player, "Choose a unit to ready or exhaust"); + AddDecisionQueue("CHOOSEMULTIZONE", $player, "<-", 1); + AddDecisionQueue("SPECIFICCARD", $player, "LUXBONTERI", 1); + break; + default: break; + } } - switch($abilityID) - { - case "7200475001"://Ki-Adi Mundi - $opponent = $currentPlayer == 1 ? 2 : 1; - Draw($opponent); - Draw($opponent); - break; - case "5555846790"://Saw Gerrera - DealDamageAsync($player, 2, "DAMAGE", "5555846790"); - break; - case "4935319539"://Krayt Dragon - if ($cardID != "0345124206") { //Clone - When Clone is played, Krayt Dragon's ability is not triggered. It'll be triggered later after the Clone's resolution with the new printed attributes. - AddLayer("TRIGGER", $currentPlayer, "4935319539", $cardID); - } - break; - case "0199085444"://Lux Bonteri - AddLayer("TRIGGER", $currentPlayer, "0199085444", $cardID); - break; + + // When anyone plays a card + switch($cardID) { default: break; } } @@ -2244,11 +2297,12 @@ function SpecificAllyAttackAbilities($attackID) } } break; + //Jump to Lightspeed case "2778554011"://General Draven - PlayAlly("9415311381", $mainPlayer); //X-Wing + CreateXWing($mainPlayer); break; case "2657417747"://Quasar TIE Carrier - PlayAlly("7268926664", $mainPlayer); //TIE Fighter + CreateTieFighter($mainPlayer); break; case "6390089966"://Banshee $damage = $attackerAlly->Damage(); @@ -2259,13 +2313,13 @@ function SpecificAllyAttackAbilities($attackID) AddDecisionQueue("MZOP", $mainPlayer, "DEALDAMAGE," . $damage, 1); break; case "7831643253"://Red Squadron Y-Wing - IndirectDamage($defPlayer, 3); + IndirectDamage($defPlayer, 3, true); break; case "6861397107"://First Order Stormtrooper - IndirectDamage($defPlayer, 1); + IndirectDamage($defPlayer, 1, true); break; case "3504944818"://Tie Bomber - IndirectDamage($defPlayer, 3); + IndirectDamage($defPlayer, 3, true); break; case "1990020761"://Shuttle Tidirium $card = Mill($mainPlayer, 1); @@ -2276,6 +2330,10 @@ function SpecificAllyAttackAbilities($attackID) AddDecisionQueue("MZOP", $mainPlayer, "ADDEXPERIENCE", 1); } break; + case "6648978613"://Fett's Firespray (Feared Silhouettte) + $damage = ControlsNamedCard($mainPlayer, "Boba Fett") ? 2 : 1; + IndirectDamage($defPlayer, $damage, true); + break; default: break; } //SpecificAllyAttackAbilities End @@ -2310,7 +2368,7 @@ function AllyDamageTakenAbilities($player, $index, $damage, $fromCombat=false, $ default: break; } } - + // Enemy unit abilities $otherPlayer = $player == 1 ? 2 : 1; $theirAllies = &GetAllies($otherPlayer); diff --git a/BootPlayer.php b/BootPlayer.php index 94703de92..479078929 100644 --- a/BootPlayer.php +++ b/BootPlayer.php @@ -20,7 +20,8 @@ $gameToken = TryGET("gameToClose", ""); $playerToBoot = TryGET("playerToBoot", ""); -SetCachePiece($gameToken, $playerToBoot+3, 2); +SetCachePiece($gameToken, $playerToBoot+3, 2);//internet connection status +SetCachePiece($gameToken, $playerToBoot+14, 3);//forced disconnect status header("Location: ./zzModPage.php"); diff --git a/CardDictionary.php b/CardDictionary.php index 6a0906adb..934d39e29 100644 --- a/CardDictionary.php +++ b/CardDictionary.php @@ -690,7 +690,7 @@ function HasShielded($cardID, $player, $index) { switch($cardID) { - //SOR + //Spark of Rebellion case "b0dbca5c05"://Iden Versio Leader Unit return !LeaderAbilitiesIgnored(); case "0700214503"://Crafty Smuggler @@ -703,7 +703,7 @@ function HasShielded($cardID, $player, $index) case "7728042035"://Chimaera case "7870435409"://Bib Fortuna return true; - //SHD + //Shadows of the Galaxy case "0088477218"://Privateer Scyk return SearchCount(SearchAllies($player, aspect:"Cunning")) > 1; case "6939947927"://Hunter of the Haxion Brood @@ -717,7 +717,7 @@ function HasShielded($cardID, $player, $index) case "6635692731"://Hutt's Henchman case "4341703515"://Supercommando Squad return true; - //JTL + //Jump to Lightspeed case "6311662442"://Director Krennic case "1519837763"://Shuttle ST-149 case "6300552434"://Gold Leader @@ -1187,6 +1187,14 @@ function CheckJTLAbilityTypes($cardID) { return LeaderAbilitiesIgnored() ? "" : "A"; case "0011262813"://Wedge Antilles Leader return LeaderAbilitiesIgnored() ? "" : "A"; + case "3933322003"://Rose Tico Leader + return LeaderAbilitiesIgnored() ? "" : "A"; + case "0616724418"://Han Solo Leader + return LeaderAbilitiesIgnored() ? "" : "A"; + case "3658069276"://Lando Calrissian Leader + return LeaderAbilitiesIgnored() ? "" : "A"; + case "7514405173"://Admiral Ackbar Leader + return LeaderAbilitiesIgnored() ? "" : "A"; default: return ""; } } @@ -1449,6 +1457,15 @@ function CheckJTLAbilityNames($cardID) { return LeaderAbilitiesIgnored() ? "" : "Play"; case "0011262813"://Wedge Antilles Leader return LeaderAbilitiesIgnored() ? "" : "Play"; + case "3933322003"://Rose Tico Leader + return LeaderAbilitiesIgnored() ? "" : "Heal"; + case "0616724418"://Han Solo Leader + return LeaderAbilitiesIgnored() ? "" : "Odds"; + case "3658069276"://Lando Calrissian Leader + return LeaderAbilitiesIgnored() ? "" : "Play"; + case "7514405173"://Admiral Ackbar Leader + return LeaderAbilitiesIgnored() ? "" : "Exhaust"; + default: return ""; } } @@ -1829,6 +1846,10 @@ function LeaderUnit($cardID) { return "f6eb711cf3"; case "4030832630"://Admiral Piett return "649c6a9dbd"; + case "5846322081"://Grand Admiral Thrawn + return "53207e4131"; + case "3933322003"://Rose Tico + return "590b638b18"; default: return ""; } } @@ -1959,7 +1980,10 @@ function LeaderUndeployed($cardID) { return "9831674351"; case "649c6a9dbd"://Admiral Piett return "4030832630"; - + case "53207e4131"://Grand Admiral Thrawn + return "5846322081"; + case "590b638b18"://Rose Tico + return "3933322003"; default: return ""; } } diff --git a/CardLogic.php b/CardLogic.php index c431183e2..3d762715b 100644 --- a/CardLogic.php +++ b/CardLogic.php @@ -612,15 +612,12 @@ function ProcessTrigger($player, $parameter, $uniqueID, $additionalCosts, $targe } break; case "SHIELDED": - $index = SearchAlliesForUniqueID($uniqueID, $player); - $ally = new Ally("MYALLY-" . $index, $player); + $ally = new Ally($uniqueID, $player); $ally->Attach("8752877738");//Shield Token break; case "AFTERPLAYABILITY": - $arr = explode(",", $uniqueID); - $abilityID = $arr[0]; - $uniqueID = $arr[1]; - AllyPlayCardAbility($target, $player, from: $additionalCosts, abilityID:$abilityID, uniqueID:$uniqueID); + $data = explode(",",$target); // $cardID, $player, $numUses, $playedCardID + AllyPlayCardAbility($data[1], $data[0], $uniqueID, $data[2], $data[3], from:$additionalCosts); break; case "AFTERDESTROYTHEIRSABILITY": $data=explode(",",$target); @@ -795,18 +792,6 @@ function ProcessTrigger($player, $parameter, $uniqueID, $additionalCosts, $targe AddDecisionQueue("PASSPARAMETER", $player, "{0}", 1); AddDecisionQueue("MZOP", $player, "PLAYCARD", 1); break; - case "724979d608"://Cad Bane Leader Unit - $cadIndex = SearchAlliesForCard($player, "724979d608"); - $otherPlayer = ($player == 1 ? 2 : 1); - AddDecisionQueue("YESNO", $player, "if you want use Cad Bane's ability"); - AddDecisionQueue("NOPASS", $player, "-"); - AddDecisionQueue("PASSPARAMETER", $player, "MYALLY-" . $cadIndex, 1); - AddDecisionQueue("ADDMZUSES", $player, "-1", 1); - AddDecisionQueue("MULTIZONEINDICES", $otherPlayer, "MYALLY", 1); - AddDecisionQueue("SETDQCONTEXT", $otherPlayer, "Choose a unit to deal 2 damage to", 1); - AddDecisionQueue("CHOOSEMULTIZONE", $otherPlayer, "<-", 1); - AddDecisionQueue("MZOP", $otherPlayer, "DEALDAMAGE,2", 1); - break; case "1384530409"://Cad Bane Leader ability $otherPlayer = ($player == 1 ? 2 : 1); AddDecisionQueue("YESNO", $player, "if you want use Cad Bane's ability"); @@ -817,12 +802,6 @@ function ProcessTrigger($player, $parameter, $uniqueID, $additionalCosts, $targe AddDecisionQueue("CHOOSEMULTIZONE", $otherPlayer, "<-", 1); AddDecisionQueue("MZOP", $otherPlayer, "DEALDAMAGE,1", 1); break; - case "4088c46c4d"://Mandalorian Leader Unit - AddDecisionQueue("MULTIZONEINDICES", $player, "THEIRALLY:maxHealth=6"); - AddDecisionQueue("SETDQCONTEXT", $player, "Choose a unit to exhaust", 1); - AddDecisionQueue("MAYCHOOSEMULTIZONE", $player, "<-", 1); - AddDecisionQueue("MZOP", $player, "REST", 1); - break; case "9005139831"://Mandalorian Leader Ability AddDecisionQueue("MULTIZONEINDICES", $player, "THEIRALLY:maxHealth=4"); AddDecisionQueue("SETDQCONTEXT", $player, "Choose a unit to exhaust", 1); @@ -830,12 +809,6 @@ function ProcessTrigger($player, $parameter, $uniqueID, $additionalCosts, $targe AddDecisionQueue("MZOP", $player, "REST", 1); AddDecisionQueue("EXHAUSTCHARACTER", $player, FindCharacterIndex($player, "9005139831"), 1); break; - case "3589814405"://tactical droid commander - AddDecisionQueue("MULTIZONEINDICES", $player, "THEIRALLY:maxCost=".$target); - AddDecisionQueue("SETDQCONTEXT", $player, "Choose a unit to exhaust", 1); - AddDecisionQueue("MAYCHOOSEMULTIZONE", $player, "<-", 1); - AddDecisionQueue("MZOP", $player, "REST", 1); - break; case "2358113881"://Quinlan Vos $allies = &GetAllies($player); if(count($allies) == 0) break; @@ -846,22 +819,6 @@ function ProcessTrigger($player, $parameter, $uniqueID, $additionalCosts, $targe AddDecisionQueue("MZOP", $player, "DEALDAMAGE,1", 1); AddDecisionQueue("EXHAUSTCHARACTER", $player, FindCharacterIndex($player, "2358113881"), 1); break; - case "4935319539"://Krayt Dragon - $otherPlayer = ($player == 1 ? 2 : 1); - $damage = CardCost($target); - AddDecisionQueue("MULTIZONEINDICES", $otherPlayer, "THEIRALLY:arena=Ground"); - AddDecisionQueue("PREPENDLASTRESULT", $otherPlayer, "THEIRCHAR-0,"); - AddDecisionQueue("SETDQCONTEXT", $otherPlayer, "Choose a card to deal " . $damage . " damage to"); - AddDecisionQueue("MAYCHOOSEMULTIZONE", $otherPlayer, "<-", 1); - AddDecisionQueue("MZOP", $otherPlayer, "DEALDAMAGE," . $damage, 1); - break; - case "0199085444"://Lux Bonteri - $otherPlayer = ($player == 1 ? 2 : 1); - AddDecisionQueue("MULTIZONEINDICES", $otherPlayer, "MYALLY&THEIRALLY"); - AddDecisionQueue("SETDQCONTEXT", $otherPlayer, "Choose a unit to ready or exhaust"); - AddDecisionQueue("CHOOSEMULTIZONE", $otherPlayer, "<-", 1); - AddDecisionQueue("SPECIFICCARD", $otherPlayer, "LUXBONTERI", 1); - break; case "3045538805"://Hondo Ohnaka Leader AddDecisionQueue("MULTIZONEINDICES", $player, "MYALLY&THEIRALLY"); AddDecisionQueue("SETDQCONTEXT", $player, "Choose a unit to give an experience token", 1); @@ -877,16 +834,6 @@ function ProcessTrigger($player, $parameter, $uniqueID, $additionalCosts, $targe PrependDecisionQueue("SETDQCONTEXT", $player, "Choose a card to give +1 power"); PrependDecisionQueue("MULTIZONEINDICES", $player, "MYALLY"); break; - case "3952758746"://Toro Calican - $toroIndex = SearchAlliesForCard($player, "3952758746"); - AddDecisionQueue("YESNO", $player, "if you want to use Toro Calican's ability"); - AddDecisionQueue("NOPASS", $player, "-"); - AddDecisionQueue("PASSPARAMETER", $player, "MYALLY-" . LastAllyIndex($player), 1); - AddDecisionQueue("MZOP", $player, "DEALDAMAGE,1", 1); - AddDecisionQueue("PASSPARAMETER", $player, "MYALLY-" . $toroIndex, 1); - AddDecisionQueue("MZOP", $player, "READY", 1); - AddDecisionQueue("ADDMZUSES", $player, "-1", 1); - break; case "0754286363"://The Mandalorian's Rifle AddDecisionQueue("MULTIZONEINDICES", $player, "THEIRALLY"); AddDecisionQueue("MZFILTER", $player, "definedType=Leader"); @@ -1163,25 +1110,25 @@ function UIDIsAffectedByMalevolence($uniqueID) { return $found; } -function IndirectDamage($player, $amount) +function IndirectDamage($player, $amount, $fromUnitEffect=false) { $sourcePlayer = $player == 1 ? 2 : 1; - $amount += SearchCount(SearchAlliesForCard($sourcePlayer, "4560739921")); + $amount += SearchCount(SearchAlliesForCard($sourcePlayer, "4560739921"));//Hunting Aggressor if(SearchCount(SearchAlliesForCard($sourcePlayer, "1330473789")) > 0) { //Devastator for($i=0; $i<$amount; ++$i) { AddDecisionQueue("MULTIZONEINDICES", $sourcePlayer, "THEIRALLY", $i == 0 ? 0 : 1); AddDecisionQueue("PREPENDLASTRESULT", $sourcePlayer, "THEIRCHAR-0,", $i == 0 ? 0 : 1); AddDecisionQueue("SETDQCONTEXT", $sourcePlayer, "Choose a card to deal an indirect damage (Remaining: " . ($amount-$i) . ")", $i == 0 ? 0 : 1); - AddDecisionQueue("MAYCHOOSEMULTIZONE", $sourcePlayer, "<-", 1); - AddDecisionQueue("MZOP", $sourcePlayer, "DEALDAMAGE,1,$sourcePlayer,0,0", 1); + AddDecisionQueue("CHOOSEMULTIZONE", $sourcePlayer, "<-", 1); + AddDecisionQueue("MZOP", $sourcePlayer, "DEALDAMAGE,1,$sourcePlayer," . ($fromUnitEffect ? "1" : "0") . ",0", 1); } } else { for($i=0; $i<$amount; ++$i) { AddDecisionQueue("MULTIZONEINDICES", $player, "MYALLY", $i == 0 ? 0 : 1); AddDecisionQueue("PREPENDLASTRESULT", $player, "MYCHAR-0,", $i == 0 ? 0 : 1); AddDecisionQueue("SETDQCONTEXT", $player, "Choose a card to deal an indirect damage (Remaining: " . ($amount-$i) . ")", $i == 0 ? 0 : 1); - AddDecisionQueue("MAYCHOOSEMULTIZONE", $player, "<-", 1); - AddDecisionQueue("MZOP", $player, "DEALDAMAGE,1,$player,0,0", 1); + AddDecisionQueue("CHOOSEMULTIZONE", $player, "<-", 1); + AddDecisionQueue("MZOP", $player, "DEALDAMAGE,1,$sourcePlayer," . ($fromUnitEffect ? "1" : "0") . ",0", 1); } } } diff --git a/Constants.php b/Constants.php index e78175ffc..b88b8e914 100644 --- a/Constants.php +++ b/Constants.php @@ -34,6 +34,8 @@ function CharacterPieces() return 11; } +//TODO(TwinSuns): look into how many places are calling charArr[CharacterPieces()] to get the leader cardID + //0 - Card ID //1 - Mods (INT == Intimidated) //2 - Unique ID? diff --git a/CoreLogic.php b/CoreLogic.php index 836809366..2367b9ed8 100644 --- a/CoreLogic.php +++ b/CoreLogic.php @@ -2005,13 +2005,13 @@ function SelfCostModifier($cardID, $from, $reportMode=false) $allies = &GetAllies($currentPlayer); for($i=0; $i 1) { @@ -5829,7 +5829,7 @@ function PlayAbility($cardID, $from, $resourcesPaid, $target = "-", $additionalC break; case "1330473789"://Devastator $otherPlayer = $currentPlayer == 1 ? 2 : 1; - IndirectDamage($otherPlayer, 4); + IndirectDamage($otherPlayer, 4, true); break; case "2388374331"://Blue Leader AddDecisionQueue("YESNO", $currentPlayer, "Do you want to pay 2 to gain 2 experience tokens?", 1); @@ -5888,10 +5888,43 @@ function PlayAbility($cardID, $from, $resourcesPaid, $target = "-", $additionalC AddDecisionQueue("MZOP", $currentPlayer, "PLAYCARD", 1); } break; + case "3933322003"://Rose Tico Leader + if(GetResolvedAbilityName($cardID) == "Heal") { + AddDecisionQueue("MULTIZONEINDICES", $currentPlayer, "MYALLY:trait=Vehicle&THEIRALLY:trait=Vehicle"); + AddDecisionQueue("MZFILTER", $currentPlayer, "numAttacks=0"); + AddDecisionQueue("SETDQCONTEXT", $currentPlayer, "Choose a vehicle unit to heal"); + AddDecisionQueue("CHOOSEMULTIZONE", $currentPlayer, "<-", 1); + AddDecisionQueue("MZOP", $currentPlayer, "RESTORE,2", 1); + } + break; + case "0616724418"://Han Solo Leader + if(GetResolvedAbilityName($cardID) == "Odds") { + WriteLog(CardLink($cardID, $cardID) . " ability is not implemented yet. Reverting gamestate"); + RevertGamestate(); + } + break; + case "3658069276"://Lando Calrissian Leader + if(GetResolvedAbilityName($cardID) == "Play") { + WriteLog(CardLink($cardID, $cardID) . " ability is not implemented yet. Reverting gamestate"); + RevertGamestate(); + } + break; + case "7514405173"://Admiral Ackbar Leader + if(GetResolvedAbilityName($cardID) == "Exhaust") { + WriteLog(CardLink($cardID, $cardID) . " ability is not implemented yet. Reverting gamestate"); + RevertGamestate(); + } + break; case "1519837763"://Shuttle ST-149 if($from != "PLAY") { ShuttleST149($currentPlayer); } + break; + case "6648978613"://Fett's Firespray (Feared Silhouettte) + $damage = ControlsNamedCard($currentPlayer, "Boba Fett") ? 2 : 1; + $otherPlayer = $currentPlayer == 1 ? 2 : 1; + IndirectDamage($otherPlayer, $damage, true); + break; //PlayAbility End default: break; } diff --git a/GetNextTurn2.php b/GetNextTurn2.php index 4ee10d688..4857d6cfa 100644 --- a/GetNextTurn2.php +++ b/GetNextTurn2.php @@ -143,11 +143,8 @@ $currentPlayerInputTimeout = true; $lastUpdate = 0; } else if ($gameState == 5 && $lastCurrentPlayer == $otherP && ($currentTime - $lastActionTime) > $InputTimeoutMS && $lastActionWarning == $otherP && $finalWarning == $otherP) { - WriteLog("Player $otherP has disconnected."); - $opponentDisconnected = true; - SetCachePiece($gameName, $otherP + 3, "2"); + WriteLog("Player $otherP is inactive."); SetCachePiece($gameName, $otherP + 14, 3); - SetCachePiece($gameName, 18, 0); GamestateUpdated($gameName); } } @@ -156,7 +153,7 @@ if ($count == 100) break; } $otherP = ($playerID == 1 ? 2 : 1); -$opponentDisconnected = GetCachePiece($gameName, $otherP + 3) == "2"; +$opponentDisconnected = GetCachePiece($gameName, $otherP + 3) == "2" || GetCachePiece($gameName, $otherP + 14) == "3"; if ($lastUpdate != 0 && $cacheVal <= $lastUpdate) { echo "0"; @@ -470,7 +467,7 @@ function getCaption($layer) { // Add the card to the content $cardId = $layerName; - if($cardId == "AFTERPLAYABILITY") $cardId = explode(',', $layers[$i+5])[0]; + if($cardId == "AFTERPLAYABILITY") $cardId = explode(',', $layers[$i+3])[0]; if($cardId == "AFTERDESTROYABILITY") $cardId = $layers[$i+3]; if($cardId == "AFTERDESTROYFRIENDLYABILITY") $cardId = explode(",", $layers[$i+3])[0]; if($cardId == "AFTERDESTROYTHEIRSABILITY") { @@ -552,8 +549,10 @@ function getCaption($layer) { } if ($turn[0] == "YESNO" && $turn[1] == $playerID) { - $content = CreateButton($playerID, "Yes", 20, "YES", "20px"); + $content = "
"; + $content .= CreateButton($playerID, "Yes", 20, "YES", "20px"); $content .= CreateButton($playerID, "No", 20, "NO", "20px"); + $content .= "
"; if (GetDQHelpText() != "-") $caption = implode(" ", explode("_", GetDQHelpText())); else $caption = "Choose " . TypeToPlay($turn[0]); echo CreatePopup("YESNO", [], 0, 1, $caption, 1, $content); diff --git a/Libraries/PlayerSettings.php b/Libraries/PlayerSettings.php index fc02cfb4e..6b11be144 100644 --- a/Libraries/PlayerSettings.php +++ b/Libraries/PlayerSettings.php @@ -106,6 +106,13 @@ function GetCardBack($player) case 12: return "RVA_SWU"; case 13: return "BBCardBack"; case 14: return "CBForceFam"; + case 15: return "holocron_card_club"; + case 16: return "maclunky_gaming"; + case 17: return "cantina_crew"; + case 18: return "Rajeux_TCG"; + case 19: return "under_the_twin_suns"; + case 20: return "too_many_hans"; + case 21: return "porg_depot"; default: return "CardBack"; } } @@ -299,6 +306,13 @@ function GetSettingsUI($player) $rv .= CreateRadioButton($SET_Cardback . "-" . 12, "Default", 26, $SET_Cardback . "-" . $settings[$SET_Cardback], "RVA SWU"); $rv .= CreateRadioButton($SET_Cardback . "-" . 13, "Default", 26, $SET_Cardback . "-" . $settings[$SET_Cardback], "Baddest Batch"); $rv .= CreateRadioButton($SET_Cardback . "-" . 14, "Default", 26, $SET_Cardback . "-" . $settings[$SET_Cardback], "Force Fam"); + $rv .= CreateRadioButton($SET_Cardback . "-" . 15, "Default", 26, $SET_Cardback . "-" . $settings[$SET_Cardback], "Holocron Card Club"); + $rv .= CreateRadioButton($SET_Cardback . "-" . 16, "Default", 26, $SET_Cardback . "-" . $settings[$SET_Cardback], "Maclunky Gaming"); + $rv .= CreateRadioButton($SET_Cardback . "-" . 17, "Default", 26, $SET_Cardback . "-" . $settings[$SET_Cardback], "The Cantina Crew"); + $rv .= CreateRadioButton($SET_Cardback . "-" . 18, "Default", 26, $SET_Cardback . "-" . $settings[$SET_Cardback], "Rajeux TCG"); + $rv .= CreateRadioButton($SET_Cardback . "-" . 19, "Default", 26, $SET_Cardback . "-" . $settings[$SET_Cardback], "Under The Twin Suns"); + $rv .= CreateRadioButton($SET_Cardback . "-" . 20, "Default", 26, $SET_Cardback . "-" . $settings[$SET_Cardback], "Too Many Hans"); + $rv .= CreateRadioButton($SET_Cardback . "-" . 21, "Default", 26, $SET_Cardback . "-" . $settings[$SET_Cardback], "Porg Depot"); $stage = getenv('STAGE') ?: 'prod'; $isDev = $stage === 'dev'; diff --git a/NextTurn4.php b/NextTurn4.php index e957d5a69..219afe6ae 100644 --- a/NextTurn4.php +++ b/NextTurn4.php @@ -31,11 +31,11 @@ exit; } ?> - + - + CharacterPieces() && CardType($myCharacter[CharacterPieces()]) == "W") echo ("if(event.keyCode === 108) SubmitInput(3, '&cardID=" . CharacterPieces() . "');"); //L = left weapon diff --git a/Search.php b/Search.php index ece0d5a96..679057e95 100644 --- a/Search.php +++ b/Search.php @@ -297,6 +297,22 @@ function SearchAlliesForTitle($player, $title) return $cardList; } +function SearchUpgradesForTitle($player, $title) { + $allies = &GetAllies($player); + $cardList = ""; + for ($i = 0; $i < count($allies); $i += AllyPieces()) { + $ally = new Ally("MYALLY-" . $i, $player); + $upgrades = $ally->GetUpgrades(withMetadata:true); + for ($j = 0; $j < count($upgrades); $j+=SubcardPieces()) { + if (CardTitle($upgrades[$j]) == $title) { + if ($cardList != "") $cardList = $cardList . ","; + $cardList = $cardList . $i . "," . $j; + } + } + } + return $cardList; +} + function SearchAlliesUniqueIDForTrait($player, $trait) { $allies = &GetAllies($player); $cardList = []; @@ -1093,6 +1109,8 @@ function ControlsNamedCard($player, $name) { $char = &GetPlayerCharacter($player); if(count($char) > CharacterPieces() && CardTitle($char[CharacterPieces()]) == $name) return true; if(SearchCount(SearchAlliesForTitle($player, $name)) > 0) return true; + if(SearchCount(SearchUpgradesForTitle($player, $name) > 0)) return true; + return false; } diff --git a/UnimplementedCards/3933322003.webp b/UnimplementedCards/3933322003.webp deleted file mode 100644 index 92882cb9b..000000000 Binary files a/UnimplementedCards/3933322003.webp and /dev/null differ diff --git a/UnimplementedCards/6648978613.webp b/UnimplementedCards/6648978613.webp deleted file mode 100644 index 357742ce6..000000000 Binary files a/UnimplementedCards/6648978613.webp and /dev/null differ diff --git a/concat/Rajeux_TCG.webp b/concat/Rajeux_TCG.webp new file mode 100644 index 000000000..9a87adfcc Binary files /dev/null and b/concat/Rajeux_TCG.webp differ diff --git a/concat/cantina_crew.webp b/concat/cantina_crew.webp new file mode 100644 index 000000000..80140bb00 Binary files /dev/null and b/concat/cantina_crew.webp differ diff --git a/concat/holocron_card_club.webp b/concat/holocron_card_club.webp new file mode 100644 index 000000000..1b0abd575 Binary files /dev/null and b/concat/holocron_card_club.webp differ diff --git a/concat/maclunky_gaming.webp b/concat/maclunky_gaming.webp new file mode 100644 index 000000000..fc09e36f6 Binary files /dev/null and b/concat/maclunky_gaming.webp differ diff --git a/concat/porg_depot.webp b/concat/porg_depot.webp new file mode 100644 index 000000000..b386ee78b Binary files /dev/null and b/concat/porg_depot.webp differ diff --git a/concat/too_many_hans.webp b/concat/too_many_hans.webp new file mode 100644 index 000000000..51b9e89f9 Binary files /dev/null and b/concat/too_many_hans.webp differ diff --git a/concat/under_the_twin_suns.webp b/concat/under_the_twin_suns.webp new file mode 100644 index 000000000..2c0e75d54 Binary files /dev/null and b/concat/under_the_twin_suns.webp differ