617 Commits

Author SHA1 Message Date
xawotihs
00e076fca4 Fixed compilation with SDL/mingw 2025-05-11 17:08:37 +02:00
xawotihs
0023c4a086 Fixed compilation with latest mingw64 2025-04-25 18:48:02 +02:00
xawotihs
7c9fd90903 Merge branch 'master' into cmake 2025-04-22 20:37:50 +02:00
xawotihs
d95e9e1155 Fix compilation with latest cmake 2025-04-11 21:58:54 +02:00
Eduardo MG
b21964dc46 Strixhaven variants, fix critical bug
Palladia-Mors, the Ruiner
Vanish into Memory
Dakmor Plague and Inferno. all(player,creature) not supported and crashes the game
color=colorless is redundant
Strixhaven: School of Mages (STX) (VARIANTS)
2025-04-10 18:53:41 -06:00
Eduardo MG
6904d6ffd3 Bug fixes on zones and correcting misspells
Summoner's Bond
Regent's Authority
Mind Burst
Thassa's Oracle
2025-04-08 22:09:47 -06:00
Eduardo MG
786a252cf5 Mana symbols to uppercase, bug fixes
Lands that enter tapped unless a player has 13 or less life
Courier Bat
Demon of Death's Gate
Caldaia Guardian
2025-04-04 22:24:18 -06:00
Eduardo MG
863c3f07bc Bad card line 2025-03-31 13:33:38 -06:00
Eduardo MG
e0867dd737 CM2 update, notATarget on clones
Clones shouldn't target.
Cosmotronic Wave
Leyline of Hope
Regal Bloodlord
Protean Raider
Impetuous Devils
Camera Launcher

New cards in previous commit:
Abyssal Harvester
Boneyard Desecrator
Celestial Armor
Crystal Barricade
Dazzling Denial
Felling Blow
Fleeting Flight
Geralf, the Fleshwright
Hare Apparent
Infernal Vessel
Inspiring Paladin
Kaito, Cunning Infiltrator
Kellan, Planar Trailblazer
Kiora, the Rising Tide
Loot, Exuberant Explorer
Owen Grady, Raptor Trainer
Perforating Artist
Permission Denied
Ravenous Amulet
Reality Spasm
Savage Order
Skyknight Squire
Slick Sequence
Spinner of Souls
Spitting Dilophosaurus
Squad Rallier
Sun-Blessed Healer
Valkyrie's Call
2025-03-31 13:13:53 -06:00
Eduardo MG
671b3bae61 Improved riot, INR, MH3, macros. Bug fixes. New cards
Windbrisk Heights
Orchard Strider
Shefet Monitor
Merfolk Sovereign
Alibou, Ancient Witness
Flesh Allergy
Regal Sliver
name=Pilot token, condition to check if there's a vehicle in your battlefield
Painful Quandary needed a condition to check if the affected player has at least one card in hand
Serpentine Curve shouldn't count itself. Serpentine Curve itself is not yet in your graveyard when you determine the value of X.
Rowen was drawing with nonbasics
Thopter Spy Network
Teferi, Temporal Archmage -10 ability, create an emblem
Exert Influence
Dawnglade Regent effect persisted after dying
Molten Echoes
Undergrowth
Haze of Pollen
Oketra's Avenger
Heliod's Intervention
Aura Barbs
Gravestorm
Inspired Sphinx
Retrofitted Transmogrant
Echoing Assault
Citywide Bust
2025-03-28 17:12:41 -06:00
Eduardo MG
02a4726cbf Merge pull request #1110 from patrickbabb/master
Updates to target arm64-v8a Android devices
2025-03-21 22:08:19 -06:00
Patrick Babb
91d588c670 Update spinlock_gcc_arm.hpp
Added logic to use LSE as a primary instead of Swap.
2025-03-18 22:01:55 -05:00
Patrick Babb
4df4422d93 Update Application.mk
Updated ABI target to arm64-v8a.
Added CFLAG for arm8.1-a.
Added CPPFLAG for LSE
2025-03-18 21:58:59 -05:00
Patrick Babb
0b3b33f727 Update SDL_spinlock.c 2025-03-18 21:55:59 -05:00
Eduardo MG
5cdf952623 Stormsurge Kraken fix
It allowed to draw to cards for each creature blocking it
2025-03-12 18:15:18 -06:00
Eduardo MG
9a55e03790 Cards from Aetherdrift and fix to Crested Sunmare
Fixed Crested Sunmare token creation condition.

Add cards:
Alacrian Armory
Broadside Barrage
Broodheart Engine
Chitin Gravestalker
Coalstoke Gearhulk
Collision Course
Haunt the Network
Hellish Sideswipe
Intimidation Tactics
Kolodin, Triumph Caster
Mindspring Merfolk
Ooze Patrol
Spectral Interference
Stock Up
Voyager Glidecar
Wreck Remover
2025-03-10 19:16:04 -06:00
Eduardo MG
4b52e8cf6c Incrementing the build numbers. bug fixes 2025-03-07 18:51:33 -06:00
Eduardo MG
f7eaf5072e New cards mostly from DFT and J25
Aatchik, Emerald Radian
Accursed Duneyard
Adaptive Omnitool
Aetherjacket
Agonasaur Rex
Air Response Unit
Basri, Tomorrow's Champion
Beastrider Vanguard
Bestow Greatness
Bleachbone Verge
Boosted Sloop
Bounce Off
Brigone, Soldier of Meletis
Broadcast Rambler
Burner Rocket
Caelorna, Coral Tyrant
Camera Launcher
Caradora, Heart of Alacria
Chandra, Spark Hunter
Cleon, Merry Champion
Cloudspire Skycycle
Count on Luck
Crash and Burn
Cynette, Jelly Drover
Daring Mechanic
Dawnwing Marshal
Draconautics Engineer
Dropkick Bomber
Eidolon of Astral Winds
Engine Rat
Faithful Pikemaster
Firespitter Whelp
Fuel the Flames
Fumulus, the Infestation
Gallant Strike
Gastal Blockbuster
General Kreat, the Boltbringer
Generous Pup
Gilded Scuttler
Go Forth
Goblin Surprise
Greenbelt Guardian
Grim Bauble
Guidelight Synergist
Haunted Hellride
Hazard of the Dunes
Hearts on Fire
Hinterland Sanctifier
Howler's Heavy
Hungry Megasloth
Jibbirik Omnivore
Kalakscion, Hunger Tyrant
Keen Buccaneer
Lightshield Parry
Locust Spray
Loot, the Pathfinder
Lotusguard Disciple
Magmakin Artillerist
Marauding Mako
March of the World Ooze
Marketback Walker
Maximum Overdrive
Memory Guardian
Migrating Ketradon
Migrating Ketradon
Molt Tender
Mu Yanling, Wind Rider
Nazar, the Velvet Fang
Night Market
Nimble Thopterist
Oviya, Automech Artisan
Pacesetter Paragon
Pactdoll Terror
Pedal to the Metal
Phantasmal Shieldback
Plow Through
Pothole Mole
Priest of the Crossing
Prowcatcher Specialist
Psemilla, Meletian Poet
Regal Imperiosaur
Rhet-Tomb Mystic
Riptide Gearhulk
Risky Shortcut
Riverpyre Verge
Rocketeer Boostbuggy
Sabotage Strategist
Sandstorm Crasher
Saurian Symbiote
Scholar of Combustion
Scourge of the Undercity
Scrap Compactor
Scrounging Skyray
Shardless Outlander
Shefet Archfiend
Shroofus Sproutsire
Silken Strength
Skycrash
Skystreak Engineer
Spectacular Pileup
Spin Out
Spotcycle Scouter
Stall Out
Stampeding Scurryfoot
Starlight Snare
Starnheim Memento
Sunbillow Verge
Sundial, Dawn Tyrant
Sutina, Speaker of the Tajuru
Syphon Fuel
Temmet, Naktamun's Will
Terrian, World Tyrant
Thunderhead Gunner
Thurid, Mare of Destiny
Ticket Tortoise
Trade the Helm
Transit Mage
Trip Up
Tune Up
Tyrox, Saurid Tyrant
Unstoppable Plan
Veteran Beastrider
Voyage Home
Voyager Quickwelder
Wastewood Verge
Waxen Shapethief
Wickerfolk Indomitable
Willowrush Verge
Woodland Liege
Wreckage Wickerfolk
Wretched Doll
Wriggling Grub
2025-03-07 13:07:00 -06:00
Eduardo MG
8df70d43e1 Foundations Jumpstart (J25), Innistrad Remastered (INR), Aetherdrift (DFT), Aetherdrift Commander (DRC) _cards.dat
Foundations Jumpstart (J25)
Innistrad Remastered (INR)
Aetherdrift (DFT)
Aetherdrift Commander (DRC)
2025-03-07 13:03:52 -06:00
Eduardo MG
721f1bc269 set code Y22 has been updated to YMID
The set code Y22 has been updated to YMID, now reflecting its official name: Innistrad: Midnight Hunt. Additionally, this set now includes a multiverseid in the database, aligning it with official standards.

Bug fixes:
Astral Drift
Hulking Metamorph
Exorcise
Pain Distributor
Cleansing Wildfire
Jaya, Venerated Firemage
Great Whale
Jolting Merfolk
Sunbird's Invocation removed
Eerie Interlude
Old-Growth Dryads
Enigma Sphinx
All "God-Eternal" that return to deck
Sorin, Imperious Bloodlord
2025-03-06 19:36:12 -06:00
Eduardo MG
f698d9f96c Foundations Jumpstart (J25) _cards.dat 2025-01-27 19:38:08 -06:00
Eduardo MG
08eeeb3079 Alchemy: Innistrad 2025-01-11 12:30:28 -06:00
Eduardo MG
2851576b31 Moved Foundations planeswakers
Moved Foundations (FDN) planeswakers to it's corresponding file.
2024-12-24 13:25:53 -06:00
Eduardo MG
7d5afbad53 Foundations (FDN) cards and bug fixes
Bug fixes:
Seasoned Dungeoneer
Giggling Skitterspike
Kinetic Augur
Battle of Frost and Fire
Outlaws' Merriment
Ruthless Knave
Overlord of the Balemurk
Malamet War Scribe
Massacre Girl, Known Killer
Slip On the Ring
Eastfarthing Farmer
Shadow Prophecy
Hungry Lynx
Backup Plan - removed, is too buggy and does't do the effect correctly

Special Guests (SPG) DUSKMOURN
2024-12-24 11:10:12 -06:00
Eduardo MG
6caa79bbd4 Upload of the Foundations (FDN) _cards.dat file 2024-12-24 10:43:23 -06:00
Eduardo MG
00332a9df3 Merge pull request #1108 from BobCyril/master
Four new AI opponents
2024-12-17 17:47:24 -06:00
BobCyril
7c0c6355e1 Create deck164.txt
New 60 card AI opponent
2024-12-15 17:19:24 +00:00
BobCyril
db0498fc4d Create deck163.txt
New 60 card AI opponent
2024-12-15 17:17:31 +00:00
BobCyril
69caa05c4e Create deck162.txt
New 60-card AI opponent
2024-12-15 17:15:54 +00:00
BobCyril
636207f46d Update deck138.txt
New AI Commander deck to replace poor AI opponent
2024-12-15 17:13:42 +00:00
Eduardo MG
b34929f703 Merge pull request #1107 from BobCyril/master
New, improved and renamed AI decks
2024-12-06 13:04:11 -06:00
BobCyril
d009bf858c Update deck161.txt
Deck name updated
2024-12-05 21:03:40 +00:00
BobCyril
da77238799 Update deck160.txt
Deck name updated
2024-12-05 21:03:04 +00:00
BobCyril
77c53e1519 Update deck159.txt
Deck name updated
2024-12-05 21:02:25 +00:00
BobCyril
2491453ed0 Update deck155.txt
Deck name updated
2024-12-05 21:01:27 +00:00
BobCyril
f752bd38e7 Update deck153.txt
Deck name updated
2024-12-05 21:00:47 +00:00
BobCyril
51accdcad1 Update deck151.txt
Deck name updated
2024-12-05 21:00:03 +00:00
BobCyril
bb4466d36d Update deck141.txt
Deck name updated
2024-12-05 20:59:19 +00:00
BobCyril
6cbbb1c308 Update deck148.txt
Kor Army deck improved and swapped with Tergrid deck
2024-12-05 20:58:22 +00:00
BobCyril
015481a827 Update deck142.txt
New Lyra Commander deck to replace previous poor AI commander deck
2024-12-05 20:56:59 +00:00
BobCyril
532954f5b2 Update deck140.txt
Wipe Them Out! deck improved and swapped with Belbe deck
2024-12-05 20:55:29 +00:00
BobCyril
9cad9f6309 Update deck124.txt
Belbe Commander deck moved here
2024-12-05 20:53:38 +00:00
BobCyril
c3f8c81d96 Update deck102.txt
Tergrid Commander deck moved here
2024-12-05 20:52:18 +00:00
Eduardo MG
8021be00f9 Merge pull request #1106 from BobCyril/master
Decks 81 and 144 upgraded and swapped, deck 32 and 109 renamed
2024-11-20 19:10:43 -06:00
BobCyril
839c2c4fee Update deck109.txt
Deck109 renamed
2024-11-17 18:41:26 +00:00
BobCyril
05b3692b60 Update deck32.txt
Deck32 renamed.
2024-11-17 18:40:48 +00:00
BobCyril
e4d6d6811b Update deck81.txt
Old deck144 (Vrondiss Commander) moved here.
2024-11-17 18:38:23 +00:00
BobCyril
b9196348bb Update deck144.txt
Old deck81 (Goblin Spike) upgraded and moved here in place of Vrondiss Commander, now moved to deck81 slot.
2024-11-17 18:36:48 +00:00
Eduardo MG
cae9d41885 Merge pull request #1105 from BobCyril/master
New, Updated and Moved AI Decks
2024-11-05 10:19:07 -06:00
BobCyril
83bcefe308 Update deck156.txt
New LotR commander deck to replace previous LotR deck which was a very poor opponent
2024-11-04 19:14:04 +00:00
BobCyril
5bb508f5ec Update deck149.txt
Old deck68 (Shocking Minotaurs) upgraded and moved here to replace Tatyova Commander moved to deck46
2024-11-04 19:12:07 +00:00
BobCyril
45b7288cf8 Update deck143.txt
Old deck46 (Ashenmmor Cohort) upgraded and moved here to replace Ranar Commander deck moved to deck68
2024-11-04 19:09:56 +00:00
BobCyril
a63ebc8396 Update deck68.txt
Moving Ranar Commander deck to here
2024-11-04 19:06:14 +00:00
BobCyril
36985a6b71 Update deck46.txt
Moving Tatyova Commander deck to here.
2024-11-04 19:04:12 +00:00
Eduardo MG
6c599246f6 New cards from Duskmourn: House of Horror (DSK)
Bug fixes:
Backwoods Survivalists
Draconic Intervention
Monstrous Step
Skulking Killer

New cards:
Abandoned Campground
Abhorrent Oculus
Acrobatic Cheerleader
Altanak, the Thrice-Called
Appendage Amalgam
Arabella, Abandoned Doll
Attack-in-the-Box
Balemurk Leech
Balustrade Wurm
Baseball Bat
Bashful Beastie
Bear Trap
Bedhead Beastie
Betrayer's Bargain
Blazemire Verge
Bleeding Woods
Boilerbilges Ripper
Break Down the Door
Broodspinner
Cackling Slasher
Cautious Survivor
Clammy Prowler
Clockwork Percussionist
Commune with Evil
Cracked Skull
Cult Healer
Curator Beastie
Cynical Loner
Daggermaw Megalodon
Dashing Bloodsucker
Defiant Survivor
Deluge of Doom
Demolisher Spawn
Demonic Counsel
Disturbing Mirth
Diversion Specialist
Doomsday Excruciator
Duskmourn's Domination
Emerge from the Cocoon
Enduring Courage
Enduring Curiosity
Enduring Innocence
Enduring Tenacity
Enduring Vitality
Enter the Enigma
Entity Tracker
Erratic Apparition
Etched Cornfield
Exorcise
Fear of Being Hunted
Fear of Exposure
Fear of Failed Tests
Fear of Falling
Fear of Infinity
Fear of Isolation
Fear of Lost Teeth
Fear of Missing Out
Fear of Surveillance
Fear of the Dark
Final Vengeance
Flesh Burrower
Floodfarm Verge
Floodpits Drowner
Formless Genesis
Frantic Strength
Friendly Ghost
Friendly Teddy
Get Out
Ghostly Dancers
Giggling Skitterspike
Give In to Violence
Gleeful Arsonist
Glimmer Seeker
Glimmerburst
Glimmerlight
Gloomlake Verge
Gloomlake Verge
Grasping Longneck
Gremlin Tamer
Hand That Feeds
Hardened Escort
Haunted Screen
Hedge Shredder
Horrid Vigor
House Cartographer
Hushwood Verge
Impossible Inferno
Infernal Phantom
Innocuous Rat
Inquisitive Glimmer
Insidious Fungus
Irreverent Gremlin
Jump Scare
Kaito, Bane of Nightmares
Keys to the House
Kona, Rescue Beastie
Lakeside Shack
Leyline of Hope
Leyline of Mutation
Leyline of Transformation
Lionheart Glimmer
Live or Die
Living Phone
Malevolent Chandelier
Manifest Dread
Marina Vendrell
Marina Vendrell's Grimoire
Metamorphosis Fanatic
Midnight Mayhem
Most Valuable Slayer
Murky Sewer
Neglected Manor
Optimistic Scavenger
Overlord of the Balemurk
Overlord of the Boilerbilges
Overlord of the Floodpits
Overlord of the Hauntwoods
Overlord of the Mistmoors
Patched Plaything
Patchwork Beastie
Peculiar Lighthouse
Peer Past the Veil
Persistent Constrictor
Phenomenon Investigators
Piggy Bank
Piranha Fly
Popular Egotist
Possessed Goat
Ragged Playmate
Raucous Carnival
Razorkin Hordecaller
Razorkin Needlehead
Razortrap Gorge
Redress Fate
Resurrected Cultist
Ripchain Razorkin
Rite of the Moth
Rootwise Survivor
Sadistic Shell Game
Savior of the Small
Say Its Name
Scrabbling Skullcrab
Shardmage's Rescue
Sheltered by Ghosts
Shepherding Spirits
Shrewd Storyteller
Shroudstomper
Skullsnap Nuisance
Slavering Branchsnapper
Soaring Lightbringer
Spectral Snatcher
Spineseeker Centipede
Split Up
Splitskin Doll
Stalked Researcher
Strangled Cemetery
Suspended Sentence
The Jolly Balloon Man
The Swarmweaver
The Wandering Rescuer
Thornspire Verge
Toby, Beastie Befriender
Trapped in the Screen
Tunnel Surveyor
Turn Inside Out
Twist Reality
Twitching Doll
Tyvar, the Pummeler
Unsettling Twins
Unwanted Remake
Ursine Monstrosity
Valgavoth's Faithful
Valgavoth's Lair
Vanish from Sight
Vengeful Possession
Vicious Clown
Vile Mutilator
Violent Urge
Wary Watchdog
Wickerfolk Thresher
Wildfire Wickerfolk
Winter's Intervention
Winter, Misanthropic Guide
Withering Torment
Withering Torment
2024-10-10 18:00:20 -06:00
Eduardo MG
c84be9d674 Duskmourn: House of Horror and Duskmourn: House of Horror Commander
Duskmourn: House of Horror (DSK) and Duskmourn: House of Horror Commander (DSC) _cards.dat
2024-10-09 19:13:54 -06:00
Eduardo MG
7faeab98c2 Merge pull request #1103 from BobCyril/master
Moved AI Commander deck and added new AI Classic deck
2024-10-09 19:08:43 -06:00
BobCyril
3261b8bd10 Update deck150.txt
New AI deck to replace Ragavan Commander deck, now moved to deck34
2024-10-05 20:41:26 +01:00
BobCyril
dbe71fa81a Update deck34.txt
Moving updated Ragavan AI commander deck here to replace very poor AI deck
2024-10-05 20:38:53 +01:00
Eduardo MG
22efb82688 Merge pull request #1102 from BobCyril/master
Update deck149.txt
2024-10-02 15:17:10 -06:00
BobCyril
b09cd93f79 Update deck149.txt
Corrected problematic card interaction by replacing cards.
2024-10-01 04:55:18 +01:00
Eduardo MG
114ab84a9c Merge pull request #1101 from BobCyril/master
New AI commander deck for intermediate players
2024-09-30 18:03:10 -06:00
BobCyril
edcce09448 Update deck26.txt
New AI commander deck for intermediate players
2024-09-30 21:09:09 +01:00
BobCyril
e3e77711d5 Update deck18.txt
Moving deck26 (Kithkin) to here to replace very similar deck, and to make space for new commander deck.
2024-09-30 21:07:48 +01:00
Eduardo MG
480bc46ef4 Changes made to Alchemy Innistrad, bug fixes in primitives
Changes made to alchemy innistrad to have the correct multiverseid values and better image quality
Nahiri, the Unforgiving
Kaervek's Spite
Ox Drover
Volrath, the Shapestealer
Garna, Bloodfist of Keld
2024-09-19 17:28:09 -06:00
Eduardo MG
1421d906ce Tolsimir, Friend to Wolves token was crashing game
Bug fixes:
Floriferous Vinewall
Ghostfire Blade
Goblin Bowling Team
Take Out the Trash
Tolsimir, Friend to Wolves
2024-08-31 19:46:52 -06:00
Eduardo MG
229bc06027 Merge pull request #1100 from BobCyril/master
Two new AI Commander opponents for new players
2024-08-30 15:53:25 -06:00
BobCyril
0369409af0 Update deck55.txt
Add new Commander AI opponent for intermediate players. replacing poor AI deck
2024-08-30 18:57:13 +01:00
BobCyril
f160b6a5a0 Update deck16.txt
Add new Commander AI opponent for beginners, replacing a poor AI deck.
2024-08-30 18:54:19 +01:00
Eduardo MG
872732b5ab New cards
Myojin of Cryptic Dreams
Gourmand's Talent
Fortune Teller's Talent
Perch Protection
Tempt with Bunnies
Tempt with Glory
Tempt with Vengeance
Arthur, Marigold Knight
Mr. Foxglove
Sowing Mycospawn
Depth Defiler
Thraben Charm
Planar Nexus
Trenchpost
Riveteers Overlook
Brokers Hideout
Cabaretti Courtyard
Maestros Theater
Obscura Storefront
Sage of the Maze
Charitable Levy
Chthonian Nightmare
Infested Thrinax
Etherium Pteramander
Cursed Wombat
Witch Enchanter
Witch-Blessed Meadow
Pinnacle Monk
Mystic Peak
Disciple of Freyalise
Garden of Freyalise
Drowner of Truth
Drowned Jungle
Strength of the Harvest
Haven of the Harvest
Glasswing Grace
Age-Graced Chapel
Revitalizing Repast
Old-Growth Grove
Legion Leadership
Legion Stronghold
Razorgrass Ambush
Razorgrass Field
Sink into Stupor
Soporific Springs
Fell the Profane
Fell Mire
Waterlogged Teachings
Inundated Archive
Stump Stomp
Burnwillow Clearing
Bridgeworks Battle
Tanglespan Bridgeworks
Bushy Bodyguard
Heirloom Epic
Starfall Invocation
Otterball Antics
Miriam, Herd Whisperer
Tomb Trawler
Silver Deputy
Outcaster Greenblade
Redrock Sentinel
Obeka, Splitter of Seconds
Hellspur Brute
Ferocification
Quick Draw
Gold Rush
Trick Shot
Roxanne, Starfall Savant
Cactarantula
Furtive Courier
Detective's Satchel
Public Thoroughfare
Dramatic Accusation
Coerced to Kill
Archdruid's Charm
Gnawing Crescendo
Edgewall Inn
Expel the Interlopers
Specter of Mortality
2024-08-29 19:25:34 -06:00
Eduardo MG
2bb75ed466 Updates to _cards.dat
Bug fixes to primitives, updates to CardImageLinks.csv, fixed a typo in createResourceZip.py
2024-08-29 18:58:08 -06:00
Eduardo MG
603d91885f Fix to offspring cards
Escaped Shapeshifter
Pyxis of Pandemonium
Silver-Fur Master
Nashi, Moon Sage's Scion
Barrow Ghoul
Circling Vultures
Collector's Vault
Heavenly Blademaster
Chaos Warp
Master's Rebuke
Diamond Pick-Axe
2024-08-28 00:29:08 -06:00
Eduardo MG
a1266cbba8 Bug fixes to Bloomburrow cards
A-Haywire Mite
Carrot Cake
Mind Drill Assailant
Mindwhisker
Nightwhorl Hermit
Repel Calamity
Sonar Strike
2024-08-23 17:08:45 -06:00
Eduardo MG
6088969245 Bug fixes to BLB cards
Krovikan Whispers
Drillworks Mole
Gossip's Talent
Mabel's Mettle
Sunshower Druid
Ygra, Eater of All
2024-08-22 13:39:15 -06:00
Eduardo MG
3d9b40f903 Random Commander From File Rules
randomCommanderFromFile.txt

The randomcommander from file feature allows players to load a commander deck from a predefined list stored in an external file. Here’s how it works:

File Loading: The game attempts to open a file named commander.txt located in the User/commander/ directory. This file contains a list of possible commander IDs or names.

Default Handling: If the file doesn't exist or is empty, the game creates the file and writes a default commander ID (670972) to it. The file is then re-opened for further processing.

Commander ID Extraction: The game reads each line in the file, ignoring comments (lines starting with #). It validates whether the line is a numeric commander ID. If not, the game tries to convert it from a card name to an ID using function getMTGId().

Filtering and Validation: The game then filters out invalid IDs (e.g., IDs that do not correspond to an existing card in the game's database). If no valid IDs remain, it defaults to using the same commander ID (670972).

Random Selection: Once a list of valid commander IDs is compiled, the game randomly selects one ID from this list to be used as the commander for the player.

Deck Construction: A temporary deck is constructed using the selected commander, along with a predefined number of lands and spells that match the commander's colors.

Summary
The random commander from file feature provides a way to customize and randomize the commander used in a game based on an external file. This adds variety and replayability, as each game can have a different commander selected from the list, allowing for different strategies and experiences.
2024-08-22 10:32:53 -06:00
Eduardo MG
ddd589d3f6 Trying to fix compilation for PSP
Replace nullptr with NULL
2024-08-21 23:02:11 -06:00
Eduardo MG
8793f05cea Random Commander From File
Loads a player with a randomly selected commander from a specified file.

 * This function reads a file ('User/commander/commander.txt') that contains a list of potential commander IDs or names.
 * It selects one randomly to be used as the player's commander. If the file doesn't exist, or no valid commanders are found, a default commander ID (670972) is used.
* Can read the commander name and a multiverseID
* Lines that start with '#' are ignored
2024-08-21 22:33:31 -06:00
Eduardo MG
ec2ef1856b Bug fix this(variable{phalfinitlife}) indestructible
As long as your life total is less than or equal to half your starting life total, this has indestructible
Agrus Kos, Spirit of Justice
Alloy Animist
Bane, Lord of Darkness
Bhaal, Lord of Murder
Fighter Class
Flamerush Rider
Greasefang, Okiba Boss
Hydroid Krasis
=Ilharg, the Raze-Boar
Mangara, the Diplomat
Myrkul, Lord of Bones
Omo, Queen of Vesuva
Ragavan, Nimble Pilferer
Titania's Song
Vedalken Humiliator
Winota, Joiner of Forces
Zara, Renegade Recruiter
Zoraline, Cosmos Caller
Aethermage's Touch
Dragon Mask
Rakalite
Nahiri, the Harbinger
2024-08-21 20:24:54 -06:00
Eduardo MG
fd11dcefe2 Revert "Updating Android ndk"
This reverts commit aa48c9ca4a.
2024-08-19 19:04:06 -06:00
Eduardo MG
190405d43f Revert "Update travis-script.sh"
This reverts commit f6a991a2e6.
2024-08-19 19:04:01 -06:00
Eduardo MG
30505b0e5d Revert "Travis, trying a newer version of android ndk"
This reverts commit 93492ae091.
2024-08-19 19:03:40 -06:00
Eduardo MG
93492ae091 Travis, trying a newer version of android ndk 2024-08-19 18:56:17 -06:00
Eduardo MG
f6a991a2e6 Update travis-script.sh 2024-08-19 18:24:55 -06:00
Eduardo MG
aa48c9ca4a Updating Android ndk
Trying android-ndk-r27/ndk-build
2024-08-19 17:37:58 -06:00
Eduardo MG
8ed4729d82 postcombat to second main, bug fixes in primitives
Had to use the treasure defined as primitive since the Fable of the Mirror-Breaker token won't create a treasure otherwise.

Changes:

Rat Colony
Shadow of the Second Sun
Sphinx of the Second Sun
Viashino is no longer a creature type. The postcombat main phase is now referred to as the second main phase.
Updated Rules.cpp to exclude the Viashino type from random kindred decks.
Bug Fixes:

Fable of the Mirror-Breaker
Rat Colony
Plumb the Forbidden
Oblivion Stone
2024-08-18 17:50:59 -06:00
Eduardo MG
4ebb114a0e Bug fixes, corrections, clarifications on abilities
Tezzeret, Betrayer of Flesh -2 is permanent
2024-08-17 12:08:54 -06:00
Eduardo MG
7e3cf5c009 New cards from Bloomburrow
New cards from Bloomburrow (BLB) and Bloomburrow Commander (BLC)
2024-08-16 16:12:25 -06:00
Eduardo MG
9895148562 Moved reconfigure cards to the end of mtg file
Due to card type association, Dryad Arbor is placed at the end. Any other card that associates two super types in this manner should also be placed at the end of the primitive to avoid changeling thinking that “forest” is a creature type. This applies to reconfigure cards as well, to avoid making changelings equipment.
2024-08-16 16:04:37 -06:00
Eduardo MG
bfa30c10db Add new icons for graveyard and for exile 2024-08-16 12:27:30 -06:00
Eduardo MG
f57f5bfff5 Changed ownerHand to just hand, bug fixes
Changed ownerHand to just hand, inspecting the source code it is the same
Individual cards bug fixes:
Arbiter of the Ideal have to misspell manifest
Curate Must Draw After Surveil
Deface casting restrictions
Discombobulate
Dovin, Grand Arbiter
Downsize
Dragon Throne Of Tarkir
Dragonshift
Dregs of Sorrow
Elder Spawn
Elvish Mariner
Faerie Mastermind
Fecundity
Finale Of Revelation
Flame Channeler
Flameskull
Frostwalk Bastion frozen ability
Gate To The Afterlife
Invade the City is still on the stack while you count your instant and sorcery cards in your graveyard. It doesn't count itself.
Kabira Evangel doesn't seem to work with a may condition
Krosan Verge
Livewire Lash
Meteor Blast
Midnight Clock
Mindlink Mech
Mirror Match
Morality Shift removed
Overwhelming Encounter removed
Peace Talks removed
Quiet Disrepair removed
Ravenous Gigantotherium removed
Reign Of Chaos
Rout
Sanctuary Blade removed
Sculpted Sunburst
Seeds Of Innocence
Shackles Of Treachery
Shared Summons
Sokenzan Smelter
Valiant Endeavor removed
Vraska, Betrayal's Sting
2024-08-16 12:22:13 -06:00
Eduardo MG
e2f6fec09e LTR and LTC _cards.dat and bug fixes in primitives
I had to update the _cards.dat files for The Lord of the Rings: Tales of Middle-earth (LTR) and Tales of Middle-earth Commander (LTC) since they didn't have the correct official multiverse IDs. I'm sorry if this affects past decks, but I had to make these changes because it was difficult to debug cards within the set and obtain their respective tokens.
Hisoka, Minamo Sensei
Ragemonger text
Igneous Inspiration and other instants/serceries that target an opponents permanent
Mind Rake
Keeper of the Accord
Aria Of Flame
Arixmethes, Slumbering Isle, Annoying
Battlefield Scrounger
Bloodchief Ascension
Breathless Knight
Breeches, Brazen Plunderer
Doubling Season
Contaminant Grafter
Cursed Rack was working even after being destroyed
2024-08-14 18:37:30 -06:00
Eduardo MG
f9df303e92 Update CardImageLinks.csv
Including cards from Bloomburrow and its commander set, token updates.
2024-08-13 17:47:48 -06:00
Eduardo MG
42401d749b Double square brackets can cause bugs.
Leovold, Emissary of Trest
soldevi digger
raze-boar returned a card from the graveyard
Hatchery Spider is a cast
Estrid, the Masked had to create a flavorful workaround
Atemsis, All-Seeing not exaclty the effect
Nothic
Thunderwave crashing and not working any iteration
Kuldotha Flamefiend
2024-08-13 16:56:56 -06:00
Eduardo MG
57c59ee0dd Changed some conditions to simpler variables
newability[reach] changed to just reach
Bug fixes
Garruk, Unleashed
2024-08-13 00:13:13 -06:00
Eduardo MG
618a418ea6 Changed 'endofturn' to just 'end'
Same functionality with less code
2024-08-12 23:07:07 -06:00
Eduardo MG
eccd00fd19 Updates to _cards.dat, bug fixes
Bug fixes in primitives
2024-08-12 18:05:28 -06:00
Eduardo MG
4f24b94faa Bug fixes in primitives, planeswalkers minus character
Replaced unusual characters in the planeswalkers file.
2024-08-12 08:35:44 -06:00
Eduardo MG
2588bcd050 Revised the rules files and improved the Titania game mode with new features.
The effect "Whenever one or more +1/+1 counters are put" should be coded as @totalcounteradded(1/1) to to avoid triggering from a single instance that puts multiple counters.

Updated the BLC file to include the alternative layout cards.

Rakdos the Defiler
Jin-Gitaxias, Progress Tyrant
Jousting Lance
Leaf Drum Controlled By The Ai
Spectacle as a macro causes bugs
Sword of the Paruns
Suit Up
Lurrus of the Dream-Den
2024-08-11 12:18:25 -06:00
Eduardo MG
aca7f6d416 Changed cards with "Act of treason" effect
Double square brackets was causing bugs.

Changed cards with the effect "Gain control of target creature until end of turn. Untap that creature. It gains haste until end of turn. (It can attack and {T} this turn.)"
2024-08-08 08:36:26 -06:00
Eduardo MG
67666e850d Changes to _cards.dat to account for layouts
I had to modify how the _cards.dat files are created to incorporate variant layouts of adventures, aftermath, and split cards. They are now showing in the collection, but you will need to download the images again.
Rootless Yew
Repel Intruders
Resplendent Angel
Karn, Scion of Urza
2024-08-07 23:41:50 -06:00
Eduardo MG
2cef9d8f60 Bug fixes in primitives
when this creature dies, put its counters on target creature you control
Shiny Impetus
Witch of the Moors
Parish-Blade Trainee
Enduring Bondwarden
Marauding Maulhorn
2024-08-07 07:28:59 -06:00
Eduardo MG
34557b3c4f Bug fixes in primitives
Anointer of Valor
Profane Command
confluences
Skeletal Swarming
2024-08-06 19:56:31 -06:00
Eduardo MG
5629240449 Changed how Clue, Food, and Treasure tokens are created.
Since I can now obtain token images, the tokens should correspond to the plane and have different illustrations.
2024-08-06 00:03:25 -06:00
Eduardo MG
9ca59e9afb _PROLIFERATE_ is giving issues
Current implementation is not 100% correct since it forces you to select at least one target
2024-08-02 18:09:25 -06:00
Eduardo MG
4ae355a6ea New cards from CLU, OTJ, DMU, MC3
New cards from CLU, plot cards from OTJ, enlist DMU, MC3
Afterlife Insurance
Aloe Alchemist
Argivian Cavalier
Astor, Bearer of Blades
Ayesha Tanaka, Armorer
Balduvian Berserker
Barkweave Crusher
Beastbond Outcaster
Benalish Faithbonder
Bespoke Battlewagon
Blacksnag Buzzard
Brimstone Roundup
Carnage Interpreter
Cleaving Skyrider
Coalition Skyknight
Coalition Warbrute
Combat Research
Commander Mustard
Conclave Evangelist
Conduit Goblin
Cunning Coyote
Cyclops Superconductor
Demonic Ruckus
Djinn of Fool's Fall
Dust Animus
Ecstatic Electromancer
Etched Slith
Freestrider Commando
Frenzied Gorespawn
Furious Spinesplitter
General Marhault Elsdragon
Guardian of New Benalia
Guide of Souls
Headliner Scarlett
Herald of Ilharg
Hexbane Tortoise
Highway Robbery
Infernal Captor
Irascible Wolverine
Jhoira, Ageless Innovator
Jodah's Codex
Joint Exploration
Keldon Flamesage
Linebreaker Baloth
Loan Shark
Longhorn Sharpshooter
Lonis, Genetics Expert
Monumental Henge
Najal, the Storm Runner
Orca, Siege Demon
Ordruun Mentor
Outcaster Trailblazer
Phoenix Chick
Pillage the Bog
Quirion Beastcaller
Radha's Firebrand
Railway Brawler
Rasputin, the Oneiromancer
Rictus Robber
Riddle Gate Gargoyle
Rise of the Varmints
Rona's Vortex
Rulik Mons, Warren Chief
Rundvelt Hordemaster
Scuttling Sentinel
Senator Peacock
Sheriff of Safe Passage
Slickshot Lockpicker
Slickshot Show-Off
Sludge Titan
Smelted Chargebug
Spinewoods Paladin
Stagecoach Security
Stenn, Paranoid Partisan
Step Between Worlds
Stingerback Terror
Suppressor Skyguard
Torsten, Founder of Benalia
Tribune of Rot
Tumbleweed Rising
Undercover Butler
Unite the Coalition
Unruly Krasis
Unscrupulous Contractor
Visage Bandit
Voda Sea Scavenger
Voltstorm Angel
Walking Bulwark
Weatherlight Compleated
Yavimaya Steelcrusher
2024-08-02 17:40:08 -06:00
Eduardo MG
440d2f28b1 Bloomburrow and Bloomburrow Commander sets
Bloomburrow (BLB) and Bloomburrow Commander (BLC) _cards.dat files
2024-08-02 17:12:38 -06:00
Eduardo MG
2c6c20358d Bug fixes, Adapt, Mentor, and Amass Orcs macros
I added a condition to energy activation to prevent the AI from hanging, trimmed excessive '9s' in 'infinite' conditions, fixed the Adapt, Mentor, and Amass Orcs macros, and implemented mercenary token macros.
Light of the Legion
Myriad Construct
Sheoldred
Neheb, the Eternal
Complete the Circuit
Return to Nature
Diffusion Sliver
Frost Titan
Death Match
Requiem Angel
Wildwood Scourge
Glasspool Mimic
2024-08-02 16:56:24 -06:00
Eduardo MG
a183e9282c Changing "enters the battlefield" to "enters"
Entering will be connected specifically with the battlefield.
2024-07-29 22:39:26 -06:00
Eduardo MG
f83c670630 New cards from DMU, MH3, LCI, WOE, cases from MKM.
Adaptive Gemguard
Admiral Brass, Unsinkable
Ajani Fells the Godsire
Archangel of Wrath
Argent Dais
Bitter Chill
Boggart Bog
Boggart Trawler
Brazen Blademaster
Case of the Crimson Pulse
Case of the Filched Falcon
Case of the Gorgon's Kiss
Case of the Locked Hothouse
Case of the Ransacked Lab
Case of the Shattered Pact
Case of the Shifting Visage
Case of the Stashed Skeleton
Case of the Trampled Garden
Case of the Uneaten Feast
Chancellor of Tales
Charnel Serenade
Confounding Riddle
Copycrook
Court of Ardenvale
Court of Embereth
Court of Garenbrig
Crown of the Ages
Deconstruction Hammer
Deep-Cavern Bat
Detective of the Month
Djinn of the Fountain
Dusk Rose Reliquary
Eladamri, Korvecdal
Explorer's Cache
Family Reunion
Final-Word Phantom
Fires of Victory
Flooded Woodlands
Frogmyr Enforcer
Frostfist Strider
Fungal Fortitude
Galvanic Discharge
Garna, Bloodfist of Keld
Ghostfire Slice
Glimpse the Core
Glorifier of Suffering
Goldfury Strider
Gravedig
Guardian of the Forgotten
Guardian of the Great Door
Howling Galefang
Illicit Masquerade
Impede Momentum
In Thrall to the Pit
Inti, Seneschal of the Sun
Itzquinth, Firstborn of Gishath
Jedit Ojanen, Mercenary
Join the Maestros
Keldon Strike Team
Lethal Throwdown
Malleable Impostor
Mistway Spy
Nelly Borca, Impulsive Accuser
Nettling Nuisance
Ocelot Pride
Ogre Chitterlord
Ohabi Caleria
Ojer Pakpatiq, Deepest Epoch
Ondu Knotmaster // Throw a Line
Orazca Puzzle-Door
Perimeter Enforcer
Pirate Hat
Projektor Inspector
Pyretic Rebirth
Queen's Bay Paladin
Ral and the Implicit Maze
Ray of Ruin
Reckless Pyrosurfer
Refurbished Familiar
Relive the Past
Sage of Days
Salt Road Ambushers
Scroll of Fate
Scurry of Gremlins
Shadow Prophecy
Shadow Puppeteers
Shadow of the Second Sun
Shifting Woodland
Shipwreck Sentry
Silverback Elder
Sleep with the Fishes
Song of Stupefaction
Sorin of House Markov
Sorin, Ravenous Neonate
Soulcoil Viper
Stall for Time
Stronghold Arena
Sunfire Torch
Sunshot Militia
Tamiyo, Inquisitive Student
Tamiyo, Seasoned Scholar
Tear Asunder
Temple of Cyclical Time
Tesak, Judith's Hellhound
The Ancient One
Unlucky Drop
Urborg Lhurgoyf
Vein Ripper
Vodalian Mindsinger
Vohar, Vodalian Desecrator
Voja, Jaws of the Conclave
Warhost's Frenzy
Warm Welcome
Waylaying Pirates
Welcome to Sweettooth
Wumpus Aberration
2024-07-29 18:32:33 -06:00
Eduardo MG
8e6d58f491 Bug fixes, impulse draw macros
_IMPULSEDRAW_
_IMPULSEUENT_
Guardian of Tazeem
Teferi, Master of Time
So Tiny
Eowyn, Fearless Knight
2024-07-29 18:17:48 -06:00
Eduardo MG
b4afc3f3e1 New macros and token substitutions
Bug fixes
abilities simplification
Disciples of the Inferno
Blade of the Bloodchief
Grenzo, Havoc Raiser
Belligerent Brontodon
Weight Advantage
Liliana, Death Mage
Garruk's Warsteed
Ashiok's Forerunner
Liliana, Death Mage
2024-07-27 17:23:07 -06:00
Eduardo MG
7d5e2379be Merge pull request #1098 from BobCyril/master
New AI Commander deck and bugfix to deck160
2024-07-27 17:03:17 -06:00
BobCyril
3cb8a5a360 Create deck161.txt 2024-07-26 21:52:43 +01:00
BobCyril
b01f679452 Update deck160.txt 2024-07-26 21:48:19 +01:00
Eduardo MG
067ae2790d opponenshroud changed to hexproof, new ability canplayenchantmentlibrarytop
New ability "canplayenchantmentlibrarytop" allow to play enchantments from top
sets now include tokens
you no longer draw conspiracy cards in the random
rules file revisions
commander bugs
Eutropia the Twice-Favored
Calculating Lich
Seismic Wave
Rank and File
Professional Face-Breaker
Realmwalker
2024-07-21 18:44:21 -06:00
Eduardo MG
ea6e2b00f6 Bug fixes and abilities simplification
Phlage, Titan of Fire's Fury
Scent of Cinder
Radagast The Brown for the AI
Flood of Recollection
Samwise the Stouthearted
Blood Aspirant
Anax, Hardened in the Forge
Kairi, the Swirling Sky
Mind Rake
Hungering Hydra
Spearpoint Oread
Rampaging Geoderm
Keeper of the Accord
Electropotence
Orochi Merge-Keeper
2024-07-19 19:19:03 -06:00
Eduardo MG
5080fe7811 Update _cards.dat
CMR variants
2024-07-15 21:56:55 -06:00
Eduardo MG
fa872056ae Added new cards from M3C, MKM, LCI, WOE
IKO(GODZILLA SERIES MONSTERS)
New Cards:
Agency Coroner
Agrus Kos, Spirit of Justice
Anim Pakal, Thousandth Moon
Azlask, the Swelling Scourge
Badlands Revival
Barbed Servitor
Belligerent Yearling
Bloodbraid Challenger
Breathe Your Last
Broodmate Tyrant
Caught Red-Handed
Cayth, Famed Mechanist
Chittering Dispatcher
Clandestine Meddler
Connecting the Dots
Convenient Target
Conversion Apparatus
Copy Land
Culvert Ambusher
Dauntless Dismantler
Desert's Due
Disa the Restless
Dreadmaw's Ire
Dreamtide Whale
Drossclaw
Due Diligence
Echoing Deeps
Ego Drain
Eldrazi Confluence
Eldritch Immunity
Elemental Eruption
Envoy of the Ancestors
Essence Reliquary
Expanding Ooze
Expel the Unworthy
Felonious Rage
Final Act
Flare of Cultivation
Flare of Denial
Flare of Duplication
Flare of Fortitude
Flare of Malice
From the Rubble
Grim Servant
Hexgold Slith
Hideous Taskmaster
Hope-Ender Coatl
Horrid Shadowspinner
Hourglass of the Lost
Incriminating Impetus
Inspired Inventor
Inversion Behemoth
It Doesn't Add Up
Jyoti, Moag Ancient
Kozilek's Unsealing
Kudo, King Among Bears
Lion Umbra
Make Your Move
March of the Canonized
Mine Raider
Necromancy
No Witnesses
Obstinate Gargoyle
Omo, Queen of Vesuva
Person of Interest
Petrifying Meddler
Polygoyf
Prosperity Tycoon
Pugnacious Hammerskull
Pyrogoyf
Reasonable Doubt
Redemption Choir
Repeat Offender
Rubblebelt Braggart
Rune-Brand Juggler
Salvation Colossus
Scalestorm Summoner
Selective Obliteration
Serum Visionary
Shilgengar, Sire of Famine
Siege-Gang Lieutenant
Skoa, Embermage
Skullcap Snail
Spawnbed Protector
Spider Food
Stone Idol Generator
Strix Serenade
Talion's Messenger
Tarmogoyf Nest
Temperamental Oozewagg
Ulamog's Dreadsire
Vanguard of the Rose
Voidpouncer
White Orchid Phantom
Wing It
2024-07-15 20:00:13 -06:00
Eduardo MG
4d1a10de75 Bug fixes, oracle text updates
Boneyard Scourge
Sea Hag // Aquatic Ingress
Seton, Krosan Protector
Sinbad
Tandem Lookout
Cunning Strike
Draco
Extraplanar Lens effect persisted even after being destroyed
Detention Vortex
2024-07-15 19:39:28 -06:00
Eduardo MG
deb2e0fa7a Update CardImageLinks.csv
IKO (GODZILLA SERIES MONSTERS)
Image links form recent decks, OTJ, MH3, CLU
2024-07-15 19:30:54 -06:00
Eduardo MG
ccc209d4f2 Oracle changes and subtypes updates
Shuffle your library changed to shuffle
Attack each turn changed to attack each combat
Dog changed to Jackal in specific cards
Ape changed to Monkey in specific cards
Totem Armor changed to Umbra Armor
2024-07-13 11:51:12 -06:00
Eduardo MG
4fb389e698 Bug fixes, oracle text updates
Adriana, Captain of the Guard
Anax, Hardened in the Forge
Arbiter of the Ideal had to change the name of the counter
Armament Of Nyx
Ashcoat of the Shadow Swarm
Ashes of the Abhorrent
Captain N'ghathrod
Cement Shoes
Champion of Wits
Charging Cinderhorn
Circle of Solace
Curious Obsession
Deadshot not really supported
Door of Destinies
Eye of Yawgmoth
Fateful Showdown
Fire // Ice
Heirloom Blade
Hunted Bonebrute
Illithid Harvester // Plant Tadpoles nothing works
In Bolas's Clutches and other "Enchant permanet" cards needed a rework
Infernal Harvest
Iymrith, Desert Doom
Jokulhaups didn't destroyed fire-belly ch
Jolene, Plundering Pugilist
Kagemaro, First to Suffer
Keeper of Fables
Kethek, Crucible Goliath
Lost Jitte
Lukka, Bound to Ruin
Metamorphic Alteration
Mimic Vat
Mind Whip
Necromancer's Stockpile
Peace Talks
Preyseizer Dragon
Primal Wellspring
Reaper of Night // Harvest Fear
Skanos Dragonheart
Soldevi Sentry
Support is a may
Vault Plunderer
Vraska, Betrayal's Sting
Winnow
2024-07-12 23:10:24 -06:00
Eduardo MG
fe2c55e97f Removed the adventure part of cards
Removed the adventure part since wagic does not handle them like that
2024-07-12 18:51:18 -06:00
Eduardo MG
6f1cb5c84b Update to Throne of Eldraine (ELD) _cards.dat
Piper of the Swarm alt version and lands with correct rarity
2024-07-12 17:58:04 -06:00
Eduardo MG
1654fdf8ce Bug fixes and oracle text updates
Ward with a macro is causing too many issues
Chainer, Nightmare Adept
Gluntch, the Bestower
Ikra Shidiqi, The Usurper
Impromptu Raid
Incubation Druid
Invasion Of Ravnica
Invasion Of Tarkir
Kinzu Of The Bleak Coven
Kiora Bests The Sea God
Kiora, Master Of The Depths removed, emblem crashes, don't think is posible and card barely works.
Kodama of the East Tree
Kuon, Ogre Ascendant
Magmasaur
Minthara, Merciless Soul
Momentum
Nimbus Champion
Norn's Decree
Notion Rain I know surveil must be before draw but this is better than not drawing
Nyx Herald
One With The Kami
Pact Weapon
Paladin Class
Phage The Untouchable doesn't check if casted from hand
Pondering Mage
Power Surge does damage equal to number of lands
Prosper, Tome-Bound
Puffer Extract
Quest for Ula's Temple
Quintorius, Loremaster
Rabble-Rouser
Rally The Ancestors
Redcap Raiders
Render Inert not really supported
Repel The Darkness and similar cards rework
Saheeli's Silverwing
Salvage Titan
Sensei Golden-Tail
Shared Animosity
Snow Day
Soul Transfer
Spectacular Showdown
Sporeweb Weaver's Last Ability Triggers Just Once, No Matter How Many Things Deal How Much Damage To It At Once (Most Likely Because Two Or More Creatures Blocked It).
Spreading Insurrection
Storm The Citadel
The First Iroan Games
Tinybones, Trinket Thief
Triskaidekaphobia
Visions Of Ruin
Wicked Akuba
Wine of Blood and Iron
Wingmantle Chaplain
2024-07-08 15:45:50 -06:00
Eduardo MG
4e4108f547 Bug Fixes, code cleanup, macros substitutions for tokens
Adding colorless to a token is redundant since by default is colorless.
"may pay" is redundant when the cost is mana, it's necessary when the cost is life.
Acolyte of Affliction
Ajani, Strength Of The Pride Shouldn't Be Double Triggers
Akiri, Fearless Voyager
Arena Rector
Arrogant Poet
Artificer's Hex just falls off, removed
Body Snatcher When You Have No Creatures In Hand
Bump In The Night
Cacophony Scamp
Captain Eberhart
Chandra, Hope's Beacon
Deem Worthy
Desecrate Reality
Destructive Tampering
Drake Haven
Dredge The Mire
Explosive Welcome
Fungal Rebirth
Giver of Runes
Glissa's Scorn
Gurgling Anointer
Haunted Angel
Hungry Flames
Hypnotic Cloud
Inniaz, the Gale Force
Jukai Naturalist
Lord Windgrace
Nature's Cloak
Nature's Spiral
Rashmi, Eternities Crafter
Rohgahh, Kher Keep Overlord
So Shiny
Sparktongue Dragon
Sprouting Goblin missing a )
Temple Thief
The Grey Havens
The Mending of Dominaria was shuffling itself
Tolarian Contempt, have to misspell "rejection" on the counter name
Two-Handed Axe // Sweeping Cleave
Urborg Panther
Urza's Sylex
Victory Chimes
Vraska, Swarm's Eminence
Warmonger
2024-07-06 17:36:58 -06:00
Eduardo MG
3bbb1cea2c Bug fixes to primitives
Vernal Sovereign
Surge Engine
Nissa's Defeat
Gideon, Battle-Forged
2024-06-28 12:55:56 -06:00
Eduardo MG
f4010508ad Special Guests (SPG) update 2024-06-19 18:47:58 -06:00
Eduardo MG
393b5050f9 Ravnica: Clue Edition (CLU) 2024-06-19 18:46:20 -06:00
Eduardo MG
0937578d96 Clean up of extra space at end of line
Removing unnecessary spaces makes the text or code cleaner and easier to read. Trailing spaces can lead to unexpected behavior or bugs.
2024-06-19 18:00:52 -06:00
Eduardo MG
2fea7d5810 Partial Modern Horizons 3 (MH3) cards
Breaker of Creation
Drownyard Lurker
Eldrazi Ravager
Emrakul, the World Anew
Glaring Fleshraker
It That Heralds the End
Null Elemental Blast
Nulldrifter
Twisted Riddlekeeper
Warped Tusker
Idol of False Gods
Solar Transformer
Vexing Bauble
Winter Moon
Bountiful Landscape
Contaminated Landscape
Deceptive Landscape
Foreboding Landscape
Perilous Landscape
Seething Landscape
Shattered Landscape
Sheltering Landscape
Tranquil Landscape
Twisted Landscape
Snow-Covered Wastes
Urza's Cave
Aerie Auxiliary
Mandibular Kite
Metastatic Evangel
Muster the Departed
Solstice Zealot
Brainsurge
Corrupted Shapeshifter
Emrakul's Messenger
Harbinger of the Seas
Roil Cartographer
Tune the Narrative
Tempest Harvester
Unfathomable Truths
Accursed Marauder
Arcbound Condor
Consuming Corruption
Dreadmobile
Dreamdrinker Vampire
Eviscerator's Insight
Marionette Apprentice
Mindless Conscription
Nethergoyf
Retrofitted Transmogrant
Scurrilous Sentry
Warren Soultrader
Wither and Bloom
Wurmcoil Larva
Eldrazi Linebreaker
Fanged Flames
Furnace Hellkite
Mogg Mob
Molten Gatekeeper
Phyrexian Ironworks
Sarpadian Simulacrum
Spawn-Gang Commander
Siege Smash
Thriving Skyclaw
Colossal Dreadmask
Skittering Precursor
Eldrazi Repurposer
Fanatic of Rhonas
Fowl Strike
Gift of the Viper
Horrific Assault
Malevolent Rumble
Nightshade Dryad
Path of Annihilation
Propagator Drone
Phlage, Titan of Fire's Fury
Snapping Voidcraw
Titans' Vanguard
Sneaky Snacker
Wight of the Reliquary
Writhing Chrysalis
Faithful Watchdog
Cranial Ram
Ugin's Binding
Psychic Frog
Imskir Iron-Eater
2024-06-19 17:05:22 -06:00
Eduardo MG
d1827042d4 Oracle text and creature types updates
Revision of creature type updates, and corrections to extra blank space in oracle text.
2024-06-18 10:31:38 -06:00
Eduardo MG
cc5b8ba829 Creature types and mana pool oracle text updates
Wasteland Strangler bug fix, the effect was lasting forever instead of until end of turn.
Removed "to your mana pool" oracle text since it is deprecated.
Changed:
Cephalid to Octopus
Naga to Snake
Viashino to Lizard
Rakshasas are no longer cats
2024-06-14 11:29:51 -06:00
Eduardo MG
972f17bde5 Modern Horizons 3 _card.dat files
Modern Horizons 3 (MH3) _cards.dat
Modern Horizons 3 Commander (M3C) _cards.dat
2024-06-12 18:52:16 -06:00
Eduardo MG
b60630d814 Bug fixes, learn macros update
Crystalline Nautilus
academic dispute
Soulstinger
Crown of Gondor
Fists of Flame
Imperial Aerosaur
Volatile Rig crashes the game
Kiora Bests the Sea God
Holy Frazzle-Cannon
Illustrious Wanderglyph
Stonespeaker Crystal
Slayer of the Wicked
2024-06-12 13:08:19 -06:00
Eduardo MG
b20484c7de Bug fixes and cards from The Big Score (BIG)
Bug fixes:
Drakuseth, Maw of Flames
Springleaf Drum
Ghost of Ramirez DePietro not supported
Martyr of Bones was crashing the game
Corrupt Court Official
Aggravated Assault
Slaughter Pact, Pact of Negation removed due to making opponent lose
The Mycotyrant
spectacle doesn't seem to work with macros

Cards from The Big Score (BIG):
Angel of Indemnity
Angelic Sell-Sword
Cactus Preserve
Dead Before Sunrise
Vengeful Regrowth
Oltec Matterweaver
Simulacrum Synthesizer
Harvester of Misery
Hostile Investigator
Generous Plunderer
Legion Extruder
Molten Duplication
Sandstorm Salvager
Pest Control
Lost Jitte
Lotus Ring
2024-05-13 18:58:22 -06:00
Eduardo MG
705e1444e0 Cards from Outlaws of Thunder Junction Commander (OTC) and bug fixes
Bug Fixes:
Fiery Conclusion
Intrusive Packbeast
Last March of the Ents
Kels, Fight Fixer

New cards:
Malcolm, the Eyes
Conduit Pylons
Gold Pan
Harrier Strix
Mirage Mesa
Baron Bertram Graywater
Wylie Duke, Atiin Hero
Form a Posse
Jolene, Plundering Pugilist
Kraum, Violent Cacophony
Lavaspur Boots
Goldvein Hydra
Tinybones, the Pickpocket
Vraska Joins Up
Vial Smasher, Gleeful Grenadier
Bonny Pall, Clearcutter
Akul the Unrepentant
Annie Flash, the Veteran
Rakdos Joins Up
Ruthless Lawbringer
Outlaws' Fury
Cactusfolk Sureshot
Embrace the Unknown
Kirri, Talented Sprout
Yuma, Proud Protector
Rumbleweed
Charred Graverobber
Ghired, Mirror of the Wilds
Vihaan, Goldwaker
Back in Town
Tower Winder
Colossal Rattlewurm
Olivia, Opulent Outlaw
2024-05-06 19:57:13 -06:00
Eduardo MG
93faa08ef3 Cards from Outlaws of Thunder Junction (OTJ)
Bug fixes:
Zhulodok, Void Gorger
Engulfing Eruption
Slagstone Refinery

New Cards:
Armored Armadillo
Bovine Intervention
Eriette's Lullaby
High Noon
Holy Cow
Outlaw Medic
Sterling Keykeeper
Sterling Supplier
Thunder Lasso
Wanted Griffin
Canyon Crab
Daring Thunder-Thief
Double Down
Peerless Ropemaster
Razzle-Dazzler
Spring Splasher
Ambush Gigapede
Desperate Bloodseeker
Mourner's Surprise
Neutralize the Guards
Nezumi Linkbreaker
Rakish Crew
Rooftop Assassin
Shoot the Sheriff
Treasure Dredger
Vault Plunderer
Deadeye Duelist
Discerning Peddler
Hellspur Posse Boss
Iron-Fist Pulverizer
Prickly Pair
Reckless Lackey
Rodeo Pyromancers
Scorching Shot
Ankle Biter
Bristlepack Sentry
Bristly Bill, Spine Sower
Full Steam Ahead
Raucous Entertainer
Reach for the Sky
Voracious Varmint
Honest Rutstein
Creosote Heath
Eroded Canyon
Festering Gulch
Forlorn Flats
Jagged Barrens
Lonely Arroyo
Lush Oasis
Sandstorm Verge
Soured Springs
Abraded Bluffs
Bristling Backwoods
Oasis Gardener
Sterling Hound
2024-05-03 17:13:08 -06:00
Eduardo MG
ff59089dcc Bug fixes to primitives
Mana Seism
Ozolith, the Shattered Spire
Born to Drive
Valorous Stance
Gitrog, Horror of Zhava
Spike Rogue
2024-04-26 22:35:08 -06:00
Eduardo MG
60306cf1c2 Outlaws of Thunder Junction and complementary sets
Outlaws of Thunder Junction (OTJ)
Breaking News (OTP)
The Big Score (BIG)
Outlaws of Thunder Junction Commander (OTC)
2024-04-22 10:54:32 -06:00
Eduardo MG
576be28da1 Bug fixes, removed cards that are not supported
Nimana Skydancer
Puppet Raiser
Irreverent Revelers
Cunning Evasion
Symmetry Matrix is not supported
Glint-Nest Crane
Chaplain of Alms was crashing the game while using macros
Urza's Sylex
Study Break
Rankle and Torbran
Ancient Brass Dragon
Old Flitterfang
Crossway Troublemakers
Protean Hulk
torpor orb and similar cards aren't working
2024-04-17 23:38:47 -06:00
Eduardo MG
fa2c130b08 Changed myHand to ownerHand
Bug fixes:
Many Partings
Siren reaver
navigation orb
Pestilent Souleater
Confiscation Coup removed since it crashes the game
Speakeasy Server
Heraldic Banner
2024-03-25 19:07:44 -06:00
Eduardo MG
5500b9a8a5 New cards from recent sets
Morska, Undersea Sleuth
Miner's Guidewing
Sophia, Dogged Detective
Dogged Detective
River Herald Scout
Merchant of Truth
Tangletrove Kelp
On the Trail
Tomik, Wielder of Law
Massacre Girl, Known Killer
Dream Spoilers
Burning Sun Cavalry
2024-02-17 18:20:58 -06:00
Eduardo MG
8b9f34b879 Bug fixes, replacing explores code for the macro
Bruvac the Grandiloquent, not really supported, limiting to once per turn to not break the game
Using _EXPLORES_ macro
Siren reaver
navigation orb
2024-02-17 17:39:26 -06:00
Eduardo MG
607cf5f944 Merge branch 'master' of https://github.com/WagicProject/wagic 2024-02-16 13:09:10 -06:00
Eduardo MG
353b3b1d7f New cards from recent expansions, using _EXPLORES_ macro
Mischievous Pup
Oltec Archaeologists
Marauding Brinefang
Poetic Ingenuity
Grasping Shadows
Relic's Roar
Bennie Bracks, Zoologist
Kindled Heroism
Eriette's Tempting Apple
Xavier Sal, Infested Captain
Out Cold
Long Goodbye
Griffnaut Tracker
Concealed Weapon
Cerebral Confiscation
Seeker of Sunlight
Kinjalli's Dawnrunner
Pathfinding Axejaw
River Herald Guide
2024-02-16 13:08:48 -06:00
Eduardo MG
21a0ee754a Added Special Guests (SPG)
Added Special Guests (SPG) set of reprints with special art.

Special Guests are highly desirable, Masters release–level reprints with art and flavor text matched to the flavor of the plane or set they are included in. They have their own set code (SPG) and expansion symbol
2024-02-16 12:52:51 -06:00
Eduardo MG
a0b3c00211 Fixes to commander damage, deathtouch, MAT card variants.
March of the Machine: The Aftermath (MAT) card variants.
The previous implementation of the deathtouch ability had a bug that destroyed planeswalkers even with any amount of damage. This has been fixed.
If a player has been dealt 21 points of combat damage by a particular Commander during the game, that player loses a game. The damage rule with commanders was incorrect in counting any type of damage, not only combat damage.

Bug fixes:
Athreos, Shroud-Veiled
Endless Atlas
Natural State
Savage Gorger
Kytheon's Irregulars
Lion Sash
Pyrophobia
Minas Tirith
Sakashima of a Thousand Faces
2024-02-16 12:46:41 -06:00
Eduardo MG
603af22b79 Murders at Karlov Manor (MKM) and Murders at Karlov Manor Commander (MKC)
Murders at Karlov Manor (MKM) and Murders at Karlov Manor Commander (MKC) _cards.dat with official multiverseID
2024-02-12 18:31:29 -06:00
Eduardo MG
9cfc4ea321 New cards from recent sets like WOE and Karlov Manor (MKM)
Celebration cards and primitives from Murders at Karlov Manor (MKM)
2024-02-12 18:16:00 -06:00
Eduardo MG
0d05aeb329 Fixes to Kaldheim equipment, cast prevention, AI sacrificing
Kaldheim (KHM) equipment that creates tokens uses an ETB (Enter the Battlefield) ability, not a cast ability.
Cards that use maxCast(anytext)0 simply prevent any type of casting.
The AI sometimes hangs when sacrificing creatures, preventing game continuation. To address this, a restriction has been added to allow only the human player to use this effect.
Other bug fixes:
Doomsday
Perimeter Sergeant
Imposing Grandeur
Sacred armory text
2024-02-12 18:00:35 -06:00
Eduardo MG
667adfadce Bug fixes, Changes to Random Commander
You can now get non-basic lands in random commander, adds more diversity to the mode.
Bug fixes to "Choose one or both" cards
Helm of Kaldra AI just keeps activating the ability
Katsumasa, the Animator
Yidris, Maelstrom Wielder
Prismatic Omen
Retreat to Hagra
Condescend
Unnatural Aggression
Second Breakfast
Kitesail Skirmisher
Ezuri's Predation
Rohgahh, Kher Keep Overlord
Blight-Breath Catoblepas
2024-02-09 20:04:12 -06:00
Eduardo MG
30bef9f840 Bug fixes, adding a token for next MKM set
Devour creatures and similar cards that sacrifice should not target, or else you can't sacrifice permanents with shroud
Cavalier of Night
Titan Hunter
Somberwald Alpha
Irini Sengir
Brand
2024-02-05 19:47:43 -06:00
Eduardo MG
a6fe4a5de6 White vampire token macro, bug fixes and new cards
# White Vampire with lifelink Token
#AUTO_DEFINE _WHITEVAMPIRE_ create(vampire:creature vampire:1/1:white:lifelink)
Added Uchbenbak, the Great Mistake and other cards from WOE and LCI
Bug fixes to:
Aethershield Artificer
Shirei, Shizo's Caretaker still needs some work
The Scarab God
Corpsejack Menace
Lightning Javelin
Furious Bellow
Enemy of Enlightenment
Orcish Captain
Sun-Crested Pterodon
moonlight bargain
Haunted One
Criminal Past
Scion of Halaster
Moldgraf Monstrosity
Ashiok, Nightmare Muse
Thran Spider
Icon of Ancestry
Shark Typhoon
Farid, Enterprising Salvager
Over the Top
2024-01-31 17:22:57 -06:00
Eduardo MG
f0cbff2f91 Added buttons to display menus, new token macros.
Newer Android devices dont have phisical buttons, so added buttons to display menus that have the same behaviour of pressing the back button.
Bug fixes in primitives.
Created macros for Eldrazi Scion and Eldrazi Spawn tokens.
2024-01-20 11:47:28 -06:00
Eduardo MG
11352db948 Innistrad: Midnight Hunt _cards.dat update
Adding variant cards from MID
2024-01-18 08:38:22 -06:00
Eduardo MG
0322e58221 Bug fixes and three new legendary creatures
Spelling errors fixing
Akawalli, the Seething Tower
Alaundo the Seer
Basilica Skullbomb
Bishop of Wings
Dark Bargain
Dire Tactics
Goblin Bowling Team
Golos, Tireless Pilgrim
Hive of the Eye Tyrant
Iron Mastiff
Liliana's Defeat
Mist of Stagnation
Mudhole
Multiple Choice
Myconid Spore Tender
Ominous Sphinx
Prying Blade
Solemn Recruit
The Mouth of Sauron
Thwart the Grave
Virulent Swipe
Welkin Guide
2024-01-14 18:17:11 -06:00
Eduardo MG
682ed43f38 Commander decks by Bob Cyril
Here is a brand new AI commander deck with Graaz the Unstoppable Juggernaut as the commander. 
Here is another new commander deck with Shalai and Hallar as the commander.
2024-01-12 19:25:37 -06:00
Eduardo MG
cee669389e Merge pull request #1092 from Darthagnon/improve-docs
Improve docs
2024-01-12 16:02:46 -06:00
Eduardo MG
adbed735f3 Ravnica Remastered (RVR) image links, more The Lost Caverns of Ixalan (LCI) cards
adding more The Lost Caverns of Ixalan (LCI) cards
Card image links with the new Ravnica Remastered (RVR
Bug fixes
2024-01-12 13:07:52 -06:00
Eduardo MG
aadf372204 Ravnica Remastered (RVR)
Ravnica Remastered (RVR) _cards.dat
2024-01-10 17:15:01 -06:00
Eduardo MG
f5b9d91769 More cards from The Lost Caverns of Ixalan (LCI)
Bug fixes related to cards that need an additional discard to be cast and a typo in the word "veriable" -> "variable"
2024-01-08 18:14:06 -06:00
Eduardo MG
e06cc6ddae More cards from Wilds of Eldraine (WOE)
Bug Fixes to:
Ephara, Ever-Sheltering
Sidisi's Faithful
Supply Caravan
2024-01-07 14:11:24 -06:00
Eduardo MG
19f2267413 Some cards from Wilds of Eldraine (WOE)
Adding a subset of Wilds of Eldraine (WOE) cards, also a bug fix to Elven Chorus
2023-12-27 17:30:53 -06:00
Eduardo MG
96e9eebabb More cards from The Lost Caverns of Ixalan (LCI)
Bug fixes to:
Alpine Guide
Shimmerwing Chimera
Horn of Deafening
2023-12-25 22:56:41 -06:00
Eduardo MG
814fc96ed8 Adding some The Lost Caverns of Ixalan (LCI) primitives
Also bug fixes to Argoth, Sanctum of Nature and Creeperhulk
2023-12-22 12:24:12 -06:00
Eduardo MG
60ae2d5bef Update borderline.txt
leather armor
Cemetery Desecrator
Glamdring
Militia Bugler
Creeperhulk
2023-12-20 12:27:01 -06:00
Eduardo MG
560bb22cd7 Populating LCI and REX _cards.dat 2023-12-16 16:33:04 -06:00
Eduardo MG
298491d416 The Lost Caverns of Ixalan CardImageLinks
Images links for The Lost Caverns of Ixalan (LCI), The Lost Caverns of Ixalan Commander (LCC) and Jurassic World Collection (REX) sets
2023-12-16 12:14:21 -06:00
Eduardo MG
4929ab9991 The Lost Caverns of Ixalan (LCI) _cards.dat
The Lost Caverns of Ixalan (LCI), The Lost Caverns of Ixalan Commander (LCC) and Jurassic World Collection (REX) sets
2023-12-16 12:10:24 -06:00
Eduardo MG
7d4056d9ba Update borderline.txt
Bug fixes in primitives
Archon of Cruelty
Horned Stoneseeker
Loch Dragon
Smothering Tithe
Spectral Hunt-Caller
2023-11-15 18:41:18 -06:00
Eduardo MG
390c25608e Update CardImageLinks.csv
Image links for Wilds of Eldraine (WOE), Wilds of Eldraine: Enchanting Tales (WOT), and Wilds of Eldraine Commander (WOC).
2023-10-02 12:09:26 -06:00
Eduardo MG
4eddbdfc5d Wilds of Eldraine and it's complementary sets
Includes Wilds of Eldraine (WOE), Wilds of Eldraine: Enchanting Tales (WOT), and Wilds of Eldraine Commander (WOC). Only the _cards.dat
2023-10-02 11:58:07 -06:00
Eduardo MG
e1614c073b Bug fixes in primitives
Lead by Example
Aragorn, the Uniter
Clay Revenant
Risen Executioner
Avacyn token from Battle at the Helvault
2023-09-14 18:24:01 -06:00
Vittorio Alfieri
ac197179fb Fixed a crash on Shop when buying a new booster. 2023-08-11 12:25:24 +02:00
Eduardo MG
fd68b1d90a Bug fixes to primitives
Keruga, the Macrosage: other permanets so it shouldn't count itself
Mirkwood Spider: extra )
Meria, Scholar of Antiquity: using macro for __PLAY_TOP_FROM_EXILE__
Quarrel's End: was missing the draw 2
Leonin Bladetrap: was missing the {2} activation cost
Strixhaven Stadium: mana ability was not adding a point counter
Gorgon Recluse: should only kill nonblack with their ability
Mass Diminish: should be until your next turn
2023-08-09 16:58:01 -06:00
Vittorio Alfieri
dacb69721a Added last primitives from CMM set, fixed some prmitives, updated missing cards by set list. 2023-08-06 16:32:45 +02:00
Vittorio Alfieri
574ea034e2 Added CMM set, added some primitives from CMM set, fixed some primitives and macros, updated card images url list, updated missing cards by set list. 2023-08-05 18:26:35 +02:00
Vittorio Alfieri
bc6e354b9e Added new deck for AI, fixed some primitives from Discord. 2023-08-04 10:36:20 +02:00
Vittorio Alfieri
94fb44d1eb Fixed some primitives from issue #1085 2023-07-28 15:31:05 +02:00
Vittorio Alfieri
332f0542f7 Fixed some primitives from issue #1085, fixed _BLINK_UEOT_ macro, improved several abilities to allow the usage og "and" option. 2023-07-27 18:18:49 +02:00
Vittorio Alfieri
29262b4c78 Fixed some primitives from issue #1085, fixed some primitives from Discord channel. 2023-07-26 17:05:14 +02:00
Vittorio Alfieri
816c42b63b Fixed some primitives from issue #1085, fixed some primitives from Discord Channel, fixed "except" keyword for triggers, added "nocost" option for "totalcounteradded" event to avoid to trigger in case of counter cost (e.g. "Doubling Season"), added "removeallcolors" and "removeallsubtypes" options for "transforms" ability. 2023-07-25 17:38:25 +02:00
Vittorio Alfieri
751fda6521 Fixed some primitives from issue #1085, fixed some primitived from Discord channel, updated some AI decks, added new ability "canloyaltyasinst" to allow a planeswalker to activate loyalty abilities as instant (e.g. "The Wandering Emperor"), fixed a possible crash when a card change zone with different card types than its original version (e.g. morphed cards). 2023-07-24 19:08:20 +02:00
Vittorio Alfieri
6625907180 Fixed some primitives from issue #1085, improved some cards for AI combo (from Discord channel), added "isattacker" keyword to check if creature is attacking, added "couldattack" keyword to check if creature can attack, improved some triggers to add turnlimit option. 2023-07-21 21:12:38 +02:00
Vittorio Alfieri
7c697eb376 Fixed some primitives from issue #1085 and updated some AI decks. 2023-07-20 11:54:49 +02:00
Vittorio Alfieri
ab9002be79 Fixed some primitives from issue #1085 2023-07-18 18:27:34 +02:00
Vittorio Alfieri
8c5a089448 Fixed some primitives from issue #1085 and from Discord channel, updated some AI decks. 2023-07-17 17:40:50 +02:00
Vittorio Alfieri
fbfcb7d3ac Fixed some primitives from issue #1085 and from Discord channel, fixed all curses primitives and targets, added new keywords "oppotgt" and "ctrltgt" to check wich player has been targeted from a card, fixed an issue on "chooseaname" ability. 2023-07-13 17:24:11 +02:00
Vittorio Alfieri
c170733af6 Fixed some primitives from issue #1085 2023-07-11 15:27:19 +02:00
Vittorio Alfieri
d724263d65 Updated some AI commander decks, fixed a bug on "Noxious Field" primitive. 2023-07-10 17:13:46 +02:00
Vittorio Alfieri
2ed35bcaa2 Fixed all primitives that should target any target instead of player and creatures using the new implemented target "anytarget", added new target "propagation" for "propagate" ability, removed the duplicated "unsacrificable" basic ability to use the previous "cantbesacrified" one. 2023-07-08 19:19:17 +02:00
Vittorio Alfieri
17b4dbf55a Fixed primitive "Collected Company". 2023-07-07 18:43:32 +02:00
Vittorio Alfieri
b791da0786 Added new primitives from LTC set, improved "_GOAD_" macro, updated missing card by set list, added new keyword "permanent" to target permanents and nonpermanents, added "flashback" option to "castcard" ability, added new ability "unsacrificable" to forbid a player to sacrifice a card. 2023-07-07 18:22:58 +02:00
Vittorio Alfieri
deec348fea Added new AI commander deck, fixed some primitives. 2023-07-06 17:51:52 +02:00
Vittorio Alfieri
d478df4dc1 Added new primitives from LTR and LTC sets, updated missing card by set list. 2023-07-06 17:14:55 +02:00
Vittorio Alfieri
40f7d75bcf Fixed LTC dat file, updated Card images urls list.a 2023-07-05 17:10:29 +02:00
Vittorio Alfieri
ffb8047d2c Added new primitives from LTR and LTC sets, fixed LTC dat file, fixed primitives with scryed trigger, updated Card Image urls list. 2023-07-05 16:41:57 +02:00
Vittorio Alfieri
5da42e53be Added new primitives from LTR set, fixed primitives, updated missing cards by set list, updated Card image urls list, fixed LTR dat file, added new ability "eqpasinst" to allow usage of "equip" ability as an instant. 2023-07-04 17:40:17 +02:00
Vittorio Alfieri
eaef6a588d Added new primitives from LTR set, fixed a possible crash on "transforms" deletion from emblems and "ability$", fix source card for token creation inside ability$!!$ keyword. 2023-07-03 18:11:17 +02:00
Darren J. de Lima
44cf433b06 Add Discord, archival notice for forums 2023-07-01 18:36:16 +01:00
Darren J. de Lima
1c40e3a889 Fix URLs, minor formatting 2023-07-01 18:31:41 +01:00
Darren J. de Lima
e19519a39c Improve README, add Wiki as submodule
Ensures developers get a full offline copy of documentation when cloning repo.
2023-07-01 18:27:05 +01:00
Vittorio Alfieri
fe8144553a Updated AI commander deck. 2023-07-01 18:28:39 +02:00
Vittorio Alfieri
617ce45dbc Improved implementation for isCommander and RingBearer card status (now they are no longer basic abilities but inner card properties in order to avoid conflicts with abilitiy modificators), added a white border on commanders to highlight them during match in the various game zones. 2023-07-01 16:28:19 +02:00
Vittorio Alfieri
6731251d07 Added new primitives from LTR set, improved AMASS macrps for Zombie Army. 2023-06-30 21:50:11 +02:00
Vittorio Alfieri
7fab07638e Added new primitives from LTR set. 2023-06-29 22:59:47 +02:00
Vittorio Alfieri
1ab4e4ebfd Added new primitives from LTR set, added notrigger option for special tokens such as "The Monarch" and "The Ring" and "The Initiative", fixed LTR dat file, updated missing cards by sets list, added "untp" option for "rehook" and "retarget" ability to untap the equipped creature, added new restriction "oppoattacked" to check if your opponent has attacked during the current turn. 2023-06-28 17:07:09 +02:00
Vittorio Alfieri
9760ab39b7 Added new primitives from LTR set, improved "steal" ability with "and" option, printed the nember of ring temptations on "The Ring" card, improved "hasdead" restriction to calculate if a card of a specific type has died during the current turn. 2023-06-27 18:17:22 +02:00
Vittorio Alfieri
edc0aebf04 Fixed LTC and SIR dat files, added new primitives from LTR set, implemented the new abilities and trigers related to ring bearer and ring temptations for LTR and LTC sets. 2023-06-26 22:27:29 +02:00
Vittorio Alfieri
b00f142168 Merge branch 'master' of github.com:WagicProject/wagic 2023-06-25 20:51:44 +02:00
Vittorio Alfieri
197686962c Improved Android donwloader, updated Android manifest to fix release version, updated AI commander deck, added LTR and LTC sets, updated cards image url list, updated missing cards by sets list. 2023-06-25 20:51:01 +02:00
Eduardo MG
0d313bb34e Bug fixes to primitives
Kiora, the Crashing Wave
Ral, Storm Conduit
Ezuri, Stalker of Spheres ))
Staff of the Storyteller
Exuberant Wolfbear
2023-06-25 12:15:28 -06:00
Vittorio Alfieri
9a23c4b83b Fixed some primitives with conjure and phyrexian mana, fixed a bug on "conjure" ability, improved getCardbyName method for castcard with namedcard option, for meld and for flip/turnside ability. 2023-06-24 23:01:25 +02:00
Vittorio Alfieri
20fa180864 Improved Android downloader for token images. 2023-06-23 21:57:29 +02:00
Vittorio Alfieri
6a73b41724 Updated Card Image Url list for SIR set. 2023-06-23 17:38:56 +02:00
Vittorio Alfieri
df1a6c10a0 Added / fixed primitives from NEO set, improved Android downloader, updated missing cards by sets list, added SIR and SIS sets, updated card image url links, fixed MUL dat file, fixed a possible crash on "transforms" ability, added new trigger for ninjutsu ability, added new ability readytofight to set a creature tapped and attacking without being a ninja. 2023-06-23 17:25:04 +02:00
Vittorio Alfieri
c2d78db724 Added / fixed primitives from NEO set, added "mytgtforced" target for equipments and auras, added "numofactivation" keyword to give PT according to how many time an ability has triggred (e.g. "Bronze Cudgels"). 2023-06-22 18:39:11 +02:00
Vittorio Alfieri
797514521e Added / fixed primitives from NEO set, updated missing cards by sets list, improved "removesinglecountertype" ability (added "all" option to remove a specific amount of each kind of counter on a target). 2023-06-21 18:31:50 +02:00
Vittorio Alfieri
1458b4a872 Improved Android downloader for token images. 2023-06-20 19:14:02 +02:00
Vittorio Alfieri
f9bcaf53c2 Added / fixed primitives from NEO set, improved Android downloader for token images, fixed a problem with castcard copied option for permanents, fixed a bug on colorless mana calculation for AI during combo. 2023-06-20 17:29:44 +02:00
Vittorio Alfieri
721a3edefb Added new primitives from NEO set, fixed NEO dat file, updated card image url list. 2023-06-19 16:35:50 +02:00
Vittorio Alfieri
d4c2fecb69 Added primitives from ONE and NEO sets, fixed XLN dat file, updated missing cards by sets list. 2023-06-19 12:35:11 +02:00
Vittorio Alfieri
56a391193d Fixed MOC set dat file, updated Card Image Url list, improved Android Image Downloader. 2023-06-19 11:00:03 +02:00
Vittorio Alfieri
3b05932a8b Added / fixed primitives from ONE set, fixed Treasure name in all sets and primitives, updated missing cards by sets list, improved token creator ability by trying to retrieve the token id from the same set of source card (e.g. Urza's Saga), improved toxic ability adding a new target chooser "hastoxic" and adding a new keyword "toxicity" to retrieve the toxic amount of card. 2023-06-18 23:23:51 +02:00
Vittorio Alfieri
2ca092090d Added / fixed primitives from ONE set, updated missing cards by sets list. 2023-06-18 02:44:43 +02:00
Vittorio Alfieri
170987e418 Added new primitives from ONE set. 2023-06-16 15:16:40 +02:00
Vittorio Alfieri
8c85c56ff3 Fixed some typos in primitives. 2023-06-15 23:41:27 +02:00
Vittorio Alfieri
8a440d5d09 Added / fixed primitives from ONE set, updated missing card by sets list, improved triggers and added new trigger for proliferation effect. 2023-06-15 19:15:44 +02:00
Vittorio Alfieri
b7e8907877 Added / fixed primitives from J22 and ONE set, updated missing cards by sets list. 2023-06-13 14:11:20 +02:00
Vittorio Alfieri
67ab960608 Added new primitives from J22 and NEO sets, fixed some primitives. 2023-06-12 16:55:20 +02:00
Vittorio Alfieri
dacc76711c Updated an AI commander deck. 2023-06-10 23:43:06 +02:00
Eduardo MG
d42b5411d2 Bug Fixes to primitives, some reported in the Discord
Akki Battle Squad closing tag
Akki Ronin is not really missing, related to the missing closing tag
Ruthless Technomancer
Blossoming Defense
Ana Sanctuary
Spikefield Hazard
Headless Rider
Mishra's Research Desk
Simian Sling
2023-06-10 15:27:06 -06:00
Vittorio Alfieri
a5487311c4 Fixed several errors on primitives, fixed a bug on "mofified" target, restore a previous test on regenerate ability. 2023-06-10 22:52:49 +02:00
Vittorio Alfieri
1191d401c9 Update _tests.txt for a possible false problem on regenerate… 2023-06-09 23:44:50 +02:00
Vittorio Alfieri
0f607b2cbe Added/fixed primitives from NEC set, added new keyword "modified" to target creatures that are enchanted or geared or with counters, updated missing card by set list. 2023-06-09 22:45:08 +02:00
Vittorio Alfieri
2831ac12ae Added/fixed some primitives from J22 and NEC sets, fixed J22 and NEC dat file, updated card image url from NEC and J22 sets, fixed a bug on token copy, improved flip ability for tokens. 2023-06-05 17:55:11 +02:00
Vittorio Alfieri
f8fc173e86 Added / fixed some primitives, updated missing cards by set list, added new "reconfigure" ability based on "equip" one. 2023-06-04 20:11:40 +02:00
Eduardo MG
50251e460b Bug fixes to primitives
Pilot
Haunted One
Bane, Lord of Darkness
Bhaal, Lord of Murder
Humility
Redcap Melee
2023-06-03 19:28:06 -06:00
Vittorio Alfieri
a78110759b Improved Android downloader to use ScryFall APIs, fixed J22 dat file, updated card url links for J22 set. 2023-06-04 01:11:01 +02:00
Vittorio Alfieri
24c0684563 Improved Androd downloader for NES set, added new primitives from NEC and NEO sets, fixed NEC dat file, updated card url links. 2023-06-02 17:10:02 +02:00
Eduardo MG
d9af81007f Bug fixes to borderline file
Fixed unbalanced parentheses
Pegasus Courser
Season of Growth crashes
2023-06-01 14:10:35 -06:00
Vittorio Alfieri
c0f2635990 Fixed ONE, ONC, NEO and DMR dat file, added new primitives from ONC set, fixed primitives, improved Android downloader, updated missing card by set list, updated cards image url links, fixed a bug on parser when reading the substring "equip" with a different meaning. 2023-06-01 19:04:28 +02:00
Vittorio Alfieri
d3deae3a6a Added last primitives from BRC set, fixed some primitives, improved triggers for counters, fixed a bug on removesinglecounter ability, updated missing card by set list. 2023-06-01 10:29:35 +02:00
Vittorio Alfieri
aa87536c4a Fixed Android downloader for BRR set. 2023-05-31 15:41:48 +02:00
Vittorio Alfieri
ea9d053d76 Added new primitives from BRO and BRC sets, fixed some primitives, fixed BRR dat file, fixed castcard ability to avoid double activities activation, fixed a bug on "canloyaltytwice" ability. 2023-05-31 15:35:22 +02:00
Vittorio Alfieri
21687bc3ee Improved castcard "restricted" option for land cards, fixed fresh attribute reset on library cards, improved "can play" restriction, fixed BRO set dat file, updated card url file for BRO set, added/fixed some primitives from BRO set. 2023-05-30 23:27:18 +02:00
Eduardo MG
06b1a47a56 Bug fixes to primitives
Invocation of the Founders
Sanctifier of Souls
Rest for the Weary so you don't get double trigger on cards that care about lifegain
Raking Claws
2023-05-30 00:33:38 -06:00
Vittorio Alfieri
4f4addb8e9 Updated an AI commander deck, improved damage and life and manaproduce ability to send the correct source card on triggers when they are used inside the "ability$!!$" keyword, fixed issue #1090 about filtering cards with add{c} instead of add{1} ability. 2023-05-30 00:08:25 +02:00
Vittorio Alfieri
c17abc3dca Fixed image url list for BRO and BRC sets. 2023-05-29 18:19:59 +02:00
Vittorio Alfieri
2e09f489cb Added some new primitives from BRO set, fixed BRO and BRC card dat files, updated card image url links, added new keyword "prodmana" to count the specific amount of mana spent to cast a card. 2023-05-29 18:05:21 +02:00
Eduardo MG
961f00441f Sagas from Kamigawa: Neon Dynasty (NEO)
Still some missing
Cards added:
Fable of the Mirror-Breaker
Reflection of Kiki-Jiki
Okiba Reckoner Raid
Nezumi Road Captain
Era of Enlightenment
Hand of Enlightenment
Befriending the Moths
Imperial Moth
Tales of Master Seshiro
Seshiro's Living Legacy
The Modern Age
Vector Glider
The Shattered States Era
Nameless Conqueror
Bug fixes:
Fry
Liliana, the Last Hope
Brinelin, the Moon Kraken
2023-05-28 18:36:46 -06:00
Vittorio Alfieri
99f08276c6 Addes some new primitives from BRO set, fixes BRO and BRC dat files, updated image list url for BRO and BRS sets, imrpoved an AI deck, improved meld ability with "and" option, added new ability to allow a planeswalker to activate its loyalty abilities twice in a turn, improved Android downloader. 2023-05-28 23:17:21 +02:00
Vittorio Alfieri
066b30b1b7 Improved "Affinity" ability to support variables, fixed several primitives with affinity ability. 2023-05-27 21:24:25 +02:00
Eduardo MG
5785e413ec Bug fixes on primitives
Jace, Wielder of Mysteries
Chain Reaction
Rona, Tolarian Obliterator
Seize the Soul
Graveyard Marshal
Varina, Lich Queen
2023-05-27 00:11:31 -06:00
Vittorio Alfieri
9b162b434b Created a macro for going to adventure, 2023-05-26 21:47:48 +02:00
Vittorio Alfieri
c66387320f Merge branch 'master' of github.com:WagicProject/wagic 2023-05-26 21:36:36 +02:00
Vittorio Alfieri
ad9ea0f972 Fixed generic Affinity ability, fixzed some primitives with affinity abilities. 2023-05-26 21:36:11 +02:00
Eduardo MG
faa24acbc3 Fix for adventure cards
Some closing brackets and parenthesis were missing. Maybe going on an adventure could be a macros.

Also fixes on:
Soldevi Adnate
Poultrygeist
Goblin Cratermaker
2023-05-26 13:32:58 -06:00
Vittorio Alfieri
3dfd3253b2 Fixed transformation ability for instant and sorceries when the duration was uynt uent or forever, fixed several primitives to correctly set transformation duration of targeted cards. 2023-05-26 17:16:57 +02:00
Vittorio Alfieri
8df057f78a Added last primitives from MAT set, updated missing cards by set list, improved trigger and filtering for mana production abilities. 2023-05-25 18:48:00 +02:00
Eduardo MG
319cfe7889 Bug fixes in primitives
Heir to the Night
Indoctrination Attendant
Firecat Blitz
Ghalta and Mavren
2023-05-24 23:07:06 -06:00
Vittorio Alfieri
09f4c408cd Fixed some primitives, added new primitives from MAT set, improved filter for multicolored cards, added new keywords for handling multicolored cards. 2023-05-24 15:15:52 +02:00
Vittorio Alfieri
675705a6e5 Fixed several bugs, fixed several primitives, improved affnity for other types of cards, improved flip ability for token, added some new primitives from MAT set. 2023-05-23 20:29:43 +02:00
Vittorio Alfieri
1488bbc0f6 Fix compilation error on Android donwloader. 2023-05-22 16:14:21 +02:00
Vittorio Alfieri
1818bf4a5e Improved Android downloader, updated CardImageList.csv for some token urls. 2023-05-22 14:52:57 +02:00
Vittorio Alfieri
869e0309ec Fixed some primitives, added new keyword "hasdead" to allow restrictions based on the death of a specific card type, fixed type sorting on cards changing zones removing the side effect of new lands enter the battlefield on the left. 2023-05-22 10:42:10 +02:00
Eduardo MG
5f1371f914 Cards from Jumpstart 2022 (J22)
Michiko's Reign of Truth
Portrait of Michiko
Angelic Cub
Chains of Custody
Distinguished Conjurer
Biblioplex Kraken
Launch Mishap
Merfolk Pupil
Soul Read
Conductor of Cacophony
Creeping Bloodsucker
Deadly Plot
Suspicious Shambler
Ardoz, Cobbler of War
Coalborn Entity
Daring Piracy
Plundering Predator
Giant Ladybug
Mild-Mannered Librarian
Primeval Herald
Spectral Hunt-Caller
Towering Gibbon
Infernal Idol
2023-05-22 00:03:03 -06:00
Vittorio Alfieri
2374b00dfd Fixed some primitives, fixed several bug on damage management for planeswalkers and battle cards, added new keywords "noloyaltydamage" and "nodefensedamage" to avoid damage remove counters, 2023-05-22 01:19:15 +02:00
Vittorio Alfieri
dd28f274d1 Fixed some primitives, added some new primitives from MAT set, added new triggers to handle better counters, improved a lot of abilities for replacing atoi with WParserInt class, fixed bug on change types on xone changing, fixed bug on manacost during mutate and flip actions, fixed other minor bugs. 2023-05-21 18:52:16 +02:00
Eduardo MG
c3e8379258 Macros for surveil, bug fixes on primitives
Surveil, like scry, using parameters causes bugs so each value has to be indicated, updated some oracle text on cards that now use surveil.
Bug fixes:
Wolfwillow Haven
Karador, Ghost Chieftain
Ryusei, the Falling Star
Phyrexian Etchings
Pillar Of Flame. Exiles itself when it targets a player
Tuya Bearclaw
Dauthi Mindripper
2023-05-21 00:22:33 -06:00
Vittorio Alfieri
430589e64c Fixed Android downloader for BRO set. 2023-05-20 21:23:42 +02:00
Vittorio Alfieri
aafb88664c Added MAT set, fixed BRO set, updated CardImageLinks, Updated Android downloader, updated missing card by set list. 2023-05-20 19:06:50 +02:00
Eduardo MG
c81384ab1d Filter for snow type, adding battles into random decks
Bug fixes:
Boreas Charger
Heartfire Immolator
Scatter Ray
Pariah's Shield
Zimone and Dina
Aetherwing, Golden-Scale Flagship
2023-05-19 18:01:51 -06:00
Vittorio Alfieri
2d8a1a8a5f Added last primitives from MOM set, fixed some primitives, added new ability to send death card on bottom of library instead of graveyard. 2023-05-20 00:32:56 +02:00
Vittorio Alfieri
0e0b3a78fe Added some new primitives from MOM set, fixed some primitives, added new keyword "hasconvoke" to target spells which have convoke cost. 2023-05-19 20:43:26 +02:00
Vittorio Alfieri
3bd3933c66 Added new prmitives from MOM set, fixed primitives, improved flipacoin ability, imporved battle cards defeated trigger, added new filters for event to check permanents on graveyard. 2023-05-18 23:04:22 +02:00
Vittorio Alfieri
452cf4793f Fixed some primitives, added some new primitives from MOM set. 2023-05-17 15:13:25 +02:00
Eduardo MG
15588eda93 Bug fixes to primitives
Dreadfeast Demon not a may
Orzhov Advokist was getting every one of your creatures 2 counters
Baleful Stare
Energy Chamber shouldn't let you choose counters on artifact creatures if there are none on the field
2023-05-17 00:23:06 -06:00
Vittorio Alfieri
90e8292660 Improved toughness target filtering for Planeswalkers and Battles. 2023-05-16 13:08:25 +02:00
Vittorio Alfieri
19f7ee3615 Merge pull request #1088 from EduardoMunozGomez/master
Merged from EduardoMunozGomez: Condition to add a background to the commander deck
2023-05-16 09:48:10 +02:00
Eduardo MG
fa50c2f5df Temporal 2023-05-15 20:34:00 -06:00
Eduardo MG
01f3b23bea Condition to add a subtype=background to the commander deck 2023-05-15 20:17:50 -06:00
Eduardo MG
36fbb0d47d Merge branch 'WagicProject:master' into master 2023-05-15 20:12:26 -06:00
Eduardo MG
84c9667c71 Reduced sacrifice efficiency for AI. Bug fixes in primitives
The AI is too willing to sacrifice permanents.
The AI sometimes doesn't use a Planeswalker ability, increasing efficiency.
Gonti, Lord of Luxury. An effect that instructs you to "cast" a card doesn't allow you to play lands.
Rona, Tolarian Obliterator exra )
Oblivion Strike
Steel Seraph
True Love's Kiss
2023-05-15 20:10:42 -06:00
Eduardo MG
84c2c49581 Merge branch 'WagicProject:master' into master 2023-05-15 16:51:10 -06:00
Vittorio Alfieri
0a0c541f07 Now it's possible to use toughness target filtering even for planeswalkers and battles, added some new primitives from MOM set. 2023-05-15 23:04:24 +02:00
Vittorio Alfieri
546c755185 Fixed redirection of damage for battle cards, added 2 new keywords to target combined zones, added some new primitives from MOM set. 2023-05-15 16:37:10 +02:00
Vittorio Alfieri
a1d82d9f84 Fixed a problem of damage redirection from player to battle cards, added some new primitives from MOM set,fixed some primitives. 2023-05-15 11:23:38 +02:00
Eduardo MG
7a52f789b9 Fixed backgrounds so the enchantment itself doesn't get the ability, only the creature
Bug fixes:
Cultist of the Absolute
Depraved Harvester
transform Rona
Tainted Adversary
2023-05-14 23:36:04 -06:00
Vittorio Alfieri
0867265039 Added some new primitives from MOM set. 2023-05-15 00:56:25 +02:00
Vittorio Alfieri
ad6ae4e188 Fixed all battle cards, improved stun counter rule, added some new primitives from MOM set. 2023-05-14 18:10:39 +02:00
Vittorio Alfieri
efe9ad8bc4 Added some new primitives from MOM set, added new rule for Stun counter. 2023-05-14 15:56:38 +02:00
Eduardo MG
12f3a360ba Update borderline.txt
Overloaded Mage-Ring, cards like this crash the game, any permanent trying to copy an instant or sorcery with the syntax activate castcard(copied noevent), doing some testing transforms((,newability[clone])) oneshot seems to be working but you don't get to choose new targets for the copied instant or sorcery.
Karlach, Fury of Avernus
Mummy Paramount
Sunder the Gateway I guess the extra newability[ was a mistake
backgroundpartner was misspelt
2023-05-13 19:49:58 -06:00
Eduardo MG
e92191f38d Merge branch 'WagicProject:master' into master 2023-05-13 15:57:47 -06:00
Vittorio Alfieri
59e0f0902e Fixed CLB set for tokens, updated Android downloader, updated card image list. 2023-05-13 19:10:55 +02:00
Vittorio Alfieri
5a2a986ec6 Fixed card images url. 2023-05-13 15:59:46 +02:00
Vittorio Alfieri
c10054ae6f Added some new primitives from MOM set, updated Android downloader, fixed MOM and MOC card file to add tokens, updated Images links. 2023-05-13 15:52:25 +02:00
Vittorio Alfieri
24dac100f2 Fixed MH2 card file, fixed images links for MH2 set, added some new primitives from MOM set. 2023-05-13 11:02:18 +02:00
Eduardo MG
a0209fa158 MH2 alt art addition, CLB legends chooseabackground -> backgoundpartner
Modern Horizons 2 (MH2) to include alternative artwork
Some legends from CLB had a placeholder ability, changed to the implemented backgoundpartner
Bug Fixes:
Carnelian Orb of Dragonkind
Teferi, Temporal Pilgrim -12
Noxious Grasp
Nine-Fingers Keene
Song of the Dryads
2023-05-13 00:08:20 -06:00
Vittorio Alfieri
33103e648f Added Incubator and Phyrexian cards in MOM set, fixed icubate ability, updated card image list. 2023-05-12 17:50:45 +02:00
Vittorio Alfieri
f73b1869d5 Added some new primitives from MOM set, fixed some primitives. 2023-05-12 15:57:55 +02:00
Vittorio Alfieri
4ccad97eb0 Fix attacking menu for planeswalkers and battles, fixed MOM dat file. 2023-05-12 11:25:08 +02:00
Eduardo MG
967931a385 Macros replacements
_SPECTACLE_
_THOPTERTOKEN_
_AFTERLIFETOKEN_
2023-05-12 00:31:44 -06:00
Eduardo MG
e151790481 Bug fixes, correcting reminder text on mill cards
lifeleech when applicable
Teferi's Realm
Gorging Vulture
Kefnet's Monument
Rowdy Crew
Kjeldoran Gargoyle
Muxus, Goblin Grandee
2023-05-11 11:19:52 -06:00
Vittorio Alfieri
88099ce431 Fixed duplicated id on MOM cards. 2023-05-11 16:52:00 +02:00
Vittorio Alfieri
4e22b27783 Fixed compilation error on PSP/PSVITA. 2023-05-11 16:12:03 +02:00
Vittorio Alfieri
6ef8b45709 Implemented "Battle" type from MOM set (they are like planeswalkers), added some new primitives from MOM set, fixed some primitives targeting any target. 2023-05-11 15:57:08 +02:00
Vittorio Alfieri
f395274c0b Updated unsupported primitives and mmissing card by set list. 2023-05-10 22:18:12 +02:00
Vittorio Alfieri
b23014fcd6 Merge branch 'master' of github.com:WagicProject/wagic 2023-05-10 21:55:09 +02:00
Vittorio Alfieri
cf329e82a9 Added version to artifacts before automatic uploading on travis release. 2023-05-10 21:54:57 +02:00
Eduardo MG
32d18c9a68 Added cards from recent sets ONE, MOC, BRO
Didn't deleted any card but some seem out of order.

Tamiyo's Logbook
Venerated Rotpriest
Armored Scrapgorger
Vindictive Flamestoker
Fleshless Gladiator
Incisor Glider
Jor Kadeen, First Goldwarden
Kemba, Kha Enduring
Shrapnel Slinger
Ravenous Necrotitan
Urabrask's Anointer
Indoctrination Attendant
Ambulatory Edifice
Kuldotha Cackler
Benalish Faithbonder
Furnace Punisher
Phyrexian Atlas
Dokuchi Silencer
Shigeki, Jukai Visionary
Tameshi, Reality Architect
Planar Incision
Scavenged Brawler
Ramses, Assassin Lord
Hazezon, Shaper of Sand
Rohgahh, Kher Keep Overlord
Guardian Scalelord
Ichor Elixir
Deluxe Dragster
Liliana's Talent
Vivien's Talent
Path of the Ghosthunter
Path of the Animist
Path of the Enigma
Path of the Pyromancer
Path of the Schemer
Mine Worker
Power Plant Worker
Tower Worker
Shoot Down
Raze to the Ground
Recommission
Demolition Field
Skitterbeam Battalion
Tawnos's Tinkering
Battlefield Butcher
Carrion Locust
Kill-Zone Acrobat
2023-05-09 23:50:28 -06:00
Eduardo MG
836410dca7 Bug fixes in primitives @cycled
Marching Duodrone
Saddled Rimestag
Prickly Marmoset
reptilian reflection
Bane of the Living
2023-05-09 23:25:03 -06:00
Vittorio Alfieri
b0f5c1f7f7 Added some new primitives from MOC set, updated ai commander deck. 2023-05-09 16:38:29 +02:00
Vittorio Alfieri
82cff5659c Added CardImageLinks.csv to Travis-CI for automatic copy on travis-ci release. 2023-05-09 10:13:50 +02:00
Vittorio Alfieri
f51a024b03 Fixed DMC links. 2023-05-09 10:07:17 +02:00
Vittorio Alfieri
41e4f04aa3 Changed GITHUB token for travis, fixed DMC set. 2023-05-09 09:17:22 +02:00
Eduardo MG
c3802477c7 Update CardImageLinks.csv
Dominaria United Commander (DMC)
fixed null multiverseId that where not available
2023-05-08 22:39:28 -06:00
Eduardo MG
d9d8ab0b82 _cards.dat Dominaria United Commander (DMC)
LEGENDS RETOLD • 20 CARDS with multiverseId
2023-05-08 21:58:16 -06:00
Vittorio Alfieri
5e91b82a0e Merge branch 'master' of github.com:WagicProject/wagic 2023-05-09 01:01:54 +02:00
Vittorio Alfieri
2c68ea91f7 Fix Travis and reverted Rules.cpp due to many compilation error for pointers. 2023-05-09 01:01:39 +02:00
Eduardo MG
b6c733b397 Update checks for balanced parentheses, brackets, and curly braces in all files within primitives
This update can help prevent errors and improve the quality of the code within the primitives directory.

Other bug fixes:
Taigam, Sidisi's Hand
Grave Strength
Cry of Contrition
Dread Summons
Old Stickfingers so it doesn't trigger certain cards that care about 1/1 counters
2023-05-08 16:52:28 -06:00
Vittorio Alfieri
5f466399af Fix Travis Build. 2023-05-09 00:42:13 +02:00
Vittorio Alfieri
9995a2f9a6 Fix Travis Build. 2023-05-09 00:38:34 +02:00
Vittorio Alfieri
9808aea6d0 Fix Travis CI 2023-05-09 00:32:08 +02:00
Vittorio Alfieri
ee2fe3c722 Fix Travis, restored compatibility to Python 2.7 2023-05-09 00:28:04 +02:00
Vittorio Alfieri
95a37fd138 Fix Travis CI. 2023-05-09 00:19:40 +02:00
Vittorio Alfieri
103c8aa3c2 Fix Travis. 2023-05-09 00:12:02 +02:00
Vittorio Alfieri
39965be795 Fix Travis. 2023-05-09 00:09:27 +02:00
Vittorio Alfieri
cf39404441 Try to Fix Travis Errors. 2023-05-09 00:05:34 +02:00
Vittorio Alfieri
cea234e2ab Try to fix Travis Build CI. 2023-05-09 00:02:41 +02:00
Vittorio Alfieri
d988e9e359 Test for Travis CI build. 2023-05-08 23:57:40 +02:00
Vittorio Alfieri
9948b82c6b Test for Travis CI build. 2023-05-08 23:50:50 +02:00
Vittorio Alfieri
1fd88d1fab Test for travis error. 2023-05-08 23:46:49 +02:00
Vittorio Alfieri
0ced3bfb09 Fixed print on py script. 2023-05-08 23:27:07 +02:00
Eduardo MG
96ab9cf59d Bug fixes to primitives, Planar Guide doesn't lose eveyone into the AEther anymore
Brutal Cathar
Treasure Hunt casted by AI
Realm Seekers
Taigam, Sidisi's Hand
Unholy Indenture should not work with tokens
fixed hybrid mana in SNC
2023-05-08 00:21:34 -06:00
Eduardo MG
a19ede4c12 Update config.yml 2023-05-07 16:48:19 -06:00
Eduardo MG
5d41f6dfdb Update config.yml 2023-05-07 16:43:41 -06:00
Eduardo MG
ee86e7b478 Update config.yml 2023-05-07 16:38:10 -06:00
Eduardo MG
2eb719919c Update config.yml 2023-05-07 16:33:00 -06:00
Eduardo MG
6ae8984b41 Update config.yml 2023-05-07 16:27:54 -06:00
Eduardo MG
b8ea9e6b5f Update config.yml 2023-05-07 16:26:27 -06:00
Eduardo MG
203876aadb Update config.yml 2023-05-07 16:13:23 -06:00
Eduardo MG
ea6596a431 Update config.yml 2023-05-07 14:16:10 -06:00
Eduardo MG
d2e1cf34ca Update config.yml 2023-05-07 14:08:44 -06:00
Eduardo MG
4a9733b510 Update config.yml 2023-05-07 14:00:36 -06:00
Eduardo MG
5b56073243 Update config.yml 2023-05-07 13:57:17 -06:00
Eduardo MG
6e98e6f9e6 Update config.yml 2023-05-07 13:37:03 -06:00
Eduardo MG
8204d5a5c1 Update config.yml 2023-05-07 12:23:19 -06:00
Eduardo MG
b613da48db Update config.yml 2023-05-07 12:22:02 -06:00
Eduardo MG
b3712a8cf1 Update config.yml 2023-05-07 12:19:53 -06:00
Eduardo MG
bd76554186 Update config.yml 2023-05-07 12:18:18 -06:00
Eduardo MG
756a8907c8 Update config.yml 2023-05-07 12:17:06 -06:00
Eduardo MG
73b33bb0a0 Update circle-script.sh 2023-05-07 11:34:19 -06:00
Eduardo MG
9efd2bcfeb Update config.yml 2023-05-07 11:31:12 -06:00
Eduardo MG
05e857f735 Update config.yml 2023-05-07 11:25:13 -06:00
Eduardo MG
947277af5a Update config.yml 2023-05-07 11:24:42 -06:00
Eduardo MG
ecd4b85e22 Update config.yml 2023-05-07 11:22:48 -06:00
Eduardo MG
6eebfa77a4 Create circle-script.sh 2023-05-07 11:15:23 -06:00
Eduardo MG
61c4bff54e Update config.yml 2023-05-07 10:43:38 -06:00
Eduardo MG
b9f77513b6 Merge pull request #1 from EduardoMunozGomez/circleci-project-setup
Circleci project setup
2023-05-07 10:33:33 -06:00
Eduardo MG
d3caf2fb15 Merge branch 'WagicProject:master' into circleci-project-setup 2023-05-07 10:31:16 -06:00
Vittorio Alfieri
94d1267abf Fixed compilation issue on PSP/PSVITA after 76f5a6b commit. 2023-05-07 15:13:22 +02:00
Vittorio Alfieri
ab6f80c242 Fixed tab with blank spaces. 2023-05-06 23:13:45 +02:00
Vittorio Alfieri
c3d0fd91ae Fixed Cultist of the Absolute. 2023-05-06 23:09:46 +02:00
Eduardo MG
76f5a6b851 Update Rules.cpp
Replaces the use of raw pointers with std::unique_ptr smart pointers, which will automatically manage the memory deallocation for you. It also uses the release() method to transfer ownership of the tempDeck pointer to the Player object. Overall, these changes should help ensure that the code is safer and less prone to memory leaks.
2023-05-06 14:04:07 -06:00
Vittorio Alfieri
f5e5444734 Fixed MOC cards dat file. 2023-05-06 16:15:28 +02:00
Vittorio Alfieri
dca0d9c201 Updated missing card bt set list. 2023-05-06 16:06:01 +02:00
Eduardo MG
273d666bcc New cards from MOC, MOM
March of the Machine Commander (MOC)
March of the Machine (MOM)
A few others from BRO and ONE
Some old auras that get sacrificed at end of turn if you cast them as if they had flash
fixed Fire Prophecy
NEW:
Umori, the Collector
Rootwire Amalgam
Steel Seraph
Tyrranax Rex
Paladin of Predation
Axgard Artisan
Zephyr Winder
Phyrexian Pegasus
Orthion, Hero of Lavabrink
Surrak and Goreclaw
Angelic Intervention
Pile On
Terror of Towashi
Interdisciplinary Mascot
Fertilid's Favor
Vengeant Earth
Sidar Jabari of Zhalfir
Moira and Teshar
Shalai and Hallar
Vodalian Wave-Knight
Bitterthorn, Nissa's Animus
Herald of Hoofbeats
Chivalric Alliance
Darksteel Splicer
Mistmeadow Vanisher
Death-Greeter's Champion
Hedron Detonator
Pain Distributor
Locthwain Lancer
Schema Thief
Exsanguinator Cavalry
Nesting Dovehawk
Filigree Vector
Conjurer's Mantle
Infernal Sovereign
Firemane Commando
Goro-Goro and Satoru
Katilda and Lier
Slimefoot and Squee
Soar
Armor of Thorns
Grave Servitude
Lightning Reflexes
Spider Climb
Parapet
Mystic Veil
Relic Ward
Titania, Voice of Gaea
Titania, Gaea Incarnate
Professional Face-Breaker
Oracle's Vault
Volcanic Spite
2023-05-05 22:20:30 -06:00
Eduardo MG
1e6a8814de For some reason the engine can return tokens from exile
Changed the macros so a token doesn't learn the ability to return from exile while blinked
limited cards with shuffledfoeof or else their effect reproduces for every card in a deck
Liliana Vess, ability description
Domri, Chaos Bringer -8
Research Thief is a mandatory draw
_SERVOTOKEN_ replacements
2023-05-05 19:18:23 -06:00
Vittorio Alfieri
984c880efc Fixed duplicated wrong links for double cards of MOC set. 2023-05-05 23:01:06 +02:00
Vittorio Alfieri
c5b982c2b6 Updated missing cards by set list. 2023-05-05 22:48:10 +02:00
Vittorio Alfieri
aa722ee3f4 Added some new primitives from CLB set. 2023-05-05 22:42:46 +02:00
Eduardo MG
56be7d8c47 Update CardImageLinks.csv
Changes in March of the Machine Commander (MOC)
2023-05-05 08:32:30 -06:00
Eduardo MG
9f878f6145 Bug fixes and typos, Afterlife token macros
Wild Magic Surge had unbalanced parenthesis
# Afterlife
#AUTO_DEFINE _AFTERLIFETOKEN_ create(Spirit:Creature Spirit:1/1:white:black:flying)
Kaya, Ghost Assassin was crashing the game
Read the Bones
"Edict like" effects should not target, so you can select creatures with shroud

ALL test successful
2023-05-04 16:33:27 -06:00
Vittorio Alfieri
721adb8db0 Fixed initiative and undercity links. 2023-05-04 17:25:53 +02:00
Vittorio Alfieri
784eab6dbf Added some new cards from CLB set. 2023-05-04 16:41:04 +02:00
Vittorio Alfieri
be03648e11 Added some new planeswalker from CLB set. 2023-05-04 16:37:12 +02:00
Vittorio Alfieri
44ffc5d895 Fixed ai set commander for Belbe. 2023-05-04 16:23:24 +02:00
Vittorio Alfieri
d4be791e68 Added image links for initiative and undercity cards. 2023-05-04 16:18:53 +02:00
Vittorio Alfieri
16ba96b2f0 Fix initiative trigger. 2023-05-04 15:51:55 +02:00
Vittorio Alfieri
6af7acce0b Fix take the initiative ability and triggers. 2023-05-04 15:42:03 +02:00
Vittorio Alfieri
0efc61fda7 Coded the initiative ability from CLB set, added some condition to test if a card has been casted from exile or sideboard or commandzone. 2023-05-04 14:56:04 +02:00
Vittorio Alfieri
509e25d4cc Start to code "take the initiative" ability for CLB set. 2023-05-04 14:34:02 +02:00
Eduardo MG
0d29633793 Bug fixes, closed issue #518
Nissa's Defeat
Ornery Dilophosaur
Species Specialist
Phantom Wings
Sun Clasp
Trickster's Talisman sacrifice
Brain in a Jar
Dream Tides untap outside upkeep
Rain of Thorns
Sudden Spoiling
Power Taint,Slow Motion, closed issue #518
Barbed Lightning
Banish into Fable
2023-05-03 16:58:44 -06:00
Eduardo MG
723babac46 Macros for _MUST_BE_BLOCKD_, bug fixes
damage:x all(creature,player) produces a bug that does not damage creatures with hexproof or shroud
Exotic Orchard cannot produce colorless mana on its own. It can only produce mana of a color that a land an opponent controls could produce.
Stitched Mangler
Massive Might
Halana, Kessig Ranger
Animate Wall was falling off
Ram Through
Must be blocked this turn if able, changed previous version since that doesn't reflect the effect of the card, one creature that must be blocked is different to force all creatures opoonent controls to block.
_MUST_BE_BLOCKD_ notice the unique spelling, it is so it doesn't clashes with _BLOCKED_
Daretti, Ingenious Iconoclast -6 ability. Choose target artifact card in a graveyard or artifact on the battlefield. Create three tokens that are copies of it
Platoon Dispenser
Bloodline Necromancer
Tawnos, the Toymaker
Simic Manipulator
Urza's Tome
2023-05-02 19:01:37 -06:00
Eduardo MG
d1caf06660 Bug fixes, Gift of the Gargantuan crashed the game when casted by the AI
Gargos, Vicious Watcher
Grazilaxx, Illithid Scholar
Growing Rites of Itlimoc
Haywire Mite
Neyith of the Dire Hunt
Raff, Weatherlight Stalwart
The Prismatic Bridge
Gift of the Gargantuan
2023-05-01 22:59:06 -06:00
Eduardo MG
4132cf602b Revert "Update .travis.yml"
This reverts commit 6b109317bb.
2023-05-01 22:40:33 -06:00
Eduardo MG
6b109317bb Update .travis.yml 2023-05-01 17:11:00 -06:00
Vittorio Alfieri
c2d060f47d Added some new primitives from CLB set. 2023-05-01 12:24:02 +02:00
Vittorio Alfieri
ee4c3a0057 Fixed Dragon Cultist. 2023-05-01 10:59:31 +02:00
Eduardo MG
f8d515a7ed Brackets balance validations, macros _DISCARD&DRAW_
Using all(player) when applicable
Updated Oracle text for mill
Bug fixes in primitives
Sasaya's Essence
Sythis, Harvest's Hand
Ancient Animus
2023-04-30 19:54:38 -06:00
Vittorio Alfieri
49a618fc37 Added option to download latest core file from Android app (both at startup and from settings menu). 2023-04-30 20:52:52 +02:00
Vittorio Alfieri
800c2f9bf4 Added some ew cards from CLB set. 2023-04-30 19:37:20 +02:00
Eduardo MG
8ca0eaaf40 Fixed _SCAVENGE_, other bug fixes, macros for _ETERNALIZE_
Typo in successful
Lux Cannon so that the AI can use the destroy ability
Throatseeker
Icingdeath, Frost Tyrant you don't "cast" the token
Insubordination
Infectious Curse
Igneous Elemental
Abu Jafar both?
_ETERNALIZE_
2023-04-29 23:54:41 -06:00
Eduardo MG
73712f6bd5 Balanced brackets check, sanitization, bug fixes
Added bracket balancing checks to the program for opening and closing sequences of  parenthesis, square brackets, curly brackets, ,'ability$!' and '!$' characters, as well as for the 'and!(' opening sequence and the ')!' closing sequence.

Sanitization operations removing empty lines and spaces at end of line.

Pious Interdiction so the AI doesn't enchant own creatures.

All 724 Tests Succesful!
2023-04-28 19:49:01 -06:00
Eduardo MG
0b46cd255e Bug Fixes to Primitives
King Narfi's Betrayal
Korvold, Fae-Cursed King
Desecrated Tomb
Arlinn Kord emblem
Rowan, Fearless Sparkmage
2023-04-27 18:51:10 -06:00
Vittorio Alfieri
900a565c96 Added some new primitives from CLB set. 2023-04-27 22:02:10 +02:00
Vittorio Alfieri
8e3761c5f1 Added some new primitives from CLB set. 2023-04-27 14:35:16 +02:00
Vittorio Alfieri
24337d8e66 Fixed background partner ability, added some new cards from CLB set. 2023-04-27 09:19:34 +02:00
Eduardo MG
d9655ab833 Check for balanced brackets
Check for balanced square brackets [] and curly brackets {}.

Couldn't check for parentheses since the engine expects unbalanced parenthesis like in cards that have the string "this(cantargetcard" never closes the parentheses, balancing the parentheses makes the cards stop working, best example: Monstrous

All tests passed.

Morbid Opportunist
Ooze Garden
2023-04-26 17:22:31 -06:00
Eduardo MG
9514ea59d8 Updated 'mills' oracle text, fix typos and bugs, check for balanced brackets
Update some instances of 'puts the top cards of his or her library into his or her graveyard.' into mill cards text.
Using all(player) when applicable.
Check for Balanced Brackets
Liliana, Waker of the Dead does not damage the owner if it doesn't have cards in hand, only opponent
Shipbreaker Kraken
Rockcaster Platoon
Triskaidekaphobia
Cryptolith Fragment
Alpha Status
Flusterstorm
Caldera Hellion
Chronomantic Escape
Hero's Blade
Remember the Fallen
Master of Winds
Lorcan, Warlock Collector now turns revived card into warlock
Lier, Disciple of the Drowned
2023-04-26 08:16:57 -06:00
Vittorio Alfieri
cb3ab39df1 Added some missing primitives from CLB set. 2023-04-26 13:10:42 +02:00
Vittorio Alfieri
593d3c4d9c Merge branch 'master' of github.com:WagicProject/wagic 2023-04-26 13:05:18 +02:00
Vittorio Alfieri
8027ed4bdf Added Background partner ability for CLB commanders, fixed some tab with spaces 2023-04-26 13:05:07 +02:00
Eduardo MG
3ad8c76715 Changes on Scry macros, bug fixes on primitives
Seems like the engine didn't like the parametric macros for Scry as it did the ability twice
Balan, Wandering Knight
Alhammarret's Archive
Skyrider Patrol
Xyris, the Writhing Storm
Emiel the Blessed (this card just refuses to work)
Fight as One
Blizzard Brawl
Hermit of the Natterknolls // Lone Wolf of the Natterknolls
Elaborate Firecannon
Tectonic Reformation
2023-04-25 00:23:53 -06:00
Eduardo MG
5323668faa Add .circleci/config.yml 2023-04-24 18:32:46 -06:00
Vittorio Alfieri
2446443522 Added CardImageLinks.csv to git. 2023-04-24 13:04:58 +02:00
Vittorio Alfieri
4f9f93dcc8 Removed duplicated primitives in unsupported file. 2023-04-24 11:29:39 +02:00
Vittorio Alfieri
eb9788b667 Updated missing cards by set list. 2023-04-24 11:16:38 +02:00
Eduardo MG
9e4f486fa2 Added March of the Machine (MOM) and Connive cards
Aerial Boost
Alabaster Host Intercessor
Alabaster Host Sanctifier
Archangel Elspeth
Bola Slinger
Boon-Bringer Valkyrie
Dusk Legion Duelist
Elspeth's Smite
Golden-Scale Aeronaut
Guardian of Ghirapur
Heliod, the Radiant Dawn
Heliod, the Warped Eclipse
Kithkin Billyrider
Knight of the New Coalition
Kor Halberd
Phyrexian Censor
Realmbreaker's Grasp
Scrollshift
Seal from Existence
Seraph of New Capenna
Seraph of New Phyrexia
Sigiled Sentinel
Sun-Blessed Guardian
Furnace-Blessed Conqueror
Surge of Salvation
Tarkir Duneshaper
Burnished Dunestomper
Zhalfirin Lancer
Artistic Refusal
Astral Wingspan
Captive Weird
Compleated Conjurer
Change the Equation
Disturbing Conversion
Expedition Lookout
Faerie Mastermind
Furtive Analyst
Halo-Charged Skaab
Meeting of Minds
Moment of Truth
Order of the Mirror
Order of the Alabaster Host
Preening Champion
Saiba Cryptomancer
Skyclave Aerialist
Skyclave Invader
Stasis Field
Thunderhead Squadron
Tidal Terror
Transcendent Message
Xerex Strobe-Knight
Zhalfirin Shapecraft
Aetherblade Agent
Gitaxian Mindstinger
Archpriest of Shadows
Ayara, Widow of the Realm
Ayara, Furnace Queen
Bladed Battle-Fan
Blightreaper Thallid
Blightsower Thallid
Breach the Multiverse
Collective Nightmare
Consuming Aetherborn
Corrupted Conviction
Deadly Derision
Dreg Recycler
Etched Familiar
Etched Host Doombringer
Failed Conversion
Final Flourish
Glistening Deluge
Gloomfang Mauler
Grafted Butcher
Prickle Faeries
Mirrodin Avenged
Nezumi Freewheeler
Hideous Fleshwheeler
Nezumi Informant
Yargle and Multani
Tenured Oilcaster
Unseal the Necropolis
Raffine's Informant
Body Launderer
Echo Inspector
Hypnotic Grifter
Illuminator Virtuoso
Ledger Shredder
Psionic Snoop
Psychic Pickpocket
Raffine's Silencer
Revel Ruiner
Security Bypass
Obscura Interceptor
Akki Scrapchomper
Beamtown Beatstick
Bloodfeather Phoenix
Burning Sun's Fury
City on Fire
Coming In Hot
Fearless Skald
Furnace Host Charger
Furnace Reins
Hangar Scrounger
Harried Artisan
Phyrexian Skyflayer
Karsus Depthguard
Khenra Spellspear
Gitaxian Spellstalker
Lithomantic Barrage
Mirran Banesplitter
Onakke Javelineer
Pyretic Prankster
Glistening Goremonger
Ral's Reinforcements
Ramosian Greatsword
Rampaging Raptor
Redcap Heelslasher
Shivan Branch-Burner
Trailblazing Historian
Thrashing Frontliner
Shatter the Source
War-Trained Slasher
Wrenn's Resolve
Halo Hopper
Arachnoid Adaptation
Atraxa's Fall
Bonded Herdbeast
Plated Kilnbeast
Chomping Kavu
Copper Host Crusher
Cosmic Hunger
Crystal Carapace
Gnottvold Hermit
Chrome Host Hulk
Herbology Instructor
Malady Invoker
Iridescent Blademaster
Placid Rottentail
Polukranos Reborn
Polukranos, Engine of Ruin
Portent Tracker
Ravenous Sailback
Serpent-Blade Assailant
Storm the Seedcore
Streetwise Negotiator
Tandem Takedown
Timberland Ancient
Tribute to the World Tree
War Historian
Wary Thespian
Wildwood Escort
Errant and Giada
Marshal of Zhalfir
Rampaging Geoderm
Stormclaw Rager
Ruins Recluse
Phyrexian Archivist
Urn of Godfire
Sword of Once and Future
Flywheel Racer
Cragsmasher Yeti
Thalia and The Gitrog Monster
Kroxa and Kunoros
2023-04-23 23:37:34 -06:00
Eduardo MG
8aebeaf8fb Bug fixes on primitives
Misfortune
Cromat
Leafkin Druid
Cobbled Lancer
Skeletal Scrying
Wingfold Pteron
Zara, Renegade Recruiter was bouncing the creature even if it leaved the play
Mystic Subdual
Champion of Lambholt
Ranger-Captain of Eos
Najeela, the Blade-Blossom
Winter's Rest
Teferi's Time Twist
Shatter Assumptions
Titan's Presence
Boarded Window
Nim Deathmantle still missing rehook
Hollow Specter at least does something now
Urborg Uprising - You can cast Urborg Uprising with no targets if you want to only draw a card.
Grim Captain's Call
Avatar of Growth
Shining Armor
Alchemist's Gift
Jabari's Banner
Open into Wonder
Scroll of the Masters
2023-04-23 23:26:26 -06:00
Eduardo MG
9b704e1cb6 Bug fixes on primitives
Buy Your Silence
Rashmi, Eternities Crafter
Eliminate
Dennick, Pious Apparition
Consuming Aberration should not target
Derevi, Empyrial Tactician
Zurzoth, Chaos Rider
Aetherstorm Roc
2023-04-23 00:49:13 -06:00
Eduardo MG
8d940c381f March of the Machine Commander (MOC), March of the Machine (MOM), Multiverse Legends (MUL)
New _cards.dat for March of the Machine Commander (MOC), March of the Machine (MOM) and Multiverse Legends (MUL) with offical multiverseid.
2023-04-22 10:59:43 -06:00
Vittorio Alfieri
a55381ec66 Removed duplicated missingCardList.txt 2023-04-22 12:40:29 +02:00
Vittorio Alfieri
7641b29178 UYpdated missing cards by set list. 2023-04-22 12:32:53 +02:00
Vittorio Alfieri
01038e217e Merge branch 'master' of github.com:WagicProject/wagic 2023-04-22 12:25:50 +02:00
Vittorio Alfieri
91bd5cc6d6 Updated Missing Card by sets list. 2023-04-22 12:25:09 +02:00
Eduardo MG
21397fd6cf Bug fixes on primitives, extra spaces cleanup
Aetherflux Reservoir. The first ability counts the spell that caused it to trigger plus any other spells you cast earlier in the turn.
Barrier Breach
Kinjalli's Sunwing
Manglehorn
Angelic Ascension
Secure the Scene
Dance of the Skywise loseabilities, ueot before works(???)
Acorn Catapult was crashing the game
Wirewood Channeler
Return to the Ranks
Harmonious Archon
Rage-Scarred Berserker
Lutri, the Spellchaser
2023-04-22 00:14:08 -06:00
Eduardo MG
6e60d0e96c Bug fixes, _SCRY_, _BLINK_UEOT_ and _CONNIVES_ macros
Changed instances of scry for macros
Aetherling (blink)ueot not working
Cartouche of Strength
Quest for Ancient Secrets
Zar Ojanen, Scion of Efrava
Lord of Tresserhorn
Fa'adiyah Seer
Mystifying Maze
Alharu, Solemn Ritualist
Trap Digger
Gideon, Martial Paragon
Fell Flagship
Bone Splinters
Midnight Clock
Rosethorn Halberd
Instill Furor
2023-04-20 11:39:12 -06:00
Vittorio Alfieri
f9da0c3a1e Fixed a crash on random avatar AI selection. 2023-04-20 13:28:44 +02:00
Vittorio Alfieri
74840b353c Fixed version in Android about. 2023-04-20 10:32:42 +02:00
Vittorio Alfieri
74e9cffc50 Fixed Kor Spiritdance. 2023-04-19 23:11:42 +02:00
Vittorio Alfieri
459892264d Fixed CLB set. 2023-04-19 21:35:25 +02:00
Vittorio Alfieri
cc92f26035 Fixed DMC and TSR sets. 2023-04-19 21:01:20 +02:00
Vittorio Alfieri
fe57ffae3d Fix NCC set. 2023-04-19 20:03:23 +02:00
Vittorio Alfieri
3628dc36fd Fix orderindex of TSR set. 2023-04-19 18:42:20 +02:00
Eduardo MG
b87be5837a Bug Fixes on primitives, change in ADAPT macros
Modified _ADAPT_ macros to make it clearer
Trusty Retriever
Howl of the Hunt
Urza, Lord High Artificer
Puncturing Blow
Surge Engine
Temporal Machinations
Triumph of Gerrard
Burning Fields
Dragonlord Atarka
Cartouche of Strength
Tortured Existence
Search the Premises
Ordeal of Nylea
Ebondeath, Dracolich
Kraken of the Straits
Cleansing
2023-04-17 16:03:07 -06:00
Eduardo MG
791733c9bf New cards, mostly from Streets of New Capenna (SNC) and Dominaria United (DMU)
Light 'Em Up
Quick-Draw Dagger
Cabaretti Charm
Sticky Fingers
Rogues' Gallery
Brazen Upstart
Metropolis Angel
Cement Shoes
For the Family
Case the Joint
Cyberdrive Awakener
Explosive Entry
Return to Action
Gravelighter
Vodalian Hexcatcher
Balduvian Atrocity
Smash to Dust
Sheoldred's Restoration
Squee, Dubious Monarch
Recruitment Officer
Su-Chi Cave Guard
Tatyova, Steward of Tides
Talas Lookout
Bortuk Bonerattle
Floriferous Vinewall
Public Enemy
Revelation of Power
Ironsoul Enforcer
Silkguard
Concord with the Kami
Oxidda Finisher
2023-04-15 19:52:02 -06:00
Eduardo MG
c02ee99a87 Bug fixes, _KNIGHTTOKEN_ macros, removed problematic cards
_KNIGHTTOKEN_
Renown macros
spiritlink is different than lifelin, spiritlink uses the stack and can have multiple instanes
Apostle of Purifying Light
Farewell
Springleaf Drum
Pursued Whale token
Majestic Heliopterus
Bearded Axe
Mercurial Pretender
Vesuva
Kaho, Minamo Historian
You Meet in a Tavern
Gravitic Punch
Lair of the Hydra
Aquamorph Entity
Annihilating Glare
Kithkin Spellduster
Kithkin Zealot
Kjeldoran Gargoyle
Rakavolver
Run Aground
Somberwald Beastmaster
Into the Night draws before discard
Nissa's Pilgrimage
Kithkin Zephyrnaut
Dawn Evangel
Wings of Hubris
Disaster Radius
Chandra's Pyreling
Nature's Will
Thromok the Insatiable not even close to working
Reality Shift
Ferocious Tigorilla
Excavator
Serra's Emissary
2023-04-15 19:30:54 -06:00
Eduardo MG
6d134f5db7 List with all the cards not implemented
Funny sets are ignored. Unfinity (UNF) Unsanctioned (UND) Unstable (UST) Unhinged (UNH) Unglued (UGL)
2023-04-13 19:20:25 -06:00
Eduardo MG
d717dcad02 Bug fixes and new cards form ONE
token macros
Winter Orb
Imi Statue
Brago, King Eternal is so buggy, it revives cards and reattaches auras
Oketra's Avenger
Efreet Flamepainter
You must still pay the mana cost of the target instant in your graveyard to cast it using Toshiro’s ability.
Neonate's Rush
Grimlock, Dinobot Leader
Mazemind Tome
Grim Discovery
Devout Decree
Hydra's Growth
Wolfrider's Saddle
2023-04-09 17:47:35 -06:00
Eduardo MG
7b75936545 Update ZNR _cards.dat. New cards and fixed id's on flip cards 2023-04-09 12:16:42 -06:00
Eduardo MG
608817b9bc Updated Innistrad: Crimson Vow (VOW) _cards.dat
Removing cards with no multiverseid
2023-04-07 12:20:44 -06:00
Eduardo MG
078e359290 Updated Zendikar Rising (ZNR) _cards.dat 2023-04-07 12:00:13 -06:00
Eduardo MG
02a64542ef Update Time Spiral Remastered (TSR) _cards.dat
Restoring hard coded tokens, I want to find a better solution for the tokens than this.
2023-04-04 18:01:55 -06:00
Eduardo MG
a695397cb2 Updated Kaldheim (KHM) _cards.dat 2023-04-04 17:17:49 -06:00
Eduardo MG
81f39fc0a2 Update Adventures in the Forgotten Realms (AFR) _cards.dat 2023-04-04 16:27:43 -06:00
Eduardo MG
fefb18dc75 Update Core Set 2021 (M21) _cards.dat 2023-04-04 13:29:58 -06:00
Eduardo MG
fd4c4a15f8 Update Midnight Hunt Commander (MIC) _cards.dat 2023-04-04 13:19:13 -06:00
Eduardo MG
e462c31559 Update Crimson Vow Commander (VOC) _cards.dat 2023-04-04 00:38:29 -06:00
Eduardo MG
c711e661b1 Updated Innistrad: Crimson Vow (VOW) _cards.dat
BORDERLESS PLANESWALKERS • 3 CARDS
ALTERNATE-ART BORDERLESS CARDS • 5 CARDS
SHOWCASE CARDS • 43 CARDS
DRACULA SERIES • 17 CARDS
EXTENDED ART CARDS • 52 CARDS
BUY-A-BOX • 1 CARD
PROMOS • 4 CARDS
THE MOONLIT LANDS • 5 CARDS
2023-04-04 00:28:40 -06:00
Eduardo MG
6e98c0e19a Bug fixes and new cards, mostly from Phyrexia: All Will Be One (ONE)
Bulwark
Possessed Skaab
Skymarcher Aspirant
Sadistic Skymarcher
2023-04-03 19:49:31 -06:00
Eduardo MG
2a05bebf5c Update Phyrexia: All Will Be One (ONE) _cards.dat
Updates on multiverse_ids
2023-04-04 01:42:22 -06:00
Eduardo MG
5336b079f4 Bug fixes, _SCAVENGE_ need to be reverted, dislike of aicode it produces bugs and is hard to test
Moment of Triumph
Teysa, Envoy of Ghosts
Repeal
Mask of Memory
Hushwing Gryff
Drudge Spell
Wicked Guardian
Helvault
Shessra, Death's Whisper
2023-04-03 12:16:11 -06:00
Eduardo MG
da9c163ff1 Added Jumpstart 2022 (J22)
Anime Waifus
2023-04-02 19:15:07 -06:00
Eduardo MG
189c624d67 BRC update
=Staff of Titania is showing now and some rarity changes
2023-03-31 23:28:43 -06:00
Eduardo MG
98839c4e8c Bu fixes, removed extra parenthesis and spaces at end of line
Baron Sengir
Myr Moonvessel
Synod Artificer
Piston Sledge
Ichor Explosion
Boreas Charger
Captivating Crew
Gate to the Afterlife
Imaryll, Elfhame Elite
2023-03-31 00:06:14 -06:00
Eduardo MG
54d8c00aaa Update appveyor.yml 2023-03-27 19:16:40 -06:00
Eduardo MG
c5c05ca068 Update appveyor.yml 2023-03-27 19:13:47 -06:00
Eduardo MG
889259a3ef Updated Wagic Version and Python scripts
Updated Wagic to version 0.24.0 and the Python scripts to use the print syntax for Python 3 so the files could be build.
2023-03-26 22:30:20 -06:00
Eduardo MG
b23961c0ee Merge branch 'master' of https://github.com/WagicProject/wagic 2023-03-26 17:59:15 -06:00
Eduardo MG
7ea7431906 Bug Fixes and added cards from Phyrexia: All Will Be One (ONE)
Adriana, Captain of the Guard
Pyre of Heroes
Chime of Night
Arcum's Weathervane
Escape Routes
Judge Unworthy
Lair Delve
Reign of Terror
Trap Digger
Verdant Succession
Hull Breach
Redcap Raiders
Relentless Pursuit
Serpent of Yawning Depths
Bloodborn Scoundrels
Scrapwork Mutt
Merciless Eternal
Diabolic Servitude
Barbarian Bully
2023-03-26 17:58:51 -06:00
Eduardo MG
49168b6a22 Added Dominaria Remastered (DMR) and Phyrexia: All Will Be One Commander (ONC) 2023-03-26 17:34:29 -06:00
Eduardo MG
f642d41a71 Phyrexia: All Will Be One (ONE) 2023-02-13 22:23:27 -06:00
Eduardo MG
d4cb3e8384 Merge pull request #1078 from fogobogo/cmake
Cmake update
2022-10-04 16:07:12 -05:00
fogobogo
d566524499 cmake build fixes
this brings the cmake branch in line with commit
8e551bb287 from the main branch.

This adds a few boons, most notably it allows compiling on Linux with
SDL2 instead of SDL.

That also allows for mouse support and can now be run without X, which
is mostly interesting in case you want to play some Wagic on say, a
Raspberry Pi.
2022-01-11 20:51:49 +01:00
fogobogo
f3bb5ccef9 Merge branch 'master' into cmake 2022-01-11 19:19:09 +01:00
xawotihs
4709295598 Adds ios cmake toolchain 2017-09-08 22:47:29 +02:00
Xawotihs
af0c423359 Switch back to java oracle 8 to build android app 2017-09-08 18:23:09 +02:00
Xawotihs
45253e0008 Reupdate pip calls to use them for osx as well 2017-09-08 17:56:20 +02:00
Xawotihs
e32e5c2a47 Readding sudo pip ... lalala ... 2017-09-07 22:12:25 +02:00
Xawotihs
3a4f9f06cb reordered pip install 2017-09-07 22:01:36 +02:00
Xawotihs
a563030440 Removing pip cache 2017-09-07 21:44:55 +02:00
Xawotihs
80d43896ff Reordered pip installs around 2017-09-07 20:56:37 +02:00
Xawotihs
1c5949411f Fixed some ] and space 2017-09-07 20:22:25 +02:00
Xawotihs
699b151939 With a couple of ; 2017-09-07 20:15:32 +02:00
Xawotihs
e6af1a08b9 Use sudo pip for Android and pip with linux without Android 2017-09-07 20:09:56 +02:00
Xawotihs
7eac02f8d4 Trying pip install without sudo 2017-09-06 19:44:00 +02:00
Xawotihs
58e70e2500 replacing sudo pip by sudo -H pip 2017-09-06 19:36:12 +02:00
Xawotihs
56ca2021dc Let's try with openjdk7 2017-09-06 19:18:13 +02:00
Xawotihs
e4e431dcee Let's try jdk_switcher 2017-09-06 00:21:24 +02:00
Xawotihs
abfff205ee Readding ant, it seems the android worker needs it 2017-09-06 00:05:16 +02:00
Xawotihs
6416e4e0d9 Removed ant installation 2017-09-05 23:37:47 +02:00
Xawotihs
86f4730db7 Removings traces and ant errors 2017-09-05 23:06:22 +02:00
Xawotihs
33a5479512 Sounds like JAVA_HOME is wrong, let's try to use the default one 2017-09-05 22:59:06 +02:00
Xawotihs
891859f4ca Let's display ant errors 2017-09-05 22:48:06 +02:00
Xawotihs
d5bfb8201b Some echo traces 2017-09-05 22:36:19 +02:00
Xawotihs
f49ef92f90 sudo required on linux 2017-09-05 22:26:38 +02:00
Xawotihs
02d004b5bf Fixed os in build matrix for Android 2017-09-05 22:11:24 +02:00
Xawotihs
55f8a8a1d0 Only used brew if osx is defined 2017-09-04 20:16:31 +02:00
Xawotihs
068a69c80b Adding ant as it somehow disappeared ... 2017-09-04 19:43:41 +02:00
Xawotihs
375e66489f Changed memory to be 16 MB 2017-09-03 23:55:43 +02:00
Xawotihs
cbbd034862 Removed chmod on binary 2017-09-03 14:44:45 +02:00
Xawotihs
f7fe948da5 Update psp sdk link, don't install theos for all mac builds 2017-09-03 14:21:15 +02:00
Xawotihs
478ce0863b Replace cmake installation script 2017-09-03 14:04:32 +02:00
Xawotihs
329011460f Update .travis.yml 2017-09-03 13:55:39 +02:00
xawotihs
48ec51a923 Shold fix travis script 2017-09-03 12:49:31 +02:00
xawotihs
9936962c56 Should fix cmake issues on linux 2017-09-03 12:44:30 +02:00
xawotihs
15111d1b20 Merge branch 'master' of https://github.com/WagicProject/wagic into cmake 2017-09-02 21:15:47 +02:00
Xawotihs
2b342ca33b Fixed typo 2016-07-05 23:57:53 +02:00
xawotihs
97e6df7f59 Should fix PSP artifact build and upload 2016-07-05 23:49:33 +02:00
xawotihs
a2bb67a828 Removed duplicate blacklist and added some cache 2016-07-04 23:21:34 +02:00
Xawotihs
d14e28d7b3 Should fix android package upload 2016-07-04 04:18:26 +02:00
xawotihs
0a0ee3cc98 Merge branch 'master' into cmake 2016-07-03 16:44:21 +02:00
Xawotihs
99e6a254e1 Update android package upload 2016-07-01 00:18:44 +02:00
Xawotihs
68714ebad8 Added android SDK tools to path 2016-06-30 23:08:56 +02:00
Xawotihs
48ef4144bc Update .travis.yml 2016-06-30 22:04:08 +02:00
Xawotihs
78a4da4945 Avoid rebuilding after targging 2016-06-30 22:01:17 +02:00
xawotihs
af0861877a Merge branch 'master' into cmake 2016-06-29 21:36:47 +02:00
xawotihs
a23b96ba75 Merge branch 'master' into cmake 2016-06-26 11:25:23 +02:00
Xawotihs
47704f7591 Changed git add cmd 2016-06-26 10:28:50 +02:00
Xawotihs
755f90f38b Updated repo cleanup 2016-06-25 22:53:18 +02:00
Xawotihs
8a56406c19 Added missing REPO variable 2016-06-25 21:03:43 +02:00
xawotihs
887ea94a4d Add execution right to the new script 2016-06-25 20:11:24 +02:00
xawotihs
499b3ddf3e Added a script to upload emscripten build automatically to gh_pages 2016-06-25 16:54:35 +02:00
xawotihs
83e55b1074 Merge branch 'cmake' of https://github.com/WagicProject/wagic into cmake 2016-06-25 11:50:54 +02:00
xawotihs
1f87ed77e4 Fixed windows package and but in SDL frontend 2016-06-25 11:50:07 +02:00
Xawotihs
93b7d210dc Should fix indentation issue 2016-06-24 19:32:32 +02:00
xawotihs
10d9d84f84 Fixed emscripten memory and updated python upload script to include cmake branch 2016-06-23 23:32:57 +02:00
xawotihs
fc9a4d5431 Removed redudant builds and removed -j4 to try to compile emscripten 2016-06-23 21:20:12 +02:00
Xawotihs
4b3a2531a6 Switched to debug emscripten build 2016-06-23 08:20:24 +02:00
Xawotihs
ed4871548e Decreased optimisation level to avoid crashes 2016-06-23 07:48:11 +02:00
xawotihs
1284b8da8b Should fix emscripten build in Travis 2016-06-22 22:19:09 +02:00
Xawotihs
95455603a1 Tries to build emscripten on linux as macosx fails 2016-06-21 23:45:37 +02:00
xawotihs
813c54a166 Removed GL_CLAMP usage, update of the Android cmake package file 2016-06-19 12:46:17 +02:00
xawotihs
fa2a2d51a5 Fixed Downloader. 2016-06-19 12:08:45 +02:00
xawotihs
4b68b636ce Merge branch 'master' into cmake 2016-06-19 11:39:56 +02:00
xawotihs
0a01b0af69 Tries to fix SDL and Qt builds, introduces Emscripten in Travis. 2016-06-19 10:25:22 +02:00
xawotihs
e4e809f3fe Emscripten seems to work, should also fix PSP and Qt builds 2016-06-19 00:41:35 +02:00
xawotihs
1667b79fa8 Improved Emscripten port... still not there yet. 2016-06-18 17:24:51 +02:00
Xawotihs
31272ff0fe Removed suspicious references to thirdparty libs 2016-06-11 14:29:48 +02:00
xawotihs
9335063d68 Should fix PSP build and Windows ZIP creation 2016-06-09 21:26:11 +02:00
xawotihs
39dfaf3acb Forgot this file 2016-06-08 23:47:53 +02:00
xawotihs
3e7ecd51fd Fixed windows SDL2 build, finished removing fmod dependency 2016-06-08 23:45:42 +02:00
xawotihs
c9ee4a304e Merge branch 'master' into cmake 2016-06-07 23:35:26 +02:00
xawotihs
2f1bf7bdbe Fixed iOS build 2016-06-07 23:31:42 +02:00
xawotihs
41890f6bb4 Removed main() function in zipFS 2016-06-07 22:49:59 +02:00
xawotihs
24cd7cab58 Merges iOS modifications with Windows modifications 2016-06-07 22:48:02 +02:00
xawotihs
473d9387d4 Removed references to fmod libs for Windows builds 2016-06-07 21:00:15 +02:00
Xawotihs
f5495adce1 Enable _DEBUG in debug only 2016-06-06 22:52:39 +02:00
Xawotihs
d802ec4b59 Fixed theos path 2016-06-04 22:05:04 +02:00
xawotihs
8f69e2a204 Should fix iOS build 2016-06-04 21:44:35 +02:00
xawotihs
c3fc579907 Pulled down update for SDL2 2016-05-29 18:01:51 +02:00
Xawotihs
cc06370bcd Update CMakeLists.txt 2015-11-24 00:14:48 +01:00
Xawotihs
ed15ec2469 Fixed issue in SDL2 replacement. 2015-11-23 10:15:47 +01:00
Xawotihs
3f7d5ff041 Decreased -j option for Android 2015-11-22 22:37:55 +01:00
Xawotihs
d5bcf40cbb Replaced SDL2 flavor when compiling for Android 2015-11-22 21:30:58 +01:00
ubuntu
49c196814f Couple of fixed around Android build with cmake. 2015-11-22 02:22:44 +01:00
Xawotihs
c4282ce936 Update android.toolchain.cmake 2015-11-21 14:02:06 +01:00
Xawotihs
cd1c09127f Removed dependencies on Boost on Android 2015-11-20 12:59:26 +01:00
xawotihs
9afebe0851 Removed sdl_main_android.cpp 2015-11-19 22:38:06 +01:00
Xawotihs
9a7382ea06 Added ANDROID_NDK variable for cmake toolchain 2015-11-18 23:57:55 +01:00
Xawotihs
7a7e723009 Fixed android cmake usage 2015-11-18 23:36:39 +01:00
Xawotihs
9d772284cc Removed any sudo actions on Android 2015-11-18 23:22:45 +01:00
Xawotihs
a981761deb Trying to activate android build in matrix 2015-11-18 22:59:17 +01:00
Xawotihs
fc13ffa242 Update appveyor.yml 2015-11-17 23:31:33 +01:00
Xawotihs
878b2cd639 Update FindOrBuild.cmake 2015-11-17 23:16:51 +01:00
Xawotihs
995922d2d7 Update appveyor.yml 2015-11-17 22:54:53 +01:00
Xawotihs
0d100aa9be Update appveyor.yml 2015-11-17 22:54:18 +01:00
Xawotihs
d4fabed317 Split android sdk update in 4 2015-11-17 22:01:54 +01:00
Xawotihs
9eff781103 Update travis-script.sh 2015-11-16 23:20:20 +01:00
Xawotihs
0353da3d27 Update travis-script.sh 2015-11-16 22:56:30 +01:00
xawotihs
3cbdc6e9fe Merge branch 'cmake' of https://github.com/WagicProject/wagic into cmake 2015-11-04 22:33:26 +01:00
xawotihs
ce71afd704 Tries to activate zlib compiling on mac 2015-11-04 22:32:49 +01:00
Xawotihs
603d491bed Without quotes 2015-11-03 23:06:14 +01:00
Xawotihs
20a792f135 Refering DXSDK and not windows SDK 2015-11-03 23:02:12 +01:00
xawotihs
87f5e7f3a6 Emscripten flavor now compiles correctly 2015-11-02 23:00:57 +01:00
xawotihs
e272925f3d Removed extra/stdint.h 2015-11-02 00:00:26 +01:00
xawotihs
19091ade7b Updated appveyor to use SDL2.0.3 release and not SDL head. 2015-11-01 23:51:07 +01:00
xawotihs
e62c065e2c Should fix git submodules 2015-11-01 23:34:03 +01:00
xawotihs
2312381b82 Updated git submodules 2015-11-01 23:26:03 +01:00
xawotihs
639942d444 Merge branch 'master' into cmake 2015-11-01 22:55:08 +01:00
xawotihs
55a5b9d0ba Now uses unofficial SDL mirror 2015-11-01 22:49:14 +01:00
Xawotihs
a33517e5d0 Added prefix variable so that QT5 is found with brew 2015-10-31 23:02:31 +01:00
Xawotihs
c981586bcf Moved apt-get of Qt into linux part 2015-10-31 21:45:36 +01:00
Xawotihs
b473238f02 Replaced all " 2015-10-31 21:02:29 +01:00
Xawotihs
1d9b92080f Missed on " 2015-10-31 20:56:23 +01:00
Xawotihs
7f89d4d39f Uses "" everywhere 2015-10-31 20:51:12 +01:00
Xawotihs
4f00ec2277 Added matrix subsection in env 2015-10-31 20:37:54 +01:00
Xawotihs
26db10a083 Removed empty lines 2015-10-31 20:32:18 +01:00
xawotihs
3ec2ceb725 Activate matrix and multi-os in travis 2015-10-31 20:15:47 +01:00
xawotihs
667ac39e06 Removed reference to x64 platform 2015-10-25 18:07:30 +01:00
xawotihs
993d62a8c8 Added checkout of modules 2015-10-25 17:59:40 +01:00
xawotihs
09a70d4573 Merge branch 'cmake' of https://github.com/WagicProject/wagic into cmake 2015-10-25 17:30:59 +01:00
xawotihs
3afa730751 Updated appveyor to use cmake 2015-10-25 17:29:33 +01:00
Xawotihs
3245ddbfe7 Reducing the -j parameter to try helping g++ internal compiler issues 2015-10-25 10:51:34 +01:00
xawotihs
def55943ed Activated building SDL2 directly from submodule on Unix as well 2015-10-25 10:18:21 +01:00
xawotihs
4accc9c018 Merge branch 'master' into cmake 2015-10-25 00:22:57 +02:00
xawotihs
579d612397 Worked on windows and emscripten builds, still not perfect. 2015-10-24 23:33:31 +02:00
Xawotihs
daabce1d2f Merge pull request #647 from ZobyTwo/opencv_leftovers
Remove some leftovers from OpenCV
2015-10-17 21:46:47 +02:00
Tobias Loose
5885829585 Remove some leftovers from OpenCV 2015-10-17 18:12:31 +02:00
xawotihs
3e7b9e68d5 Fixed compilation issue with Qt. 2015-10-13 23:32:56 +02:00
Xawotihs
4a52139457 Update g++ to 4.8 2015-10-13 23:04:58 +02:00
xawotihs
79ea403273 Commented out GLUT dependency 2015-10-11 15:54:32 +02:00
xawotihs
397d7fa6c8 Added build of SDL2 in UNIX config 2015-10-11 15:31:58 +02:00
xawotihs
ac787a6f51 Added SDL2DIR env variable. 2015-10-11 15:20:27 +02:00
xawotihs
0418e77d34 Removed tabs 2015-10-11 14:29:59 +02:00
xawotihs
a2c6a3669b Reactivated SDL2 download 2015-10-11 14:27:40 +02:00
xawotihs
b8d22240a8 Fixed typo 2015-10-11 14:21:09 +02:00
xawotihs
b458d570a1 Deactivated again Android build, added a SDL build 2015-10-11 14:15:43 +02:00
xawotihs
5022df0d14 Moved tgz unpackaging away from android SDK update. 2015-10-11 12:34:52 +02:00
xawotihs
220b48b144 Updated android SDK and build tools versions 2015-10-11 12:14:58 +02:00
xawotihs
8aeed46181 Reactivates android build 2015-10-11 11:54:40 +02:00
xawotihs
38b34eae2f Split macosx config from unix one. 2015-10-11 11:38:32 +02:00
xawotihs
648b21f972 Trying something else with new repositories 2015-10-11 10:38:40 +02:00
xawotihs
09717a966b Added install of cmake 3.3 on Travis. 2015-10-11 10:08:33 +02:00
xawotihs
eef46fe743 Revert previous change and just removed inline on the function 2015-10-10 18:41:43 +02:00
xawotihs
5f91566fa7 Move vrelptr implementation in header file so that it can be used outside of JGE lib 2015-10-10 18:35:33 +02:00
xawotihs
c83a476ebe Put SwizzlePlot in the WFont header. 2015-10-10 18:23:59 +02:00
xawotihs
954bba274c Tries to fix includes 2015-10-10 18:08:45 +02:00
xawotihs
d370a5c13d Fixed png include in JGE 2015-10-10 16:15:45 +02:00
xawotihs
181189bee0 Fixed boost include path 2015-10-10 16:05:34 +02:00
xawotihs
c678f5e85a Fixed vram 2015-10-10 15:32:01 +02:00
xawotihs
0fabf83c62 Fixed decoder_prx 2015-10-10 15:25:08 +02:00
xawotihs
b7e8d19290 Fix for travis build 2015-10-10 15:15:43 +02:00
Xawotihs
d0db71602a Deactive android build as travis does not like it those days 2015-10-10 14:51:40 +02:00
Xawotihs
112efddb4e Removed typo 2015-10-09 13:32:51 +02:00
Xawotihs
4cea81e564 Moved SDL2 download away from the Android SDK download 2015-10-09 07:56:44 +02:00
Xawotihs
3a40a34566 should fix script syntax 2015-10-08 23:33:17 +02:00
Xawotihs
a4ff87a7d5 Replaced libsdl2-dev dependency by a direct download 2015-10-08 23:29:47 +02:00
xawotihs
797077c47b Various fixes and activated cmake in travis. 2015-10-08 23:08:09 +02:00
xawotihs
075d950249 Got SDL2 version compiling on Mac. 2015-10-06 23:25:40 +02:00
xawotihs
22d14b2a4f - Updated SDL dependency to SDL2
- fixed compilation issues with cmake and visual studio 2015
2015-10-04 23:10:45 +02:00
xawotihs
4272e2e2b2 Activated zlib build only on windows 2015-09-28 19:39:26 +02:00
xawotihs
34279cfacf Additional work with cmake on Windows, still does not work 2015-09-27 23:23:31 +02:00
xawotihs
85f4a4c36a Started to merge @ZobyTwo cmake branch 2015-09-26 21:52:07 +02:00
3418 changed files with 272893 additions and 52403 deletions

12
.gitmodules vendored Normal file
View File

@@ -0,0 +1,12 @@
[submodule "thirdparty/zlib"]
path = thirdparty/zlib
url = https://github.com/madler/zlib
[submodule "thirdparty/SDL2"]
path = thirdparty/SDL2
url = https://github.com/libsdl-org/SDL
[submodule "docs/wiki"]
path = docs/wiki
url = https://github.com/WagicProject/wagic.wiki
[submodule "thirdparty/curl"]
path = thirdparty/curl
url = https://github.com/curl/curl.git

View File

@@ -1,73 +1,159 @@
language: cpp
dist: xenial
branches:
only:
- master
except:
- latest-master
- latest-cmake
matrix:
include:
- os: linux
env: BUILD_TYPE=PSP
sudo: required
- os: linux
env: BUILD_TYPE=SDL
sudo: required
- os: linux
env: BUILD_TYPE=Qt
sudo: required
- os: osx
env: BUILD_TYPE=Qt
- os: osx
env: BUILD_TYPE=iOS
- os: linux
language: android
env: BUILD_TYPE=ANDROID
sudo: required
- os: osx
env: BUILD_TYPE=Emscripten
android:
components:
- platform-tools
- build-tools-23.0.1
- android-10
cache:
directories:
- opt/pspsdk
- android-ndk-r9
before_install:
- export BUILD_PSP=YES
- export BUILD_ANDROID=YES
- export BUILD_Qt=YES
- export BUILD_MAC=NO
- echo -e "machine github.com\n login $GITHUB_TOKEN" > ~/.netrc
- git lfs pull
# Only building on Mac when not handling pull request
# - if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
# export BUILD_MAC=YES;
# fi
- sudo apt-get update -qq
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then
sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu trusty universe" &&
sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu trusty main" &&
sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/test &&
sudo apt-get -qq update &&
sudo apt-get -qq install g++-4.8 &&
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 90;
fi
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then
brew update &&
brew install dpkg &&
pwd &&
ls;
fi
- if [ "$BUILD_TYPE" == "iOS" ]; then
curl -s -f -L https://raw.github.com/r-plus/dotfiles/master/install_theos.sh | bash &&
pwd &&
ls;
fi
# Building for PSP here
- if [ "$BUILD_PSP" == "YES" ]; then
- if [ "$BUILD_TYPE" == "PSP" ]; then
export PSPDEV="$TRAVIS_BUILD_DIR/opt/pspsdk" &&
export PSPSDK="$PSPDEV/psp/sdk" &&
export PATH="$PATH:$PSPDEV/bin:$PSPSDK/bin" &&
wget --no-check-certificate -O sdk.lzma http://downloads.sourceforge.net/project/minpspw/SDK%20%2B%20devpak/pspsdk%200.11.2/minpspw_0.11.2-amd64.tar.lzma;
wget -O sdk.lzma https://sourceforge.net/projects/minpspw/files/SDK%20%2B%20devpak/pspsdk%200.11.2/minpspw_0.11.2-amd64.tar.lzma/download;
fi
# Building for Android here
- if [ "$BUILD_TYPE" == "ANDROID" ]; then
export ANDROID="/usr/local/android-sdk-linux/tools/android" &&
export PATH=$PATH:"/usr/local/android-sdk-linux/tools" &&
wget https://dl.google.com/android/repository/android-ndk-r22-linux-x86_64.zip -nv &&
wget https://bitbucket.org/ewing/sdl_androidcmake/get/4e9e88c03f04.zip -nv;
fi
# Building for Qt here
- if [ "$BUILD_Qt" == "YES" ]; then
- if [ "$BUILD_TYPE" == "Qt" ] && [ "$TRAVIS_OS_NAME" == "osx" ]; then
brew install qt5 &&
export QMAKE="qmake -qt=qt5";
fi
- if [ "$BUILD_TYPE" == "Qt" ] && [ "$TRAVIS_OS_NAME" == "linux" ]; then
sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu xenial universe" &&
sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu xenial main" &&
sudo apt-get -qq update &&
sudo apt-get -qq install qt5-qmake qtbase5-dev qtdeclarative5-dev qttools5-dev qtmultimedia5-dev libqt5opengl5 libqt5opengl5-dev pulseaudio libpulse-dev &&
export QMAKE="qmake -qt=qt5";
fi
# Building for Android here
- if [ "$BUILD_ANDROID" == "YES" ]; then
export ANDROID="android-sdk-linux/tools/android" &&
if [ `uname -m` = x86_64 ]; then
sudo dpkg --add-architecture i386 && sudo apt-get update &&
sudo apt-get install -qq --force-yes libgd2-xpm-dev libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 jq ant; fi &&
wget https://dl.google.com/android/repository/android-ndk-r22-linux-x86_64.zip -nv &&
wget http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz -nv;
# Building for SDL here
- if [ "$BUILD_TYPE" == "SDL" ]; then
export SDL2DIR="$TRAVIS_BUILD_DIR/thirdparty/SDL2";
fi
# Building for Emscripten here
- if [ "$BUILD_TYPE" == "Emscripten" ] && [ "$TRAVIS_OS_NAME" == "osx" ]; then
brew install emscripten && export LLVM=/usr/local/opt/emscripten/libexec/llvm/bin && emcc;
fi
install:
- if [ "$BUILD_PSP" == "YES" ]; then
tar -x --xz -f sdk.lzma;
fi
- if [ "$BUILD_ANDROID" == "YES" ]; then
unzip android-ndk-r22-linux-x86_64.zip &&
tar -zxf android-sdk_r24.4.1-linux.tgz &&
$ANDROID list sdk --extended -a &&
echo yes | $ANDROID update sdk -a -t tools,platform-tools,build-tools-23.0.1,android-23 --no-ui --force --no-https;
sudo apt-get install openjdk-8-jdk;
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64;
export PATH=$JAVA_HOME/bin:$PATH;
fi
- sudo pip install --upgrade pip
- sudo pip install setuptools-rust
- sudo pip install pyOpenSSL
- sudo pip install pyjavaproperties
- sudo pip install github3.py
- sudo pip install cpp-coveralls
before_script:
- export REQUESTS_CA_BUNDLE=/usr/local/lib/python2.7/dist-packages/certifi/cacert.pem
install:
- |
if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then
if [[ -z "$(ls -A ${DEPS_DIR}/cmake/bin)" ]]; then
CMAKE_URL="https://cmake.org/files/v3.7/cmake-3.7.2-Linux-x86_64.tar.gz"
mkdir -p cmake && travis_retry wget --no-check-certificate --quiet -O - "${CMAKE_URL}" | tar --strip-components=1 -xz -C cmake
fi
export PATH="${DEPS_DIR}/cmake/bin:${PATH}"
fi
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then
if ! brew ls --version cmake &>/dev/null; then brew install cmake; fi
fi
- if [ "$BUILD_TYPE" == "PSP" ]; then
tar -x --xz -f sdk.lzma;
fi
- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$BUILD_TYPE" == "ANDROID" ]; then
jdk_switcher use openjdk7 %%
tar --absolute-names -jxf android-ndk-r9-linux-x86_64.tar.bz2 &&
export ANDROID_NDK=`pwd`/android-ndk-r9 &&
unzip 4e9e88c03f04.zip &&
rm -rf thirdparty/SDL2/* &&
mv ewing-sdl_androidcmake-4e9e88c03f04/* thirdparty/SDL2/ &&
sudo pip install cpp-coveralls &&
sudo apt-get install --force-yes -qq libtinyxml-dev libjpeg-dev libpng-dev libgif-dev libz-dev libboost-system-dev libboost-thread-dev libboost-date-time-dev ant;
fi
- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$BUILD_TYPE" != "ANDROID" ]; then
jdk_switcher use openjdk7 &&
sudo pip install cpp-coveralls &&
sudo apt-get install --force-yes -qq libtinyxml-dev libjpeg-dev libpng-dev libgif-dev libz-dev libboost-system-dev libboost-thread-dev libboost-date-time-dev ant;
fi
- sudo pip install pyjavaproperties
- sudo pip install github3.py
env:
global:
# - JAVA_HOME=/usr/lib/jvm/java-7-oracle # Force set JVM version to comply with Travis Ant version (1.8.2)
- secure: "EBzr1+qjQsOhn0s+tcFmXR1jP9B0xiOSXuXbRXWZ1OEHNvp8+A5/pS84LYVFlaZqmxr5dApxvPtwhgLIUbQ3EPXm8LpC3KgSD4dS+9/QMbxhe5TK4oczgFRGcDTMJQZsCzhOh7hp3tbcbJg5Gp+VT7aFjFQSHDGwhzSJXsXwh/8="
- secure: "X5dTQfofqAutnXxmu11Ep2MQ5QYnMN8m0AITRtwymhEF2UclcOudI1+skPtuhAGbWQnSO+lhunV3cvMfw2/Ml3k/VDz6VdFSKFrzAu7ja1VLJfcxr7chi0s8q30pVBb66tGydjIBac3B+RQyqgmZQW1frbRrhC/kPFQ6wPWOJdQ="
- secure: "T97NUPnxCpVZ/c5HH0zfo0FO3DPSRMSmze58ubW5EUTZOjAMtEt+OFdsrNZvUTCugUj2M1agtonZbAbczpaAL+lgZcHDgXgWMkfO0pMnsWX1yyCNqMuE/iTMpJr/xsLQeyWlftWjJLsseQU45abZsd1XVmda/G+ZhrDLF1y55SA="
script: "tools/travis-script.sh"
after_success:
- coveralls -b . -e JGE/src -e JGE/include -i projects/mtg/include -i projects/mtg/src --gcov-options '\-lp'
- python tools/upload-binaries.py -t $GITHUB_TOKEN -s $TRAVIS_COMMIT -l core.zip -r Wagic-core.zip -b $TRAVIS_BRANCH
- python tools/upload-binaries.py -t $GH_TOKEN -s $TRAVIS_COMMIT -l projects/mtg/Android/bin/Wagic-debug.apk -r Wagic-android.apk -b $TRAVIS_BRANCH
- python tools/upload-binaries.py -t $GH_TOKEN -s $TRAVIS_COMMIT -l projects/mtg/psprelease.zip -r Wagic-psp.zip -b $TRAVIS_BRANCH
- python tools/upload-binaries.py -t $GITHUB_TOKEN -s $TRAVIS_COMMIT -l qt-gui-build/linuxqtrelease.zip -r Wagic-linux-QT.zip -b $TRAVIS_BRANCH
- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$BUILD_TYPE" == "Qt" ]; then
coveralls -b . -e JGE/src -e JGE/include -i projects/mtg/include -i projects/mtg/src --gcov-options '\-lp';
fi
- if [ "$BUILD_TYPE" == "ANDROID" ]; then
python tools/upload-binaries.py -t $GH_TOKEN -s $TRAVIS_COMMIT -l core.zip -r Wagic-core.zip -b $TRAVIS_BRANCH &&
python tools/upload-binaries.py -t $GH_TOKEN -s $TRAVIS_COMMIT -l build_android/package/bin/Wagic_*.apk -r Wagic-android.apk -b $TRAVIS_BRANCH;
fi
- if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$BUILD_TYPE" == "PSP" ]; then
python tools/upload-binaries.py -t $GH_TOKEN -s $TRAVIS_COMMIT -l build_psp/psprelease.zip -r Wagic-psp.zip -b $TRAVIS_BRANCH;
fi
- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$BUILD_TYPE" == "iOS" ]; then
python tools/upload-binaries.py -t $GH_TOKEN -s $TRAVIS_COMMIT -l net.wagic_0.19.2-1_iphoneos-arm.deb -r Wagic-iOS.deb -b $TRAVIS_BRANCH;
fi
- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$BUILD_TYPE" == "Qt" ]; then
python tools/upload-binaries.py -t $GH_TOKEN -s $TRAVIS_COMMIT -l build_qt_widget/wagic.dmg -r Wagic-macosx.dmg -b $TRAVIS_BRANCH;
fi
- if [ "$TRAVIS_OS_NAME" == "osx" ] && [ "$BUILD_TYPE" == "Emscripten" ]; then
./tools/deploy-emscripten.sh;
fi

242
CMakeLists.txt Normal file
View File

@@ -0,0 +1,242 @@
cmake_minimum_required(VERSION 4.0)
if(CMAKE_MAJOR_VERSION STRGREATER 3)
cmake_policy(SET CMP0054 NEW)
endif()
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/CMakeModules)
#this block will fix install prefixes to install everything in a subdirectory
#of cmake_binary_dir if we are on windows/android to make packaging more easy
if(NOT CMAKE_TOOLCHAIN_FILE)
if(WIN32)
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Install directory")
else()
set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Install directory")
endif()
else() #we are cross-compiling (psp/android)
#Android: set output folder for platform/android to pick up
set(LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_BINARY_DIR} CACHE PATH "library output root")
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Install directory")
endif()
#set available build types (debug/release)
set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE)
if(DEFINED CMAKE_BUILD_TYPE)
set_property( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES} )
endif()
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin" CACHE PATH "Application output directory")
project(wagic CXX C)
#todo: somehow determine wagics version
set(WAGIC_VERSION "0.19")
#add standard paths to search for libraries. borrowed from opencv
if(UNIX AND NOT ANDROID)
if(X86_64 OR CMAKE_SIZEOF_VOID_P EQUAL 8)
if(EXISTS /lib64)
list(APPEND CMAKE_LIBRARY_PATH /lib64)
else()
list(APPEND CMAKE_LIBRARY_PATH /lib)
endif()
if(EXISTS /usr/lib64)
list(APPEND CMAKE_LIBRARY_PATH /usr/lib64)
else()
list(APPEND CMAKE_LIBRARY_PATH /usr/lib)
endif()
elseif(X86 OR CMAKE_SIZEOF_VOID_P EQUAL 4)
if(EXISTS /lib32)
list(APPEND CMAKE_LIBRARY_PATH /lib32)
else()
list(APPEND CMAKE_LIBRARY_PATH /lib)
endif()
if(EXISTS /usr/lib32)
list(APPEND CMAKE_LIBRARY_PATH /usr/lib32)
else()
list(APPEND CMAKE_LIBRARY_PATH /usr/lib)
endif()
endif()
endif()
if(ANDROID OR PSP OR IOS)
#to allow finding of pathes/headers/libs within the source tree
#even if only search for target platform libs
set(CMAKE_FIND_ROOT_PATH ${CMAKE_SOURCE_DIR} ${CMAKE_FIND_ROOT_PATH})
endif()
#also borrowed from opencv
if(MINGW)
if(EXISTS /mingw)
list(APPEND CMAKE_INCLUDE_PATH /mingw)
endif()
if(EXISTS /mingw32)
list(APPEND CMAKE_INCLUDE_PATH /mingw32)
endif()
if(EXISTS /mingw64)
list(APPEND CMAKE_INCLUDE_PATH /mingw64)
endif()
endif()
include(utils)
#select the target backend
if(PSP)
WAGIC_OPTION(backend_psp "build for psp" ON)
endif()
if(WIN32 OR ANDROID OR UNIX)
WAGIC_OPTION(backend_sdl "build for sdl" (WIN32 OR ANDROID OR EMSCRIPTEN))
endif()
if(NOT backend_sdl AND UNIX AND NOT ANDROID AND NOT IOS)
WAGIC_OPTION(backend_qt_console "build qt-console version with testsuit" ON)
WAGIC_OPTION(backend_qt_widget "build qt-widget version" OFF)
endif()
#third party build options
WAGIC_OPTION(BUILD_ZLIB "build zlib from source" ((NOT MINGW) AND (WIN32 OR APPLE)))
WAGIC_OPTION(BUILD_JPEG "build jpeg from source" (WIN32 OR APPLE OR PSP OR ANDROID OR EMSCRIPTEN))
WAGIC_OPTION(BUILD_PNG "build png from source" (WIN32 OR APPLE OR PSP OR ANDROID OR EMSCRIPTEN))
WAGIC_OPTION(BUILD_UNZIP "build unzip from source" ON)
WAGIC_OPTION(BUILD_TINYXML "build tinyxml from source" (WIN32 OR APPLE OR PSP OR ANDROID OR EMSCRIPTEN OR IOS))
WAGIC_OPTION(BUILD_ZIPFS "build zipfs from source" ON)
WAGIC_OPTION(BUILD_SDL2 "build SDL2 from source" (backend_sdl AND (UNIX OR WIN32 OR ANDROID) AND (NOT EMSCRIPTEN AND NOT IOS)))
#WAGIC_OPTION(BUILD_CURL "build curl from source" (backend_sdl AND WIN32))
#project options
if(ANDROID)
WAGIC_OPTION(BUILD_ANDROID_PACKAGE "put the compiled code in an android package" ON)
endif()
if(ANDROID)
set(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/lib/${ANDROID_NDK_ABI_NAME}")
set(3P_LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/3rdparty/lib/${ANDROID_NDK_ABI_NAME}")
set(WAGIC_LIB_INSTALL_PATH sdk/native/libs/${ANDROID_NDK_ABI_NAME})
set(WAGIC_3P_LIB_INSTALL_PATH sdk/native/3rdparty/libs/${ANDROID_NDK_ABI_NAME})
set(WAGIC_CONFIG_INSTALL_PATH sdk/native/jni)
set(WAGIC_INCLUDE_INSTALL_PATH sdk/native/jni/include)
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/package/bin")
else()
set(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/lib")
set(3P_LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/3rdparty/lib${LIB_SUFFIX}")
set(WAGIC_LIB_INSTALL_PATH lib${LIB_SUFFIX})
set(WAGIC_3P_LIB_INSTALL_PATH share/wagic/3rdparty/${WAGIC_LIB_INSTALL_PATH})
set(WAGIC_INCLUDE_INSTALL_PATH "include")
set(WAGIC_CONFIG_INSTALL_PATH share/wagic)
endif()
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${WAGIC_LIB_INSTALL_PATH}")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
#if no build type is specified, we assume debug
if(CMAKE_GENERATOR MATCHES "Makefiles|Ninja" AND "${CMAKE_BUILD_TYPE}" STREQUAL "")
set(CMAKE_BUILD_TYPE Debug)
endif()
include(FindOrBuild)
#set platform dependend configurations
if(PSP)
FindOrBuildPSPSDK()
include(platforms/psp/configure.cmake)
elseif(EMSCRIPTEN)
include(platforms/emscripten/configure.cmake)
elseif(WIN32)
include(platforms/win/configure.cmake)
elseif(APPLE)
include(platforms/macosx/configure.cmake)
elseif(UNIX AND NOT ANDROID)
include(platforms/unix/configure.cmake)
elseif(ANDROID)
include(platforms/android/configure.cmake)
endif()
#set backend dependend configurations
if(backend_qt_console OR backend_qt_widget)
add_definitions(-DQT_CONFIG)
if(backend_qt_console)
add_definitions(-DTESTSUITE -D_DEBUG)
add_definitions(-DCONSOLE_CONFIG -DCAPTURE_STDERR)
endif()
elseif(backend_sdl)
add_definitions(-DSDL_CONFIG)
endif()
# find or build 3rd party libraries
FindOrBuildZLIB()
FindOrBuildOpenGL()
FindOrBuildTinyXML()
FindOrBuildZipFS()
FindOrBuildUNZIP()
FindOrBuildPNG()
FindOrBuildJPEG()
FindOrBuildBoost()
#FindOrBuildCurl()
if(PSP)
FindOrBuildGIF()
endif()
if(ANDROID)
FindOrBuildOpenSL()
endif()
if(backend_sdl)
FindOrBuildSDL2()
endif()
if(backend_psp)
FindOrBuildFreetype()
FindOrBuildHgeTools()
FindOrBuildMikMod()
endif()
if(backend_qt_console OR backend_qt_widget)
FindOrBuildQt()
endif()
if(ANDROID)
include(DetectAndroidSDK)
endif()
if(BUILD_ANDROID_PACKAGE)
find_package(Ant REQUIRED)
endif()
#add jge and mtg projects
add_subdirectory(JGE)
add_subdirectory(projects/mtg)
if(BUILD_ANDROID_PACKAGE)
add_subdirectory(platforms/android/package)
endif()
if(EMSCRIPTEN)
set(CMAKE_EXECUTABLE_SUFFIX ".html")
endif()
if(IOS)
list_add_prefix(JGE_SOURCES " JGE/")
list_add_prefix(MTG_generic_src " projects/mtg/")
list_add_prefix(JGE_INCLUDE_DIRS " -IJGE/")
list_add_prefix(MTG_INCLUDE_DIRS " -Iprojects/mtg/")
list_add_prefix(TINYXML_SRC " thirdparty/tinyxml/")
list_add_prefix(UNZIP_SRC " thirdparty/unzip/")
list_add_prefix(ZIPFS_SRC " thirdparty/zipFS/")
file(WRITE makefile.ios
"ARCHS= armv7 armv7s \n"
"include ${THEOS_PATH}/makefiles/common.mk\n"
"TARGET= iphone:clang:latest:8.0 \n"
"APPLICATION_NAME = " ${PROJECT_NAME} "\n"
${PROJECT_NAME} "_FILES =" ${ZIPFS_SRC} ${UNZIP_SRC} ${TINYXML_SRC} ${JGE_SOURCES} ${MTG_generic_src} " thirdparty/Boost/lib/pthread/once.cpp thirdparty/Boost/lib/pthread/thread.cpp\n"
${PROJECT_NAME} "_LDFLAGS = -lz\n"
${PROJECT_NAME} "_FRAMEWORKS = UIKit CoreGraphics OpenGLES Foundation CFNetwork MobileCoreServices AVFoundation OpenAL AudioToolbox QuartzCore SystemConfiguration\n"
"include ${THEOS_PATH}/makefiles/application.mk\n"
"ADDITIONAL_CFLAGS = " ${MTG_INCLUDE_DIRS} ${JGE_INCLUDE_DIRS} " -I" ${ZIPFS_INCLUDE_DIR} " -I" ${UNZIP_INCLUDE_DIR} " -I" ${HGE_INCLUDE_DIR} ${TINYXML_INCLUDE_DIR} " -I" ${ZLIB_INCLUDE_DIRS} ${BOOST_INCLUDE_DIRS} " "
"-DIOS -D__arm__ -DTIXML_USE_STL -DVERSION=\"$(GIT_VERSION)\" "
"-Wno-parentheses-equality -Wno-delete-non-virtual-dtor "
"-Wno-tautological-undefined-compare -Wno-undefined-bool-conversion "
"-Wno-visibility -Wno-deprecated-declarations -Wno-non-literal-null-conversion "
"-Wno-format -Wno-distributed-object-modifiers -Wno-missing-braces -Wno-uninitialized "
"-Wno-unused-const-variable -Wno-unused-function -Wno-unknown-warning-option -Wno-unused-local-typedef "
"-x objective-c++ \n"
"_THEOS_TARGET_ONLY_OBJCFLAGS :=\"\"\n"
)
endif()

View File

@@ -0,0 +1,373 @@
if(EXISTS "${ANDROID_EXECUTABLE}")
set(ANDROID_SDK_DETECT_QUIET TRUE)
endif()
file(TO_CMAKE_PATH "$ENV{ProgramFiles}" ProgramFiles_ENV_PATH)
file(TO_CMAKE_PATH "$ENV{HOME}" HOME_ENV_PATH)
if(CMAKE_HOST_WIN32)
set(ANDROID_SDK_OS windows)
elseif(CMAKE_HOST_APPLE)
set(ANDROID_SDK_OS macosx)
else()
set(ANDROID_SDK_OS linux)
endif()
#find android SDK: search in ANDROID_SDK first
find_host_program(ANDROID_EXECUTABLE
NAMES android.bat android
PATH_SUFFIXES tools
PATHS
ENV ANDROID_SDK
DOC "Android SDK location"
NO_DEFAULT_PATH
)
# Now search default paths
find_host_program(ANDROID_EXECUTABLE
NAMES android.bat android
PATH_SUFFIXES android-sdk-${ANDROID_SDK_OS}/tools
android-sdk-${ANDROID_SDK_OS}_x86/tools
android-sdk-${ANDROID_SDK_OS}_86/tools
android-sdk/tools
PATHS /opt
"${HOME_ENV_PATH}/NVPACK"
"$ENV{SystemDrive}/NVPACK"
"${ProgramFiles_ENV_PATH}/Android"
DOC "Android SDK location"
)
if(ANDROID_EXECUTABLE)
if(NOT ANDROID_SDK_DETECT_QUIET)
message(STATUS "Found android tool: ${ANDROID_EXECUTABLE}")
endif()
get_filename_component(ANDROID_SDK_TOOLS_PATH "${ANDROID_EXECUTABLE}" PATH)
#read source.properties
if(EXISTS "${ANDROID_SDK_TOOLS_PATH}/source.properties")
file(STRINGS "${ANDROID_SDK_TOOLS_PATH}/source.properties" ANDROID_SDK_TOOLS_SOURCE_PROPERTIES_LINES REGEX "^[ ]*[^#].*$")
foreach(line ${ANDROID_SDK_TOOLS_SOURCE_PROPERTIES_LINES})
string(REPLACE "\\:" ":" line ${line})
string(REPLACE "=" ";" line ${line})
list(GET line 0 line_name)
list(GET line 1 line_value)
string(REPLACE "." "_" line_name ${line_name})
SET(ANDROID_TOOLS_${line_name} "${line_value}" CACHE INTERNAL "from ${ANDROID_SDK_TOOLS_PATH}/source.properties")
MARK_AS_ADVANCED(ANDROID_TOOLS_${line_name})
endforeach()
endif()
#fix missing revision (SDK tools before r9 don't set revision number correctly)
if(NOT ANDROID_TOOLS_Pkg_Revision)
SET(ANDROID_TOOLS_Pkg_Revision "Unknown" CACHE INTERNAL "")
MARK_AS_ADVANCED(ANDROID_TOOLS_Pkg_Revision)
endif()
#fix missing description
if(NOT ANDROID_TOOLS_Pkg_Desc)
SET(ANDROID_TOOLS_Pkg_Desc "Android SDK Tools, revision ${ANDROID_TOOLS_Pkg_Revision}." CACHE INTERNAL "")
MARK_AS_ADVANCED(ANDROID_TOOLS_Pkg_Desc)
endif()
#warn about outdated SDK
if(NOT ANDROID_TOOLS_Pkg_Revision GREATER 13)
SET(ANDROID_TOOLS_Pkg_Desc "${ANDROID_TOOLS_Pkg_Desc} It is recommended to update your SDK tools to revision 14 or newer." CACHE INTERNAL "")
endif()
if(ANDROID_TOOLS_Pkg_Revision GREATER 13)
SET(ANDROID_PROJECT_PROPERTIES_FILE project.properties)
SET(ANDROID_ANT_PROPERTIES_FILE ant.properties)
else()
SET(ANDROID_PROJECT_PROPERTIES_FILE default.properties)
SET(ANDROID_ANT_PROPERTIES_FILE build.properties)
endif()
set(ANDROID_MANIFEST_FILE AndroidManifest.xml)
set(ANDROID_LIB_PROJECT_FILES build.xml local.properties proguard-project.txt ${ANDROID_PROJECT_PROPERTIES_FILE})
set(ANDROID_PROJECT_FILES ${ANDROID_LIB_PROJECT_FILES})
#get installed targets
if(ANDROID_TOOLS_Pkg_Revision GREATER 11)
execute_process(COMMAND ${ANDROID_EXECUTABLE} list target -c
RESULT_VARIABLE ANDROID_PROCESS
OUTPUT_VARIABLE ANDROID_SDK_TARGETS
ERROR_VARIABLE ANDROID_PROCESS_ERRORS
OUTPUT_STRIP_TRAILING_WHITESPACE
)
string(REGEX MATCHALL "[^\n]+" ANDROID_SDK_TARGETS "${ANDROID_SDK_TARGETS}")
else()
#old SDKs (r11 and older) don't provide compact list
execute_process(COMMAND ${ANDROID_EXECUTABLE} list target
RESULT_VARIABLE ANDROID_PROCESS
OUTPUT_VARIABLE ANDROID_SDK_TARGETS_FULL
ERROR_VARIABLE ANDROID_PROCESS_ERRORS
OUTPUT_STRIP_TRAILING_WHITESPACE
)
string(REGEX MATCHALL "(^|\n)id: [0-9]+ or \"([^\n]+[0-9+])\"(\n|$)" ANDROID_SDK_TARGETS_FULL "${ANDROID_SDK_TARGETS_FULL}")
SET(ANDROID_SDK_TARGETS "")
if(ANDROID_PROCESS EQUAL 0)
foreach(line ${ANDROID_SDK_TARGETS_FULL})
string(REGEX REPLACE "(^|\n)id: [0-9]+ or \"([^\n]+[0-9+])\"(\n|$)" "\\2" line "${line}")
list(APPEND ANDROID_SDK_TARGETS "${line}")
endforeach()
endif()
endif()
if(NOT ANDROID_PROCESS EQUAL 0)
message(ERROR "Failed to get list of installed Android targets.")
set(ANDROID_EXECUTABLE "ANDROID_EXECUTABLE-NOTFOUND")
endif()
# clear ANDROID_SDK_TARGET if no target is provided by user
if(NOT ANDROID_SDK_TARGET)
set(ANDROID_SDK_TARGET "" CACHE STRING "Android SDK target for the Wagic Java API and samples")
endif()
if(ANDROID_SDK_TARGETS)
set_property( CACHE ANDROID_SDK_TARGET PROPERTY STRINGS ${ANDROID_SDK_TARGETS} )
endif()
endif(ANDROID_EXECUTABLE)
# finds minimal installed SDK target compatible with provided names or API levels
# usage:
# get_compatible_android_api_level(VARIABLE [level1] [level2] ...)
macro(android_get_compatible_target VAR)
set(${VAR} "${VAR}-NOTFOUND")
if(ANDROID_SDK_TARGETS)
list(GET ANDROID_SDK_TARGETS 0 __lvl)
string(REGEX MATCH "[0-9]+$" __lvl "${__lvl}")
#find minimal level mathing to all provided levels
foreach(lvl ${ARGN})
string(REGEX MATCH "[0-9]+$" __level "${lvl}")
if(__level GREATER __lvl)
set(__lvl ${__level})
endif()
endforeach()
#search for compatible levels
foreach(lvl ${ANDROID_SDK_TARGETS})
string(REGEX MATCH "[0-9]+$" __level "${lvl}")
if(__level EQUAL __lvl)
#look for exact match
foreach(usrlvl ${ARGN})
if("${usrlvl}" STREQUAL "${lvl}")
set(${VAR} "${lvl}")
break()
endif()
endforeach()
if("${${VAR}}" STREQUAL "${lvl}")
break() #exact match was found
elseif(NOT ${VAR})
set(${VAR} "${lvl}")
endif()
elseif(__level GREATER __lvl)
if(NOT ${VAR})
set(${VAR} "${lvl}")
endif()
break()
endif()
endforeach()
unset(__lvl)
unset(__level)
endif()
endmacro()
unset(__android_project_chain CACHE)
# add_android_project(target_name ${path} NATIVE_DEPS opencv_core LIBRARY_DEPS ${Wagic_BINARY_DIR} SDK_TARGET 11)
macro(add_android_project target path)
# parse arguments
set(android_proj_arglist NATIVE_DEPS LIBRARY_DEPS SDK_TARGET IGNORE_JAVA IGNORE_MANIFEST)
set(__varname "android_proj_")
foreach(v ${android_proj_arglist})
set(${__varname}${v} "")
endforeach()
foreach(arg ${ARGN})
set(__var "${__varname}")
foreach(v ${android_proj_arglist})
if("${v}" STREQUAL "${arg}")
set(__varname "android_proj_${v}")
break()
endif()
endforeach()
if(__var STREQUAL __varname)
list(APPEND ${__var} "${arg}")
endif()
endforeach()
# get compatible SDK target
android_get_compatible_target(android_proj_sdk_target ${ANDROID_NATIVE_API_LEVEL} ${android_proj_SDK_TARGET})
if(NOT android_proj_sdk_target)
message(WARNING "Can not find any SDK target compatible with: ${ANDROID_NATIVE_API_LEVEL} ${android_proj_SDK_TARGET}
The project ${target} will not be build")
endif()
# check native dependencies
if(android_proj_IGNORE_JAVA)
ocv_check_dependencies(${android_proj_NATIVE_DEPS})
else()
ocv_check_dependencies(${android_proj_NATIVE_DEPS} opencv_java)
endif()
if(EXISTS "${path}/jni/Android.mk" )
# find if native_app_glue is used
file(STRINGS "${path}/jni/Android.mk" NATIVE_APP_GLUE REGEX ".*(call import-module,android/native_app_glue)" )
if(NATIVE_APP_GLUE)
if(ANDROID_NATIVE_API_LEVEL LESS 9 OR NOT EXISTS "${ANDROID_NDK}/sources/android/native_app_glue")
set(OCV_DEPENDENCIES_FOUND FALSE)
endif()
endif()
endif()
if(OCV_DEPENDENCIES_FOUND AND android_proj_sdk_target AND ANDROID_EXECUTABLE AND ANT_EXECUTABLE AND ANDROID_TOOLS_Pkg_Revision GREATER 13 AND EXISTS "${path}/${ANDROID_MANIFEST_FILE}")
project(${target})
set(android_proj_bin_dir "${CMAKE_CURRENT_BINARY_DIR}/.build")
# get project sources
file(GLOB_RECURSE android_proj_files RELATIVE "${path}" "${path}/res/*" "${path}/src/*")
if(NOT android_proj_IGNORE_MANIFEST)
list(APPEND android_proj_files ${ANDROID_MANIFEST_FILE})
endif()
# copy sources out from the build tree
set(android_proj_file_deps "")
foreach(f ${android_proj_files})
add_custom_command(
OUTPUT "${android_proj_bin_dir}/${f}"
COMMAND ${CMAKE_COMMAND} -E copy "${path}/${f}" "${android_proj_bin_dir}/${f}"
MAIN_DEPENDENCY "${path}/${f}"
COMMENT "Copying ${f}")
list(APPEND android_proj_file_deps "${path}/${f}" "${android_proj_bin_dir}/${f}")
endforeach()
set(android_proj_lib_deps_commands "")
set(android_proj_target_files ${ANDROID_PROJECT_FILES})
ocv_list_add_prefix(android_proj_target_files "${android_proj_bin_dir}/")
# process Android library dependencies
foreach(dep ${android_proj_LIBRARY_DEPS})
file(RELATIVE_PATH __dep "${android_proj_bin_dir}" "${dep}")
list(APPEND android_proj_lib_deps_commands
COMMAND ${ANDROID_EXECUTABLE} --silent update project --path "${android_proj_bin_dir}" --library "${__dep}")
endforeach()
# fix Android project
add_custom_command(
OUTPUT ${android_proj_target_files}
COMMAND ${CMAKE_COMMAND} -E remove ${android_proj_target_files}
COMMAND ${ANDROID_EXECUTABLE} --silent update project --path "${android_proj_bin_dir}" --target "${android_proj_sdk_target}" --name "${target}"
${android_proj_lib_deps_commands}
MAIN_DEPENDENCY "${android_proj_bin_dir}/${ANDROID_MANIFEST_FILE}"
DEPENDS "${path}/${ANDROID_MANIFEST_FILE}"
COMMENT "Updating Android project at ${path}. SDK target: ${android_proj_sdk_target}"
)
list(APPEND android_proj_file_deps ${android_proj_target_files})
# build native part
file(GLOB_RECURSE android_proj_jni_files "${path}/jni/*.c" "${path}/jni/*.h" "${path}/jni/*.cpp" "${path}/jni/*.hpp")
ocv_list_filterout(android_proj_jni_files "\\\\.svn")
if(android_proj_jni_files AND EXISTS ${path}/jni/Android.mk AND NOT DEFINED JNI_LIB_NAME)
# find local module name in Android.mk file to build native lib
file(STRINGS "${path}/jni/Android.mk" JNI_LIB_NAME REGEX "LOCAL_MODULE[ ]*:=[ ]*.*" )
string(REGEX REPLACE "LOCAL_MODULE[ ]*:=[ ]*([a-zA-Z_][a-zA-Z_0-9]*)[ ]*" "\\1" JNI_LIB_NAME "${JNI_LIB_NAME}")
if(JNI_LIB_NAME)
ocv_include_modules_recurse(${android_proj_NATIVE_DEPS})
ocv_include_directories("${path}/jni")
if(NATIVE_APP_GLUE)
include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
list(APPEND android_proj_jni_files ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)
ocv_warnings_disable(CMAKE_C_FLAGS -Wstrict-prototypes -Wunused-parameter -Wmissing-prototypes)
set(android_proj_NATIVE_DEPS ${android_proj_NATIVE_DEPS} android)
endif()
add_library(${JNI_LIB_NAME} MODULE ${android_proj_jni_files})
target_link_libraries(${JNI_LIB_NAME} ${OPENCV_LINKER_LIBS} ${android_proj_NATIVE_DEPS})
set_target_properties(${JNI_LIB_NAME} PROPERTIES
OUTPUT_NAME "${JNI_LIB_NAME}"
LIBRARY_OUTPUT_DIRECTORY "${android_proj_bin_dir}/libs/${ANDROID_NDK_ABI_NAME}"
)
get_target_property(android_proj_jni_location "${JNI_LIB_NAME}" LOCATION)
if (NOT (CMAKE_BUILD_TYPE MATCHES "debug"))
add_custom_command(TARGET ${JNI_LIB_NAME} POST_BUILD COMMAND ${CMAKE_STRIP} --strip-unneeded "${android_proj_jni_location}")
endif()
endif()
endif()
# build java part
if(android_proj_IGNORE_JAVA)
add_custom_command(
OUTPUT "${android_proj_bin_dir}/bin/${target}-debug.apk"
COMMAND ${ANT_EXECUTABLE} -q -noinput -k debug
COMMAND ${CMAKE_COMMAND} -E touch "${android_proj_bin_dir}/bin/${target}-debug.apk" # needed because ant does not update the timestamp of updated apk
WORKING_DIRECTORY "${android_proj_bin_dir}"
MAIN_DEPENDENCY "${android_proj_bin_dir}/${ANDROID_MANIFEST_FILE}"
DEPENDS ${android_proj_file_deps} ${JNI_LIB_NAME})
else()
add_custom_command(
OUTPUT "${android_proj_bin_dir}/bin/${target}-debug.apk"
COMMAND ${ANT_EXECUTABLE} -q -noinput -k debug
COMMAND ${CMAKE_COMMAND} -E touch "${android_proj_bin_dir}/bin/${target}-debug.apk" # needed because ant does not update the timestamp of updated apk
WORKING_DIRECTORY "${android_proj_bin_dir}"
MAIN_DEPENDENCY "${android_proj_bin_dir}/${ANDROID_MANIFEST_FILE}"
DEPENDS "${Wagic_BINARY_DIR}/bin/classes.jar.dephelper" opencv_java # as we are part of Wagic we can just force this dependency
DEPENDS ${android_proj_file_deps} ${JNI_LIB_NAME})
endif()
unset(JNI_LIB_NAME)
add_custom_target(${target} ALL SOURCES "${android_proj_bin_dir}/bin/${target}-debug.apk" )
if(NOT android_proj_IGNORE_JAVA)
add_dependencies(${target} opencv_java)
endif()
if(android_proj_native_deps)
add_dependencies(${target} ${android_proj_native_deps})
endif()
if(__android_project_chain)
add_dependencies(${target} ${__android_project_chain})
endif()
set(__android_project_chain ${target} CACHE INTERNAL "auxiliary variable used for Android progects chaining")
# put the final .apk to the Wagic's bin folder
add_custom_command(TARGET ${target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "${android_proj_bin_dir}/bin/${target}-debug.apk" "${Wagic_BINARY_DIR}/bin/${target}.apk")
if(INSTALL_ANDROID_EXAMPLES AND "${target}" MATCHES "^example-")
#apk
install(FILES "${Wagic_BINARY_DIR}/bin/${target}.apk" DESTINATION "samples" COMPONENT main)
get_filename_component(sample_dir "${path}" NAME)
#java part
list(REMOVE_ITEM android_proj_files ${ANDROID_MANIFEST_FILE})
foreach(f ${android_proj_files} ${ANDROID_MANIFEST_FILE})
get_filename_component(install_subdir "${f}" PATH)
install(FILES "${android_proj_bin_dir}/${f}" DESTINATION "samples/${sample_dir}/${install_subdir}" COMPONENT main)
endforeach()
#jni part + eclipse files
file(GLOB_RECURSE jni_files RELATIVE "${path}" "${path}/jni/*" "${path}/.cproject")
ocv_list_filterout(jni_files "\\\\.svn")
foreach(f ${jni_files} ".classpath" ".project" ".settings/org.eclipse.jdt.core.prefs")
get_filename_component(install_subdir "${f}" PATH)
install(FILES "${path}/${f}" DESTINATION "samples/${sample_dir}/${install_subdir}" COMPONENT main)
endforeach()
#update proj
if(android_proj_lib_deps_commands)
set(inst_lib_opt " --library ../../sdk/java")
endif()
install(CODE "EXECUTE_PROCESS(COMMAND ${ANDROID_EXECUTABLE} --silent update project --path . --target \"${android_proj_sdk_target}\" --name \"${target}\" ${inst_lib_opt}
WORKING_DIRECTORY \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/samples/${sample_dir}\"
)" COMPONENT main)
#empty 'gen'
install(CODE "MAKE_DIRECTORY(\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/samples/${sample_dir}/gen\")" COMPONENT main)
endif()
endif()
endmacro()

View File

@@ -0,0 +1,13 @@
find_host_program(ANT_EXECUTABLE "ant")
if(ANT_EXECUTABLE)
set(ANT_FOUND ON)
else()
set(ANT_FOUND OFF)
endif()
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(ANT REQUIRED_VARS ANT_EXECUTABLE)
mark_as_advanced(ANT_EXECUTABLE ANT_FOUND)

View File

@@ -0,0 +1,29 @@
# - Find OpenSL (actually OpenSLES)
# Find the OpenSLES includes and libraries
#
# OPENSL_INCLUDE_DIR - where to find dsound.h
# OPENSL_LIBRARIES - List of libraries when using dsound.
# OPENSL_FOUND - True if dsound found.
if(OPENSL_INCLUDE_DIR)
# Already in cache, be silent
set(OPENSL_FIND_QUIETLY TRUE)
endif(OPENSL_INCLUDE_DIR)
find_path(OPENSL_INCLUDE_DIR SLES/OpenSLES.h)
find_library(OPENSL_LIBRARY NAMES OpenSLES)
# Handle the QUIETLY and REQUIRED arguments and set OPENSL_FOUND to TRUE if
# all listed variables are TRUE.
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(OPENSL DEFAULT_MSG
OPENSL_INCLUDE_DIR OPENSL_LIBRARY)
if(OPENSL_FOUND)
set(OPENSL_LIBRARIES ${OPENSL_LIBRARY})
else(OPENSL_FOUND)
set(OPENSL_LIBRARIES)
endif(OPENSL_FOUND)
mark_as_advanced(OPENSL_INCLUDE_DIR OPENSL_LIBRARY)

View File

@@ -0,0 +1,267 @@
macro(FindOrBuildZipFS)
if(BUILD_ZIPFS)
add_subdirectory(
${CMAKE_SOURCE_DIR}/thirdparty/zipFS
${CMAKE_BINARY_DIR}/thirdparty/zipFS)
set(ZIPFS_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/thirdparty/zipFS)
set(ZIPFS_LIBRARY zipFS)
else()
message(WARNING "ZIPFS must get build")
endif()
endmacro()
macro(FindOrBuildTinyXML)
if(BUILD_TINYXML)
add_definitions(-DTIXML_USE_STL)
add_subdirectory(
${CMAKE_SOURCE_DIR}/thirdparty/tinyxml
${CMAKE_BINARY_DIR}/thirdparty/tinyxml)
set(TINYXML_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/thirdparty/tinyxml)
set(TINYXML_LIBRARIES tinyxml)
else()
find_package(TinyXML REQUIRED)
endif()
endmacro()
macro(FindOrBuildSDL2)
if(BUILD_SDL2)
if(WIN32)
#SDL2 DirectX build is somehow broken...
set(SDL_AUDIO FALSE)
set(SDL_JOYSTICK FALSE)
set(SDL_HAPTIC FALSE)
# Forcing static build on Windows as SDL2main is often needed and easier to link statically.
# Set SDL_SHARED to OFF *before* adding the subdirectory to influence its build.
set(SDL_SHARED OFF CACHE BOOL "Build SDL2 as a static library" FORCE)
endif()
# Add the subdirectory. This creates targets like SDL2::SDL2, SDL2::SDL2-static, SDL2::SDL2main
add_subdirectory(${CMAKE_SOURCE_DIR}/thirdparty/SDL2 ${CMAKE_BINARY_DIR}/thirdparty/SDL2)
set(SDL2_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/thirdparty/SDL2/include ${CMAKE_BINARY_DIR}/thirdparty/SDL2)
# Linking against SDL2::SDL2 below handles includes automatically.
if(EMSCRIPTEN)
# Emscripten typically uses static linking
set(SDL2_LIBRARY SDL2::SDL2-static) # Use the CMake target
else()
# Link against SDL2 (shared or static based on SDL_SHARED) and SDL2main
# SDL2::SDL2 resolves to the correct shared/static target.
# SDL2::SDL2main is needed on many platforms, especially Windows.
set(SDL2_LIBRARY SDL2::SDL2 SDL2::SDL2main) # Use the CMake targets
endif()
elseif(NOT EMSCRIPTEN)
# If not building from source, use the find_package module
find_package(SDL2)
endif()
endmacro()
macro(FindOrBuildUNZIP)
if(BUILD_UNZIP)
add_subdirectory(
${CMAKE_SOURCE_DIR}/thirdparty/unzip
${CMAKE_BINARY_DIR}/thirdparty/unzip)
set(UNZIP_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/thirdparty/unzip)
set(UNZIP_LIBRARY unzip)
else()
message(WARNING "UNZIP must get build")
endif()
endmacro()
macro(FindOrBuildBoost)
if(PSP OR UNIX OR WIN32 OR IOS)
#the psp build does not need more than a few headers
#todo: remove from the repository
set(BOOST_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/thirdparty/Boost)
# elseif(WIN32)
#set BOOST_ROOT to the root of boost
# set(Boost_USE_STATIC_LIBS ON)
# set(Boost_USE_MULTITHREADED ON)
# set(BOOST_ROOT $ENV{BOOST_ROOT})
# set(BOOST_LIBRARYDIR ${BOOST_ROOT}/libs)
# set(BOOST_INCLUDEDIR ${BOOST_ROOT})
# find_package(Boost COMPONENTS system thread date_time REQUIRED)
# if(NOT Boost_FOUND)
# message("Set the BOOST_ROOT environment variable to point to your boost installation.")
# message("We need system thread and date_time compiled static libs")
# message("These libs are compiler specific.")
# endif()
# elseif(UNIX AND NOT ANDROID)
# find_package(Boost COMPONENTS system thread date_time REQUIRED)
elseif(ANDROID)
#this is a hack. we compile a few boost libds directly into
#the application. we should require static libs for android
#to be available. maybe we could add the build option to
#download and build a compatible boost version
find_path(BOOST_INCLUDE_DIRS NAMES bind.hpp HINTS $ENV{ANDROID_BOOST_ROOT} PATH_SUFFIXES boost)
if(BOOST_INCLUDE_DIRS)
get_filename_component(BOOST_INCLUDE_DIRS ${BOOST_INCLUDE_DIRS} PATH)
set(ANDROID_BOOST_PTHREAD_SRC_DIR ${BOOST_INCLUDE_DIRS}/libs/thread/src/pthread)
set(ANDROID_BOOST_SYSTEM_SRC_DIR ${BOOST_INCLUDE_DIRS}/libs/system/src/)
else()
message(SEND_ERROR "We require a few boost sources to get compiled into wagic. Please point the ANDROID_BOOST_ROOT environment variable to a boost-source copy root.")
endif()
endif()
endmacro()
macro(FindOrBuildZLIB)
if(BUILD_ZLIB)
add_subdirectory(${CMAKE_SOURCE_DIR}/thirdparty/zlib ${CMAKE_BINARY_DIR}/thirdparty/zlib)
set(ZLIB_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/thirdparty/zlib)
set(ZLIB_LIBRARIES ZLIB::ZLIBSTATIC)
else()
if(WIN32 AND NOT MINGW)
set(ZLIB_ROOT ${CMAKE_SOURCE_DIR}/thirdparty/binary/win)
find_package(ZLIB)
else()
if(MINGW)
set(ZLIB_USE_STATIC_LIBS TRUE)
find_package(ZLIB REQUIRED)
else()
if(backend_qt_console OR backend_qt_widget OR EMSCRIPTEN)
set(ZLIB_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/thirdparty/zlib)
else()
find_package(ZLIB)
endif()
endif()
endif()
endif()
endmacro()
macro(FindOrBuildGIF)
if(BUILD_GIF)
message(WARNING "GIF sources are currently not included within the wagic tree")
else()
if(PSP)
find_package(GIF)
endif()
endif()
endmacro()
macro(FindOrBuildJPEG)
if(BUILD_JPEG)
add_subdirectory(${CMAKE_SOURCE_DIR}/thirdparty/libjpeg ${CMAKE_BINARY_DIR}/thirdparty/libjpeg)
set(JPEG_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/thirdparty/libjpeg)
set(JPEG_LIBRARY jpeg)
else()
if(WIN32)
#findJPEG does currently not provide prefix vars to guide it
find_path(JPEG_INCLUDE_DIR jpeglib.h HINTS ${CMAKE_SOURCE_DIR}/thirdparty/binary/win/include)
find_library(JPEG_LIBRARY NAMES libjpeg-static-mt HINTS ${CMAKE_SOURCE_DIR}/thirdparty/binary/win/lib)
if(JPEG_INCLUDE_DIR AND JPEG_LIBRARY)
set(JPEG_FOUND ON)
mark_as_advanced(JPEG_INCLUDE_DIR JPEG_LIBRARY)
else()
message(FATAL_ERROR "Could not find JPEG on windows")
endif()
else()
find_package(JPEG)
endif()
endif()
endmacro()
macro(FindOrBuildPNG)
if(BUILD_PNG)
add_subdirectory(${CMAKE_SOURCE_DIR}/thirdparty/libpng ${CMAKE_BINARY_DIR}/thirdparty/libpng)
set(PNG_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/thirdparty/libpng)
# find_path(PNG_INCLUDE_DIRS NAMES png.h HINTS ${CMAKE_SOURCE_DIR}/thirdparty/libpng)
set(PNG_LIBRARIES png)
else()
if(WIN32)
#findPNG does currently not provide prefix vars. so we find
find_path(PNG_INCLUDE_DIRS png.h HINTS ${CMAKE_SOURCE_DIR}/thirdparty/binary/win/include)
find_library(PNG_LIBRARIES libpng HINTS ${CMAKE_SOURCE_DIR}/thirdparty/binary/win/lib)
if (PNG_LIBRARIES AND PNG_INCLUDE_DIRS)
set(PNG_FOUND ON)
mark_as_advanced(PNG_INCLUDE_DIRS PNG_LIBRARIES)
else()
message(FATAL_ERROR "Could not find PNG on windows")
endif()
else()
find_package(PNG)
endif()
endif()
endmacro()
macro(FindOrBuildCurl)
if(BUILD_CURL)
add_subdirectory(${CMAKE_SOURCE_DIR}/thirdparty/curl ${CMAKE_BINARY_DIR}/thirdparty/curl)
set(CURL curl_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/thirdparty/curl)
set(CURL_LIBRARIES curl)
else()
if(WIN32)
#findPNG does currently not provide prefix vars. so we find
find_path(CURL CURL_INCLUDE_DIRS curl.h HINTS ${CMAKE_SOURCE_DIR}/thirdparty/binary/win/include)
find_library(CURL_LIBRARIES libcurl HINTS ${CMAKE_SOURCE_DIR}/thirdparty/binary/win/lib)
if (CURL_LIBRARIES AND CURL_INCLUDE_DIRS)
set(CURL_FOUND ON)
mark_as_advanced(CURL_INCLUDE_DIRS CURL_LIBRARIES)
else()
message(FATAL_ERROR "Could not find CURL on windows")
endif()
else()
find_package(CURL)
endif()
endif()
endmacro()
macro(FindOrBuildFreetype)
if(PSP)
set(ENV{FREETYPE_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/thirdparty/binary/psp/include)
set(ENV{FREETYPE_LIBRARIES} freetype)
endif()
endmacro()
macro(FindOrBuildHgeTools)
if(PSP)
find_library(HGETOOLS_LIBRARY NAMES hgetools HINTS "${CMAKE_SOURCE_DIR}/thirdparty/binary/psp/lib")
set(HGETOOLS_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/thirdparty/binary/psp/include")
endif()
endmacro()
macro(FindOrBuildMikMod)
if(PSP)
find_library(MIKMOD_LIBRARY NAMES mikmod HINTS "${CMAKE_SOURCE_DIR}/thirdparty/binary/psp/lib")
set(MIKMOD_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/thirdparty/binary/psp/include")
endif()
endmacro()
macro(FindOrBuildQt)
if(backend_qt_console)
add_definitions(-DCONSOLE_CONFIG -DTESTSUITE)
find_package(Qt5Core REQUIRED)
find_package(Qt5 COMPONENTS Core Network Multimedia REQUIRED)
elseif(backend_qt_widget)
add_definitions(-DQT_WIDGET)
find_package(OpenGL REQUIRED)
find_package(X11 REQUIRED)
find_package(Qt5 COMPONENTS Core Gui OpenGL Network Multimedia REQUIRED)
endif()
# include(${QT_USE_FILE})
endmacro()
macro(FindOrBuildOpenGL)
if(backend_sdl OR backend_qt_console OR backend_qt_widget)
if(ANDROID)
#find openglesv on android
set(OPENGL_LIBRARIES "-ldl -lGLESv1_CM -lGLESv2 -llog -landroid")
elseif(EMSCRIPTEN)
set(OPENGL_LIBRARIES "")
else()
find_package(OpenGL)
# find_package(GLUT)
endif()
endif()
endmacro()
macro(FindOrBuildOpenSL)
find_package(OpenSL)
endmacro()
macro(FindOrBuildPSPSDK)
find_package(PSPSDK COMPONENTS psppower pspmpeg pspaudiocodec pspaudiolib pspaudio pspmp3 pspgum pspgu psprtc pspfpu REQUIRED)
endmacro()

View File

@@ -0,0 +1,62 @@
# - Try to find PSPSDK
# Once done this will define
# PSPSDK_FOUND - System has PSPSDK
# PSPSDK_INCLUDE_DIR - The PSPSDK include directories
# PSPSDK_LIB - The libraries requested with the components field
# PSPSDK_REQUIRED_LIB - The libriries the PSPSDK needs always
# PSPSDK_CFLAGS - The CFLAGS to use
# PSPSDK_PATH - The output of psp-config --pspsdk-path
# PSPSDK_PREFIX - The output of psp-config --psp-prefix
# PSPSDK_CXX_COMPILER - The PSPSDK CXX Compilers path
# PSPSDK_CXX_LINKER - The PSPSDK CXX Linker command
# PSPSDK_FIXUP_IMPORTS_COMMAND - psp-fixup-imports command
# PSPSDK_PRXGEN_COMMAND - psp-prxgen command
# PSPSDK_PACK_PBP_COMMAND - pack-pbp command
# PSPSDK_MKSFO_COMMAND - mksfo command
#find the psp-config progams absolute path
#psp-config needs to be reachable via the system shell (PATH)
find_program(PSP_CONFIG_PROGRAM psp-config)
#TODO: check if something is REQUIRED and throw errors instead of messages
if(PSP_CONFIG_PROGRAM)
find_program(PSPSDK_CXX_COMPILER psp-g++)
find_program(PSPSDK_CXX_LINKER psp-gcc)
find_program(PSPSDK_FIXUP_IMPORTS_COMMAND psp-fixup-imports)
find_program(PSPSDK_PRXGEN_COMMAND psp-prxgen)
find_program(PSPSDK_PACK_PBP_COMMAND pack-pbp)
find_program(PSPSDK_MKSFO_COMMAND mksfo)
#ask psp-config for the
execute_process(COMMAND psp-config --pspsdk-path OUTPUT_VARIABLE PSPSDK_PATH OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND psp-config --psp-prefix OUTPUT_VARIABLE PSPSDK_PREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
set(PSPSDK_INCLUDE_DIR "${PSPSDK_PATH}/include")
foreach(_COMPONENT ${PSPSDK_FIND_COMPONENTS})
find_library(PSPSDK_${_COMPONENT} NAMES ${_COMPONENT})
if(NOT PSPSDK_${_COMPONENT})
message(SEND_ERROR "PSPSDK: ${_COMPONENT} not found")
else()
set(PSPSDK_LIB ${PSPSDK_LIB} ${PSPSDK_${_COMPONENT}})
endif()
endforeach()
#find libs which pspsdk does require to link even if the programs does not need one of them directly
foreach(_COMPONENT pspdebug pspdisplay pspge pspctrl pspsdk c pspnet pspnet_inet pspnet_apctl pspnet_resolver psputility pspuser)
find_library(PSPSDK_${_COMPONENT} NAMES ${_COMPONENT})
if(NOT PSPSDK_${_COMPONENT})
message(SEND_ERROR "PSPSDK: ${_COMPONENT} not found")
else()
set(PSPSDK_REQUIRED_LIB ${PSPSDK_REQUIRED_LIB} ${PSPSDK_${_COMPONENT}})
endif()
endforeach()
endif()
include(FindPackageHandleStandardArgs)
# handle the QUIETLY and REQUIRED arguments and set LIBXML2_FOUND to TRUE
# if all listed variables are TRUE
find_package_handle_standard_args(PSPSDK DEFAULT_MSG
PSPSDK_CXX_LINKER PSPSDK_CXX_COMPILER PSPSDK_PATH PSPSDK_PREFIX PSPSDK_LIB PSPSDK_REQUIRED_LIB PSPSDK_INCLUDE_DIR)
mark_as_advanced(PSPSDK_CXX_LINKER PSPSDK_CXX_COMPILER PSPSDK_PATH PSPSDK_PREFIX PSPSDK_LIB PSPSDK_REQUIRED_LIB PSPSDK_INCLUDE_DIR)

181
CMakeModules/FindSDL2.cmake Normal file
View File

@@ -0,0 +1,181 @@
# Locate SDL2 library
# This module defines
# SDL2_LIBRARY, the name of the library to link against
# SDL2_FOUND, if false, do not try to link to SDL2
# SDL2_INCLUDE_DIR, where to find SDL.h
#
# This module responds to the the flag:
# SDL2_BUILDING_LIBRARY
# If this is defined, then no SDL2_main will be linked in because
# only applications need main().
# Otherwise, it is assumed you are building an application and this
# module will attempt to locate and set the the proper link flags
# as part of the returned SDL2_LIBRARY variable.
#
# Don't forget to include SDL2main.h and SDL2main.m your project for the
# OS X framework based version. (Other versions link to -lSDL2main which
# this module will try to find on your behalf.) Also for OS X, this
# module will automatically add the -framework Cocoa on your behalf.
#
#
# Additional Note: If you see an empty SDL2_LIBRARY_TEMP in your configuration
# and no SDL2_LIBRARY, it means CMake did not find your SDL2 library
# (SDL2.dll, libsdl2.so, SDL2.framework, etc).
# Set SDL2_LIBRARY_TEMP to point to your SDL2 library, and configure again.
# Similarly, if you see an empty SDL2MAIN_LIBRARY, you should set this value
# as appropriate. These values are used to generate the final SDL2_LIBRARY
# variable, but when these values are unset, SDL2_LIBRARY does not get created.
#
#
# $SDL2DIR is an environment variable that would
# correspond to the ./configure --prefix=$SDL2DIR
# used in building SDL2.
# l.e.galup 9-20-02
#
# Modified by Eric Wing.
# Added code to assist with automated building by using environmental variables
# and providing a more controlled/consistent search behavior.
# Added new modifications to recognize OS X frameworks and
# additional Unix paths (FreeBSD, etc).
# Also corrected the header search path to follow "proper" SDL2 guidelines.
# Added a search for SDL2main which is needed by some platforms.
# Added a search for threads which is needed by some platforms.
# Added needed compile switches for MinGW.
#
# On OSX, this will prefer the Framework version (if found) over others.
# People will have to manually change the cache values of
# SDL2_LIBRARY to override this selection or set the CMake environment
# CMAKE_INCLUDE_PATH to modify the search paths.
#
# Note that the header path has changed from SDL2/SDL.h to just SDL.h
# This needed to change because "proper" SDL2 convention
# is #include "SDL.h", not <SDL2/SDL.h>. This is done for portability
# reasons because not all systems place things in SDL2/ (see FreeBSD).
#
# Ported by Johnny Patterson. This is a literal port for SDL2 of the FindSDL.cmake
# module with the minor edit of changing "SDL" to "SDL2" where necessary. This
# was not created for redistribution, and exists temporarily pending official
# SDL2 CMake modules.
#=============================================================================
# Copyright 2003-2009 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
FIND_PATH(SDL2_INCLUDE_DIR SDL.h
HINTS
$ENV{SDL2DIR}
PATH_SUFFIXES include/SDL2 include
PATHS
~/Library/Frameworks
/Library/Frameworks
/usr/local/include/SDL2
/usr/include/SDL2
/sw # Fink
/opt/local # DarwinPorts
/opt/csw # Blastwave
/opt
)
FIND_LIBRARY(SDL2_LIBRARY_TEMP
NAMES SDL2
HINTS
$ENV{SDL2DIR}
PATH_SUFFIXES lib64 lib
PATHS
/sw
/opt/local
/opt/csw
/opt
)
#MESSAGE("SDL2_LIBRARY_TEMP is ${SDL2_LIBRARY_TEMP}")
IF(NOT SDL2_BUILDING_LIBRARY)
IF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework")
# Non-OS X framework versions expect you to also dynamically link to
# SDL2main. This is mainly for Windows and OS X. Other (Unix) platforms
# seem to provide SDL2main for compatibility even though they don't
# necessarily need it.
FIND_LIBRARY(SDL2MAIN_LIBRARY
NAMES SDL2main
HINTS
$ENV{SDL2DIR}
PATH_SUFFIXES lib64 lib
PATHS
/sw
/opt/local
/opt/csw
/opt
)
ENDIF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework")
ENDIF(NOT SDL2_BUILDING_LIBRARY)
# SDL2 may require threads on your system.
# The Apple build may not need an explicit flag because one of the
# frameworks may already provide it.
# But for non-OSX systems, I will use the CMake Threads package.
IF(NOT APPLE)
FIND_PACKAGE(Threads)
ENDIF(NOT APPLE)
# MinGW needs an additional library, mwindows
# It's total link flags should look like -lmingw32 -lSDL2main -lSDL2 -lmwindows
# (Actually on second look, I think it only needs one of the m* libraries.)
IF(MINGW)
SET(MINGW32_LIBRARY mingw32 CACHE STRING "mwindows for MinGW")
ENDIF(MINGW)
SET(SDL2_FOUND "NO")
IF(SDL2_LIBRARY_TEMP)
# For SDL2main
IF(NOT SDL2_BUILDING_LIBRARY)
IF(SDL2MAIN_LIBRARY)
SET(SDL2_LIBRARY_TEMP ${SDL2MAIN_LIBRARY} ${SDL2_LIBRARY_TEMP})
ENDIF(SDL2MAIN_LIBRARY)
ENDIF(NOT SDL2_BUILDING_LIBRARY)
# For OS X, SDL2 uses Cocoa as a backend so it must link to Cocoa.
# CMake doesn't display the -framework Cocoa string in the UI even
# though it actually is there if I modify a pre-used variable.
# I think it has something to do with the CACHE STRING.
# So I use a temporary variable until the end so I can set the
# "real" variable in one-shot.
IF(APPLE)
SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} "-framework Cocoa")
ENDIF(APPLE)
# For threads, as mentioned Apple doesn't need this.
# In fact, there seems to be a problem if I used the Threads package
# and try using this line, so I'm just skipping it entirely for OS X.
IF(NOT APPLE)
SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT})
ENDIF(NOT APPLE)
# For MinGW library
IF(MINGW)
SET(SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP})
ENDIF(MINGW)
# Set the final string here so the GUI reflects the final state.
SET(SDL2_LIBRARY ${SDL2_LIBRARY_TEMP} CACHE STRING "Where the SDL2 Library can be found")
# Set the temp variable to INTERNAL so it is not seen in the CMake GUI
SET(SDL2_LIBRARY_TEMP "${SDL2_LIBRARY_TEMP}" CACHE INTERNAL "")
SET(SDL2_FOUND "YES")
ENDIF(SDL2_LIBRARY_TEMP)
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2
REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR)
mark_as_advanced(SDL2MAIN_LIBRARY SDL2_LIBRARY SDL2_INCLUDE_DIR)

26
CMakeModules/FindTinyXML.cmake Executable file
View File

@@ -0,0 +1,26 @@
# - Find TinyXML
# Find the native TinyXML includes and library
#
# TINYXML_FOUND - True if TinyXML found.
# TINYXML_INCLUDE_DIR - where to find tinyxml.h, etc.
# TINYXML_LIBRARIES - List of libraries when using TinyXML.
#
IF( TINYXML_INCLUDE_DIR )
# Already in cache, be silent
SET( TinyXML_FIND_QUIETLY TRUE )
ENDIF( TINYXML_INCLUDE_DIR )
FIND_PATH( TINYXML_INCLUDE_DIR "tinyxml.h"
PATH_SUFFIXES "tinyxml" )
FIND_LIBRARY( TINYXML_LIBRARIES
NAMES "tinyxml"
PATH_SUFFIXES "tinyxml" )
# handle the QUIETLY and REQUIRED arguments and set TINYXML_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE( "FindPackageHandleStandardArgs" )
FIND_PACKAGE_HANDLE_STANDARD_ARGS( "TinyXML" DEFAULT_MSG TINYXML_INCLUDE_DIR TINYXML_LIBRARIES )
MARK_AS_ADVANCED( TINYXML_INCLUDE_DIR TINYXML_LIBRARIES )

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,48 @@
include(CMakeForceCompiler)
# this one is important
SET(CMAKE_SYSTEM_NAME "Generic")
#this one not so much
SET(CMAKE_SYSTEM_VERSION 1)
set (CMAKE_SYSTEM_NAME Generic)
# Just point to anything that exists.
# We don't need CMake to generate proper build files.
set(CMAKE_C_COMPILER ${CMAKE_CURRENT_SOURCE_DIR})
set(CMAKE_CXX_COMPILER ${CMAKE_CURRENT_SOURCE_DIR})
# Skip the platform compiler checks
set (CMAKE_CXX_COMPILER_WORKS TRUE)
set (CMAKE_C_COMPILER_WORKS TRUE)
#how libraries look
SET(CMAKE_FIND_LIBRARY_PREFIXES "lib")
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a")
SET(CMAKE_SYSTEM_INCLUDE_PATH
${THEOS_PATH}/include
${CMAKE_INSTALL_PREFIX}/include
${CMAKE_SYSTEM_INCLUDE_PATH})
# where is the target environment
SET(CMAKE_SYSTEM_LIBRARY_PATH
${THEOS_PATH}/lib
${CMAKE_INSTALL_PREFIX}/lib
${CMAKE_SYSTEM_LIBRARY_PATH})
SET(CMAKE_FIND_ROOT_PATH
${CMAKE_SOURCE_DIR}
${THEOS_PATH}
${THEOS_PATH}/lib
${THEOS_PATH}/include
)
# search for programs in the build host directories
# for libraries and headers in the target directories and then in the host
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY FIRST)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE FIRST)
set(IOS 1)

View File

@@ -0,0 +1,333 @@
# This file is part of the ios-cmake project. It was retrieved from
# https://github.com/cristeab/ios-cmake.git, which is a fork of
# https://code.google.com/p/ios-cmake/. Which in turn is based off of
# the Platform/Darwin.cmake and Platform/UnixPaths.cmake files which
# are included with CMake 2.8.4
#
# The ios-cmake project is licensed under the new BSD license.
#
# Copyright (c) 2014, Bogdan Cristea and LTE Engineering Software,
# Kitware, Inc., Insight Software Consortium. All rights reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
# This file is based off of the Platform/Darwin.cmake and
# Platform/UnixPaths.cmake files which are included with CMake 2.8.4
# It has been altered for iOS development.
#
# Updated by Alex Stewart (alexs.mac@gmail.com).
# The following variables control the behaviour of this toolchain:
#
# IOS_PLATFORM: OS (default) or SIMULATOR or SIMULATOR64
# OS = Build for iPhoneOS.
# SIMULATOR = Build for x86 i386 iPhone Simulator.
# SIMULATOR64 = Build for x86 x86_64 iPhone Simulator.
# CMAKE_OSX_SYSROOT: Path to the iOS SDK to use. By default this is
# automatically determined from IOS_PLATFORM and xcodebuild, but
# can also be manually specified (although this should not be required).
# CMAKE_IOS_DEVELOPER_ROOT: Path to the Developer directory for the iOS platform
# being compiled for. By default this is automatically determined from
# CMAKE_OSX_SYSROOT, but can also be manually specified (although this should
# not be required).
# ENABLE_BITCODE: (true|false) Enables or disables bitcode support. Default true
#
# This toolchain defines the following variables for use externally:
#
# XCODE_VERSION: Version number (not including Build version) of Xcode detected.
# IOS_SDK_VERSION: Version of iOS SDK being used.
# CMAKE_OSX_ARCHITECTURES: Architectures being compiled for (generated from
# IOS_PLATFORM).
#
# This toolchain defines the following macros for use externally:
#
# set_xcode_property (TARGET XCODE_PROPERTY XCODE_VALUE XCODE_VARIANT)
# A convenience macro for setting xcode specific properties on targets.
# Available variants are: All, Release, RelWithDebInfo, Debug, MinSizeRel
# example: set_xcode_property (myioslib IPHONEOS_DEPLOYMENT_TARGET "3.1" "all").
#
# find_host_package (PROGRAM ARGS)
# A macro used to find executable programs on the host system, not within the
# iOS environment. Thanks to the android-cmake project for providing the
# command.
# Fix for PThread library not in path
set(CMAKE_THREAD_LIBS_INIT "-lpthread")
set(CMAKE_HAVE_THREADS_LIBRARY 1)
set(CMAKE_USE_WIN32_THREADS_INIT 0)
set(CMAKE_USE_PTHREADS_INIT 1)
# Get the Xcode version being used.
execute_process(COMMAND xcodebuild -version
OUTPUT_VARIABLE XCODE_VERSION
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
string(REGEX MATCH "Xcode [0-9\\.]+" XCODE_VERSION "${XCODE_VERSION}")
string(REGEX REPLACE "Xcode ([0-9\\.]+)" "\\1" XCODE_VERSION "${XCODE_VERSION}")
message(STATUS "Building with Xcode version: ${XCODE_VERSION}")
# Default to building for iPhoneOS if not specified otherwise, and we cannot
# determine the platform from the CMAKE_OSX_ARCHITECTURES variable. The use
# of CMAKE_OSX_ARCHITECTURES is such that try_compile() projects can correctly
# determine the value of IOS_PLATFORM from the root project, as
# CMAKE_OSX_ARCHITECTURES is propagated to them by CMake.
if (NOT DEFINED IOS_PLATFORM)
if (CMAKE_OSX_ARCHITECTURES)
if (CMAKE_OSX_ARCHITECTURES MATCHES ".*arm.*")
set(IOS_PLATFORM "OS")
elseif (CMAKE_OSX_ARCHITECTURES MATCHES "i386")
set(IOS_PLATFORM "SIMULATOR")
elseif (CMAKE_OSX_ARCHITECTURES MATCHES "x86_64")
set(IOS_PLATFORM "SIMULATOR64")
endif()
endif()
if (NOT IOS_PLATFORM)
set(IOS_PLATFORM "OS")
endif()
endif()
set(IOS_PLATFORM ${IOS_PLATFORM} CACHE STRING
"Type of iOS platform for which to build.")
# Determine the platform name and architectures for use in xcodebuild commands
# from the specified IOS_PLATFORM name.
if (IOS_PLATFORM STREQUAL "OS")
set(XCODE_IOS_PLATFORM iphoneos)
set(IOS_ARCH armv7 armv7s arm64)
elseif (IOS_PLATFORM STREQUAL "SIMULATOR")
set(XCODE_IOS_PLATFORM iphonesimulator)
set(IOS_ARCH i386)
elseif(IOS_PLATFORM STREQUAL "SIMULATOR64")
set(XCODE_IOS_PLATFORM iphonesimulator)
set(IOS_ARCH x86_64)
else()
message(FATAL_ERROR "Invalid IOS_PLATFORM: ${IOS_PLATFORM}")
endif()
message(STATUS "Configuring iOS build for platform: ${IOS_PLATFORM}, "
"architecture(s): ${IOS_ARCH}")
# If user did not specify the SDK root to use, then query xcodebuild for it.
if (NOT CMAKE_OSX_SYSROOT)
execute_process(COMMAND xcodebuild -version -sdk ${XCODE_IOS_PLATFORM} Path
OUTPUT_VARIABLE CMAKE_OSX_SYSROOT
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
message(STATUS "Using SDK: ${CMAKE_OSX_SYSROOT} for platform: ${IOS_PLATFORM}")
endif()
if (NOT EXISTS ${CMAKE_OSX_SYSROOT})
message(FATAL_ERROR "Invalid CMAKE_OSX_SYSROOT: ${CMAKE_OSX_SYSROOT} "
"does not exist.")
endif()
# Specify minimum version of deployment target.
if (NOT DEFINED IOS_DEPLOYMENT_TARGET)
# Unless specified, SDK version 8.0 is used by default as minimum target version.
set(IOS_DEPLOYMENT_TARGET "8.0"
CACHE STRING "Minimum iOS version to build for." )
message(STATUS "Using the default min-version since IOS_DEPLOYMENT_TARGET not provided!")
endif()
# Use bitcode or not
if (NOT DEFINED ENABLE_BITCODE)
# Unless specified, enable bitcode support by default
set(ENABLE_BITCODE TRUE CACHE BOOL "Wheter or not to enable bitcode")
message(STATUS "Enabling bitcode support by default. ENABLE_BITCODE not provided!")
endif()
# Get the SDK version information.
execute_process(COMMAND xcodebuild -sdk ${CMAKE_OSX_SYSROOT} -version SDKVersion
OUTPUT_VARIABLE IOS_SDK_VERSION
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
# Find the Developer root for the specific iOS platform being compiled for
# from CMAKE_OSX_SYSROOT. Should be ../../ from SDK specified in
# CMAKE_OSX_SYSROOT. There does not appear to be a direct way to obtain
# this information from xcrun or xcodebuild.
if (NOT CMAKE_IOS_DEVELOPER_ROOT)
get_filename_component(IOS_PLATFORM_SDK_DIR ${CMAKE_OSX_SYSROOT} PATH)
get_filename_component(CMAKE_IOS_DEVELOPER_ROOT ${IOS_PLATFORM_SDK_DIR} PATH)
endif()
if (NOT EXISTS ${CMAKE_IOS_DEVELOPER_ROOT})
message(FATAL_ERROR "Invalid CMAKE_IOS_DEVELOPER_ROOT: "
"${CMAKE_IOS_DEVELOPER_ROOT} does not exist.")
endif()
# Find the C & C++ compilers for the specified SDK.
if (NOT CMAKE_C_COMPILER)
execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT} -find clang
OUTPUT_VARIABLE CMAKE_C_COMPILER
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
message(STATUS "Using C compiler: ${CMAKE_C_COMPILER}")
endif()
if (NOT CMAKE_CXX_COMPILER)
execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT} -find clang++
OUTPUT_VARIABLE CMAKE_CXX_COMPILER
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
message(STATUS "Using CXX compiler: ${CMAKE_CXX_COMPILER}")
endif()
# Find (Apple's) libtool.
execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT} -find libtool
OUTPUT_VARIABLE IOS_LIBTOOL
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
message(STATUS "Using libtool: ${IOS_LIBTOOL}")
# Configure libtool to be used instead of ar + ranlib to build static libraries.
# This is required on Xcode 7+, but should also work on previous versions of
# Xcode.
set(CMAKE_C_CREATE_STATIC_LIBRARY
"${IOS_LIBTOOL} -static -o <TARGET> <LINK_FLAGS> <OBJECTS> ")
set(CMAKE_CXX_CREATE_STATIC_LIBRARY
"${IOS_LIBTOOL} -static -o <TARGET> <LINK_FLAGS> <OBJECTS> ")
# Get the version of Darwin (OS X) of the host.
execute_process(COMMAND uname -r
OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_VERSION
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
# Standard settings.
set(CMAKE_SYSTEM_NAME Darwin CACHE INTERNAL "")
set(CMAKE_SYSTEM_VERSION ${IOS_SDK_VERSION} CACHE INTERNAL "")
set(UNIX TRUE CACHE BOOL "")
set(APPLE TRUE CACHE BOOL "")
set(IOS TRUE CACHE BOOL "")
set(CMAKE_AR ar CACHE FILEPATH "" FORCE)
set(CMAKE_RANLIB ranlib CACHE FILEPATH "" FORCE)
# Force unset of OS X-specific deployment target (otherwise autopopulated),
# required as of cmake 2.8.10.
set(CMAKE_OSX_DEPLOYMENT_TARGET "" CACHE STRING
"Must be empty for iOS builds." FORCE)
# Set the architectures for which to build.
set(CMAKE_OSX_ARCHITECTURES ${IOS_ARCH} CACHE STRING "Build architecture for iOS")
# Skip the platform compiler checks for cross compiling.
set(CMAKE_CXX_COMPILER_FORCED TRUE)
set(CMAKE_CXX_COMPILER_WORKS TRUE)
set(CMAKE_C_COMPILER_FORCED TRUE)
set(CMAKE_C_COMPILER_WORKS TRUE)
# All iOS/Darwin specific settings - some may be redundant.
set(CMAKE_SHARED_LIBRARY_PREFIX "lib")
set(CMAKE_SHARED_LIBRARY_SUFFIX ".dylib")
set(CMAKE_SHARED_MODULE_PREFIX "lib")
set(CMAKE_SHARED_MODULE_SUFFIX ".so")
set(CMAKE_MODULE_EXISTS 1)
set(CMAKE_DL_LIBS "")
set(CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ")
set(CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ")
set(CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}")
set(CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}")
message(STATUS "Building for minimum iOS version: ${IOS_DEPLOYMENT_TARGET}"
" (SDK version: ${IOS_SDK_VERSION})")
# Note that only Xcode 7+ supports the newer more specific:
# -m${XCODE_IOS_PLATFORM}-version-min flags, older versions of Xcode use:
# -m(ios/ios-simulator)-version-min instead.
if (IOS_PLATFORM STREQUAL "OS")
if (XCODE_VERSION VERSION_LESS 7.0)
set(XCODE_IOS_PLATFORM_VERSION_FLAGS
"-mios-version-min=${IOS_DEPLOYMENT_TARGET}")
else()
# Xcode 7.0+ uses flags we can build directly from XCODE_IOS_PLATFORM.
set(XCODE_IOS_PLATFORM_VERSION_FLAGS
"-m${XCODE_IOS_PLATFORM}-version-min=${IOS_DEPLOYMENT_TARGET}")
endif()
else()
# SIMULATOR or SIMULATOR64 both use -mios-simulator-version-min.
set(XCODE_IOS_PLATFORM_VERSION_FLAGS
"-mios-simulator-version-min=${IOS_DEPLOYMENT_TARGET}")
endif()
message(STATUS "Version flags set to: ${XCODE_IOS_PLATFORM_VERSION_FLAGS}")
if (ENABLE_BITCODE)
set(BITCODE "-fembed-bitcode")
message(STATUS "Enabling bitcode support.")
else()
set(BITCODE "")
message(STATUS "Disabling bitcode support.")
endif()
set(CMAKE_C_FLAGS
"${XCODE_IOS_PLATFORM_VERSION_FLAGS} ${BITCODE} -fobjc-abi-version=2 -fobjc-arc ${CMAKE_C_FLAGS}")
# Hidden visibilty is required for C++ on iOS.
set(CMAKE_CXX_FLAGS
"${XCODE_IOS_PLATFORM_VERSION_FLAGS} ${BITCODE} -fvisibility=hidden -fvisibility-inlines-hidden -fobjc-abi-version=2 -fobjc-arc ${CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG -O3 -fomit-frame-pointer -ffast-math ${BITCODE} ${CMAKE_CXX_FLAGS_RELEASE}")
set(CMAKE_C_LINK_FLAGS "${XCODE_IOS_PLATFORM_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}")
set(CMAKE_CXX_LINK_FLAGS "${XCODE_IOS_PLATFORM_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}")
# In order to ensure that the updated compiler flags are used in try_compile()
# tests, we have to forcibly set them in the CMake cache, not merely set them
# in the local scope.
list(APPEND VARS_TO_FORCE_IN_CACHE
CMAKE_C_FLAGS
CMAKE_CXX_FLAGS
CMAKE_CXX_RELEASE
CMAKE_C_LINK_FLAGS
CMAKE_CXX_LINK_FLAGS)
foreach(VAR_TO_FORCE ${VARS_TO_FORCE_IN_CACHE})
set(${VAR_TO_FORCE} "${${VAR_TO_FORCE}}" CACHE STRING "" FORCE)
endforeach()
set(CMAKE_PLATFORM_HAS_INSTALLNAME 1)
set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -headerpad_max_install_names")
set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -headerpad_max_install_names")
set(CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,")
set(CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,")
set(CMAKE_FIND_LIBRARY_SUFFIXES ".dylib" ".so" ".a")
# Hack: if a new cmake (which uses CMAKE_INSTALL_NAME_TOOL) runs on an old
# build tree (where install_name_tool was hardcoded) and where
# CMAKE_INSTALL_NAME_TOOL isn't in the cache and still cmake didn't fail in
# CMakeFindBinUtils.cmake (because it isn't rerun) hardcode
# CMAKE_INSTALL_NAME_TOOL here to install_name_tool, so it behaves as it did
# before, Alex.
if (NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
find_program(CMAKE_INSTALL_NAME_TOOL install_name_tool)
endif (NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
# Set the find root to the iOS developer roots and to user defined paths.
set(CMAKE_FIND_ROOT_PATH ${CMAKE_IOS_DEVELOPER_ROOT} ${CMAKE_OSX_SYSROOT}
${CMAKE_PREFIX_PATH} CACHE string "iOS find search path root" FORCE)
# Default to searching for frameworks first.
set(CMAKE_FIND_FRAMEWORK FIRST)
# Set up the default search directories for frameworks.
set(CMAKE_SYSTEM_FRAMEWORK_PATH
${CMAKE_OSX_SYSROOT}/System/Library/Frameworks
${CMAKE_OSX_SYSROOT}/System/Library/PrivateFrameworks
${CMAKE_OSX_SYSROOT}/Developer/Library/Frameworks)
# Only search the specified iOS SDK, not the remainder of the host filesystem.
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
# This little macro lets you set any XCode specific property.
macro(set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE XCODE_RELVERSION)
set(XCODE_RELVERSION_I "${XCODE_RELVERSION}")
if (XCODE_RELVERSION_I STREQUAL "All")
set_property(TARGET ${TARGET} PROPERTY
XCODE_ATTRIBUTE_${XCODE_PROPERTY} "${XCODE_VALUE}")
else()
set_property(TARGET ${TARGET} PROPERTY
XCODE_ATTRIBUTE_${XCODE_PROPERTY}[variant=${XCODE_RELVERSION_I}] "${XCODE_VALUE}")
endif()
endmacro(set_xcode_property)
# This macro lets you find executable programs on the host system.
macro(find_host_package)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
set(IOS FALSE)
find_package(${ARGN})
set(IOS TRUE)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
endmacro(find_host_package)

View File

@@ -0,0 +1,62 @@
include(CMakeForceCompiler)
# this one is important
SET(CMAKE_SYSTEM_NAME "Generic")
#this one not so much
SET(CMAKE_SYSTEM_VERSION 1)
find_program(PSP_CONFIG_PROGRAM psp-config)
execute_process(COMMAND psp-config --pspsdk-path OUTPUT_VARIABLE PSPSDK_PATH OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND psp-config --psp-prefix OUTPUT_VARIABLE PSPSDK_PREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
# specify compiler and linker:
find_program(PSP_GPP psp-g++)
find_program(PSP_GCC psp-gcc)
CMAKE_FORCE_C_COMPILER(${PSP_GCC} GNU)
CMAKE_FORCE_CXX_COMPILER(${PSP_GPP} GNU)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -G0")
set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
set(CMAKE_CXX_LINK_EXECUTABLE "${PSP_GCC} <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
#how libraries look
SET(CMAKE_FIND_LIBRARY_PREFIXES "lib")
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a")
# where is the target environment
SET(CMAKE_SYSTEM_INCLUDE_PATH
${CMAKE_SOURCE_DIR}/thirdparty/binary/psp/include
${PSPSDK_PATH}/include
${PSPSDK_PREFIX}/include
${CMAKE_INSTALL_PREFIX}/include
${CMAKE_SYSTEM_INCLUDE_PATH})
SET(CMAKE_SYSTEM_LIBRARY_PATH
${CMAKE_SOURCE_DIR}/thirdparty/binary/psp/lib
${PSPSDK_PATH}/lib
${PSPSDK_PREFIX}/lib
${CMAKE_INSTALL_PREFIX}/lib
${CMAKE_SYSTEM_LIBRARY_PATH})
SET(CMAKE_FIND_ROOT_PATH
${CMAKE_SOURCE_DIR}/thirdparty/binary/psp
${CMAKE_SOURCE_DIR}/thirdparty/binary/psp/lib
${CMAKE_SOURCE_DIR}/thirdparty/binary/psp/include
${PSPSDK_PATH}
${PSPSDK_PATH}/lib
${PSPSDK_PATH}/include
${PSPSDK_PREFIX}
${PSPSDK_PREFIX}/lib
${PSPSDK_PREFIX}/include
)
# search for programs in the build host directories
# for libraries and headers in the target directories and then in the host
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY FIRST)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE FIRST)
set(PSP 1)

57
CMakeModules/utils.cmake Normal file
View File

@@ -0,0 +1,57 @@
macro(WAGIC_OPTION variable description value)
set(__value ${value})
set(__condition "")
set(__varname "__value")
foreach(arg ${ARGN})
if(arg STREQUAL "IF" OR arg STREQUAL "if")
set(__varname "__condition")
else()
list(APPEND ${__varname} ${arg})
endif()
endforeach()
unset(__varname)
if("${__condition}" STREQUAL "")
set(__condition 2 GREATER 1)
endif()
if(${__condition})
if("${__value}" MATCHES ";")
if(${__value})
option(${variable} "${description}" ON)
else()
option(${variable} "${description}" OFF)
endif()
elseif(DEFINED ${__value})
if(${__value})
option(${variable} "${description}" ON)
else()
option(${variable} "${description}" OFF)
endif()
else()
option(${variable} "${description}" ${__value})
endif()
else()
unset(${variable} CACHE)
endif()
unset(__condition)
unset(__value)
endmacro()
# add prefix to each item in the list
macro(list_add_prefix LST PREFIX)
set(__tmp "")
foreach(item ${${LST}})
list(APPEND __tmp "${PREFIX}${item}")
endforeach()
set(${LST} ${__tmp})
unset(__tmp)
endmacro()
macro(find_host_program)
set(_find_program ${CMAKE_FIND_ROOT_PATH_MODE_PROGRAM})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
find_program(${ARGN})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ${_find_program})
unset(_find_program)
endmacro()

165
JGE/CMakeLists.txt Normal file
View File

@@ -0,0 +1,165 @@
#the sources, jge will need always
set(JGE_generic_src
src/Encoding.cpp
src/JAnimator.cpp
src/JApp.cpp
src/JDistortionMesh.cpp
src/JFileSystem.cpp
src/JGameObject.cpp
src/JGE.cpp
src/JGui.cpp
src/JLogger.cpp
src/JLBFont.cpp
src/JOBJModel.cpp
src/JParticle.cpp
src/JParticleEffect.cpp
src/JParticleEmitter.cpp
src/JParticleSystem.cpp
src/JResourceManager.cpp
src/JSpline.cpp
src/JSprite.cpp
src/Vector2D.cpp)
set(JGE_hge_src
src/hge/hgecolor.cpp
src/hge/hgedistort.cpp
src/hge/hgefont.cpp
src/hge/hgeparticle.cpp
src/hge/hgerect.cpp
src/hge/hgevector.cpp)
#the sources we need to get graphical output desktops
#used by qt-widget build option
set(JGE_graphics_src
src/Downloader.cpp
include/Downloader.h
src/JMD2Model.cpp
src/pc/JGfx.cpp)
#the sources we need to fake graphical output on desktops
#these are used for the console-only testsuit
set(JGE_console_src
src/OutputCapturer.cpp
src/JGfx-fake.cpp)
#the sources we need on linux
set(JGE_linux_src
src/JNetwork.cpp
src/pc/JSocket.cpp
src/pc/JSfx.cpp)
set(JGE_android_src
src/JNetwork.cpp
src/JSocket.cpp
src/android/JSfx.cpp)
#the sources we need if we compile for psp
#note: main.cpp contains the main-function.
#the other main functions reside in projects/mtg to reduce cross-library dependencies.
#there may be a way to get all main-functions into the same project
set(JGE_psp_src
src/JNetwork.cpp
src/JSocket.cpp
src/JGfx.cpp
src/JSfx.cpp
src/JAudio.cpp
src/JMP3.cpp
src/decoder_prx.cpp
src/main.cpp
src/vram.cpp)
set(JGE_ios_src
src/iOS/main.m
src/iOS/wagicAppDelegate.m
src/iOS/ES2Renderer.m
src/iOS/EAGLView.m
src/iOS/EAGLViewController.m
src/iOS/JSfx.cpp)
set(JGE_windows_src
src/JNetwork.cpp
src/pc/JSocket.cpp
src/windows/JSfx.cpp)
set(JGE_INCLUDE_DIRS include include/hge)
set(EXTRA_INCLUDE_DIR ../projects/mtg/extra)
#turn moc on
if(backend_qt_console OR backend_qt_widget)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC TRUE)
endif()
if(backend_qt_console)
if(UNIX AND NOT ANDROID)
set(JGE_INTERNAL_INCLUDE_DIRS ${TINYXML_INCLUDE_DIR} ${ZIPFS_INCLUDE_DIR}
${UNZIP_INCLUDE_DIR} ${QT_MKSPECS_DIR}/default ${Qt5Core_INCLUDE_DIRS} ${Qt5Multimedia_INCLUDE_DIRS})
set(JGE_SOURCES ${JGE_generic_src} ${JGE_console_src} ${JGE_linux_src} ${JGE_hge_src})
set(JGE_LINK_LIBRARIES ${Qt5Core_LIBRARIES} ${Qt5Multimedia_LIBRARIES} ${ZIPFS_LIBRARY} ${UNZIP_LIRARY}
${JPEG_LIBRARIES} ${PNG_LIBRARIES})
else()
message(FATAL_ERROR "qt builds of jge platforms other than linux are not supported")
endif()
endif()
if(backend_qt_widget)
if(UNIX AND NOT ANDROID)
set(JGE_INTERNAL_INCLUDE_DIRS ${TINYXML_INCLUDE_DIR} ${ZIPFS_INCLUDE_DIR}
${UNZIP_INCLUDE_DIR} ${QT_MKSPECS_DIR}/default ${Qt5Core_INCLUDE_DIRS} ${Qt5Multimedia_INCLUDE_DIRS} ${Qt5OpenGL_INCLUDE_DIRS} )
set(JGE_SOURCES ${JGE_generic_src} ${JGE_graphics_src} ${JGE_linux_src} ${JGE_hge_src})
set(JGE_LINK_LIBRARIES ${Qt5Core_LIBRARIES} ${Qt5Multimedia_LIBRARIES} ${Qt5OpenGL_LIBRARIES} ${ZIPFS_LIBRARY} ${UNZIP_LIRARY}
${JPEG_LIBRARIES} ${PNG_LIBRARIES})
else()
message(FATAL_ERROR "qt builds of jge platforms other than linux are not supported")
endif()
endif()
if(backend_sdl)
if((UNIX OR EMSCRIPTEN) AND NOT ANDROID)
set(JGE_INTERNAL_INCLUDE_DIRS ${TINYXML_INCLUDE_DIR} ${ZIPFS_INCLUDE_DIR} ${OPENGL_INCLUDE_DIR} ${GLUT_INCLUDE_DIR}
${SDL2_INCLUDE_DIR} ${UNZIP_INCLUDE_DIR} ${PNG_INCLUDE_DIRS} ${JPEG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIRS})
set(JGE_SOURCES ${JGE_generic_src} ${JGE_graphics_src} ${JGE_linux_src} ${JGE_hge_src})
set(JGE_LINK_LIBRARIES ${ZIPFS_LIBRARY} ${UNZIP_LIRARY} ${JPEG_LIBRARY}
${PNG_LIBRARIES} ${OPENGL_LIBRARIES} ${GLUT_LIBRARY})
elseif(ANDROID)
set(JGE_INTERNAL_INCLUDE_DIRS ${BOOST_INCLUDE_DIRS} ${TINYXML_INCLUDE_DIR} ${ZIPFS_INCLUDE_DIR}
${SDL2_INCLUDE_DIR} ${UNZIP_INCLUDE_DIR} ${PNG_INCLUDE_DIRS} ${JPEG_INCLUDE_DIR}
${OPENSL_INCLUDE_DIR} ${ZLIB_INCLUDE_DIRS})
set(JGE_SOURCES ${JGE_generic_src} ${JGE_android_src} ${JGE_graphics_src} ${JGE_hge_src})
set(JGE_LINK_LIBRARIES ${ZIPFS_LIBRARY} ${UNZIP_LIRARY} ${JPEG_LIBRARY} ${PNG_LIBRARIES}
${OPENSL_LIBRARIES})
elseif(WIN32)
set(JGE_INTERNAL_INCLUDE_DIRS ${EXTRA_INCLUDE_DIR} ${TINYXML_INCLUDE_DIR} ${ZIPFS_INCLUDE_DIR} ${SDL2_INCLUDE_DIR}
${UNZIP_INCLUDE_DIR} ${PNG_INCLUDE_DIRS} ${JPEG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/thirdparty/binary/win/include)
set(JGE_SOURCES ${JGE_generic_src} ${JGE_graphics_src} ${JGE_windows_src} ${JGE_hge_src})
set(JGE_LINK_LIBRARIES ${ZIPFS_LIBRARY} ${UNZIP_LIRARY} ${JPEG_LIBRARY} ${PNG_LIBRARIES})
set(JGE_LINK_DIRECTORIES ${Boost_LIBRARY_DIR})
endif()
endif()
if(backend_psp)
if(PSP)
#${PSPSDK_PATH}/include should be in system pathes
set(JGE_INTERNAL_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/thirdparty/psp/include ${TINYXML_INCLUDE_DIR}
${ZIPFS_INCLUDE_DIR} ${UNZIP_INCLUDE_DIR} ${BOOST_INCLUDE_DIRS} ${GIF_INCLUDE_DIR} ${PNG_INCLUDE_DIRS} )
set(JGE_SOURCES ${JGE_generic_src} ${JGE_psp_src} ${JGE_hge_src})
set(JGE_LINK_LIBRARIES ${TINYXML_LIBRARIES} ${ZIPFS_LIBRARY} ${UNZIP_LIRARY})
else()
message(FATAL_ERROR "use the cross-compile toolchain to build as the psp target")
endif()
endif()
if(IOS)
set(JGE_SOURCES ${JGE_generic_src} ${JGE_ios_src} ${JGE_hge_src} src/pc/JGfx.cpp)
set(JGE_SOURCES ${JGE_SOURCES} PARENT_SCOPE)
set(JGE_INCLUDE_DIRS ${JGE_INCLUDE_DIRS} src/iOS PARENT_SCOPE)
set(JGE_LINK_LIBRARIES ${TINYXML_LIBRARIES} ${ZIPFS_LIBRARY} ${UNZIP_LIRARY})
endif()
add_library(jge STATIC ${JGE_SOURCES})
include_directories(${JGE_INTERNAL_INCLUDE_DIRS} ${JGE_INCLUDE_DIRS})
target_link_libraries(jge ${JGE_LINK_LIBRARIES})
link_directories(${JGE_LINK_DIRECTORIES})
set(${JGE_LIBRARIES} jge)

Binary file not shown.

View File

@@ -0,0 +1,10 @@
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level='asInvoker' uiAccess='false' />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -25,6 +25,7 @@ std::string ToHex(T* pointer)
#ifdef LINUX
#define OutputDebugString(val) (std::cerr << val);
#define OutputDebugStringA(val) (std::cerr << val);
#endif
#ifdef _DEBUG

View File

@@ -41,7 +41,7 @@ class DownloadRequest
private slots:
#endif
void fileDownloaded();
void downloadProgress(qint64 bytesReceived, qint64 bytesTotal);
void downloadProgress(int64_t bytesReceived, int64_t bytesTotal);
#ifdef QT_CONFIG
signals:
@@ -72,7 +72,13 @@ protected:
QNetworkReply* mNetworkReply;
static QNetworkAccessManager networkAccessManager;
#endif
#ifdef __EMSCRIPTEN__
static void onLoadCb(unsigned int handle, DownloadRequest* req, const char *buffer, unsigned int size);
static void onErrorCb(unsigned int handle, DownloadRequest* req, int errorCode, const char* errorText);
static void onProgressCb(unsigned int handle, DownloadRequest* req, int bytesReceived, int bytesTotal);
#endif
void processError(int errorCode, const char* errorText);
void processBufferDownloaded(unsigned int size, const char*buffer);
public:
DownloadRequest(string localPath="",

View File

@@ -31,7 +31,7 @@ typedef u32 LocalKeySym;
#elif defined(SDL_CONFIG)
#include <SDL.h>
typedef SDLKey LocalKeySym;
typedef SDL_Keycode LocalKeySym;
#define LOCAL_KEY_NONE SDLK_UNKNOWN
#elif defined(WIN32)

View File

@@ -16,7 +16,7 @@
#include <string.h>
#include <stdarg.h>
#if (!defined IOS) && (!defined ANDROID) && (!defined QT_CONFIG)
#if (!defined IOS) && (!defined ANDROID) && (!defined QT_CONFIG) && (!defined SDL_CONFIG)
#include <gif_lib.h>
#endif //IOS ANDROID
@@ -567,7 +567,7 @@ private:
#if (!defined IOS) && (!defined QT_CONFIG)
void LoadJPG(TextureInfo &textureInfo, const char *filename, int mode = 0, int TextureFormat = TEXTURE_FORMAT);
int LoadPNG(TextureInfo &textureInfo, const char *filename, int mode = 0, int TextureFormat = TEXTURE_FORMAT);
#if (!defined ANDROID) && (!defined QT_CONFIG)
#if (!defined ANDROID) && (!defined QT_CONFIG) && (!defined SDL_CONFIG)
void LoadGIF(TextureInfo &textureInfo, const char *filename, int mode = 0, int TextureFormat = TEXTURE_FORMAT);
int image_readgif(void * handle, TextureInfo &textureInfo, DWORD * bgcolor, InputFunc readFunc,int mode = 0, int TextureFormat = TEXTURE_FORMAT);
#endif // (ANDROID) How can we get gif support for android ?

View File

@@ -42,9 +42,9 @@ private:
// convert the socket into non-blocking state
bool SetNonBlocking(int sock);
// socket handle
#ifdef WIN32
#if (defined WIN32) && (!defined __GNUG__)
SOCKET mfd;
#elif LINUX || PSP
#elif LINUX || PSP || __GNUG__
int mfd;
#endif
};

View File

@@ -18,20 +18,20 @@
#include "JTypes.h"
#ifdef ANDROID
#include <SLES/OpenSLES.h>
#include "SLES/OpenSLES_Android.h"
#elif defined USE_PHONON
#elif defined(USE_PHONON)
#include <phonon/AudioOutput>
#include <phonon/MediaObject>
#elif (defined QT_CONFIG)
#elif defined (QT_CONFIG)
#include "QMediaPlayer"
#include "QMediaPlaylist"
#include "QSoundEffect"
#elif defined WIN32
#elif defined(WIN32)
#include <windows.h>
#define WITH_FMOD
//#define WITH_FMOD
#elif defined (PSP)
#include <pspgu.h>
#include <pspkernel.h>
@@ -48,7 +48,7 @@
#endif
#ifdef WITH_FMOD
#include "../Dependencies/include/fmod.h"
#include "fmod.h"
#endif
//------------------------------------------------------------------------------------------------
@@ -79,20 +79,26 @@ public slots:
std::string filename;
std::string key;
std::string ext;
void* mTrack;
#elif defined WITH_FMOD
FSOUND_SAMPLE* mTrack; // MP3 needed to be of "sample" type for FMOD, FMUSIC_MODULE is for MODs
void* mTrack;
#elif defined ANDROID
SLObjectItf playerObject;
SLPlayItf playInterface;
SLSeekItf seekInterface;
SLVolumeItf musicVolumeInterface;
void* mTrack;
#elif (defined QT_CONFIG)
QMediaPlaylist* playlist;
QMediaPlayer* player;
string fullpath;
#else
void* mTrack;
#endif //WITH_FMOD
void* mTrack;
#elif (defined WIN32)
std::string filename;
void* mTrack;
#endif
//#endif //WITH_FMOD
};
@@ -107,28 +113,30 @@ public:
unsigned long fileSize();
#if (defined QT_CONFIG) && (!defined USE_PHONON)
QMediaPlayer* effect;
void* mSample;
void* mSample;
#elif defined (PSP)
WAVDATA *mSample;
WAVDATA* mSample;
#elif defined (IOS)
std::string filename;
std::string key;
std::string ext;
void* mSample;
void* mSample;
#elif defined (WITH_FMOD)
FSOUND_SAMPLE *mSample;
#elif defined (USE_PHONON)
Phonon::AudioOutput* mOutput;
Phonon::MediaObject* mMediaObject;
void* mSample;
void* mSample;
#elif defined ANDROID
SLObjectItf playerObject;
SLPlayItf playInterface;
SLVolumeItf sampleVolumeInterface;
void* mSample;
void* mSample;
#elif (defined WIN32)
std::string filename;
void* mSample;
#else
void* mSample;
void* mSample;
#endif
};

View File

@@ -26,8 +26,16 @@
#include "JAudio.h"
#else
#include <stdint.h>
//#define __STDC_LIMIT_MACROS
#ifdef IOS
#include <tr1/cstdint>
#else
#include <cstdint>
#endif
//#include <stdint.h>
//the MSC version might only define _MSC_STDINT_H_
//and that might cause redefinition of standard types
//#define _STDINT_H_
#endif
@@ -104,6 +112,7 @@ enum {
#endif // CONSOLE_CONFIG
#if (defined WIN32) && (!defined LINUX)
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#endif
#if defined(LINUX) && (!defined WIN32) || defined(IOS) || defined (ANDROID)
@@ -140,9 +149,14 @@ typedef uint32_t u32;
#include <GLES/gl.h>
#include <GLES/glext.h>
#elif defined (WIN32) || defined (LINUX)
#if defined(__APPLE__)
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#else
#include <GL/gl.h>
#include <GL/glu.h>
#endif
#endif
#else
#include <QtOpenGL>
#endif

View File

@@ -0,0 +1,29 @@
#ifndef PRECOMPILEDHEADER_H
#define PRECOMPILEDHEADER_H
#include <algorithm>
#include <fstream>
#include <iostream>
#include <list>
#include <map>
#include <sstream>
#include <string>
#include <vector>
#include "DebugRoutines.h"
#include <assert.h>
#include "JGE.h"
#include "JFileSystem.h"
#include "JLogger.h"
//#ifndef WP8
//#include <boost/shared_ptr.hpp>
//#endif
#if defined (WP8) || defined (IOS) || defined (ANDROID) || defined (QT_CONFIG) || defined (SDL_CONFIG)
#define TOUCH_ENABLED
#endif
#endif //PRECOMPILEDHEADER_H

View File

@@ -1,7 +1,7 @@
#ifndef THREADING_H
#define THREADING_H
#if !defined(PSP) && !defined(QT_CONFIG) && !(__cplusplus > 199711L)
#if !defined(PSP) && !defined(QT_CONFIG) && !(__cplusplus > 199711L) && !(_MSC_VER >= 1700)
#include <boost/date_time.hpp>
#ifdef WIN32
@@ -537,7 +537,7 @@ namespace boost
}
}
#elif (__cplusplus > 199711L)
#elif (__cplusplus > 199711L) || (_MSC_VER >= 1700)
#include <thread>
#include <mutex>

View File

@@ -33,6 +33,7 @@ extern "C" {
#endif
void* vrelptr( void *ptr ); // make a pointer relative to memory base address (ATTENTION: A NULL rel ptr is not illegal/invalid!)
void* vabsptr( void *ptr ); // make a pointer absolute (default return type of valloc)
void* valloc( size_t size );

View File

@@ -7,6 +7,9 @@
#ifdef QT_CONFIG
QNetworkAccessManager DownloadRequest::networkAccessManager;
#endif
#ifdef __EMSCRIPTEN__
#include "emscripten.h"
#endif
DownloadRequest::DownloadRequest(string localPath,
string remoteResourceURL,
@@ -48,15 +51,71 @@ void DownloadRequest::startGet()
JFileSystem::GetInstance()->Remove(getTempLocalPath());
JFileSystem::GetInstance()->openForWrite(mFile, getTempLocalPath());
#ifdef QT_CONFIG
connect(mNetworkReply, SIGNAL(downloadProgress(qint64, qint64)),
SLOT(downloadProgress(qint64, qint64)));
connect(mNetworkReply, SIGNAL(downloadProgress(int64_t, int64_t)),
SLOT(downloadProgress(int64_t, int64_t)));
connect(mNetworkReply, SIGNAL(finished()), SLOT(fileDownloaded()));
#endif
#ifdef __EMSCRIPTEN__
emscripten_async_wget2_data(mRemoteResourceURL.c_str(), "GET", 0, this, 1,
(em_async_wget2_data_onload_func)DownloadRequest::onLoadCb,
(em_async_wget2_data_onerror_func)DownloadRequest::onErrorCb,
(em_async_wget2_data_onprogress_func)DownloadRequest::onProgressCb);
#endif
}
#ifdef __EMSCRIPTEN__
void DownloadRequest::onLoadCb(unsigned int handle, DownloadRequest* req, const char *buffer, unsigned int size)
{
DebugTrace("DownloadRequest::onLoadCb: " << size);
req->processBufferDownloaded(size, buffer);
Downloader::GetInstance()->Update();
}
void DownloadRequest::onErrorCb(unsigned int handle, DownloadRequest* req, int errorCode, const char* errorText)
{
DebugTrace("DownloadRequest::onErrorCb");
req->processError(errorCode, errorText);
Downloader::GetInstance()->Update();
}
void DownloadRequest::onProgressCb(unsigned int handle, DownloadRequest* req, int bytesReceived, int bytesTotal)
{
DebugTrace("DownloadRequest::onProgressCb");
req->DownloadRequest::downloadProgress(bytesReceived, bytesTotal);
}
#endif
void DownloadRequest::processError(int errorCode, const char* errorText)
{
DebugTrace(errorText);
mDownloadStatus = DownloadRequest::DOWNLOAD_ERROR;
mFile.close();
JFileSystem::GetInstance()->Remove(getTempLocalPath());
}
void DownloadRequest::processBufferDownloaded(unsigned int size, const char*buffer)
{
if(mFile.is_open())
{
mTotalSize = size;
mFile.write(buffer, size);
mFile.close();
if(!JFileSystem::GetInstance()->Rename(getTempLocalPath(), mLocalPath)) {
mDownloadStatus = DownloadRequest::DOWNLOAD_ERROR;
return;
}
}
mDownloadStatus = DownloadRequest::DOWNLOADED;
}
void DownloadRequest::fileDownloaded()
{
do {
#ifdef QT_CONFIG
do {
QByteArray eTagByteArray = mNetworkReply->rawHeader("ETag");
if(!eTagByteArray.isEmpty()) {
string oldETag = mETag;
@@ -67,10 +126,7 @@ void DownloadRequest::fileDownloaded()
// let's check some error
if(mNetworkReply->error() != QNetworkReply::NoError) {
DebugTrace(mNetworkReply->errorString().toStdString());
mDownloadStatus = DownloadRequest::DOWNLOAD_ERROR;
mFile.close();
JFileSystem::GetInstance()->Remove(getTempLocalPath());
processError((int)mNetworkReply->error(), mNetworkReply->errorString().toStdString().c_str());
break;
}
@@ -89,35 +145,31 @@ void DownloadRequest::fileDownloaded()
return;
}
if(mFile.is_open())
{
QByteArray byteArray = mNetworkReply->readAll();
mFile.write(byteArray.constData(), byteArray.size());
mFile.close();
if(!JFileSystem::GetInstance()->Rename(getTempLocalPath(), mLocalPath)) {
mDownloadStatus = DownloadRequest::DOWNLOAD_ERROR;
break;
}
}
mDownloadStatus = DownloadRequest::DOWNLOADED;
QByteArray byteArray = mNetworkReply->readAll();
processBufferDownloaded(byteArray.size(), byteArray.constData());
} while(0);
Downloader::GetInstance()->Update();
mNetworkReply->deleteLater();
mNetworkReply->deleteLater();
emit statusChanged((int)mDownloadStatus);
#endif
}
void DownloadRequest::downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
void DownloadRequest::downloadProgress(int64_t bytesReceived, int64_t bytesTotal)
{
QByteArray byteArray = mNetworkReply->readAll();
#ifdef QT_CONFIG
QByteArray byteArray = mNetworkReply->readAll();
mFile.write(byteArray.constData(), byteArray.size());
#endif
mCurrentSize = bytesReceived;
mTotalSize = bytesTotal;
int percent = 0;
if(bytesTotal)
percent = (bytesReceived/bytesTotal)*100;
#ifdef QT_CONFIG
emit percentChanged(percent);
#endif
}
Downloader* Downloader::mInstance = 0;

View File

@@ -15,7 +15,7 @@
#include "../include/JSprite.h"
#include "../include/JAnimator.h"
#include "tinyxml/tinyxml.h"
#include "tinyxml.h"
//////////////////////////////////////////////////////////////////////////

View File

@@ -16,14 +16,7 @@ User folder is the only one that is really needed to guarantee both read and wri
The content that users should not be touching.
*/
#if defined (ANDROID)
#include "PrecompiledHeader.h"
#endif //ANDROID
#if defined (LINUX)
#include "../../projects/mtg/include/PrecompiledHeader.h"
#endif //LINUX
#include "dirent.h"
#ifdef WIN32
#pragma warning(disable : 4786)
@@ -37,7 +30,8 @@ The content that users should not be touching.
#include "../include/JGE.h"
#include "../include/JFileSystem.h"
#include "../include/JLogger.h"
#include <dirent.h>
#include "DebugRoutines.h"
#ifdef QT_CONFIG
#include <QDir>
@@ -130,6 +124,10 @@ JFileSystem::JFileSystem(const string & _userPath, const string & _systemPath)
userPath = [[documentsDirectory stringByAppendingString: @"/User/"] cStringUsingEncoding:1];
systemPath = [[documentsDirectory stringByAppendingString: @"/Res/"] cStringUsingEncoding:1];
#elif defined (__EMSCRIPTEN__)
systemPath = "/";
DebugTrace("User path " << userPath);
DebugTrace("System path " << systemPath);
#elif defined (ANDROID)
userPath = JGE::GetInstance()->getFileUserFolderPath();
systemPath = JGE::GetInstance()->getFileSystemLocation();
@@ -146,9 +144,9 @@ JFileSystem::JFileSystem(const string & _userPath, const string & _systemPath)
userPath = QDir::toNativeSeparators(dir.absolutePath()).toStdString();
systemPath = QDir::toNativeSeparators(sysDir.absolutePath()).toStdString();
DebugTrace("User path " << userPath);
DebugTrace("System path " << systemPath);
DebugTrace("Current path " << QDir::currentPath().toStdString());
DebugTrace("User path " + userPath);
DebugTrace("System path " + systemPath);
DebugTrace("Current path " + QDir::currentPath().toStdString());
#else
//Find the Res.txt file and matching Res folders for backwards compatibility
ifstream mfile("Res.txt");
@@ -304,6 +302,7 @@ void JFileSystem::DetachZipFile()
bool JFileSystem::openForRead(izfstream & File, const string & FilePath) {
DebugTrace("JFileSystem::openForRead " << FilePath);
File.open(FilePath.c_str(), mUserFS);
if (File)
return true;
@@ -414,7 +413,6 @@ bool JFileSystem::OpenFile(const string &filename)
mCurrentFileInZip = &(it2->second);
mFileSize = it2->second.m_Size;
return true;
}

View File

@@ -34,7 +34,7 @@
//////////////////////////////////////////////////////////////////////////
#if defined (WIN32) // WIN32 specific code
#include "../../Dependencies/include/fmod.h"
#include "fmod.h"
u8 JGE::GetAnalogX()
{
@@ -54,7 +54,7 @@ u8 JGE::GetAnalogY()
#elif defined (LINUX) // Unix specific code
#include <sys/time.h>
#ifdef WITH_FMOD
#include "../Dependencies/include/fmod.h"
#include "fmod.h"
#endif //WITH_FMOD

View File

@@ -10,6 +10,7 @@
#include <pspaudio.h>
#include <pspmp3.h>
#include <psputility.h>
#include <unistd.h>
#else
#define PSP_AUDIO_VOLUME_MAX 100

View File

@@ -42,7 +42,7 @@ bool JNetwork::isConnected(){
void JNetwork::getServerIp(string& aString)
{
#ifdef WIN32
#if (defined WIN32) && (!defined __GNUG__)
char ac[80];
if (gethostname(ac, sizeof(ac)) == SOCKET_ERROR) {
DebugTrace("Error " << WSAGetLastError() <<

View File

@@ -19,7 +19,7 @@
#include "../include/JFileSystem.h"
#include "../include/JResourceManager.h"
#include "tinyxml/tinyxml.h"
#include "tinyxml.h"
//-------------------------------------------------------------------------------------

View File

@@ -14,9 +14,9 @@
#include "../include/JResourceManager.h"
#include "../include/JFileSystem.h"
#include "../include/JLBFont.h"
#include "tinyxml/tinyxml.h"
#include "tinyxml.h"
#if defined (_DEBUG) && defined (WIN32) && (!defined LINUX)
#if defined (_DEBUG) && defined (WIN32) && (!defined LINUX) && (!defined __GNUG__)
#include "crtdbg.h"
#define NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#else

View File

@@ -13,7 +13,7 @@
#include "../include/JFileSystem.h"
#include "../include/JSpline.h"
#include "tinyxml/tinyxml.h"
#include "tinyxml.h"
#define SMALL_NUMBER 0.0001f

View File

@@ -19,7 +19,8 @@
*
*/
#include "../include/decoder_prx.h"
#include "decoder_prx.h"
#include <psputility.h>
char *prx_static_init()
{

View File

@@ -12,7 +12,7 @@
#if (!defined IOS) && (!defined QT_CONFIG)
#ifdef WIN32
#pragma warning(disable : 4786)
#pragma comment( lib, "giflib.lib" )
//#pragma comment( lib, "giflib.lib" )
#endif
#include <png.h>
@@ -35,7 +35,7 @@ extern "C" {
#include "../../include/JFileSystem.h"
#include "../../include/JAssert.h"
#if (defined WIN32) && (!defined QT_CONFIG)
#if (defined WIN32) && (!defined QT_CONFIG) && (!defined SDL_CONFIG)
#ifndef __attribute__
#define __attribute__((a))
#endif
@@ -1665,7 +1665,7 @@ static void jpeg_mem_src(j_decompress_ptr cinfo, byte *mem, int len)
cinfo->src->resync_to_restart = jpeg_resync_to_restart;
cinfo->src->term_source = jpg_null;
cinfo->src->bytes_in_buffer = len;
cinfo->src->next_input_byte = mem;
cinfo->src->next_input_byte = (const JOCTET*)mem;
}
/*
@@ -1702,7 +1702,7 @@ void JRenderer::LoadJPG(TextureInfo &textureInfo, const char *filename, int mode
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);
jpeg_mem_src(&cinfo, rawdata, rawsize);
jpeg_mem_src(&cinfo, (byte*)rawdata, rawsize);
// Process JPEG header
jpeg_read_header(&cinfo, true);
@@ -1740,7 +1740,7 @@ void JRenderer::LoadJPG(TextureInfo &textureInfo, const char *filename, int mode
// Pass sizes to output
// Allocate Scanline buffer
scanline = (byte *)malloc(cinfo.output_width * 3);
scanline = (BYTE *)malloc(cinfo.output_width * 3);
if(!scanline)
{
//// ri.Con_Printf(PRINT_ALL, "Insufficient RAM for JPEG scanline buffer\n");

View File

@@ -75,7 +75,7 @@ static int __largest_block = __MEM_BLOCKS;
static int __mem_free = __MEM_BLOCKS;
inline void* vrelptr( void *ptr )
void* vrelptr( void *ptr )
{
return (void*)((unsigned int)ptr & ~__MEM_START);
}

182
JGE/src/windows/JSfx.cpp Normal file
View File

@@ -0,0 +1,182 @@
#include <Windows.h>
#include <Mmsystem.h>
#include <mciapi.h>
//these two headers are already included in the <Windows.h> header
#pragma comment(lib, "Winmm.lib")
#include "DebugRoutines.h"
#include "../../include/JSoundSystem.h"
#include "../../include/JFileSystem.h"
//////////////////////////////////////////////////////////////////////////
JMusic::JMusic()
:
mTrack(0)
{
}
void JMusic::Update(){
}
int JMusic::getPlayTime(){
return 0;
}
JMusic::~JMusic()
{
}
//////////////////////////////////////////////////////////////////////////
JSample::JSample()
{
}
JSample::~JSample()
{
}
unsigned long JSample::fileSize()
{
return 0;
}
//////////////////////////////////////////////////////////////////////////
JSoundSystem* JSoundSystem::mInstance = NULL;
JSoundSystem* JSoundSystem::GetInstance()
{
if (mInstance == NULL)
{
mInstance = new JSoundSystem();
mInstance->InitSoundSystem();
}
return mInstance;
}
void JSoundSystem::Destroy()
{
if (mInstance)
{
mInstance->DestroySoundSystem();
delete mInstance;
mInstance = NULL;
}
}
JSoundSystem::JSoundSystem()
{
mVolume = 0;
mSampleVolume = 0;
}
JSoundSystem::~JSoundSystem()
{
}
void JSoundSystem::InitSoundSystem()
{
}
void JSoundSystem::DestroySoundSystem()
{
}
JMusic *JSoundSystem::LoadMusic(const char *fileName)
{
JMusic* music = NULL;
music = new JMusic();
if (music)
{
music->filename = JFileSystem::GetInstance()->GetResourceFile(fileName);
std::string aString = "open \"" + music->filename + "\" type mpegvideo alias mp3";
mciSendString(aString.c_str(), NULL, 0, NULL);
music->mTrack = (void*)-1;
}
return music;
}
void JSoundSystem::PlayMusic(JMusic *music, bool looping)
{
if (music && music->mTrack)
{
if(looping)
mciSendString("play mp3 repeat", NULL, 0, NULL);
else
mciSendString("play mp3", NULL, 0, NULL);
}
}
void JSoundSystem::StopMusic(JMusic *music)
{
if (music && music->mTrack)
{
mciSendString("stop mp3", NULL, 0, NULL);
}
}
void JSoundSystem::PauseMusic(JMusic *music)
{
if (music && music->mTrack)
{
mciSendString("pause mp3", NULL, 0, NULL);
}
}
void JSoundSystem::ResumeMusic(JMusic *music)
{
if (music && music->mTrack)
{
mciSendString("resume mp3", NULL, 0, NULL);
}
}
void JSoundSystem::SetVolume(int volume)
{
SetMusicVolume(volume);
SetSfxVolume(volume);
}
void JSoundSystem::SetMusicVolume(int volume)
{
mVolume = volume;
}
void JSoundSystem::SetSfxVolume(int volume)
{
mSampleVolume = volume;
SetMusicVolume(mVolume);
}
JSample *JSoundSystem::LoadSample(const char *fileName)
{
JSample* sample = NULL;
sample = new JSample();
if (sample)
{
sample->filename = JFileSystem::GetInstance()->GetResourceFile(fileName);
}
return sample;
}
void JSoundSystem::PlaySample(JSample *sample)
{
if(sample)
{
sndPlaySound(sample->filename.c_str(), SND_FILENAME | SND_ASYNC);
}
}

View File

@@ -1,5 +1,4 @@
#Wagic the Homebrew
# Wagic the Homebrew
[![Build Status](https://travis-ci.org/WagicProject/wagic.png?branch=master)](https://travis-ci.com/WagicProject/wagic)
[![Build status](https://ci.appveyor.com/api/projects/status/7j4fbr6m62aqej59/branch/master)](https://ci.appveyor.com/project/xawotihs/wagic/branch/master)
@@ -7,22 +6,40 @@
## Description
Wagic, the Homebrew, is a C++ game engine that allows to play card games against an AI on
**Wagic, the Homebrew** is a C++ game engine that allows to play card games against an AI on:
- Android (phones and tablets)
- iOS (iPhone/iPad)
- Sony PSP
- Windows desktops
- MacOS
- Linux and derivated like Maemo or Meego
- Linux and derivatives like Maemo or Meego
It is highly customizable and allows the player to tweak the rules / create their own cards, their own themes, etc...
It is highly customizable and allows the player to tweak the rules, create their own cards, their own themes, etc...
#### [Download from GitHub Releases!](https://github.com/WagicProject/wagic/releases)
![Screenshot of shop from wololo.net](docs/img/shop.jpg)
Info, downloads, discussions and more at http://wololo.net/forum/index.php
### Documentation
![alt text](http://wololo.net/wagic/wp-content/uploads/2009/10/shop.jpg "Screenshot")
Info, downloads, discussions and more at http://wololo.net/forum/index.php (archived as of 16 Nov 2022).
Chat with the community on the [**Wagic - MTG Game** Discord](https://discord.com/invite/JHK5pVaK5p) (Feb 2023).
Developer information from the [Wagic Wiki](https://github.com/WagicProject/wagic/wiki) is also included in the [wagic/docs/](docs) folder.
### Sample round play-through video
[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/WUFSAPZuDIk/0.jpg)](http://www.youtube.com/watch?v=WUFSAPZuDIk)
[![Wagic, The Homebrew sample playthrough](docs/img/Wagic%2C%20The%20Homebrew%20sample%20playthrough.jpg)](http://www.youtube.com/watch?v=WUFSAPZuDIk)
*Wagic, The Homebrew sample playthrough on YouTube by Rolz73, 6 Feb 2014*
## Sister projects
- [WagicSyntaxPlugin
](https://github.com/Vitty85/WagicSyntaxPlugin), a Wagic developer tool by Vitty85 for [Notepad++](https://notepad-plus-plus.org/downloads/)
- [Forge](https://www.slightlymagic.net/forum/viewforum.php?f=26), a Java-based game engine similar to Wagic ([Source](https://github.com/Card-Forge/forge/))
- [XMage](http://xmage.today/), a Java-based online multiplayer digital CCG ([Source](https://github.com/magefree/mage))

View File

@@ -17,15 +17,20 @@ skip_tags: true
#---------------------------------#
environment:
DXSDK_DIR: "C:/Program Files (x86)/Microsoft DirectX SDK/"
GH_TOKEN:
secure: dYnBDQkiY5oVjIlswzBX9BJigNtBGXgGlp1tK3XbHzrDEDrs2vaKD5m+Oz5OSz1C
# scripts that run after cloning repository
install:
- ps: (new-object net.webclient).DownloadFile('https://bootstrap.pypa.io/pip/2.7/get-pip.py', 'C:/get-pip.py')
- "C:/Python27/python.exe C:/get-pip.py"
- powershell -Command "& {(new-object net.webclient).DownloadFile('https://bootstrap.pypa.io/get-pip.py', 'C:/get-pip.py')}"
- powershell -Command "& {C:/Python27/python.exe C:/get-pip.py}"
- "C:/Python27/Scripts/pip.exe install pyjavaproperties"
- "C:/Python27/Scripts/pip.exe install github3.py"
- git submodule update --init --recursive
- cd thirdparty/SDL2
# - git checkout release-2.0.3
- cd ../..
#---------------------------------#
# build configuration #
@@ -34,8 +39,16 @@ install:
# build Configuration, i.e. Debug, Release, etc.
configuration: Release
# scripts to run before build
before_build:
- echo Running cmake...
- mkdir build
- cd build
- cmake -Dbackend_sdl=ON ..
- cd ..
build:
project: projects/mtg/mtg_vs2010.sln # path to Visual Studio solution or project
project: build/wagic.sln # path to Visual Studio solution or project
#---------------------------------#
# tests configuration #
@@ -61,7 +74,7 @@ artifacts:
# scripts to run before deployment
before_deploy:
- cd projects/mtg/bin
- "C:/Python27/python.exe createWindowsZip.py"
- "C:/Python27/python.exe createWindowsZip.py -b ../../../build"
- cd ../../..
# scripts to run after deployment

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
docs/img/shop.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

1
docs/wiki Submodule

Submodule docs/wiki added at 0244ca1874

View File

@@ -0,0 +1,3 @@
add_definitions(-DANDROID -DLINUX)
add_definitions(-D_STLP_USE_SIMPLE_NODE_ALLOC -D__arm__ -D_REENTRANT -D_GLIBCXX__PTHREADS)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="0192" android:versionName="@string/app_version" package="net.wagic.app">
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application android:debuggable="true" android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<activity android:configChanges="keyboard|keyboardHidden|orientation" android:label="@string/app_name" android:name="org.libsdl.app.SDLActivity" android:screenOrientation="sensorLandscape">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:configChanges="keyboard|keyboardHidden|orientation" android:name="com.google.ads.AdActivity" android:screenOrientation="sensorLandscape"/>
</application>
<uses-sdk android:minSdkVersion="@ANDROID_NATIVE_API_LEVEL@" android:targetSdkVersion="@ANDROID_NATIVE_API_LEVEL@"/>
</manifest>

View File

@@ -0,0 +1,121 @@
if(NOT ANDROID_PACKAGE_RELEASE)
set(ANDROID_PACKAGE_RELEASE 1)
endif()
if(NOT ANDROID_PACKAGE_PLATFORM)
if(ARMEABI_V7A)
if(NEON)
set(ANDROID_PACKAGE_PLATFORM armv7a_neon)
else()
set(ANDROID_PACKAGE_PLATFORM armv7a)
endif()
elseif(ARMEABI_V6)
set(ANDROID_PACKAGE_PLATFORM armv6)
elseif(ARMEABI)
set(ANDROID_PACKAGE_PLATFORM armv5)
elseif(X86)
set(ANDROID_PACKAGE_PLATFORM x86)
elseif(MIPS)
set(ANDROID_PACKAGE_PLATFORM mips)
else()
message(ERROR "Can not automatically determine the value for ANDROID_PACKAGE_PLATFORM")
endif()
endif()
if(NOT ANDROID_PACKAGE_PLATFORM_NAME)
if(ARMEABI_V7A)
if(NEON)
set(ANDROID_PACKAGE_PLATFORM_NAME "armeabi-v7a with NEON")
else()
set(ANDROID_PACKAGE_PLATFORM_NAME "armeabi-v7a")
endif()
elseif(ARMEABI_V6)
set(ANDROID_PACKAGE_PLATFORM_NAME "armeabi-v6")
elseif(ARMEABI)
set(ANDROID_PACKAGE_PLATFORM_NAME "armeabi")
elseif(X86)
set(ANDROID_PACKAGE_PLATFORM_NAME "x86")
elseif(MIPS)
set(ANDROID_PACKAGE_PLATFORM_NAME "mips")
else()
message(ERROR "Can not automatically determine the value for ANDROID_PACKAGE_PLATFORM_NAME")
endif()
endif()
if("${ANDROID_NATIVE_API_LEVEL}" MATCHES "[1-9][0-9]*$")
set(ANDROID_SDK_VERSION ${CMAKE_MATCH_0})
endif()
if(NOT ANDROID_SDK_VERSION GREATER 7)
set(ANDROID_SDK_VERSION 8)
endif()
set(PACKAGE_DIR "${CMAKE_BINARY_DIR}/package")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/AndroidManifest.xml"
"${PACKAGE_DIR}/AndroidManifest.xml" @ONLY)
#configure_file("${CMAKE_CURRENT_SOURCE_DIR}/build.xml"
# "${PACKAGE_DIR}/build.xml" COPYONLY)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/res/values/strings.xml"
"${PACKAGE_DIR}/res/values/strings.xml" COPYONLY)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/res/drawable-hdpi/icon.png"
"${PACKAGE_DIR}/res/drawable-hdpi/icon.png" COPYONLY)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/res/drawable-ldpi/icon.png"
"${PACKAGE_DIR}/res/drawable-ldpi/icon.png" COPYONLY)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/res/drawable-mdpi/icon.png"
"${PACKAGE_DIR}/res/drawable-mdpi/icon.png" COPYONLY)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/res/layout/main.xml"
"${PACKAGE_DIR}/res/layout/main.xml" COPYONLY)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/assets/_keystore/wagic-release.keystore"
"${PACKAGE_DIR}/assets/_keystore/wagic-release.keystore" COPYONLY)
string( REGEX MATCH "[0-9]+" ANDROID_NATIVE_API_LEVEL_NUMBER "${ANDROID_NATIVE_API_LEVEL}" )
set(target_name "Wagic_${WAGIC_VERSION}_binary_pack_${ANDROID_PACKAGE_PLATFORM}")
get_target_property(wagic_location wagic LOCATION)
string(TOLOWER ${CMAKE_BUILD_TYPE} android_build_type)
set(android_proj_target_files ${ANDROID_PROJECT_FILES})
list_add_prefix(android_proj_target_files "${PACKAGE_DIR}/")
set(APK_NAME "${PACKAGE_DIR}/bin/${target_name}-${android_build_type}-unsigned.apk")
file(GLOB camera_wrappers "${OpenCV_SOURCE_DIR}/3rdparty/lib/${ANDROID_NDK_ABI_NAME}/libnative_camera_r*.so")
set(CAMERA_LIB_COMMANDS "")
foreach(wrapper ${camera_wrappers})
list(APPEND CAMERA_LIB_COMMANDS COMMAND ${CMAKE_COMMAND} -E copy "${wrapper}" "${PACKAGE_DIR}/libs/${ANDROID_NDK_ABI_NAME}/")
endforeach()
add_custom_command(
OUTPUT "${APK_NAME}"
COMMAND ${CMAKE_COMMAND} -E remove_directory "${PACKAGE_DIR}/libs"
COMMAND ${CMAKE_COMMAND} -E remove_directory "${PACKAGE_DIR}/bin"
COMMAND ${CMAKE_COMMAND} -E remove_directory "${PACKAGE_DIR}/gen"
COMMAND ${CMAKE_COMMAND} -E remove ${android_proj_target_files}
COMMAND ${CMAKE_COMMAND} -E make_directory "${PACKAGE_DIR}/src"
COMMAND ${CMAKE_COMMAND} -E make_directory "${PACKAGE_DIR}/libs/${ANDROID_NDK_ABI_NAME}/"
# COMMAND ${CMAKE_COMMAND} -E copy "${SDL2_LIBRARY}" "${PACKAGE_DIR}/libs/${ANDROID_NDK_ABI_NAME}/"
# COMMAND ${CMAKE_COMMAND} -E copy "${ZLIB_LIBRARY}" "${PACKAGE_DIR}/libs/${ANDROID_NDK_ABI_NAME}/"
# COMMAND ${CMAKE_COMMAND} -E copy "${OPENSL_LIBRARY}" "${PACKAGE_DIR}/libs/${ANDROID_NDK_ABI_NAME}/"
COMMAND ${CMAKE_COMMAND} -E copy "${wagic_location}" "${PACKAGE_DIR}/libs/${ANDROID_NDK_ABI_NAME}/"
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/src" "${PACKAGE_DIR}/src"
# COMMAND ${ANDROID_EXECUTABLE} --silent update project --path "${PACKAGE_DIR}" --target "android-${ANDROID_NATIVE_API_LEVEL}" --name "${target_name}"
COMMAND ${ANDROID_EXECUTABLE} --silent update project --path "${PACKAGE_DIR}" --target "android-10" --name "${target_name}"
COMMAND ${ANT_EXECUTABLE} -noinput -k ${android_build_type}
COMMAND ${CMAKE_COMMAND} -E touch "${APK_NAME}"
WORKING_DIRECTORY "${PACKAGE_DIR}"
MAIN_DEPENDENCY "${PACKAGE_DIR}/${ANDROID_MANIFEST_FILE}"
DEPENDS
"${PACKAGE_DIR}/res/values/strings.xml"
"${PACKAGE_DIR}/res/layout/main.xml"
"${PACKAGE_DIR}/res/drawable-mdpi/icon.png"
"${PACKAGE_DIR}/res/drawable-ldpi/icon.png"
"${PACKAGE_DIR}/res/drawable-hdpi/icon.png"
"${PACKAGE_DIR}/${ANDROID_MANIFEST_FILE}"
wagic
)
install(FILES "${APK_NAME}" DESTINATION "apk/" COMPONENT main)
add_custom_target(android_package ALL SOURCES "${APK_NAME}" )
add_dependencies(android_package wagic)

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:id="@+id/mainLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Wagic"
/>
</LinearLayout>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Wagic</string>
<string name="app_version">0.19.2</string>
<string name="info_text">Wagic v0.19.2\\nAll Rights Reserved.</string>
</resources>

View File

@@ -0,0 +1,174 @@
package net.wagic.utils;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
import android.os.Environment;
import android.util.Log;
public class StorageOptions
{
private static ArrayList<String> mMounts = new ArrayList<String>();
private static ArrayList<String> mVold = new ArrayList<String>();
public static String[] labels;
public static String[] paths;
public static int count = 0;
public static String defaultMountPoint;
public static void determineStorageOptions()
{
initializeMountPoints();
readMountsFile();
readVoldFile();
compareMountsWithVold();
testAndCleanMountsList();
setProperties();
}
private static void initializeMountPoints()
{
try
{
defaultMountPoint = Environment.getExternalStorageDirectory().getCanonicalPath();
} catch (Exception ioEx)
{
// an error occurred trying to get the canonical path, use '/mnt/sdcard' instead
defaultMountPoint = "/mnt/sdcard";
}
}
private static void readMountsFile()
{
/*
* Scan the /proc/mounts file and look for lines like this: /dev/block/vold/179:1 /mnt/sdcard vfat
* rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0602,dmask=0602,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
*
* When one is found, split it into its elements and then pull out the path to the that mount point and add it to the arraylist
*/
try
{
Scanner scanner = new Scanner(new File("/proc/mounts"));
while (scanner.hasNext())
{
String line = scanner.nextLine();
if (line.startsWith("/dev/block/vold/"))
{
String[] lineElements = line.split(" ");
lineElements[1].replaceAll(":.*$", "");
mMounts.add(lineElements[1]);
}
}
} catch (FileNotFoundException fnfex)
{
// if proc/mount doesn't exist we just use
Log.i(StorageOptions.class.getCanonicalName(), fnfex.getMessage() + ": assuming " + defaultMountPoint + " is the only mount point");
mMounts.add(defaultMountPoint);
} catch (Exception e)
{
Log.e(StorageOptions.class.getCanonicalName(), e.getMessage() + ": unknown exception while reading mounts file");
mMounts.add(defaultMountPoint);
}
}
private static void readVoldFile()
{
/*
* Scan the /system/etc/vold.fstab file and look for lines like this: dev_mount sdcard /mnt/sdcard 1 /devices/platform/s3c-sdhci.0/mmc_host/mmc0
*
* When one is found, split it into its elements and then pull out the path to the that mount point and add it to the arraylist
*/
try
{
Scanner scanner = new Scanner(new File("/system/etc/vold.fstab"));
while (scanner.hasNext())
{
String line = scanner.nextLine();
if (line.startsWith("dev_mount"))
{
String[] lineElements = line.split(" ");
lineElements[2] = lineElements[2].replaceAll(":.*$", "");
mVold.add(lineElements[2]);
}
}
} catch (FileNotFoundException fnfex)
{
// if vold.fstab doesn't exist we use the value gathered from the Environment
Log.i(StorageOptions.class.getCanonicalName(), fnfex.getMessage() + ": assuming " + defaultMountPoint + " is the only mount point");
mMounts.add(defaultMountPoint);
} catch (Exception e)
{
Log.e(StorageOptions.class.getCanonicalName(), e.getMessage() + ": unknown exception while reading mounts file");
mMounts.add(defaultMountPoint);
}
}
private static void compareMountsWithVold()
{
/*
* Sometimes the two lists of mount points will be different. We only want those mount points that are in both list.
*
* Compare the two lists together and remove items that are not in both lists.
*/
for (int i = 0; i < mMounts.size(); i++)
{
String mount = mMounts.get(i);
if (!mVold.contains(mount))
mMounts.remove(i--);
}
// don't need this anymore, clear the vold list to reduce memory
// use and to prepare it for the next time it's needed.
mVold.clear();
}
private static void testAndCleanMountsList()
{
/*
* Now that we have a cleaned list of mount paths Test each one to make sure it's a valid and available path. If it is not, remove it from the list.
*/
for (int i = 0; i < mMounts.size(); i++)
{
String mount = mMounts.get(i);
File root = new File(mount);
if (!root.exists() || !root.isDirectory() || !root.canWrite())
mMounts.remove(i--);
}
}
private static void setProperties()
{
/*
* At this point all the paths in the list should be valid. Build the public properties.
*/
ArrayList<String> mLabels = new ArrayList<String>();
int i = 1;
for (String path : mMounts)
{ // TODO: /mnt/sdcard is assumed to always mean internal storage. Use this comparison until there is a better way to do this
if ("/mnt/sdcard".equalsIgnoreCase(path))
mLabels.add("Built-in Storage");
else
mLabels.add("External SD Card " + i++);
}
labels = new String[mLabels.size()];
mLabels.toArray(labels);
paths = new String[mMounts.size()];
mMounts.toArray(paths);
count = Math.min(labels.length, paths.length);
// don't need this anymore, clear the mounts list to reduce memory
// use and to prepare it for the next time it's needed.
mMounts.clear();
}
}

View File

@@ -0,0 +1,771 @@
package org.libsdl.app;
import java.util.Arrays;
import android.app.*;
import android.content.*;
import android.view.*;
import android.view.inputmethod.BaseInputConnection;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.view.inputmethod.InputMethodManager;
import android.widget.AbsoluteLayout;
import android.os.*;
import android.util.Log;
import android.graphics.*;
import android.media.*;
import android.hardware.*;
/**
SDL Activity
*/
public class SDLActivity extends Activity {
private static final String TAG = "SDL";
// Keep track of the paused state
public static boolean mIsPaused = false, mIsSurfaceReady = false, mHasFocus = true;
// Main components
protected static SDLActivity mSingleton;
protected static SDLSurface mSurface;
protected static View mTextEdit;
protected static ViewGroup mLayout;
// This is what SDL runs in. It invokes SDL_main(), eventually
protected static Thread mSDLThread;
// Audio
protected static Thread mAudioThread;
protected static AudioTrack mAudioTrack;
// Load the .so
static {
System.loadLibrary("SDL2");
//System.loadLibrary("SDL2_image");
//System.loadLibrary("SDL2_mixer");
//System.loadLibrary("SDL2_net");
//System.loadLibrary("SDL2_ttf");
System.loadLibrary("wagic");
}
// Setup
@Override
protected void onCreate(Bundle savedInstanceState) {
//Log.v("SDL", "onCreate()");
super.onCreate(savedInstanceState);
// So we can call stuff from static callbacks
mSingleton = this;
// Set up the surface
mSurface = new SDLSurface(getApplication());
mLayout = new AbsoluteLayout(this);
mLayout.addView(mSurface);
setContentView(mLayout);
}
// Events
@Override
protected void onPause() {
Log.v("SDL", "onPause()");
super.onPause();
SDLActivity.handlePause();
}
@Override
protected void onResume() {
Log.v("SDL", "onResume()");
super.onResume();
SDLActivity.handleResume();
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
Log.v("SDL", "onWindowFocusChanged(): " + hasFocus);
SDLActivity.mHasFocus = hasFocus;
if (hasFocus) {
SDLActivity.handleResume();
}
}
@Override
public void onLowMemory() {
Log.v("SDL", "onLowMemory()");
super.onLowMemory();
SDLActivity.nativeLowMemory();
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.v("SDL", "onDestroy()");
// Send a quit message to the application
SDLActivity.nativeQuit();
// Now wait for the SDL thread to quit
if (mSDLThread != null) {
try {
mSDLThread.join();
} catch(Exception e) {
Log.v("SDL", "Problem stopping thread: " + e);
}
mSDLThread = null;
//Log.v("SDL", "Finished waiting for SDL thread");
}
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int keyCode = event.getKeyCode();
// Ignore certain special keys so they're handled by Android
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN ||
keyCode == KeyEvent.KEYCODE_VOLUME_UP ||
keyCode == KeyEvent.KEYCODE_CAMERA ||
keyCode == 168 || /* API 11: KeyEvent.KEYCODE_ZOOM_IN */
keyCode == 169 /* API 11: KeyEvent.KEYCODE_ZOOM_OUT */
) {
return false;
}
return super.dispatchKeyEvent(event);
}
/** Called by onPause or surfaceDestroyed. Even if surfaceDestroyed
* is the first to be called, mIsSurfaceReady should still be set
* to 'true' during the call to onPause (in a usual scenario).
*/
public static void handlePause() {
if (!SDLActivity.mIsPaused && SDLActivity.mIsSurfaceReady) {
SDLActivity.mIsPaused = true;
SDLActivity.nativePause();
mSurface.enableSensor(Sensor.TYPE_ACCELEROMETER, false);
}
}
/** Called by onResume or surfaceCreated. An actual resume should be done only when the surface is ready.
* Note: Some Android variants may send multiple surfaceChanged events, so we don't need to resume
* every time we get one of those events, only if it comes after surfaceDestroyed
*/
public static void handleResume() {
if (SDLActivity.mIsPaused && SDLActivity.mIsSurfaceReady && SDLActivity.mHasFocus) {
SDLActivity.mIsPaused = false;
SDLActivity.nativeResume();
mSurface.enableSensor(Sensor.TYPE_ACCELEROMETER, true);
}
}
// Messages from the SDLMain thread
static final int COMMAND_CHANGE_TITLE = 1;
static final int COMMAND_UNUSED = 2;
static final int COMMAND_TEXTEDIT_HIDE = 3;
protected static final int COMMAND_USER = 0x8000;
/**
* This method is called by SDL if SDL did not handle a message itself.
* This happens if a received message contains an unsupported command.
* Method can be overwritten to handle Messages in a different class.
* @param command the command of the message.
* @param param the parameter of the message. May be null.
* @return if the message was handled in overridden method.
*/
protected boolean onUnhandledMessage(int command, Object param) {
return false;
}
/**
* A Handler class for Messages from native SDL applications.
* It uses current Activities as target (e.g. for the title).
* static to prevent implicit references to enclosing object.
*/
protected static class SDLCommandHandler extends Handler {
@Override
public void handleMessage(Message msg) {
Context context = getContext();
if (context == null) {
Log.e(TAG, "error handling message, getContext() returned null");
return;
}
switch (msg.arg1) {
case COMMAND_CHANGE_TITLE:
if (context instanceof Activity) {
((Activity) context).setTitle((String)msg.obj);
} else {
Log.e(TAG, "error handling message, getContext() returned no Activity");
}
break;
case COMMAND_TEXTEDIT_HIDE:
if (mTextEdit != null) {
mTextEdit.setVisibility(View.GONE);
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mTextEdit.getWindowToken(), 0);
}
break;
default:
if ((context instanceof SDLActivity) && !((SDLActivity) context).onUnhandledMessage(msg.arg1, msg.obj)) {
Log.e(TAG, "error handling message, command is " + msg.arg1);
}
}
}
}
// Handler for the messages
Handler commandHandler = new SDLCommandHandler();
// Send a message from the SDLMain thread
boolean sendCommand(int command, Object data) {
Message msg = commandHandler.obtainMessage();
msg.arg1 = command;
msg.obj = data;
return commandHandler.sendMessage(msg);
}
// C functions we call
public static native void nativeInit();
public static native void nativeLowMemory();
public static native void nativeQuit();
public static native void nativePause();
public static native void nativeResume();
public static native void onNativeResize(int x, int y, int format);
public static native void onNativeKeyDown(int keycode);
public static native void onNativeKeyUp(int keycode);
public static native void onNativeKeyboardFocusLost();
public static native void onNativeTouch(int touchDevId, int pointerFingerId,
int action, float x,
float y, float p);
public static native void onNativeAccel(float x, float y, float z);
public static native void onNativeSurfaceChanged();
public static native void onNativeSurfaceDestroyed();
public static native void nativeFlipBuffers();
public static void flipBuffers() {
SDLActivity.nativeFlipBuffers();
}
public static boolean setActivityTitle(String title) {
// Called from SDLMain() thread and can't directly affect the view
return mSingleton.sendCommand(COMMAND_CHANGE_TITLE, title);
}
public static boolean sendMessage(int command, int param) {
return mSingleton.sendCommand(command, Integer.valueOf(param));
}
public static Context getContext() {
return mSingleton;
}
static class ShowTextInputTask implements Runnable {
/*
* This is used to regulate the pan&scan method to have some offset from
* the bottom edge of the input region and the top edge of an input
* method (soft keyboard)
*/
static final int HEIGHT_PADDING = 15;
public int x, y, w, h;
public ShowTextInputTask(int x, int y, int w, int h) {
this.x = x;
this.y = y;
this.w = w;
this.h = h;
}
@Override
public void run() {
AbsoluteLayout.LayoutParams params = new AbsoluteLayout.LayoutParams(
w, h + HEIGHT_PADDING, x, y);
if (mTextEdit == null) {
mTextEdit = new DummyEdit(getContext());
mLayout.addView(mTextEdit, params);
} else {
mTextEdit.setLayoutParams(params);
}
mTextEdit.setVisibility(View.VISIBLE);
mTextEdit.requestFocus();
InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(mTextEdit, 0);
}
}
public static boolean showTextInput(int x, int y, int w, int h) {
// Transfer the task to the main thread as a Runnable
return mSingleton.commandHandler.post(new ShowTextInputTask(x, y, w, h));
}
public static Surface getNativeSurface() {
return SDLActivity.mSurface.getNativeSurface();
}
// Audio
public static int audioInit(int sampleRate, boolean is16Bit, boolean isStereo, int desiredFrames) {
int channelConfig = isStereo ? AudioFormat.CHANNEL_CONFIGURATION_STEREO : AudioFormat.CHANNEL_CONFIGURATION_MONO;
int audioFormat = is16Bit ? AudioFormat.ENCODING_PCM_16BIT : AudioFormat.ENCODING_PCM_8BIT;
int frameSize = (isStereo ? 2 : 1) * (is16Bit ? 2 : 1);
Log.v("SDL", "SDL audio: wanted " + (isStereo ? "stereo" : "mono") + " " + (is16Bit ? "16-bit" : "8-bit") + " " + (sampleRate / 1000f) + "kHz, " + desiredFrames + " frames buffer");
// Let the user pick a larger buffer if they really want -- but ye
// gods they probably shouldn't, the minimums are horrifyingly high
// latency already
desiredFrames = Math.max(desiredFrames, (AudioTrack.getMinBufferSize(sampleRate, channelConfig, audioFormat) + frameSize - 1) / frameSize);
if (mAudioTrack == null) {
mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate,
channelConfig, audioFormat, desiredFrames * frameSize, AudioTrack.MODE_STREAM);
// Instantiating AudioTrack can "succeed" without an exception and the track may still be invalid
// Ref: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/media/java/android/media/AudioTrack.java
// Ref: http://developer.android.com/reference/android/media/AudioTrack.html#getState()
if (mAudioTrack.getState() != AudioTrack.STATE_INITIALIZED) {
Log.e("SDL", "Failed during initialization of Audio Track");
mAudioTrack = null;
return -1;
}
mAudioTrack.play();
}
Log.v("SDL", "SDL audio: got " + ((mAudioTrack.getChannelCount() >= 2) ? "stereo" : "mono") + " " + ((mAudioTrack.getAudioFormat() == AudioFormat.ENCODING_PCM_16BIT) ? "16-bit" : "8-bit") + " " + (mAudioTrack.getSampleRate() / 1000f) + "kHz, " + desiredFrames + " frames buffer");
return 0;
}
public static void audioWriteShortBuffer(short[] buffer) {
for (int i = 0; i < buffer.length; ) {
int result = mAudioTrack.write(buffer, i, buffer.length - i);
if (result > 0) {
i += result;
} else if (result == 0) {
try {
Thread.sleep(1);
} catch(InterruptedException e) {
// Nom nom
}
} else {
Log.w("SDL", "SDL audio: error return from write(short)");
return;
}
}
}
public static void audioWriteByteBuffer(byte[] buffer) {
for (int i = 0; i < buffer.length; ) {
int result = mAudioTrack.write(buffer, i, buffer.length - i);
if (result > 0) {
i += result;
} else if (result == 0) {
try {
Thread.sleep(1);
} catch(InterruptedException e) {
// Nom nom
}
} else {
Log.w("SDL", "SDL audio: error return from write(byte)");
return;
}
}
}
public static void audioQuit() {
if (mAudioTrack != null) {
mAudioTrack.stop();
mAudioTrack = null;
}
}
// Input
/**
* @return an array which may be empty but is never null.
*/
public static int[] inputGetInputDeviceIds(int sources) {
int[] ids = InputDevice.getDeviceIds();
int[] filtered = new int[ids.length];
int used = 0;
for (int i = 0; i < ids.length; ++i) {
InputDevice device = InputDevice.getDevice(ids[i]);
if ((device != null) && ((device.getSources() & sources) != 0)) {
filtered[used++] = device.getId();
}
}
return Arrays.copyOf(filtered, used);
}
}
/**
Simple nativeInit() runnable
*/
class SDLMain implements Runnable {
@Override
public void run() {
// Runs SDL_main()
SDLActivity.nativeInit();
//Log.v("SDL", "SDL thread terminated");
}
}
/**
SDLSurface. This is what we draw on, so we need to know when it's created
in order to do anything useful.
Because of this, that's where we set up the SDL thread
*/
class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
View.OnKeyListener, View.OnTouchListener, SensorEventListener {
// Sensors
protected static SensorManager mSensorManager;
protected static Display mDisplay;
// Keep track of the surface size to normalize touch events
protected static float mWidth, mHeight;
// Startup
public SDLSurface(Context context) {
super(context);
getHolder().addCallback(this);
setFocusable(true);
setFocusableInTouchMode(true);
requestFocus();
setOnKeyListener(this);
setOnTouchListener(this);
mDisplay = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
// Some arbitrary defaults to avoid a potential division by zero
mWidth = 1.0f;
mHeight = 1.0f;
}
public Surface getNativeSurface() {
return getHolder().getSurface();
}
// Called when we have a valid drawing surface
@Override
public void surfaceCreated(SurfaceHolder holder) {
Log.v("SDL", "surfaceCreated()");
holder.setType(SurfaceHolder.SURFACE_TYPE_GPU);
}
// Called when we lose the surface
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
Log.v("SDL", "surfaceDestroyed()");
// Call this *before* setting mIsSurfaceReady to 'false'
SDLActivity.handlePause();
SDLActivity.mIsSurfaceReady = false;
SDLActivity.onNativeSurfaceDestroyed();
}
// Called when the surface is resized
@Override
public void surfaceChanged(SurfaceHolder holder,
int format, int width, int height) {
Log.v("SDL", "surfaceChanged()");
int sdlFormat = 0x15151002; // SDL_PIXELFORMAT_RGB565 by default
switch (format) {
case PixelFormat.A_8:
Log.v("SDL", "pixel format A_8");
break;
case PixelFormat.LA_88:
Log.v("SDL", "pixel format LA_88");
break;
case PixelFormat.L_8:
Log.v("SDL", "pixel format L_8");
break;
case PixelFormat.RGBA_4444:
Log.v("SDL", "pixel format RGBA_4444");
sdlFormat = 0x15421002; // SDL_PIXELFORMAT_RGBA4444
break;
case PixelFormat.RGBA_5551:
Log.v("SDL", "pixel format RGBA_5551");
sdlFormat = 0x15441002; // SDL_PIXELFORMAT_RGBA5551
break;
case PixelFormat.RGBA_8888:
Log.v("SDL", "pixel format RGBA_8888");
sdlFormat = 0x16462004; // SDL_PIXELFORMAT_RGBA8888
break;
case PixelFormat.RGBX_8888:
Log.v("SDL", "pixel format RGBX_8888");
sdlFormat = 0x16261804; // SDL_PIXELFORMAT_RGBX8888
break;
case PixelFormat.RGB_332:
Log.v("SDL", "pixel format RGB_332");
sdlFormat = 0x14110801; // SDL_PIXELFORMAT_RGB332
break;
case PixelFormat.RGB_565:
Log.v("SDL", "pixel format RGB_565");
sdlFormat = 0x15151002; // SDL_PIXELFORMAT_RGB565
break;
case PixelFormat.RGB_888:
Log.v("SDL", "pixel format RGB_888");
// Not sure this is right, maybe SDL_PIXELFORMAT_RGB24 instead?
sdlFormat = 0x16161804; // SDL_PIXELFORMAT_RGB888
break;
default:
Log.v("SDL", "pixel format unknown " + format);
break;
}
mWidth = width;
mHeight = height;
SDLActivity.onNativeResize(width, height, sdlFormat);
Log.v("SDL", "Window size:" + width + "x"+height);
// Set mIsSurfaceReady to 'true' *before* making a call to handleResume
SDLActivity.mIsSurfaceReady = true;
SDLActivity.onNativeSurfaceChanged();
if (SDLActivity.mSDLThread == null) {
// This is the entry point to the C app.
// Start up the C app thread and enable sensor input for the first time
SDLActivity.mSDLThread = new Thread(new SDLMain(), "SDLThread");
enableSensor(Sensor.TYPE_ACCELEROMETER, true);
SDLActivity.mSDLThread.start();
}
}
// unused
@Override
public void onDraw(Canvas canvas) {}
// Key events
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
//Log.v("SDL", "key down: " + keyCode);
SDLActivity.onNativeKeyDown(keyCode);
return true;
}
else if (event.getAction() == KeyEvent.ACTION_UP) {
//Log.v("SDL", "key up: " + keyCode);
SDLActivity.onNativeKeyUp(keyCode);
return true;
}
return false;
}
// Touch events
@Override
public boolean onTouch(View v, MotionEvent event) {
final int touchDevId = event.getDeviceId();
final int pointerCount = event.getPointerCount();
// touchId, pointerId, action, x, y, pressure
int actionPointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT; /* API 8: event.getActionIndex(); */
int pointerFingerId = event.getPointerId(actionPointerIndex);
int action = (event.getAction() & MotionEvent.ACTION_MASK); /* API 8: event.getActionMasked(); */
float x = event.getX(actionPointerIndex) / mWidth;
float y = event.getY(actionPointerIndex) / mHeight;
float p = event.getPressure(actionPointerIndex);
if (action == MotionEvent.ACTION_MOVE && pointerCount > 1) {
// TODO send motion to every pointer if its position has
// changed since prev event.
for (int i = 0; i < pointerCount; i++) {
pointerFingerId = event.getPointerId(i);
x = event.getX(i) / mWidth;
y = event.getY(i) / mHeight;
p = event.getPressure(i);
SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p);
}
} else {
SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p);
}
return true;
}
// Sensor events
public void enableSensor(int sensortype, boolean enabled) {
// TODO: This uses getDefaultSensor - what if we have >1 accels?
if (enabled) {
mSensorManager.registerListener(this,
mSensorManager.getDefaultSensor(sensortype),
SensorManager.SENSOR_DELAY_GAME, null);
} else {
mSensorManager.unregisterListener(this,
mSensorManager.getDefaultSensor(sensortype));
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
float x, y;
switch (mDisplay.getRotation()) {
case Surface.ROTATION_90:
x = -event.values[1];
y = event.values[0];
break;
case Surface.ROTATION_270:
x = event.values[1];
y = -event.values[0];
break;
case Surface.ROTATION_180:
x = -event.values[1];
y = -event.values[0];
break;
default:
x = event.values[0];
y = event.values[1];
break;
}
SDLActivity.onNativeAccel(-x / SensorManager.GRAVITY_EARTH,
y / SensorManager.GRAVITY_EARTH,
event.values[2] / SensorManager.GRAVITY_EARTH - 1);
}
}
}
/* This is a fake invisible editor view that receives the input and defines the
* pan&scan region
*/
class DummyEdit extends View implements View.OnKeyListener {
InputConnection ic;
public DummyEdit(Context context) {
super(context);
setFocusableInTouchMode(true);
setFocusable(true);
setOnKeyListener(this);
}
@Override
public boolean onCheckIsTextEditor() {
return true;
}
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// This handles the hardware keyboard input
if (event.isPrintingKey()) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
ic.commitText(String.valueOf((char) event.getUnicodeChar()), 1);
}
return true;
}
if (event.getAction() == KeyEvent.ACTION_DOWN) {
SDLActivity.onNativeKeyDown(keyCode);
return true;
} else if (event.getAction() == KeyEvent.ACTION_UP) {
SDLActivity.onNativeKeyUp(keyCode);
return true;
}
return false;
}
//
@Override
public boolean onKeyPreIme (int keyCode, KeyEvent event) {
// As seen on StackOverflow: http://stackoverflow.com/questions/7634346/keyboard-hide-event
// FIXME: Discussion at http://bugzilla.libsdl.org/show_bug.cgi?id=1639
// FIXME: This is not a 100% effective solution to the problem of detecting if the keyboard is showing or not
// FIXME: A more effective solution would be to change our Layout from AbsoluteLayout to Relative or Linear
// FIXME: And determine the keyboard presence doing this: http://stackoverflow.com/questions/2150078/how-to-check-visibility-of-software-keyboard-in-android
// FIXME: An even more effective way would be if Android provided this out of the box, but where would the fun be in that :)
if (event.getAction()==KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {
if (SDLActivity.mTextEdit != null && SDLActivity.mTextEdit.getVisibility() == View.VISIBLE) {
SDLActivity.onNativeKeyboardFocusLost();
}
}
return super.onKeyPreIme(keyCode, event);
}
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
ic = new SDLInputConnection(this, true);
outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI
| 33554432 /* API 11: EditorInfo.IME_FLAG_NO_FULLSCREEN */;
return ic;
}
}
class SDLInputConnection extends BaseInputConnection {
public SDLInputConnection(View targetView, boolean fullEditor) {
super(targetView, fullEditor);
}
@Override
public boolean sendKeyEvent(KeyEvent event) {
/*
* This handles the keycodes from soft keyboard (and IME-translated
* input from hardkeyboard)
*/
int keyCode = event.getKeyCode();
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (event.isPrintingKey()) {
commitText(String.valueOf((char) event.getUnicodeChar()), 1);
}
SDLActivity.onNativeKeyDown(keyCode);
return true;
} else if (event.getAction() == KeyEvent.ACTION_UP) {
SDLActivity.onNativeKeyUp(keyCode);
return true;
}
return super.sendKeyEvent(event);
}
@Override
public boolean commitText(CharSequence text, int newCursorPosition) {
nativeCommitText(text.toString(), newCursorPosition);
return super.commitText(text, newCursorPosition);
}
@Override
public boolean setComposingText(CharSequence text, int newCursorPosition) {
nativeSetComposingText(text.toString(), newCursorPosition);
return super.setComposingText(text, newCursorPosition);
}
public native void nativeCommitText(String text, int newCursorPosition);
public native void nativeSetComposingText(String text, int newCursorPosition);
}

View File

@@ -0,0 +1,8 @@
set(CMAKE_CXX_FLAGS "-s USE_SDL=2 -s USE_ZLIB=1 -s FULL_ES2=1 -std=c++11 -s TOTAL_MEMORY=16777216 -O0 --preload-file ../../../projects/mtg/bin/Res@/")
#set(CMAKE_CXX_FLAGS "-s USE_SDL=2 -s FULL_ES2=1 -std=c++11 -g4 -s ALLOW_MEMORY_GROWTH=1 --preload-file ../../../projects/mtg/bin/Res@/")
set(CMAKE_EXECUTABLE_SUFFIX ".html")
add_definitions(-DLINUX)
add_definitions(-D_DEBUG)
add_definitions(-DUSERDIR=".wagic")
add_definitions(-DRESDIR="/")
add_definitions(-DGL_ES_VERSION_2_0)

View File

@@ -0,0 +1,5 @@
add_definitions(-DLINUX)
add_definitions(-DUSERDIR=".wagic")
add_definitions(-DRESDIR="Res")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -std=c++0x")
set(CMAKE_PREFIX_PATH "/usr/local/opt/qt5")

View File

@@ -0,0 +1,5 @@
add_definitions(-DPSP -G0)
add_definitions(-D_PSP_FW_VERSION=371)
add_definitions(-DDEVHOOK -DPSPFW3XX)
include_directories(${PSPSDK_PATH}/include)

View File

@@ -0,0 +1,4 @@
add_definitions(-DLINUX)
add_definitions(-DUSERDIR=".wagic")
add_definitions(-DRESDIR="Res")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")

View File

@@ -0,0 +1,3 @@
add_definitions(-DWIN32)
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG")

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="0231"
android:versionCode="0240"
android:installLocation="preferExternal"
android:versionName="@string/app_version"
package="net.wagic.app">

View File

@@ -1,6 +1,9 @@
APP_PROJECT_PATH := $(call my-dir)/..
APP_CPPFLAGS += -frtti -fexceptions
APP_ABI := armeabi-v7a
APP_ABI := arm64-v8a
APP_PLATFORM := android-21
APP_CFLAGS += -march=armv8.1-a
APP_CPPFLAGS += -D__ARM_FEATURE_LSE=1
#APP_ABI := x86 # mainly for emulators
APP_STL := c++_static
APP_MODULES := libpng libjpeg main SDL

Binary file not shown.

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Wagic</string>
<string name="app_version">0.23.1</string>
<string name="app_version">0.20.0</string>
<string name="info_text">All Rights Reserved.</string>
</resources>

File diff suppressed because it is too large Load Diff

View File

@@ -110,6 +110,7 @@ public class SDLActivity extends Activity implements OnKeyListener {
public static final String kSaveDataPathPreference = "StorageDataLocation";
public static final String kWagicDataStorageOptionsKey = "dataStorageOptions";
public static final int kStorageDataOptionsMenuId = 2000;
public static final int kdownloadResOptionsMenuId = 4000;
public static final int kOtherOptionsMenuId = 3000;
static {
@@ -170,6 +171,7 @@ public class SDLActivity extends Activity implements OnKeyListener {
MenuItem downloader;
MenuItem about;
MenuItem storage;
MenuItem resource;
// Handler for the messages
Handler commandHandler = new Handler() {
@@ -951,6 +953,9 @@ public class SDLActivity extends Activity implements OnKeyListener {
about = menu.add(Menu.NONE, 4, 4, "About");
storage = settingsMenu.add(kStorageDataOptionsMenuId,
kStorageDataOptionsMenuId, Menu.NONE, "Storage Data Options");
resource = settingsMenu.add(kdownloadResOptionsMenuId,
kdownloadResOptionsMenuId, Menu.NONE, "Download Core & Quit");
}
@Override
@@ -966,6 +971,10 @@ public class SDLActivity extends Activity implements OnKeyListener {
if (itemId == kStorageDataOptionsMenuId) {
displayStorageOptions();
} else if (itemId == kdownloadResOptionsMenuId) {
File oldRes = new File(getSystemStorageLocation() + RES_FILENAME);
oldRes.delete();
startDownload();
} else if (itemId == 2) {
importDeckOptions();
} else if (itemId == 3) {
@@ -1000,7 +1009,7 @@ public class SDLActivity extends Activity implements OnKeyListener {
public void showSettingsSubMenu() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Settings Menu");
String[] choices = { "Storage Data Options" };
String[] choices = { "Storage Data Options", "Download Core & Quit" };
builder.setItems(choices,
new DialogInterface.OnClickListener() {
@Override
@@ -1009,6 +1018,9 @@ public class SDLActivity extends Activity implements OnKeyListener {
case 0:
onOptionsItemSelected(storage);
break;
case 1:
onOptionsItemSelected(resource);
break;
}
}
});
@@ -1122,13 +1134,41 @@ public class SDLActivity extends Activity implements OnKeyListener {
prepareOptionMenu(null);
}
public void forceResDownload(final File oldRes) {
AlertDialog.Builder resChooser = new AlertDialog.Builder(this);
final SDLActivity parent = this;
resChooser.setTitle("Do you want to download latest core file?");
resChooser.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
FrameLayout _videoLayout = new FrameLayout(parent);
setContentView(_videoLayout,
new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
oldRes.delete();
startDownload();
}
});
resChooser.setNegativeButton("No",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
mainDisplay();
}
});
resChooser.create().show();
}
public void initializeGame() {
String coreFileLocation = getSystemStorageLocation() + RES_FILENAME;
File file = new File(coreFileLocation);
if (file.exists()) {
mainDisplay();
forceResDownload(file);
} else {
FrameLayout _videoLayout = new FrameLayout(this);
setContentView(_videoLayout,

244
projects/mtg/CMakeLists.txt Normal file
View File

@@ -0,0 +1,244 @@
#MTGs common sources
set(MTG_generic_src
src/AbilityParser.cpp
src/ActionElement.cpp
src/ActionLayer.cpp
src/ActionStack.cpp
src/AIHints.cpp
src/AIMomirPlayer.cpp
src/AIPlayer.cpp
src/AIPlayerBaka.cpp
src/AIStats.cpp
src/AllAbilities.cpp
src/CardDescriptor.cpp
src/CardDisplay.cpp
src/CardGui.cpp
src/CardPrimitive.cpp
src/CardSelector.cpp
src/CardSelectorSingleton.cpp
src/CarouselDeckView.cpp
src/Closest.cpp
src/Counters.cpp
src/Credits.cpp
src/Damage.cpp
src/DamagerDamaged.cpp
src/DeckDataWrapper.cpp
src/DeckEditorMenu.cpp
src/DeckManager.cpp
src/DeckMenu.cpp
src/DeckMenuItem.cpp
src/DeckMetaData.cpp
src/DeckStats.cpp
src/DeckView.cpp
src/DuelLayers.cpp
src/ExtraCost.cpp
src/GameApp.cpp
src/GameLauncher.cpp
src/GameObserver.cpp
src/GameOptions.cpp
src/GameStateAwards.cpp
src/GameState.cpp
src/GameStateDeckViewer.cpp
src/GameStateDuel.cpp
src/GameStateMenu.cpp
src/GameStateOptions.cpp
src/GameStateShop.cpp
src/GameStateStory.cpp
src/GameStateTransitions.cpp
src/GridDeckView.cpp
src/GuiAvatars.cpp
src/GuiBackground.cpp
src/GuiCardsController.cpp
src/GuiCombat.cpp
src/GuiFrame.cpp
src/GuiHand.cpp
src/GuiLayers.cpp
src/GuiMana.cpp
src/GuiPhaseBar.cpp
src/GuiPlay.cpp
src/GuiStatic.cpp
src/IconButton.cpp
src/InteractiveButton.cpp
src/ManaCost.cpp
src/ManaCostHybrid.cpp
src/MenuItem.cpp
src/ModRules.cpp
src/MTGAbility.cpp
src/MTGCard.cpp
src/MTGCardInstance.cpp
src/MTGDeck.cpp
src/MTGDefinitions.cpp
src/MTGGamePhase.cpp
src/MTGGameZones.cpp
src/MTGPack.cpp
src/MTGRules.cpp
src/ObjectAnalytics.cpp
src/OptionItem.cpp
src/PhaseRing.cpp
src/Player.cpp
src/PlayerData.cpp
src/PlayGuiObject.cpp
src/PlayGuiObjectController.cpp
src/PlayRestrictions.cpp
src/Pos.cpp
src/PriceList.cpp
src/ReplacementEffects.cpp
src/Rules.cpp
src/SimpleMenu.cpp
src/SimpleMenuItem.cpp
src/SimpleButton.cpp
src/SimplePad.cpp
src/SimplePopup.cpp
src/StoryFlow.cpp
src/Subtypes.cpp
src/StyleManager.cpp
src/TargetChooser.cpp
src/TargetsList.cpp
src/Tasks.cpp
src/TextScroller.cpp
src/ThisDescriptor.cpp
src/Token.cpp
src/Translate.cpp
src/TranslateKeys.cpp
src/Trash.cpp
src/utils.cpp
src/WCachedResource.cpp
src/WDataSrc.cpp
src/WEvent.cpp
src/WFilter.cpp
src/WFont.cpp
src/WGui.cpp
src/WResourceManager.cpp
src/WParsedInt.cpp
)
set(MTG_network_src src/NetworkPlayer.cpp)
#the sources we need if we compile a graphical qt version
#TODO: add declarative version since this only works with QWidget right now
set(MTG_qt_graphic_src
src/qt/filedownloader.cpp
src/qt/corewrapper.cpp
include/qt/corewrapper.h #so automoc finds it
include/qt/filedownloader.h
src/Qtmain.cpp)
#the sources we need to compile the testsuit
set(MTG_qt_console_src
src/Qtconsole.cpp
src/TestSuiteAI.cpp)
set(MTG_sdl_src
src/SDLmain.cpp)
set(MTG_android_sdl_src
src/SDLmain.cpp)
set(MTG_iOS_src
iOS/UI/WagicDownloadProgressViewController.m
iOS/asi-http-request/ASIAuthenticationDialog.m
iOS/asi-http-request/ASIDataCompressor.m
iOS/asi-http-request/ASIDataDecompressor.m
iOS/asi-http-request/ASIDownloadCache.m
iOS/asi-http-request/ASIFormDataRequest.m
iOS/asi-http-request/ASIHTTPRequest.m
iOS/asi-http-request/ASIInputStream.m
iOS/asi-http-request/ASINetworkQueue.m
iOS/SoundManager/SoundManager.m
iOS/SoundManager/MyOpenALSupport.c
iOS/Reachability/Reachability/Reachability.m
iOS/ZipArchive/ZipArchive.mm)
set(MTG_iOS_INCLUDE_DIRS iOS/UI iOS/Reachability/Reachability iOS/asi-http-request iOS/ZipArchive iOS/SoundManager)
set(MTG_INCLUDE_DIRS include include/qt)
set(JGE_INCLUDE_DIRS ../../JGE/include ../../JGE/include/hge)
set(JGE_LIBRARY jge)
set(EXTRA_INCLUDE_DIR extra)
#turn moc on
if(backend_qt_console OR backend_qt_widget)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC TRUE)
endif()
if(backend_qt_console)
if(UNIX AND NOT ANDROID)
include_directories(${MTG_INCLUDE_DIRS} ${JGE_INCLUDE_DIRS} ${ZIPFS_INCLUDE_DIR} ${Qt5Core_INCLUDE_DIRS} ${Qt5Multimedia_INCLUDE_DIRS}
${UNZIP_INCLUDE_DIR} ${HGE_INCLUDE_DIR} ${TINYXML_INCLUDE_DIR} ${QT_MKSPECS_DIR}/default)
add_executable(wagic ${MTG_generic_src} ${MTG_qt_console_src} ${MTG_network_src})
target_link_libraries(wagic ${JGE_LIBRARY} ${Qt5Core_INCLUDE_DIRS} ${Qt5Multimedia_INCLUDE_DIRS} ${TINYXML_LIBRARIES}
${HGE_LIBRARY} ${ZLIB_LIBRARIES})
else()
message(FATAL_ERROR "qt-console builds are only supported on unix platforms")
endif()
elseif(backend_qt_widget)
if(UNIX AND NOT ANDROID)
include_directories(${MTG_INCLUDE_DIRS} ${JGE_INCLUDE_DIRS} ${ZIPFS_INCLUDE_DIR} ${Qt5Core_INCLUDE_DIRS} ${Qt5Multimedia_INCLUDE_DIRS}
${UNZIP_INCLUDE_DIR} ${HGE_INCLUDE_DIR} ${TINYXML_INCLUDE_DIR} ${QT_MKSPECS_DIR}/default)
add_executable(wagic ${MTG_generic_src} ${MTG_qt_graphic_src} ${MTG_network_src})
target_link_libraries(wagic ${JGE_LIBRARY} ${Qt5Core_INCLUDE_DIRS} ${Qt5Multimedia_INCLUDE_DIRS} ${OPENGL_LIBRARIES} ${TINYXML_LIBRARIES}
${HGE_LIBRARY} ${ZLIB_LIBRARIES})# ${X11_LIBRARIES})
else()
message(FATAL_ERROR "qt-widget builds are only supported on unix platforms")
endif()
elseif(backend_sdl)
if((UNIX OR EMSCRIPTEN) AND NOT ANDROID)
include_directories(${MTG_INCLUDE_DIRS} ${JGE_INCLUDE_DIRS} ${SDL2_INCLUDE_DIR} ${ZIPFS_INCLUDE_DIR} ${UNZIP_INCLUDE_DIR} ${HGE_INCLUDE_DIR} ${TINYXML_INCLUDE_DIR} ${ZLIB_INCLUDE_DIRS})
add_executable(wagic ${MTG_generic_src} ${MTG_sdl_src} ${MTG_network_src} src/TestSuiteAI.cpp src/AIPlayerBakaB.cpp)
target_link_libraries(wagic ${JGE_LIBRARY} ${SDL2_LIBRARY} ${OPENGL_LIBRARIES} ${TINYXML_LIBRARIES} ${HGE_LIBRARY} ${ZLIB_LIBRARIES})
elseif(ANDROID)
include_directories(${MTG_INCLUDE_DIRS} ${JGE_INCLUDE_DIRS} ${SDL2_INCLUDE_DIR} ${ZIPFS_INCLUDE_DIR} ${BOOST_INCLUDE_DIRS} ${UNZIP_INCLUDE_DIR} ${HGE_INCLUDE_DIR} ${TINYXML_INCLUDE_DIR})
#we should try to get rid of this hack
add_library(wagic SHARED ${MTG_generic_src} ${MTG_network_src} ${MTG_android_sdl_src} src/TestSuiteAI.cpp)
target_link_libraries(wagic ${JGE_LIBRARY} ${SDL2_LIBRARY} ${OPENGL_LIBRARIES} ${TINYXML_LIBRARIES} ${HGE_LIBRARY} ${ZLIB_LIBRARIES})
elseif(WIN32)
include_directories(${EXTRA_INCLUDE_DIR} ${MTG_INCLUDE_DIRS} ${JGE_INCLUDE_DIRS} ${SDL2_INCLUDE_DIR} ${ZIPFS_INCLUDE_DIR}
${Boost_INCLUDE_DIRS} ${UNZIP_INCLUDE_DIR} ${HGE_INCLUDE_DIR} ${TINYXML_INCLUDE_DIR} ${ZLIB_INCLUDE_DIRS})
add_executable(wagic ${MTG_generic_src} ${MTG_sdl_src} src/TestSuiteAI.cpp src/AIPlayerBakaB.cpp)
link_directories(${Boost_LIBRARY_DIR} ${SDL2_LIBRARY_DIR})
target_link_libraries(wagic PRIVATE
${JGE_LIBRARY}
${PNG_LIBRARIES} # Explicitly link libpng
${ZIPFS_LIBRARY} # Explicitly link libzipFS
${SDL2_LIBRARY}
${OPENGL_LIBRARIES}
${TINYXML_LIBRARIES}
${HGE_LIBRARY}
${BOOST_date_time}
${ZLIB_LIBRARIES} # Ensure zlib is linked
)
endif()
elseif(backend_psp)
if(PSP)
#${PSPSDK_PATH}/include
include_directories(${MTG_INCLUDE_DIRS} ${JGE_INCLUDE_DIRS} ${TINYXML_INCLUDE_DIR} ${ZIPFS_INCLUDE_DIR}
${UNZIP_INCLUDE_DIR} ${BOOST_INCLUDE_DIRS} ${GIF_INCLUDE_DIR} ${HGETOOLS_INCLUDE_DIRS})
add_executable(wagic ${MTG_generic_src} ${MTG_network_src})
target_link_libraries(wagic ${JGE_LIBRARY} ${PSPSDK_LIB} ${HGETOOLS_LIBRARY} ${FREETYPE_LIB} ${JPEG_LIBRARY}
${GIF_LIBRARIES} ${PNG_LIBRARIES} z m ${MIKMOD_LIBRARY} ${TINYXML_LIBRARIES}
stdc++ ${PSPSDK_REQUIRED_LIB})
set(PRXSPECS_FILE "${PSPSDK_PATH}/lib/prxspecs")
set(LINKFILE_FILE "${PSPSDK_PATH}/lib/linkfile.prx")
get_property(wagic_elf_location TARGET wagic PROPERTY LOCATION)
get_filename_component(wagic_elf_directory ${wagic_elf_location} PATH)
set_target_properties(wagic PROPERTIES LINK_FLAGS "-specs=${PRXSPECS_FILE} -Wl,-q,-T${LINKFILE_FILE}")
add_custom_command(TARGET wagic POST_BUILD
COMMAND ${PSPSDK_MKSFO_COMMAND} ARGS "'Wagic, the Homebrew?!'" "${wagic_elf_directory}/PARAM.SFO"
COMMAND ${PSPSDK_FIXUP_IMPORTS_COMMAND} ARGS ${wagic_elf_location}
COMMAND ${PSPSDK_PRXGEN_COMMAND} ARGS ${wagic_elf_location} "${wagic_elf_directory}/wagic.prx"
COMMAND ${PSPSDK_PACK_PBP_COMMAND} ARGS ${wagic_elf_directory}/EBOOT.PBP ${wagic_elf_directory}/PARAM.SFO ${CMAKE_CURRENT_SOURCE_DIR}/icon.png NULL ${CMAKE_CURRENT_SOURCE_DIR}/pic0.png ${CMAKE_CURRENT_SOURCE_DIR}/pic1.png NULL "${wagic_elf_directory}/wagic.prx" NULL)
else()
message(FATAL_ERROR "use the cross-compile toolchain to build as the psp target")
endif()
endif()
if(IOS)
set(MTG_generic_src ${MTG_generic_src} ${MTG_iOS_src} PARENT_SCOPE)
set(MTG_INCLUDE_DIRS ${MTG_INCLUDE_DIRS} ${MTG_iOS_INCLUDE_DIRS} PARENT_SCOPE)
endif()

File diff suppressed because it is too large Load Diff

View File

@@ -1,26 +1,84 @@
#NAME:The KOR
#DESC:The Kor never stand down.Golem-Skin Gauntlets (MRD) *1
Plains (8ED) *4
Plains (8ED) *4
Bonesplitter (MRD) *2
Vulshok Battlegear (MRD) *1
Plains (MRD) *4
Plains (MRD) *4
Plains (MRD) *4
Cranial Plating (5DN) *2
Skyhunter Skirmisher (5DN) *2
Paradise Mantle (5DN) *2
Shuko (BOK) *2
Umezawa's Jitte (BOK) *2
Kor Duelist (ZEN) *2
Spidersilk Net (ZEN) *1
Bone Saw (CFX) *2
Armament Master (ZEN) *3
Lone Missionary (ROE) *2
Pennon Blade (ROE) *1
Kor Line-Slinger (ROE) *2
Kitesail Apprentice (WWK) *2
Stoneforge Mystic (WWK) *2
Accorder's Shield (SOM) *2
Swords to Plowshares (EVT) *2
Kor Hookmaster (EVT) *2
#NAME:Tergrid Commander
#DESC:The Tergrid Commander Deck
#DESC:Refined for Wagic by Bob
#HINT:castpriority(commander,*)
Ancient Tomb (EXP) *1
Animate Dead (VMA) *1
Arcane Signet (AFC) *1
Archon of Cruelty (MH2) *1
Barren Moor (C19) *1
Blackblade Reforged (SS2) *1
Bojuka Bog (C19) *1
Braids, Cabal Minion (EMA) *1
Butcher of Malakir *1
Charcoal Diamond *1
Command Beacon (PZ1) *1
Commander's Sphere (C19) *1
Corrupt *1
Crypt Ghast (GTC) *1
Damnation (MM3) *1
Dreadhorde Invasion (WAR) *1
Elvish Doomsayer *1
Fell Specter *1
Geier Reach Sanitarium (C19) *1
Gilded Lotus *1
Grave Pact (CMD) *1
Gray Merchant of Asphodel *1
Hedron Archive (C19) *1
Hymn to Tourach *1
Hypnotic Specter *1
Korlash, Heir to Blackblade *1
Leaden Myr *1
Lightning Greaves (AFC) *1
Liliana of the Dark Realms *1
Liliana, Dreadhorde General (WAR) *1
Liliana's Triumph (WAR) *1
Lotus Petal (MB1) *1
Megrim *1
Memory Jar (FVR) *1
Mind Stone (AFC) *1
Mortuary Mire *1
Mox Jet *1
Necrogen Mists (MRD) *1
Night's Whisper (EMA) *1
No Mercy (MP2) *1
Oppression (7ED) *1
Painful Quandary *1
Palladium Myr (MB1) *1
Phyrexian Arena (TD0) *1
Phyrexian Obliterator *1
Plaguecrafter (C19) *1
Pox (ME1) *1
Ravenous Chupacabra (MB1) *1
Reliquary Tower (M13) *1
Sangromancer (MBS) *1
Shadowspear (THB) *1
Sheoldred, Whispering One *1
Smallpox (M12) *1
Sol Ring (C19) *1
Solemn Simulacrum (TSR) *1
Soul Shatter (ZNR) *1
Steel Hellkite (C17) *1
Strip Mine (EXP) *1
Swamp (2XM) *4
Swamp (OTJ) *4
Swamp (MKM) *4
Swamp (WOE) *4
Swamp (LCI) *4
Swamp (DSK) *4
Swamp (BLB) *3
Sword of Feast and Famine (MPS) *1
Syr Konrad, the Grim *1
Temple of the False God *1
The Eldest Reborn *1
Thought Vessel (MB1) *1
Thoughtseize (2XM) *1
Thran Dynamo (C19) *1
Tinybones, Trinket Thief (JMP) *1
Tourach, Dread Cantor (MH2) *1
Urborg, Tomb of Yawgmoth (TSR) *1
Whip of Erebos (THS) *1
Witch of the Moors (JMP) *1
Witch's Cottage (ELD) *1
Worn Powerstone (PZ1) *1
#CMD:Tergrid, God of Fright (KHM) *1

View File

@@ -1,4 +1,4 @@
#NAME:Krenko's Hellrider
#NAME:Hellrider
#DESC:Standard R Aggro
#DESC:ISD-M13-RTR
#HINT:combo hold(Hellrider|myhand)^until(creature|mybattlefield)^cast(Hellrider|myhand)^restriction{type(creature|mybattlefield)~morethan~2}^totalmananeeded({2}{R}{R})

View File

@@ -1,40 +1,81 @@
#NAME:Wipe them out!
#DESC:Modern RBW Control
#HINT:castpriority(enchantment,sorcery,artifact,instant)
#HINT:combo hold(Devour Flesh|myhand)^until(creature|opponentbattlefield)^cast(Devour Flesh|myhand)^totalmananeeded({1}{B})
#HINT:combo hold(Pyroclasm|myhand)^cast(Pyroclasm|myhand)^restriction{type(creature[toughness<=2]|opponentbattlefield)~morethan~1}~totalmananeeded({1}{R})
#HINT:combo hold(Wrath of God|myhand)^cast(Wrath of God|myhand)^restriction{type(creature|opponentbattlefield)~morethan~1}^totalmananeeded({2}{W}{W})
#HINT:combo hold(Damnation|myhand)^cast(Damnation|myhand)^restriction{type(creature|opponentbattlefield)~morethan~1}^totalmananeeded({2}{B}{B})
#HINT:combo hold(Final Judgment|myhand)^cast(Final Judgment|myhand)^restriction{type(creature|opponentbattlefield)~morethan~1}^totalmananeeded({4}{W}{W})
#22 spells
#8 2-cc
Devour Flesh * 4
Pyroclasm (M11) * 4
#8 4-cc
Damnation * 4
Wrath of God (10E) * 4
#2 6-cc
Final Judgment * 2
#4 x-cc
Black Sun's Zenith * 2
Rakdos's Return * 2
#8 artifacts
Elixir of Immortality * 2
Staff of Nin * 4
Venser's Journal * 2
#4 enchantments
Lightmine Field * 4
#26 lands
Plateau (ME4) * 4
Badlands (ME4) * 4
Scrubland (ME4) * 4
Akoum Refuge * 4
Isolated Chapel * 4
Clifftop Retreat * 2
Urborg, Tomb of Yawgmoth * 1
Plains (CHK) * 2
Swamp (RTR) * 1
#NAME:Belbe Commander
#DESC:Deck by apparently (tappedout.net)
#DESC:Refined for Wagic by Bob
#HINT:castpriority(commander,*)
Ancient Stone Idol
Apex Devastator
Archetype of Endurance
Artisan of Kozilek
Bane of Bala Ged
Beacon of Unrest
Bellowing Tanglewurm
Cabal Conditioning
Caller of the Pack
Colossus of Akros
Command Tower
Conduit of Ruin
Copper Myr
Court of Ambition
Cultivate
Dread Defiler
Eldrazi Conscription
Exsanguinate
Farseek
Fierce Empath
Forest (4ED) *4
Forest (NEO) *4
Forest (ONE) *4
Forest (SNC) *4
Garruk's Uprising
Gilanra, Caller of Wirewood
God-Pharaoh's Statue
Grave Betrayal
Helm of the Host
Hooded Blightfang
Horizon Stone
In Garruk's Wake
Josu Vess, Lich Knight
Kodama's Reach (CMD)
Leaden Myr
Leechridden Swamp
Lim-Dul's Hex
Loxodon Warhammer (10E)
Loyal Subordinate
Mardu Shadowspear
Mirror Shield
Night Market Lookout
Oblivion Sower
Pathrazer of Ulamog
Phyrexian Juggernaut
Phyrexian Triniform
Plague Spitter
Planar Bridge
Platinum Emperion
Polyraptor
Pulse Tracker
Rampant Growth
Return of the Wildspeaker
Sanctum of Stone Fangs
Sandstone Oracle
Sandwurm Convergence
Skull Storm
Skyclave Relic
Sol Ring
Staff of Nin
Swamp (ONE) *4
Swamp (NEO) *4
Swamp (SNC) *4
Swamp (4ED) *3
The Immortal Sun
Thornbow Archer
Thought Vessel
Three Visits
Thunderfoot Baloth
Torment of Hailfire
Ulamog's Crusher
Undergrowth Stadium
Urborg, Tomb of Yawgmoth
Vicious Conquistador
Yavimaya, Cradle of Growth
Zendikar Resurgent
#CMD:Belbe, Corrupted Observer (*) *1

View File

@@ -1,27 +1,19 @@
#NAME: Kai Buide 1999
#DESC: 1999 World Championship Deck
#DESC: by Kai Buide
Mountain (*) *13
Voltaic Key (*) * 4
Thran Dynamo (*) * 4
Grim Monolith (*) * 4
Fire Diamond (*) *4
Mishra's Helix (*) *2
Worn Powerstone (*) *2
City of Traitors (*) *4
Wildfire (*) *4
Masticore (*) *3
Ancient Tomb (*) *3
Karn, Silver Golem (*) *1
Covetous Dragon (*) *4
Earthquake (*) *4
Temporal Aperture (*) * 4
#SB: Mishra's Helix (*) *1
#SB: Spellshock (*) *4
#SB: Boil (*) *2
#SB: Phyrexian Processor (*) *1
#SB: Cursed Scroll (*) *4
#SB: Rack and Ruin (*) *2
#SB: Shattering Pulse (*) *2
#NAME:Budde's Ponza
#DESC:Deck by Kai Budde, 2003
Dwarven Blastminer *2
Rorix Bladewing *2
Siege-Gang Commander *3
Hammer of Bogardan *2
Lay Waste *4
Molten Rain *4
Pyrite Spellbomb *4
Spark Spray *3
Starstorm *4
Stone Rain (8ED) *4
Talisman of Impulse *4
Mountain (8ED) *4
Mountain (7ED) *4
Mountain (MRD) *4
Mountain (ONS) *4
Mountain (ODY) *4
Forgotten Cave (ONS) *4

View File

@@ -1,30 +1,92 @@
#NAME:Turbo Stasi
#DESC:Black Summer 1996
City of Brass (*) *4
Island (*) *13
Underground River (*) *4
Boomerang (*) *4
Force of Will (*) *4
Recall (*) *2
Kismet (*) *2
Land Tax (*) *1
Stasis (*) *4
Despotic Scepter (*) *3
Feldon's Cane (*) *2
Howling Mine (*) *4
Ivory Tower (*) *2
Zuran Orb (*) *1
Black Vise (*) *2
Counterspell (*) *4
Adarkar Wastes (*) *4
#SB: Kismet (*) *1
#SB: Wall of Air (*) *2
#SB: Arcane Denial (*) *4
#SB: Blue Elemental Blast (*) *2
#SB: Disenchant (*) *2
#SB: Hydroblast (*) *2
#SB: Lodestone Bauble (*) *1
#SB: Mana Short (*) *3
#SB: Swords to Plowshares (*) *1
#SB: Lim-Dul's Vault (*) *4
#NAME:Bello Commander
#DESC:Bloomburrow Precon Deck
#DESC:Refined for Wagic by Bob
#HINT:castpriority(commander,*)
#HINT:alwaysattackwith(creature[Elemental])
Abrade (BLC) (*) * 1
Arcane Signet (BLC) (*) * 1
Beast Within (BLC) (*) * 1
Berserkers' Onslaught (BLC) (*) * 1
Big Score (BLC) (*) * 1
Blasphemous Act (*) * 1
Bristling Backwoods (*) * 1
Burnished Hart (BLC) (*) * 1
Chaos Warp (*) * 1
Cinder Glade (BLC) (*) * 1
Command Tower (BLC) (*) * 1
Copperline Gorge (BLC) (*) * 1
Court of Embereth (*) * 1
Cultivate (BLC) (*) * 1
Decimate (BLC) (*) * 1
Domri, Anarch of Bolas (BLC) (*) * 1
Esika's Chariot (BLC) (*) * 1
Etali, Primal Storm (BLC) (*) * 1
Evercoat Ursine (BLC) (*) * 1
Evolving Wilds (BLC) (*) * 1
Exotic Orchard (BLC) (*) * 1
Explore (BLC) (*) * 1
Fanatic of Rhonas (*) * 1
Farseek (BLC) (*) * 1
Fellwar Stone (BLC) (*) * 1
Forest (BLB) (*) * 10
Forest (MH3) (*) * 4
Forest (LCI) (*) * 2
Forgotten Cave (BLC) (*) * 1
Frontier Warmonger (*) * 1
Game Trail (BLC) (*) * 1
Garruk's Packleader (BLC) (*) * 1
Garruk's Uprising (BLC) (*) * 1
Ghalta, Primal Hunger (BLC) (*) * 1
Gilded Lotus (BLC) (*) * 1
Goblin Anarchomancer (*) * 1
Goreclaw, Terror of Qal Sisma (BLC) (*) * 1
Grumgully, the Generous (BLC) (*) * 1
Gruul Signet (BLC) (*) * 1
Gruul Turf (BLC) (*) * 1
Gruul War Chant (*() * 1
Harmonize (BLC) (*) * 1
Hedron Archive (BLC) (*) * 1
Kodama of the East Tree (BLC) (*) * 1
Kona, Rescue Beastie (*) * 1
Llanowar Loamspeaker (BLC) (*) * 1
Lotus Cobra (BLC) (*) * 1
Mind Stone (BLC) (*) * 1
Mossfire Valley (BLC) (*) * 1
Mosswort Bridge (BLC) (*) * 1
Mountain (BLB) (*) * 4
Mountain (MH3) (*) * 4
Nature's Will (*) * 1
Ohran Frostfang (*) * 1
Outpost Siege (BLC) (*) * 1
Path of Discovery (BLC) (*) * 1
Primeval Bounty (BLC) (*) * 1
Prosperous Bandit (BLC) (*) * 1
Rampaging Baloths (BLC) (*) * 1
Rampant Growth (BLC) (*) * 1
Reliquary Tower (BLC) (*) * 1
Rolling Hamsphere (BLC) (*) * 1
Rootbound Crag (BLC) (*) * 1
Rugged Highlands (*) * 1
Sakura-Tribe Elder (BLC) (*) * 1
Sheltered Thicket (BLC) (*) * 1
Sol Ring (BLC) (*) * 1
Spine of Ish Sah (BLC) (*) * 1
Starstorm (BLC) (*) * 1
Street Riot (*) * 1
Sunbird's Invocation (BLC) (*) * 1
Taiga (*) * 1
Talisman of Impulse (BLC) (*) * 1
Temple of Abandon (BLC) (*) * 1
Tendershoot Dryad (BLC) (*) * 1
Terramorphic Expanse (BLC) (*) * 1
The Immortal Sun (*) * 1
The Shattered States Era (*) * 1
Thickest in the Thicket (BLC) (*) * 1
Thought Vessel (BLC) (*) * 1
Thran Dynamo (BLC) (*) * 1
Tranquil Thicket (BLC) (*) * 1
Unnatural Growth (BLC) (*) * 1
Warstorm Surge (BLC) (*) * 1
Wildsear, Scouring Maw (BLC) (*) * 1
Wooded Ridgeline (BLC) (*) * 1
#CMD:Bello, Bard of the Brambles (*) * 1

View File

@@ -1,4 +1,4 @@
#NAME: The New Mutatants
#NAME:Mutants
#DESC: The First Ikoria Mutation Deck
Arboreal Grazer (*) *4
Pollywog Symbiote (*) *3

View File

@@ -1,93 +1,28 @@
#NAME:Golgari ramp
#DESC:The first Commander Format Deck
#HINT:castpriority(commander,*)
Mardu Shadowspear (*) *1
Night Market Lookout (*) *1
Pulse Tracker (*) *1
Thornbow Archer (*) *1
Vicious Conquistador (*) *1
Archers' Parapet (*) *1
Shepherd of Rot (*) *1
Loyal Subordinate (*) *1
Crypt Ghast (*) *1
Rankle, Master of Pranks (*) *1
Spawn of Mayhem (*) *1
Twilight Prophet (*) *1
Conduit of Ruin (*) *1
Duplicant (*) *1
Oblivion Sower (*) *1
Wurmcoil Engine (*) *1
World Breaker (*) *1
Platinum Emperion (*) *1
Apex Devastator (*) *1
Blightsteel Colossus (*) *1
Ugin, the Ineffable (*) *1
Malakir Rebirth (*) *1
Nature's Claim (*) *1
Veil of Summer (*) *1
Vicious Rumors (*) *1
Worldly Tutor (*) *1
Assassin's Trophy (*) *1
Damnable Pact (*) *1
Demonic Tutor (*) *1
Exsanguinate (*) *1
Farseek (*) *1
Heroic Intervention (*) *1
Rampant Growth (*) *1
Three Visits (*) *1
Torment of Hailfire (*) *1
Agadeem's Awakening (*) *1
Barrier Breach (*) *1
Beast Within (*) *1
Cultivate (*) *1
Grim Tutor (*) *1
Kodama's Reach (*) *1
Toxic Deluge (*) *1
Skyshroud Claim (*) *1
Return of the Wildspeaker (*) *1
Beseech the Queen (*) *1
Turntimber Symbiosis (*) *1
Decree of Pain (*) *1
In Garruk's Wake (*) *1
Sol Ring (*) *1
Arcane Signet (*) *1
Lightning Greaves (*) *1
Swiftfoot Boots (*) *1
Talisman of Resilience (*) *1
Thought Vessel (*) *1
God-Pharaoh's Statue (*) *1
Staff of Nin (*) *1
The Immortal Sun (*) *1
Ward of Bones (*) *1
Cryptolith Rite (*) *1
Sanctum of Stone Fangs (*) *1
Phyrexian Arena (*) *1
Retreat to Hagra (*) *1
Court of Ambition (*) *1
Eldrazi Conscription (*) *1
Sandwurm Convergence (*) *1
Ancient Tomb (*) *1
Blast Zone (*) *1
Bojuka Bog (*) *1
Cabal Coffers (*) *1
Castle Garenbrig (*) *1
Castle Locthwain (*) *1
Command Tower (*) *1
Crawling Barrens (*) *1
Forest (*) *7
Leechridden Swamp (*) *1
Llanowar Wastes (*) *1
Nurturing Peatland (*) *1
Overgrown Tomb (*) *1
Phyrexian Tower (*) *1
Prismatic Vista (*) *1
Reliquary Tower (*) *1
Sanctum of Ugin (*) *1
Swamp (*) *5
Twilight Mire (*) *1
Undergrowth Stadium (*) *1
Urborg, Tomb of Yawgmoth (*) *1
Verdant Catacombs (*) *1
War Room (*) *1
Woodland Cemetery (*) *1
#CMD:Belbe, Corrupted Observer (*) *1
#NAME:Wipe Them Out!
#DESC:Modern RBW Control
#HINT:castpriority(creature,enchantment,sorcery,artifact)
#HINT:combo hold(Cruel Edict|myhand)^until(creature|opponentbattlefield)^cast(Cruel Edict|myhand)^totalmananeeded({1}{B})
#HINT:combo hold(Pyroclasm|myhand)^cast(Pyroclasm|myhand)^restriction{type(creature[toughness<=2]|opponentbattlefield)~morethan~1}~totalmananeeded({1}{R})
#HINT:combo hold(Wrath of God|myhand)^cast(Wrath of God|myhand)^restriction{type(creature|opponentbattlefield)~morethan~1}^totalmananeeded({2}{W}{W})
#HINT:combo hold(Damnation|myhand)^cast(Damnation|myhand)^restriction{type(creature|opponentbattlefield)~morethan~1}^totalmananeeded({2}{B}{B})
#HINT:alwaysattackwith(Blightsteel Colossus)
Blightsteel Colossus * 2
Cruel Edict (10E) * 4
Pyroclasm *4
Damnation * 4
Wrath of God (10E) * 4
Black Sun's Zenith * 2
Rakdos's Return * 2
Elixir of Immortality * 2
Staff of Nin * 4
Venser's Journal * 2
Lightmine Field * 4
Plateau (ME4) * 4
Badlands (ME4) * 4
Scrubland (ME4) * 4
Akoum Refuge * 4
Isolated Chapel * 4
Clifftop Retreat * 2
Urborg, Tomb of Yawgmoth * 1
Plains (CHK) * 2
Swamp (RTR) * 1

View File

@@ -1,90 +1,82 @@
#NAME:Omnath Commander
#DESC:The Budget league Omnath Deck
#DESC:Deck concept by HurricaneHands
#DESC:(tappedout.net)
#DESC:Refined for Wagic by Bob
#HINT:castpriority(commander,*)
Smokebraider (*) *1
Cloudkin Seer (*) *1
Flickerwisp (*) *1
Kazandu Mammoth (*) *1
Risen Reef (*) *1
Soulherder (*) *1
Springbloom Druid (*) *1
Angel of Finality (*) *1
Archaeomancer (*) *1
Emeria Angel (*) *1
Felidar Guardian (*) *1
Mina and Denn, Wildborn (*) *1
Slithermuse (*) *1
Acidic Slime (*) *1
Cataclysmic Gearhulk (*) *1
Cavalier of Thorns (*) *1
Mnemonic Wall (*) *1
Mulldrifter (*) *1
Yorion, Sky Nomad (*) *1
Multani, Yavimaya's Avatar (*) *1
Phylath, World Sculptor (*) *1
Rampaging Baloths (*) *1
Omnath, Locus of Rage (*) *1
Ephemerate (*) *1
Gelatinous Genesis (*) *1
Path to Exile (*) *1
Spikefield Hazard (*) *1
Wildest Dreams (*) *1
Disdainful Stroke (*) *1
Growth Spiral (*) *1
Reap the Past (*) *1
Sejiri Shelter (*) *1
Starstorm (*) *1
Eerie Interlude (*) *1
Far Wanderings (*) *1
Ghostly Flicker (*) *1
Harrow (*) *1
Release to the Wind (*) *1
Roiling Regrowth (*) *1
Silundi Vision (*) *1
Whirlwind Denial (*) *1
Circuitous Route (*) *1
Crush Contraband (*) *1
Fact or Fiction (*) *1
Summary Dismissal (*) *1
Sylvan Reclamation (*) *1
Time Wipe (*) *1
Tragic Arrogance (*) *1
Urban Evolution (*) *1
Austere Command (*) *1
Hour of Revelation (*) *1
Nissa's Renewal (*) *1
Sublime Epiphany (*) *1
Ondu Inversion (*) *1
Khalni Heart Expedition (*) *1
Rites of Flourishing (*) *1
Court of Bounty (*) *1
Felidar Retreat (*) *1
Retreat to Emeria (*) *1
Wilderness Reclamation (*) *1
Zendikar's Roil (*) *1
Blighted Woodland (*) *1
Command Tower (*) *1
Evolving Wilds (*) *1
Exotic Orchard (*) *1
Field of Ruin (*) *1
Forest (*) *7
Frontier Bivouac (*) *1
Gruul Guildgate (*) *1
Gruul Turf (*) *1
Island (*) *3
Jungle Shrine (*) *1
Krosan Verge (*) *1
Mountain (*) *4
Myriad Landscape (*) *1
Mystic Monastery (*) *1
Naya Panorama (*) *1
Path of Ancestry (*) *1
Plains (*) *4
Scavenger Grounds (*) *1
Seaside Citadel (*) *1
Selesnya Guildgate (*) *1
Selesnya Sanctuary (*) *1
Simic Growth Chamber (*) *1
Simic Guildgate (*) *1
Terramorphic Expanse (*) *1
#CMD:Omnath, Locus of Creation (*) *1
Ancient Greenwarden
Avenger of Zendikar
Azusa, Lost but Seeking
Blighted Woodland
Cinder Glade
Circuitous Route
Command Tower
Commander's Sphere
Court of Bounty
Courser of Kruphix
Crash of Rhino Beetles
Crucible of Worlds
Cultivate
Doubling Season
Dragonmaster Outcast
Elvish Reclaimer
Evolving Wilds
Explore
Farseek
Far Wanderings
Feed the Clan
Fiery Emancipation
Forest (ZEN) *4
Forest (ONE) *4
Forest (NEO) *4
Forest (SNC) *4
Forest (M10) *4
Forest
Gaea's Revenge
Gruul Guildgate
Harrow
Incandescent Soulstoke
Khalni Heart Expedition
Liege of the Tangle
Lotus Cobra
Mina and Denn, Wildborn
Mountain (ONE) *4
Mountain (NEO) *4
Mountain *4
Multani, Yavimaya's Avatar
Myriad Landscape
Naturalize (8ED)
Nissa's Renewal
Nissa, Vastwood Seer
Nissa, Worldwaker
Nissa's Zendikon
Nyxbloom Ancient
Phylath, World Sculpture
Phytotitan
Radha, Heart of Keld
Rampaging Baloths
Rampant Growth
Ranger's Path
Rhythm of the Wild
Rites of Flourishing
Roiling Regrowth
Rootbound Crag
Rubblehulk
Sarkhan's Unsealing
Scute Mob
Scute Swarm
Second Harvest
Skyshroud Claim
Sol Ring
Temple of Abandon
Terramorphic Expanse
Terror of the Peaks
Thicket Crasher
Tornado Elemental
Undergrowth Champion
Vandalblast
Warstorm Surge
Where Ancients Tread
Wooded Foothills
Zendikar Incarnate
Zendikar's Roil
#CMD:Omnath, Locus of Rage (*) *1

View File

@@ -1,103 +1,87 @@
#NAME:Scion Of The Ur-Dragon
#DESC:The Scion Commander Deck
#NAME:Lyra Commander
#DESC:Deck by guitrunks01
#DESC:(archidekt.com)
#DESC:Refined for Wagic by Bob
#HINT:castpriority(commander,*)
Aggravated Assault (*) * 1
Ancient Tomb (*) * 1
Arcane Signet (*) * 1
Arid Mesa (*) * 1
Atarka, World Render (*) * 1
Balefire Dragon (*) * 1
Bladewing the Risen (*) * 1
Blood Crypt (*) * 1
Bloom Tender (*) * 1
Breeding Pool (*) * 1
Cascading Cataracts (*) * 1
Cavern of Souls (*) * 1
Chromatic Lantern (*) * 1
Chromatic Orrery (*) * 1
Chrome Mox (*) * 1
Coalition Relic (*) * 1
Command Beacon (*) * 1
#HINT:combo hold(Mass Calcify|myhand)^cast(Mass Calcify|myhand)^restriction{type(creature|opponentbattlefield)~morethan~2}^totalmananeeded({2}{W}{W})
#HINT:combo hold(Blinding Light|myhand)^cast(Blinding Light|myhand)^restriction{type(creature|opponentbattlefield)~morethan~2}^totalmananeeded({3}{W}{W})
Always Watching (*) * 1
Akroma's Memorial (m13) (*) * 1
Akroma, Angel of Wrath (c20) (*) * 1
Angel of Finality (moc) (*) * 1
Angel of Invention (kld) (*) * 1
Angel of Jubilation (avr) (*) * 1
Angel of Serenity (c21) (*) * 1
Angel of the Dire Hour (plst) (*) * 1
Angel of the Ruins (c21) (*) * 1
Angelic Accord (plst) (*) * 1
Angelic Arbiter (m11) (*) * 1
Angelic Field Marshal (*) * 1
Arcane Signet (blc) (*) * 1
Avacyn, Angel of Hope (cmm) (*) * 1
Baneslayer Angel (m21) (*) * 1
Bishop of Wings (plst) (*) * 1
Blinding Light (*) * 1
Boon-Bringer Valkyrie (mom) (*) * 1
Burnished Hart (dsc) (*) * 1
Command Tower (*) * 1
Crux of Fate (*) * 1
Crystal Quarry (*) * 1
Curiosity (*) * 1
Cyclonic Rift (*) * 1
Debtors' Knell (*) * 1
Defense of the Heart (*) * 1
Demonic Tutor (*) * 1
Dragonlord Silumgar (*) * 1
Drakuseth, Maw of Flames (*) * 1
Faeburrow Elder (*) * 1
Farseek (*) * 1
Fearsome Awakening (*) * 1
Flooded Strand (*) * 1
Force of Will (*) * 1
Godless Shrine (*) * 1
Greater Good (*) * 1
Grim Tutor (*) * 1
Hallowed Fountain (*) * 1
Haven of the Spirit Dragon (*) * 1
Hellkite Charger (*) * 1
Hellkite Tyrant (*) * 1
Indatha Triome (*) * 1
Karrthus, Tyrant of Jund (*) * 1
Keiga, the Tide Star (*) * 1
Ketria Triome (*) * 1
Kokusho, the Evening Star (*) * 1
Lightning Greaves (*) * 1
Living Death (*) * 1
Lotus Petal (*) * 1
Malfegor (*) * 1
Mana Confluence (*) * 1
Mana Crypt (*) * 1
Mana Drain (*) * 1
Marsh Flats (*) * 1
Misty Rainforest (*) * 1
Moltensteel Dragon (*) * 1
Mox Amber (*) * 1
Mox Diamond (*) * 1
Mox Opal (*) * 1
Mox Tantalite (*) * 1
Nicol Bolas (*) * 1
Niv-Mizzet, the Firemind (*) * 1
Overgrown Tomb (*) * 1
Path of Ancestry (*) * 1
Polluted Delta (*) * 1
Prismatic Geoscope (*) * 1
Raugrin Triome (*) * 1
Sacred Foundry (*) * 1
Savage Ventmaw (*) * 1
Savai Triome (*) * 1
Scalding Tarn (*) * 1
Sensei's Divining Top (*) * 1
Silumgar, the Drifting Death (*) * 1
Skithiryx, the Blight Dragon (*) * 1
Skyclave Relic (*) * 1
Skyshroud Claim (*) * 1
Sneak Attack (*) * 1
Sol Ring (*) * 1
Spoils of Victory (*) * 1
Steam Vents (*) * 1
Stomping Ground (*) * 1
Swiftfoot Boots (*) * 1
Sword of Feast and Famine (*) * 1
Sylvan Library (*) * 1
Temple Garden (*) * 1
Temur Ascendancy (*) * 1
Teneb, the Harvester (*) * 1
Terror of the Peaks (*) * 1
The Ur-Dragon (*) * 1
Three Visits (*) * 1
Unburial Rites (*) * 1
Utvara Hellkite (*) * 1
Vaevictis Asmadi, the Dire (*) * 1
Vampiric Tutor (*) * 1
Verdant Catacombs (*) * 1
Watery Grave (*) * 1
Wheel of Sun and Moon (*) * 1
Windswept Heath (*) * 1
Wooded Foothills (*) * 1
Yosei, the Morning Star (*) * 1
Zagoth Triome (*) * 1
#CMD:Scion of the Ur-Dragon (*) * 1
Cosmos Elixir (khm) (*) * 1
Court of Grace (*) * 1
Crush Contraband (scd) (*) * 1
Darksteel Citadel (c18) (*) * 1
Divine Sacrament (*) * 1
Emeria Shepherd (znc) (*) * 1
Emeria, the Sky Ruin (plst) (*) * 1
Endless Atlas (cmm) (*) * 1
Entreat the Angels (avr) (*) * 1
Firemane Commando (moc) (*) * 1
Generous Gift (*) * 1
Ghostly Prison (*) * 1
Herald of War (mic) (*) * 1
Inspiring Overseer (blc) (*) * 1
Karmic Guide (ulg) (*) * 1
Lightning Greaves (m3c) (*) * 1
Linvala, Keeper of Silence (*) * 1
Luminarch Ascension (a25) (*) * 1
Marble Diamond (*) * 1
Mass Calcify (m15) (*) * 1
Minas Tirith (ltr) (*) * 1
Path to Exile (pf20) (*) * 1
Plains (bro) (*) * 4
Plains (woe) (*) * 4
Plains (dsk) (*) * 4
Plains (lci) (*) * 4
Plains (mkm) (*) * 4
Plains (blb) (*) * 3
Platinum Angel (plst) (*) * 1
Pristine Talisman (*) * 1
Quicksilver Amulet (brr) (*) * 1
Radiant Fountain (*) * 1
Rebuff the Wicked (tsr) (*) * 1
Revitalize (*) * 1
Righteous Valkyrie (khm) (*) * 1
Segovian Angel (plst) (*) * 1
Sephara, Sky's Blade (cmm) (*) * 1
Seraph Sanctuary (*) * 1
Serra Angel (*) * 1
Serra Ascendant (*) * 1
Serra Avenger (*) * 1
Serra the Benevolent (mh1) (*) * 1
Shadowspear (plst) (*) * 1
Sigarda's Splendor (mid) (*) * 1
Silence (m14) (*) * 1
Sol Ring (m3c) (*) * 1
Solemn Simulacrum (dsc) (*) * 1
Snow-Covered Plains (mh1) (*) * 4
Starnheim Aspirant (j22) (*) * 1
Steel Seraph (bro) (*) * 1
Swiftfoot Boots (blc) (*) * 1
Swords to Plowshares (cns) (*) * 1
Test of Endurance (*) * 1
The Book of Exalted Deeds (afr) (*) * 1
Thraben Watcher (mh2) (*) * 1
Thran Dynamo (uds) (*) * 1
Valkyrie Harbinger (j22) (*) * 1
Worn Powerstone (*) * 1
Youthful Valkyrie (fdn) (*) * 1
#CMD:Lyra Dawnbringer (dmr) (*) * 1

View File

@@ -1,79 +1,23 @@
#NAME:Phantom Premonition
#HINT:castpriority(commander,*)
Angel of Finality (*) * 1
Angel of Serenity (*) * 1
Arcane Artisan (*) * 1
Arcane Signet (*) * 1
Azorius Chancery (*) * 1
Azorius Guildgate (*) * 1
Azorius Signet (*) * 1
Banishing Light (*) * 1
Behold the Multiverse (*) * 1
Brago, King Eternal (*) * 1
Burnished Hart (*) * 1
Cleansing Nova (*) * 1
Cloudblazer (*) * 1
Cloudgoat Ranger (*) * 1
Command Tower (*) * 1
Commander's Sphere (*) * 1
Cosmic Intervention (*) * 1
Cryptic Caves (*) * 1
Curse of the Swine (*) * 1
Day of the Dragons (*) * 1
Eerie Interlude (*) * 1
Empyrean Eagle (*) * 1
Ethereal Valkyrie (*) * 1
Evangel of Heliod (*) * 1
Flickerwisp (*) * 1
Gates of Istfell (*) * 1
Geist-Honored Monk (*) * 1
Ghostly Flicker (*) * 1
Ghostly Prison (*) * 1
Glacial Floodplain (*) * 1
Goldnight Commander (*) * 1
Hero of Bretagard (*) * 1
Inspired Sphinx (*) * 1
Iron Verdict (*) * 1
Island (*) * 12
Kor Cartographer (*) * 1
Marble Diamond (*) * 1
Marshal's Anthem (*) * 1
Meandering River (*) * 1
Meteor Golem (*) * 1
Migratory Route (*) * 1
Mind Stone (*) * 1
Mist Raven (*) * 1
Mistmeadow Witch (*) * 1
Momentary Blink (*) * 1
Mulldrifter (*) * 1
Myriad Landscape (*) * 1
Niko Defies Destiny (*) * 1
Opal Palace (*) * 1
Plains (*) * 13
Ravenform (*) * 1
Replicating Ring (*) * 1
Restoration Angel (*) * 1
Return to Dust (*) * 1
Sage of the Beyond (*) * 1
Saw It Coming (*) * 1
Sea Gate Oracle (*) * 1
Sejiri Refuge (*) * 1
Sky Diamond (*) * 1
Sol Ring (*) * 1
Soulherder (*) * 1
Spectral Deluge (*) * 1
Stoic Farmer (*) * 1
Storm Herd (*) * 1
Sun Titan (*) * 1
Surtland Elementalist (*) * 1
Swiftfoot Boots (*) * 1
Synthetic Destiny (*) * 1
Tales of the Ancestors (*) * 1
Thunderclap Wyvern (*) * 1
Tranquil Cove (*) * 1
Vega, the Watcher (*) * 1
Wall of Omens (*) * 1
Warhorn Blast (*) * 1
Whirler Rogue (*) * 1
Windfall (*) * 1
#CMD:Ranar the Ever-Watchful (*) * 1
#NAME:Ashenmoor
#DESC:Deck for Wagic by Bob
#HINT:combo hold(Demonic Tutor|myhand)^cast(Demonic Tutor|myhand) targeting(Ashenmoor Liege|mylibrary)^totalmananeeded({1}{B})
#HINT:alwaysattackwith(Ashenmoor Gouger)
#HINT:dontblockwith(Ashenmoor Liege)
Ashenmoor Gouger (*) * 4
Ashenmoor Liege (*) * 4
Badlands (*) * 4
Demonic Tutor (CMM) (*) * 2
Dragonskull Summit (*) * 4
Emberstrike Duo (*) * 4
Footlight Fiend (*) * 4
Glass of the Guildpact (*) * 4
Goblin Outlander (*) * 2
Mountain (DSK) (*) * 4
Mountain (MKM) (*) * 2
Rakdos Cackler (*) * 4
Rakdos Shred-Freak (*) * 4
Shivan Zombie (*) * 2
Spike Jester (*) * 4
Swamp (DSK) (*) * 4
Swamp (MKM) (*) * 2
Terminate (2X2) (*) * 2

View File

@@ -1,81 +1,22 @@
#NAME:Draconic Rage
#DESC:The First D&D Deck
#HINT:castpriority(commander,*)
Bogardan Hellkite (*) *1
Demanding Dragon (*) *1
Dragonmaster Outcast (*) *1
Hoard-Smelter Dragon (*) *1
Opportunistic Dragon (*) *1
Scourge of Valkas (*) *1
Shivan Hellkite (*) *1
Skyline Despot (*) *1
Skyship Stalker (*) *1
Taurean Mauler (*) *1
Terror of Mount Velus (*) *1
Thunderbreak Regent (*) *1
Chameleon Colossus (*) *1
Atarka, World Render (*) *1
Earth-Cult Elemental (*) *1
Anger (*) *1
Dragonlord's Servant (*) *1
Savage Ventmaw (*) *1
Dragonspeaker Shaman (*) *1
Chain Reaction (*) *1
Rishkar's Expertise (*) *1
Shamanic Revelation (*) *1
Rile (*) *1
Cultivate (*) *1
Explore (*) *1
Rampant Growth (*) *1
Magmaquake (*) *1
Spit Flame (*) *1
Decree of Savagery (*) *1
Kindred Summons (*) *1
Return of the Wildspeaker (*) *1
Beast Within (*) *1
Return to Nature (*) *1
Dragon's Hoard (*) *1
Arcane Signet (*) *1
Commander's Sphere (*) *1
Gruul Signet (*) *1
Heirloom Blade (*) *1
Sol Ring (*) *1
Gratuitous Violence (*) *1
Outpost Siege (*) *1
Warstorm Surge (*) *1
Barbarian Class (*) *1
Colossal Majesty (*) *1
Garruk's Uprising (*) *1
Cinder Glade (*) *1
Crucible of the Spirit Dragon (*) *1
Exotic Orchard (*) *1
Game Trail (*) *1
Haven of the Spirit Dragon (*) *1
Mossfire Valley (*) *1
Mosswort Bridge (*) *1
Command Tower (*) *1
Desert (*) *1
Gruul Turf (*) *1
Path of Ancestry (*) *1
Mountain (*) *12
Forest (*) *15
Klauth, Unrivaled Ancient (*) *1
Berserker's Frenzy (*) *1
Chaos Dragon (*) *1
Maddening Hex (*) *1
Vengeful Ancestor (*) *1
Bag of Tricks (*) *1
Druid of Purification (*) *1
Indomitable Might (*) *1
Neverwinter Hydra (*) *1
Wild Endeavor (*) *1
Dragonborn Champion (*) *1
Klauth's Will (*) *1
Wulfgar of Icewind Dale (*) *1
Component Pouch (*) *1
Sword of Hours (*) *1
Underdark Rift (*) *1
#CMD:Vrondiss, Rage of Ancients (*) *1
#DNG:Tomb of Annihilation (*) *1
#DNG:Lost Mine of Phandelver (*) *1
#DNG:Dungeon of the Mad Mage (*) *1
#NAME:Goblin Spike
#DESC:Deck for Wagic by Bob
#HINT:castpriority(creature,sorcery)
#HINT:combo hold(Lava Spike|myhand)^cast(Lava Spike|myhand)^restriction{turn:5}^totalmananeeded({R})
#HINT:combo hold(Goblin War Strike|myhand)^cast(Goblin War Strike|myhand)^restriction{turn:7}^totalmananeeded({R})
Foundry Street Denizen (*) * 4
Goblin Chieftain (*) * 4
Goblin Lackey (*) * 4
Goblin Piledriver (*) * 4
Goblin Rabblemaster (*) * 4
Goblin Ringleader (*) * 2
Goblin Warchief (*) * 2
Goblin War Strike (*) * 2
Lava Spike (*) * 4
Legion Loyalist (*) * 4
Mountain (OTJ) (*) * 4
Mountain (BLB) (*) * 4
Mountain (WOE) (*) * 4
Mountain (DSK) (*) * 4
Mountain (LCI) (*) * 4
Mountain (MKM) (*) * 2
Muxus, Goblin Grandee (*) * 4

View File

@@ -1,85 +1,24 @@
#NAME:Tergrid Commander
#DESC:The Tergrid Commander Deck
#HINT:castpriority(commander,*)
Mana Crypt (VMA) *1
Necrogen Mists (MRD) *1
Animate Dead (VMA) *1
Recurring Nightmare (VMA) *1
Mind Stone (AFC) *1
Coldsteel Heart (CSP) *1
Steel Hellkite (C17) *1
Hedron Archive (C19) *1
Prismatic Vista (H1R) *1
Blackblade Reforged (SS2) *1
Tevesh Szat, Doom of Fools (CMR) *1
Thespian's Stage (C19) *1
Priest of Forgotten Gods (RNA) *1
Duplicant (PZ1) *1
Swamp (2XM) *19
Strip Mine (EXP) *1
Toxic Deluge (PZ1) *1
Archon of Cruelty (MH2) *1
No Mercy (MP2) *1
Whip of Erebos (THS) *1
Plaguecrafter (C19) *1
Cabal Coffers (MH2) *1
Smallpox (M12) *1
Geier Reach Sanitarium (C19) *1
Pox (ME1) *1
Braids, Cabal Minion (EMA) *1
Vampiric Tutor (EMA) *1
Meteor Golem (C19) *1
Phyrexian Reclamation (JMP) *1
Damnation (MM3) *1
Mana Vault (PUMA) *1
Commander's Sphere (C19) *1
Liliana's Triumph (WAR) *1
Dream Devourer (KHM) *1
Homeward Path (PZ1) *1
Night's Whisper (EMA) *1
Grave Pact (CMD) *1
Bojuka Bog (C19) *1
Chain of Smog (ONS) *1
Village Rites (KHM) *1
Memory Jar (FVR) *1
Gonti, Lord of Luxury (MB1) *1
Tinybones, Trinket Thief (JMP) *1
Sol Ring (C19) *1
Dreadhorde Invasion (WAR) *1
Command Beacon (PZ1) *1
Solemn Simulacrum (TSR) *1
Barren Moor (C19) *1
Lotus Petal (MB1) *1
Oppression (7ED) *1
Shadowspear (THB) *1
Worn Powerstone (PZ1) *1
Arcane Signet (AFC) *1
Grim Monolith (ULG) *1
Lightning Greaves (AFC) *1
Dark Ritual (ME4) *1
Sanctum of Eternity (C19) *1
Tourach, Dread Cantor (MH2) *1
Ravenous Chupacabra (MB1) *1
Ancient Tomb (EXP) *1
Sword of Feast and Famine (MPS) *1
Witch of the Moors (JMP) *1
Thought Vessel (MB1) *1
Urborg, Tomb of Yawgmoth (TSR) *1
Thoughtseize (2XM) *1
Tyrite Sanctum (KHM) *1
Soul Shatter (ZNR) *1
Mox Diamond (FVR) *1
Thran Dynamo (C19) *1
Bloodstained Mire (ONS) *1
Sangromancer (MBS) *1
Phyrexian Arena (TD0) *1
Blast Zone (WAR) *1
Rune-Scarred Demon (MB1) *1
Demonic Tutor (MB1) *1
Polluted Delta (ONS) *1
Liliana, Dreadhorde General (WAR) *1
Cunning Rhetoric (C21) *1
Crypt Ghast (GTC) *1
Palladium Myr (MB1) *1
Myriad Landscape (C19) *1
#CMD:Tergrid, God of Fright (KHM) *1
#NAME:Kor Army
#DESC:Deck by dr3amsnatcher
#DESC:(tappedout.net). Refined
#DESC:for Wagic by Bob
Argentum Armor (*) * 2
Armament Master (*) * 4
Bladed Pinions (*) * 2
Bone Saw (*) * 4
Captain's Claws (*) * 4
Cranial Plating (*) * 2
Emeria, the Sky Ruin (*) * 1
Kabira Crossroads (*) * 2
Kitesail Apprentice (*) * 4
Kor Duelist (*) * 4
Oath of Gideon (*) * 2
Plains (ZEN) (*) * 4
Plains (BFZ) (*) * 4
Plains (M19) (*) * 4
Plains (ZNR) (*) * 4
Plains (TMP) (*) * 2
Stone Haven Outfitter (*) * 4
Stone Haven Pilgrim (*) * 2
Sword of Vengeance (*) * 3
Zamriel, Seraph of Steel (*) * 2

View File

@@ -1,87 +1,26 @@
#NAME:Tatyova Commander
#DESC:The Tatiyova Commander Deck
#HINT:castpriority(commander,*)
Mana Crypt (VMA) *1
Allosaurus Shepherd (JMP) *1
Rimewood Falls (KHM) *1
Explore (C19) *1
Rampant Growth (PRM) *1
Commit // Memory (MB1) *1
Echoing Truth (C19) *1
Mystic Sanctuary (ELD) *1
Ramunap Excavator (PRM) *1
Prismatic Vista (H1R) *1
Harmonize (PRM) *1
Summer Bloom (POR) *1
Mana Reflection (SHM) *1
Cyclonic Rift (MM3) *1
Upheaval (MH2) *1
Wild Growth (AFC) *1
Narset, Parter of Veils (WAR) *1
Timetwister (PRM) *1
Thrasios, Triton Hero (PZ2) *1
Strip Mine (EXP) *1
Tropical Island (ME4) *1
Avenger of Zendikar (PRM) *1
Harrow (MB1) *1
Kodama's Reach (C17) *1
Fastbond (VMA) *1
Crucible of Worlds (PRM) *1
Force of Will (EMA) *1
Broken Bond (MB1) *1
Command Tower (C19) *1
Sylvan Scrying (MB1) *1
Mana Vault (PUMA) *1
Jolrael, Mwonvuli Recluse (M21) *1
Solemn Simulacrum (MB1) *1
Simic Signet (C15) *1
Reliquary Tower (C19) *1
Genesis Wave (IMA) *1
Khalni Garden (PZ1) *1
Cultivate (PZ1) *1
Yavimaya Elder (UDS) *1
Exploration (PRM) *1
Sol Ring (C19) *1
Koma, Cosmos Serpent (KHM) *1
Simic Growth Chamber (C19) *1
Command Beacon (PZ1) *1
Eternal Witness (PZ1) *1
Sylvan Library (PZ1) *1
Heroic Intervention (KLR) *1
Kinnan, Bonder Prodigy (IKO) *1
Lotus Cobra (PRM) *1
Island (UNH) *8
Archmage's Charm (H1R) *1
Dryad Arbor (TSR) *1
Finale of Devastation (WAR) *1
Arcane Signet (AFC) *1
Flooded Grove (EXP) *1
Crop Rotation (2XM) *1
Forest (2XM) *10
Lightning Greaves (AFC) *1
Scalding Tarn (MH2) *1
Ancient Tomb (EXP) *1
Sakura-Tribe Elder (MB1) *1
Seedborn Muse (C19) *1
Prophet of Kruphix (PRM) *1
Misty Rainforest (ZNE) *1
Natural Order (EMA) *1
Wayfarer's Bauble (C17) *1
Tyrite Sanctum (KHM) *1
Gaea's Cradle (USG) *1
Consecrated Sphinx (MBS) *1
Castle Vantress (ELD) *1
Mox Diamond (FVR) *1
Verdant Catacombs (MH2) *1
Primeval Titan (TSR) *1
Neoform (WAR) *1
Rampaging Baloths (C19) *1
Pongify (TSR) *1
Flooded Strand (EXP) *1
Nyxbloom Ancient (THB) *1
Nexus of Fate (M19) *1
Polluted Delta (ONS) *1
Birds of Paradise (PRM) *1
Courser of Kruphix (TSR) *1
Search for Tomorrow (MB1) *1
#CMD:Tatyova, Benthic Druid (DOM) *1
#NAME:Shocking Minotaurs
#DESC:Deck for Wagic by Bob
#HINT:combo hold(Raise Dead|myhand)^cast(Raise Dead|myhand)^restriction{type(creature[toughness>=2]|mygraveyard)~morethan~0}~totalmananeeded({B})
Badlands (*) * 1
Blackcleave Cliffs (*) * 2
Bloodrage Brawler (*) * 4
Dragonskull Summit (*) * 2
Fanatic of Mogis (*) * 1
Felhide Petrifier (*) * 2
Gnarled Scarhide (*) * 2
Kragma Warcaller (*) * 4
Lightning Bolt (*) * 4
Mogis, God of Slaughter (*) * 2
Moraug, Fury of Akoum (*) * 1
Mountain (DSK) (*) * 4
Mountain (MKM) (*) * 3
Mountain (WOE) (*) * 4
Neheb, the Eternal (*) * 1
Neheb, the Worthy (*) * 3
Rageblood Shaman (*) * 4
Ragemonger (*) * 4
Raise Dead (9ED) (*) * 2
Shock (*) * 2
Swamp (DSK) (*) * 4
Swamp (WOE) (*) * 2
Terminate (NCC) (*) * 2

View File

@@ -1,82 +1,27 @@
#NAME:Ragavan Commander
#DESC:The Ragavan Commander Deck
#HINT:castpriority(commander,*)
Treasure Nabber (PZ2) *1
Dire Fleet Daredevil (AFC) *1
Trash for Treasure (C16) *1
Tome of Legends (ELD) *1
Helm of the Host (DOM) *1
Coercive Recruiter (CMR) *1
World at War (ROE) *1
Commander's Plate (CMR) *1
Neheb, the Eternal (AKR) *1
Strike It Rich (MH2) *1
Audacious Reshapers (C21) *1
Shinka, the Bloodsoaked Keep (CHK) *1
Inventors' Fair (KLD) *1
Strip Mine (EXP) *1
Embercleave (ELD) *1
Break Through the Line (FRF) *1
Valakut, the Molten Pinnacle (ZEN) *1
Imperial Recruiter (ME2) *1
Tibalt's Trickery (KHM) *1
Mogg Salvage (NMS) *1
Seize the Day (ODY) *1
Mishra's Bauble (MB1) *1
Hellkite Tyrant (GTC) *1
Goblin Engineer (MH1) *1
Aggravated Assault (ONS) *1
Xorn (AFR) *1
Mana Vault (PUMA) *1
Magda, Brazen Outlaw (KHM) *1
Sensei's Divining Top (EMA) *1
Combat Celebrant (AKR) *1
Blood Moon (2XM) *1
Access Tunnel (STX) *1
Sword of Hearth and Home (MH2) *1
Mox Opal (2XM) *1
Treasure Vault (AFR) *1
Sword of Fire and Ice (2XM) *1
Urza's Saga (MH2) *1
Jeska's Will (CMR) *1
Sol Ring (C19) *1
Seize the Spoils (KHM) *1
Abrade (PLIST) *1
Fury of the Horde (CSP) *1
Valakut Awakening (ZNR) *1
Mountain (UNH) *20
Godo, Bandit Warlord (CHK) *1
Mox Amber (DOM) *2
Cursed Mirror (C21) *1
Price of Glory (ODY) *1
Spire of Industry (AER) *1
Vandalblast (AFC) *1
Ancient Tomb (ZNE) *1
Chaos Warp (AFC) *1
Mana Confluence (CMR) *1
Shatterskull Smashing (ZNR) *1
Grim Monolith (ULG) *1
Lightning Greaves (MB1) *1
Pirate's Pillage (RIX) *1
Shattering Spree (MB1) *1
Sword of Feast and Famine (MPS) *1
Goblin Welder (ULG) *1
War's Toll (BBD) *1
Wayfarer's Bauble (C17) *1
Cathedral of War (M13) *1
Sword of Light and Shadow (2XM) *1
Underworld Breach (THB) *1
Subira, Tulzidi Caravanner (M21) *1
Dockside Extortionist (C19) *1
Mox Diamond (FVR) *1
Bloodstained Mire (ONS) *1
Lightning Bolt (ME1) *1
City of Brass (ME4) *1
Goldspan Dragon (KHM) *1
Ruby Medallion (C14) *1
Sword of the Animist (AFC) *1
Grenzo, Havoc Raiser (PZ2) *2
Moraug, Fury of Akoum (ZNR) *1
Wheel of Fortune (VMA) *1
Port Razer (CMR) *1
#CMD:Ragavan, Nimble Pilferer (MH2) *1
#NAME:Rising Panic
#DESC: Deck for Wagic by Bob
#HINT:castpriority(artifact,instant,enchantment)
#HINT:combo hold(Rising Waters|myhand)^cast(Rising Waters|myhand)^restriction{type(Rising Waters|mybattlefield)~lessthan~1}^totalmananeeded({3}{U})
#HINT:combo hold(Dictate of Kruphix|myhand)^cast(Dictate of Kruphix|myhand)^restriction{type(Dictate of Kruphix|mybattlefield)~lessthan~1}^totalmananeeded({1}{U}{U})
#HINT:combo hold(Frozen Aether|myhand)^cast(Frozen Aether|myhand)^restriction{type(Frozen Aether|mybattlefield)~lessthan~1}^totalmananeeded({3}{U})
#HINT:combo hold(Propaganda|myhand)^cast(Propaganda|myhand)^restriction{type(Propaganda|mybattlefield)~lessthan~1}^totalmananeeded({2}{U})
#HINT:combo hold(Overburden|myhand)^cast(Overburden|myhand)^restriction{type(Overburden|mybattlefield)~lessthan~1}^totalmananeeded({1}{U})
#HINT:combo hold(Dream Tides|myhand)^cast(Dream Tides|myhand)^restriction{type(Dream Tides|mybattlefield)~lessthan~1}^totalmananeeded({1}{U})
Anvil of Bogardan (*) * 2
Black Vise (*) * 4
Dictate of Kruphix (*) * 3
Dream Tides (*) * 3
Ebony Owl Netsuke (*) * 2
Force of Will (*) * 4
Frozen Aether (*) * 3
Howling Mine (*) * 4
Iron Maiden (*) * 2
Island (4ED) (*) * 4
Island (M10) (*) * 4
Island (ICE) (*) * 4
Island (M20) (*) * 4
Island (MIR) (*) * 4
Island (REV) (*) * 3
Overburden (*) * 3
Propaganda (*) * 3
Rising Waters (*) * 4

View File

@@ -2,7 +2,6 @@
#DESC:Original Deck by ashby4 (tappedout.net),
#DESC:refined for Wagic by Bob
#HINT:castpriority(commander,*)
Adarkar Wastes (*) * 1
Akroma's Will (*) * 1
Arcane Signet (*) * 1
Assault Formation (*) * 1
@@ -22,10 +21,9 @@ Crashing Drawbridge (*) * 1
Dismantling Wave (*) * 1
Drift of Phantasms (*) * 1
Dusk // Dawn (*) * 1
Edge of Autumn (*) * 1
Farseek (*) * 1
Fell the Mighty (*) * 1
Forest (*) * 6
Forest (*) * 4
Fortified Rampart (*) * 1
Fortified Village (*) * 1
Glacial Fortress (*) * 1
@@ -38,6 +36,7 @@ Irrigated Farmland (*) * 1
Island (*) * 2
Jeskai Barricade (*) * 1
Jungle Barrier (*) * 1
Last March of the Ents (*) *1
Leyline of Vitality (*) * 1
Lightning Greaves (MPS) (*) * 1
Lumithread Field (*) * 1
@@ -48,7 +47,7 @@ Noetic Scales (*) * 1
Oathsworn Giant (*) * 1
Overgrown Battlement (*) * 1
Perimeter Captain (*) * 1
Plains (*) * 5
Plains (*) * 4
Port Town (*) * 1
Prairie Stream (*) * 1
Rejuvenating Springs (*) * 1
@@ -96,4 +95,4 @@ Wall of Stolen Identity (*) * 1
Wall of Tanglecord (*) * 1
Wave of Reckoning (*) * 1
Yavimaya Coast (*) * 1
#CMD:Arcades, the Strategist (*) * 1
#CMD:Arcades, the Strategist (*) * 1

View File

@@ -13,7 +13,6 @@ Boggart Shenanigans (*) * 1
Chancellor of the Forge (*) * 1
Coat of Arms (*) * 1
Dragon Fodder (ALA) (*) * 1
Fervor (*) * 1
Flamekin Village (*) * 1
Foundry Street Denizen (*) * 1
Goblin Assassin (*) * 1
@@ -38,50 +37,99 @@ Goblin Warchief (*) * 1
Goblin Wardriver (*) * 1
Goblin War Drums (*) * 1
Goblin Wizard (*) * 1
Homeward Path (*) * 1
Horde of Boggarts (*) * 1
Hordeling Outburst (*) * 1
Impact Tremors (*) * 1
Intimidator Initiate (*) * 1
Krenko's Enforcer (*) * 1
Krenko's Command (*) * 1
Krenko, Tin Street Kingpin (*) * 1
Legion Loyalist (*) * 1
Legion Warboss (*) * 1
Lightning Greaves (MRD) (*) * 1
Madblind Mountain (*) * 1
Mask of Avacyn (*) * 1
Mob Justice (*) * 1
Mogg Alarm (*) * 1
Mogg Flunkies (*) * 1
Mogg Maniac (*) * 1
Mogg Raider (*) * 1
Moggcatcher (*) * 1
Mons's Goblin Raiders (*) * 1
Mountain (4ED) (*) * 4
Mountain (M10) (*) * 4
Mountain (ICE) (*) * 4
Mountain (M20) (*) * 4
Mountain (MIR) (*) * 4
Mountain (LEA) (*) * 3
Mountain (5ED) (*) * 3
Pashalik Mons (*) * 1
Prophetic Ravings (*) * 1
Purphoros, God of the Forge (*) * 1
Quest for the Goblin Lord (*) * 1
Rising of the Day (*) * 1
Reckless Bushwhacker (*) * 1
Reckless One (*) * 1
Reliquary Tower (*) * 1
Ruby Medallion (*) * 1
Shared Animosity (*) * 1
Siege-Gang Commander (*) * 1
Skirk Commando (*) * 1
Smash (*) * 1
Smoldering Spires (*) * 1
Sol Ring (*) * 1
Swiftfoot Boots (*) * 1
Valakut, the Molten Pinnacle (*) * 1
Vandalblast (*) * 1
Warren Instigator (*) * 1
Whispersilk Cloak (*) * 1
#CMD:Krenko, Mob Boss (*) * 1
#CMD:Krenko, Mob Boss (*) * 1

View File

@@ -30,16 +30,14 @@ Dark Ritual (*) * 1
Dragonskull Summit (*) * 1
Drana, Liberator of Malakir (*) * 1
Duskborne Skymarcher (*) * 1
Elenda, the Dusk Rose (*) * 1
Exquisite Blood (*) * 1
Elenda, the Dusk Rose (*) * 1
Exquisite Blood (*) * 1
Falkenrath Exterminator (*) * 1
Falkenrath Noble (*) * 1
Falkenrath Perforator (*) * 1
Fervor (*) * 1
Gift of Estates (*) * 1
Gifted Aetherborn (*) * 1
Godless Shrine (*) * 1
Guul Draz Assassin (*) * 1
Guul Draz Vampire (*) * 1
Impact Tremors (*) * 1
Inspiring Vantage (*) * 1
@@ -50,6 +48,7 @@ Land Tax (*) * 1
Legion Lieutenant (*) * 1
Legion's Landing (*) * 1
Malakir Cullblade (*) * 1
Markov Baron (*) * 1
Martyr of Dusk (*) * 1
Mountain (*) * 1
Necropolis Regent (*) * 1
@@ -63,6 +62,7 @@ Plateau (*) * 1
Pulse Tracker (*) * 1
Purphoros, God of the Forge (*) * 1
Quag Vampires (*) * 1
Rising of the Day (*) * 1
Ruthless Cullblade (*) * 1
Sacred Foundry (*) * 1
Sanctum Seeker (*) * 1
@@ -94,4 +94,4 @@ Vito, Thorn of the Dusk Rose (*) * 1
Voldaren Stinger (*) * 1
Whispersilk Cloak (*) * 1
Wing-Scarred Crag (*) * 1
#CMD:Edgar Markov (*) * 1
#CMD:Edgar Markov (*) * 1

View File

@@ -0,0 +1,91 @@
#NAME:Sauron Commander
#DESC:Original deck by Josh
#DESC:Edmundson (tappedout.net)
#DESC:Refined for Wagic by Bob
#HINT:castpriority(commander,*)
Abrade (*) * 1
An Offer You Can't Refuse (*) * 1
Arcane Denial (*) * 1
Arcane Signet (*) * 1
Badlands (*) * 1
Bedevil (*) * 1
Big Score (*) * 1
Bone Miser (*) * 1
Callous Dismissal (*) * 1
Changeling Outcast (*) * 1
Chromatic Lantern (*) * 1
Command Tower (*) * 1
Commander's Sphere (*) * 1
Crumbling Necropolis (*) * 1
Dragonskull Summit (*) * 1
Dreadhorde Invasion (*) * 1
Drowned Catacomb (*) * 1
Eternal Skylord (*) * 1
Evolving Wilds (*) * 1
Exotic Orchard (*) * 1
Faithless Looting (*) * 1
Feed the Swarm (*) * 1
Fellwar Stone (*) * 1
Foray of Orcs (*) * 1
Gleaming Overseer (*) * 1
Gothmog, Morgul Lieutenant (*) * 1
Grishnakh, Brash Instigator (*) * 1
Haunted Ridge (*) * 1
Herald of Secret Streams (*) * 1
Honor the God-Pharaoh (*) * 1
Infernal Grasp (*) * 1
Inherited Envelope (*) * 1
Island (LTR) (*) * 4
Island (WOE) (*) * 1
Lazotep Chancellor (*) * 1
Lazotep Plating (*) * 1
March from the Black Gate (*) * 1
Mauhur, Uruk-hai Captain (*) * 1
Mindless Conscription (*) * 1
Mithril Coat (*) * 1
Mountain (LTR) (*) * 4
616930
619388
619389
619390
619391
619392
619393
619394
619395
Orcish Bowmasters (*) * 1
Orcish Siegemaster (*) * 1
Ringsight (*) * 1
Saruman the White (*) * 1
Saruman's Trickery (*) * 1
Saruman, the White Hand (*) * 1
Sauron, Lord of the Rings (*) * 1
Sauron, the Necromancer (*) * 1
Sheoldred, Whispering One (*) * 1
Shipwreck Marsh (*) * 1
Shivan Reef (*) * 1
Smoldering Marsh (*) * 1
Sol Ring (*) * 1
Stormcarved Coast (*) * 1
Sulfurous Springs (*) * 1
Sunken Hollow (*) * 1
Swamp (LTR) (*) * 4
Swamp (WOE) (*) * 4
Swamp (DSK) (*) * 3
Swarming of Moria (*) * 1
Talisman of Creativity (*) * 1
Talisman of Dominance (*) * 1
Talisman of Indulgence (*) * 1
Teferi's Ageless Insight (*) * 1
Temple of Epiphany (*) * 1
The Locust God (*) * 1
Thrill of Possibility (*) * 1
Ulamog, The Infinite Gyre (*) * 1
Underground River (*) * 1
Underground Sea (*) * 1
Vandalblast (*) * 1
Whispersilk Cloak (*) * 1
Widespread Brutality (*) * 1
Windfall (*) * 1
Witch-king, Bringer of Ruin (*) * 1
#CMD:Sauron, the Dark Lord (*) * 1

View File

@@ -0,0 +1,26 @@
#NAME:Counter Attack
#DESC:Deck Concept by Vitty85
#DESC:Designed for Wagic by Bob
#HINT:castpriority(creature,*)
#HINT:combo hold(Time of Need|myhand)^cast(Time of Need|myhand) targeting(Shalai and Hallar|mylibrary)^restriction{type(Shalai and Hallar|mybattlefield)~lessthan~1}^totalmananeeded({1}{G})
#HINT:combo hold(Basri's Solidarity|myhand)^until(Shalai and Hallar|mybattlefield)^cast(Basri's Solidarity|myhand)^totalmananeeded({1}{W})
#HINT:alwaysattackwith(Kalonian Hydra)
Basri's Solidarity (*) * 4
Birds of Paradise (M12) (*) * 3
Cathars' Crusade (*) * 2
Clifftop Retreat (*) * 3
Essence Warden (*) * 3
Graypelt Refuge (*) * 4
Heliod, Sun-Crowned (*) * 3
Jetmir's Garden (*) * 4
Kazandu Refuge (*) * 2
Prosperous Innkeeper (*) * 2
Razorverge Thicket (*) * 4
Archangel of Thune (*) * 3
Rootbound Crag (*) * 2
Kalonian Hydra (*) * 4
Shalai and Hallar (*) * 4
Soul Warden (*) * 3
Sunpetal Grove (*) * 2
Time of Need (*) * 4
Windswept Heath (*) * 4

View File

@@ -0,0 +1,27 @@
#NAME:Orcs of Mordor
#DESC:Designed for Wagic by Bob
Assault on Osgiliath (*) * 2
Dunland Crebain (*) * 2
Easterling Vanguard (*) * 2
Feed the Swarm (*) * 2
Foray of Orcs (*) * 4
Gothmog, Morgul Lieutenant (*) * 1
Grishnakh, Brash Instigator (*) * 1
March from the Black Gate (*) * 2
Mauhur, Uruk-hai Captain (*) * 2
Mordor Muster (*) * 2
Mountain (LTR) (*) * 4
Mountain (SNC) (*) * 4
Mountain (ONE) (*) * 4
Orcish Bowmasters (*) * 4
Olog-hai Crusher (*) * 2
Sauron, the Lidless Eye (*) * 1
Snarling Warg (*) * 2
Swamp (LTR) (*) * 4
Swamp (SNC) (*) * 4
Swamp (ONE) (*) * 4
Swamp (NEO) (*) * 2
Swarming of Moria (*) * 3
Ugluk of the White Hand (*) * 1
Witch-king, Bringer of Ruin (*) * 1

View File

@@ -0,0 +1,95 @@
#NAME:Graaz Commander
#DESC:Deck concept thanks to punkeduard
#DESC:Original deck by vasarto77 (tappedout.net)
#DESC:Refined for Wagic by Bob
#HINT:castpriority(commander,creature,*)
#HINT:combo hold(All is Dust|myhand)^cast(All is Dust|myhand)^restriction{type(creature|opponentbattlefield)~morethan~2}^totalmananeeded({7})
Akroma's Memorial (*) * 1
All is Dust (*) * 1
Alloy Myr (*) * 1
Ancient Tomb (*) * 1
Arcbound Crusher (*) * 1
Ash Barrens (*) * 1
Bitterthorn, Nissa's Animus (*) * 1
Blinkmoth Urn (*) * 1
Bonded Construct (*) * 1
Captain's Claws (*) * 1
Chief of the Foundry (*) * 1
Coat of Arms (*) * 1
Commander's Plate (*) * 1
Copper Myr (*) * 1
Darksteel Citadel (*) * 1
Darksteel Forge (*) * 1
Darksteel Juggernaut (*) * 1
Dolmen Gate (*) * 1
Eldrazi Monument (*) * 1
Environmental Sciences (*) * 1
Etched Champion (*) * 1
Fellwar Stone (*) * 1
Field of the Dead (*) * 1
Flayer Husk (*) * 1
Forsaken Monument (*) * 1
Foundry of the Consuls (*) * 1
Gemini Engine (*) * 1
Gold Myr (*) * 1
Golem Foundry (*) * 1
Guildless Commons (*) * 1
Ichorclaw Myr (*) * 1
Iron Apprentice (*) * 1
Iron Myr (*) * 1
It That Betrays (*) * 1
Kozilek, Butcher of Truth (*) * 1
Leaden Myr (*) * 1
Mascot Exhibition (*) * 1
Memnite (*) * 1
Mishra's Self-Replicator (*) * 1
Monkey Cage (*) * 1
Mox Opal (*) * 1
Myr Battlesphere (*) * 1
Myr Retriever (*) * 1
Myr Turbine (*) * 1
Nettlecyst (*) * 1
Oketra's Monument (*) * 1
Ornithopter (*) * 1
Ornithopter of Paradise (*) * 1
Palladium Myr (*) * 1
Patchwork Automaton (*) * 1
Phyrexian Walker (*) * 1
Plague Myr (*) * 1
Pristine Talisman (*) * 1
Scavenger Grounds (*) * 1
Sea Gate Wreckage (*) * 1
Searchlight Companion (*) * 1
Shimmer Myr (*) * 1
Shrine of the Forsaken Gods (*) * 1
Signal Pest (*) * 1
Silver Myr (*) * 1
Skittering Cicada (*) * 1
Skittering Invasion (*) * 1
Sol Ring (*) * 1
Sparring Construct (*) * 1
Spawning Bed (*) * 1
Spawnsire of Ulamog (*) * 1
Steel Overseer (*) * 1
Stonecoil Serpent (*) * 1
Swiftfoot Boots (*) * 1
Temple of the False God (*) * 1
Thopter Assembly (*) * 1
Thought Vessel (*) * 1
Thran Dynamo (*) * 1
Universal Automaton (*) * 1
Unwinding Clock (*) * 1
Urza's Mine (*) * 1
Urza's Power Plant (*) * 1
Urza's Saga
Urza's Tower (*) * 1
Urza's Workshop (*) * 1
Void Winnower (*) * 1
Wastes (CMM) (*) * 4
Wastes (J22) (*) * 4
Wastes (OGW) (*) * 4
Wastes (TSR) (*) * 4
Worn Powerstone (*) * 1
Zhalfirin Void (*) * 1
#CMD:Graaz, Unstoppable Juggernaut (*) * 1

View File

@@ -1,79 +1,96 @@
#Black/White Deck 10E/RV
#NAME:The Hive
#DESC:When the last living being
#DESC:succumbs to the terrible blight
#DESC:the wasps will rise
#DESC:stirring the barren air
#DESC:with their hum.
#4x The hive
135253
135253
135253
135253
#4x pestilence
1172
1172
1172
1172
#4x Ancestor chosen
130550
130550
130550
130550
#4x assassinate
135194
135194
135194
135194
#4x bottle gnomes
129495
129495
129495
129495
#4x Drudge skelettons
129529
129529
129529
129529
#4x Glorious Anthem
129572
129572
129572
129572
#4x Paladin en Vec
129668
129668
129668
129668
#2 x Deathmark
129910
129910
#2x Demistify
129524
129524
#12 swamps
129754
129756
129755
129757
129754
129756
129755
129757
129754
129756
129755
129757
#12x plains
129680
129681
129682
129683
129680
129681
129682
129683
129680
129681
129682
129683
#NAME:Tobias Commander
#DESC:Tobias Andrion considers himself
#DESC:a master of strategy. Can you
#DESC:defeat him?
#DESC:
#DESC:Win Wagic duels to unlock
#DESC:more Commander opponents
#DESC:
#DESC:Original deck idea by Goraghull
#DESC:(mtggoldfish.com)
#DESC:Built for Wagic by Bob
#HINT:castpriority(commander,*)
Acrobatic Maneuver (*) * 1
Aethersnipe (*) * 1
Alabaster Dragon (*) * 1
Angelic Renewal (*) * 1
Aqueous Form (*) * 1
Archaeomancer (*) * 1
Ash Barrens (*) * 1
Azorius Guildgate (*) * 1
Azorius Signet (*) * 1
Blur (*) * 1
Capsize (*) * 1
Cloak of Mists (*) * 1
Cloudshift (*) * 1
Command Tower (*) * 1
Commander's Sphere (*) * 1
Counterspell (*) * 1
Deep Analysis (*) * 1
Displace (*) * 1
Drifting Meadow (*) * 1
Enlightened Maniac (*) * 1
Ephemerate (*) * 1
Essence Flux (*) * 1
Fellwar Stone (*) * 1
Flicker of Fate (*) * 1
Forge of Heroes (*) * 1
Forsake the Worldly (*) * 1
Ghostly Flicker (*) * 1
Icewind Stalwart (*) * 1
Idyllic Beachfront (*) * 1
Inspiring Overseer (*) * 1
Island (*) * 4
Island (WOE) (*) * 4
Island (LCI) (*) * 4
Journey to Nowhere (*) * 1
Kor Cartographer (*) * 1
Late to Dinner (*) * 1
Lonely Sandbar (*) * 1
Lose Focus (*) * 1
Man-o'-War (*) * 1
Meandering River (*) * 1
Mind Stone (*) * 1
Mist Raven (*) * 1
Mnemonic Wall (*) * 1
Momentary Blink (*) * 1
Muse Drake (*) * 1
Negate (M12) (*) * 1
Oblivion Ring (*) * 1
Opal Palace (*) * 1
Palace Sentinels (*) * 1
Pegasus Guardian (*) * 1
Plains (*) * 4
Plains (WOE) (*) * 4
Plains (LCI) (*) * 4
Plains (OTJ) (*) * 1
Ponder (M12) (*) * 1
Pondering Mage (*) * 1
Preordain (*) * 1
Protective Bubble (*) * 1
Remote Isle (*) * 1
Revoke Existence (*) * 1
Salvager of Secrets (*) * 1
Scrivener (*) * 1
Scrollshift (*) * 1
Sea Gate Oracle (*) * 1
Sensor Splicer (*) * 1
Settle Beyond Reality (*) * 1
Skyscanner (*) * 1
Soul Warden (*) * 1
Soul of Migration (*) * 1
Spirited Companion (*) * 1
Stonehorn Dignitary (*) * 1
Suture Priest (*) * 1
Swords to Plowshares (*) * 1
Teferi's Time Twist (*) * 1
Temporal Fissure (*) * 1
The Modern Age (*) * 1
Thought Vessel (*) * 1
Tranquil Cove (*) * 1
Turn to Mist (*) * 1
Vedalken Dismisser (RAV) (*) * 1
Whirlpool Rider (*) * 1
Whispersilk Cloak (*) * 1
#CMD:Tobias Andrion (*) * 1

View File

@@ -0,0 +1,92 @@
#NAME:Shalai-Hallar Commander
#DESC:Deck concept thanks to Vitty85
#DESC:Original deck by gabao (tappedout.net)
#DESC:Refined for Wagic by Bob
#HINT:castpriority(commander,creature,*)
#HINT:dontattackwith(Birds of Paradise)
#HINT:dontblockwith(Birds of Paradise)
#HINT:alwaysattackwith(Kalonian Hydra)
Abzan Battle Priest (*) * 1
Abzan Falconer (*) * 1
Ajani's Pridemate (M11) (*) * 1
All Will Be One (*) * 1
Arcane Signet (*) * 1
Arwen, Weaver of Hope (*) * 1
Basri's Solidarity (*) * 1
Birds of Paradise (*) * 1
Botanical Brawler (*) * 1
Branching Evolution (*) * 1
Bretagard Stronghold (*) * 1
Canopy Vista (*) * 1
Cathars' Crusade (*) * 1
Cinder Glade (*) * 1
Command Tower (*) * 1
Conclave Mentor (*) * 1
Cultivate (*) * 1
Death's Presence (*) * 1
Defiler of Vigor (*) * 1
Dusk Legion Duelist (*) * 1
Enduring Scalelord (*) * 1
Evolution Sage (*) * 1
Evolving Wilds (*) * 1
Exotic Orchard (*) * 1
Farseek (*) * 1
Felidar Retreat (*) * 1
Forest (LTR) (*) * 4
Forest (CMM) (*) * 4
Fortified Village (*) * 1
Game Trail (*) * 1
Goblin Anarchomancer (*) * 1
Good-Fortune Unicorn (*) * 1
Grumgully, the Generous (*) * 1
Gyre Sage (*) * 1
Halana and Alena, Partners (*) * 1
Hardened Scales (*) * 1
Heliod, Sun-Crowned (*) * 1
Hydra's Growth (*) * 1
Incubation Druid (*) * 1
Inspiring Call (*) * 1
Invigorating Surge (*) * 1
Ivy Lane Denizen (*) * 1
Kalonian Hydra (*) * 1
Kami of Whispered Hopes (*) * 1
Keen Sense (*) * 1
Kodama's Reach (CMM) (*) * 1
Krenko, Tin Street Kingpin (*) * 1
Krosan Grip (*) * 1
Krosan Verge (*) * 1
Lifelink (*) * 1
Loyal Guardian (*) * 1
Managorger Hydra (*) * 1
Master Chef (*) * 1
Mayael's Aria (*) * 1
Mikaeus, the Lunarch (*) * 1
Mountain (LTR) (*) * 4
Mountain (CMM) (*) * 4
Nature's Lore (*) * 1
Ozolith, the Shattered Spire (*) * 1
Path to Exile (*) * 1
Plains (LTR) (*) * 4
Plains (CMM) (*) * 4
Pledge of Unity (*) * 1
Rampant Growth (*) * 1
Renata, Called to the Hunt (*) * 1
Resourceful Defense (*) * 1
Rhythm of the Wild (*) * 1
Shalai, Voice of Plenty (*) * 1
Sol Ring (*) * 1
Solidarity of Heroes (*) * 1
Sungrass Prairie (*) * 1
Surge of Salvation (*) * 1
Sword of Truth and Justice (*) * 1
Swords to Plowshares (*) * 1
Take Up the Shield (*) * 1
Taurean Mauler (*) * 1
Temple of the False God (*) * 1
Terramorphic Expanse (*) * 1
Together Forever (*) * 1
Trelasarra, Moon Dancer (*) * 1
Twinblade Paladin (*) * 1
Visions of Dominance (*) * 1
Wildwood Scourge (*) * 1
#CMD:Shalai and Hallar (*) * 1

View File

@@ -0,0 +1,89 @@
#NAME:Vial Smasher Commander
#DESC:Original deck by GrwingErbw (tappedout.net)
#DESC:Refined for Wagic by Bob
#HINT:castpriority(commander,*)
#HINT:dontattackwith(Vial Smasher the Fierce)
#HINT:dontblockwith(Vial Smasher the Fierce)
Abrade (*) * 1
Angrath, the Flame-Chained (*) * 1
Archfiend of Despair (*) * 1
Badlands (*) * 1
Banefire (M19) (*) * 1
Baneful Omen (*) * 1
Bituminous Blast (C16) (*) * 1
Black Market (*) * 1
Blasphemous Act (*) * 1
Bojuka Bog (*) * 1
Brash Taunter (*) * 1
Breath of Malfegor (*) * 1
Charmbreaker Devils (*) * 1
Cinder Barrens (*) * 1
City on Fire (*) * 1
Command Tower (*) * 1
Curtains' Call (*) * 1
Decree of Pain (*) * 1
Doom Blade (*) * 1
Dragonskull Summit (*) * 1
Dreadbore (*) * 1
Everlasting Torment (*) * 1
Expedition Map (*) * 1
Exsanguinate (*) * 1
Falkenrath Noble (*) * 1
Fiery Confluence (*) * 1
Fiery Emancipation (*) * 1
Fire Diamond (*) * 1
Font of Mythos (CON) (*) * 1
Foreboding Ruins (*) * 1
Go for the Throat (*) * 1
Gratuitous Violence (*) * 1
Gray Merchant of Asphodel (*) * 1
Guttersnipe (*) * 1
Hero's Downfall (*) * 1
Howling Mine (*) * 1
In Garruk's Wake (*) * 1
Indulgent Tormentor (*) * 1
Kaervek the Merciless (*) * 1
Kederekt Parasite (*) * 1
Lightning Reaver (*) * 1
Malfegor (*) * 1
Mogis, God of Slaughter (*) * 1
Mountain (MKM) (*) * 4
Mountain (WOE) (*) * 4
Mountain (LCI) (*) * 4
Mountain (LTR) (*) * 1
Murder (*) * 1
Neheb, the Eternal (*) * 1
Painful Quandary (*) * 1
Phyrexian Arena (*) * 1
Polluted Bonds (*) * 1
Rakdos Carnarium (*) * 1
Rakdos Guildgate (*) * 1
Rakdos Signet (*) * 1
Rakdos's Return (*) * 1
Rakdos, Lord of Riots (*) * 1
Sheoldred, the Apocalypse (*) * 1
Sin Prodder (*) * 1
Skull Rend (*) * 1
Smoldering Marsh (*) * 1
Sol Ring (*) * 1
Solemn Simulacrum (*) * 1
Star of Extinction (*) * 1
Starstorm (*) * 1
Swamp (MKM) (*) * 4
Swamp (WOE) (*) * 4
Swamp (LCI) (*) * 4
Swamp (LTR) (*) * 1
Temple of Malice (*) * 1
Temple of the False God (*) * 1
Temporal Extortion (*) * 1
Terminate (CMD) (*) * 1
Thought Vessel (*) * 1
Torment of Hailfire (*) * 1
Tragic Slip (*) * 1
Twilight Prophet (*) * 1
Unlicenced Disintergration (*) * 1
Vicious Shadows (*) * 1
Volcanic Vision (*) * 1
Waste Not (*) * 1
Wound Reflection (*) * 1
#CMD:Vial Smasher the Fierce (*) * 1

View File

@@ -0,0 +1,25 @@
#NAME:Draw and Die!
#DESC:Deck concept by ChocolateLightning
#DESC:(tappedout.net), refined for
#DESC:Wagic by Bob
#HINT:dontattackwith(Fate Unraveler)
#HINT:dontblockwith(Fate Unraveler)
Dictate of Kruphix (*) * 3
Dismal Backwater (*) * 2
Drowned Catacomb (*) * 4
Fate Unraveler (*) * 4
Fog Bank (*) * 2
Forced Fruition (*) * 2
Howling Mine (*) * 4
Island (MIR) (*) * 4
Island (ICE) (*) * 4
Liliana's Caress (*) * 2
Master of the Feast (*) * 4
Ob Nixilis, the Hate-Twisted (*) * 3
Peer into the Abyss (*) * 1
Teferi's Puzzle Box (*) * 2
Shield Sphere (*) * 3
Swamp (ZEN) (*) * 4
Swamp (4ED) (*) * 4
Underworld Dreams (*) * 4
Underground Sea (*) * 4

View File

@@ -0,0 +1,29 @@
#NAME:Cut Off One Head...
#DESC:Deck concept by Prospekt
#DESC:(tappedout.net), refined for
#DESC:Wagic by Bob
#HINT:dontattackwith(Birds of Paradise)
#HINT:dontblockwith(Birds of Paradise)
#HINT:dontattackwith(Karametra's Acolyte)
#HINT:alwaysattackwith(Kalonian Hydra)
#HINT:combo hold(Alpha Authority|myhand)^until(creature[-Hydra]|mybattlefield)^cast(Alpha Authority|myhand) targeting(creature[-Hydra]|mybattlefield)^restriction{type(Alpha Authority|mybattlefield)~lessthan~1}^totalmananeeded({1}{G})
#HINT:combo hold(Canopy Cover|myhand)^until(creature[-Hydra]|mybattlefield)^cast(Canopy Cover|myhand) targeting(creature[-Hydra]|mybattlefield)^restriction{type(Canopy Cover|mybattlefield)~lessthan~1}^totalmananeeded({1}{G})
Alpha Authority * 2
Birds of Paradise * 4
Beast Within * 3
Canopy Cover * 2
Cultivate * 4
Forest (MIR) * 4
Forest (ICE) * 4
Forest (4ED) * 4
Forest (5ED) * 4
Forest (7ED) * 4
Forest (RAV) * 2
Kalonian Hydra * 2
Karametra's Acolyte * 2
Khalni Hydra * 4
Managorger Hydra * 4
Mistcutter Hydra * 3
Primordial Hydra * 4
Solidarity of Heroes * 2
Voracious Hydra * 2

View File

@@ -0,0 +1,31 @@
#NAME:Nazgul
#DESC:Deck for Wagic by Bob
#HINT:combo hold(Sam's Desperate Rescue|myhand)^cast(Sam's Desperate Rescue|myhand) targeting(Nazgul|mygraveyard)^totalmananeeded({B})
#HINT:combo hold(Demonic Tutor|myhand)^cast(Demonic Tutor|myhand) targeting(Nazgul|mylibrary)^totalmananeeded({1}{B})
Bog Wraith (*) * 4
Claim the Precious (*) * 3
Demonic Tutor (*) * 2
Forced Adaptation (*) * 2
Forest (LTR) (*) * 4
Forest (WOE) (*) * 3
Hardened Scales (*) * 4
Inherited Envelope (*) * 3
Ringwraiths (*) * 2
Sam's Desperate Rescue (*) * 2
Sheoldred, Whispering One (*) * 1
Smeagol, Helpful Guide (*) * 2
Swamp (DSK) (*) * 4
Swamp (LTR) (*) * 4
Swamp (WOE) (*) * 3
The Black Breath (*) * 2
Urborg, Tomb of Yawgmoth (LTC) (*) * 2
Woodland Cemetery (LTC) * 4
616930
619388
619389
619390
619391
619392
619393
619394
619395

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