From 52b83a135cd8c7ad3758602a98c720109146ad31 Mon Sep 17 00:00:00 2001 From: "wagic.the.homebrew" Date: Sun, 3 Jul 2011 08:47:51 +0000 Subject: [PATCH] - Added TutorialMessage ability -- Tutorial Messages are an ability like any other, except it can only be displayed once. Subsequent calls are ignored, the ability is removed from the game as soon as it is added -- This allows to add event triggered messages ingame. Messages are either text, or images (I don't have an image sample, but rules/classic.txt has a few examples that might help) -- only tested on Windows, although I made sure the PSP version compiles. Hopefully I also made the necessary for it to work in the touch version (touching the screen should be enough to close the tuto message) -- Room for improvement: possibility to choose a title in text mode, possibility to have some messages depending on others (e.g.: don't show message X until message Y has been shown), improve some of the abilities and triggers to give more flexibility, add events outside of game, to allow tuto messages in deck creator, etc... --- projects/mtg/Android/default.properties | 2 +- projects/mtg/Android/jni/Android.mk | 1 + projects/mtg/Makefile | 2 +- projects/mtg/bin/Res/rules/classic.txt | 38 +++ projects/mtg/bin/Res/rules/mtg.txt | 2 +- projects/mtg/bin/Res/sound/sfx/chain.wav | Bin 0 -> 104400 bytes projects/mtg/bin/Res/sound/sfx/tutorial.wav | Bin 0 -> 33800 bytes projects/mtg/include/AllAbilities.h | 33 +++ projects/mtg/include/GameOptions.h | 5 +- projects/mtg/include/IconButton.h | 50 ++++ projects/mtg/include/Tasks.h | 2 +- projects/mtg/include/utils.h | 3 + projects/mtg/src/ActionStack.cpp | 12 + projects/mtg/src/AllAbilities.cpp | 281 ++++++++++++++++++++ projects/mtg/src/GameOptions.cpp | 61 ++++- projects/mtg/src/GameStateShop.cpp | 3 +- projects/mtg/src/IconButton.cpp | 137 ++++++++++ projects/mtg/src/MTGAbility.cpp | 9 + projects/mtg/src/Rules.cpp | 4 +- projects/mtg/src/Tasks.cpp | 45 +--- projects/mtg/src/utils.cpp | 10 + projects/mtg/template.vcxproj | 2 + projects/mtg/template.vcxproj.filters | 6 + projects/mtg/wagic-SDL.pro | 2 + projects/mtg/wagic.pro | 2 + 25 files changed, 656 insertions(+), 56 deletions(-) create mode 100644 projects/mtg/bin/Res/rules/classic.txt create mode 100644 projects/mtg/bin/Res/sound/sfx/chain.wav create mode 100644 projects/mtg/bin/Res/sound/sfx/tutorial.wav create mode 100644 projects/mtg/include/IconButton.h create mode 100644 projects/mtg/src/IconButton.cpp diff --git a/projects/mtg/Android/default.properties b/projects/mtg/Android/default.properties index d72590b67..9d135cb85 100644 --- a/projects/mtg/Android/default.properties +++ b/projects/mtg/Android/default.properties @@ -8,4 +8,4 @@ # project structure. # Project target. -target=Samsung Electronics Co., Ltd.:GALAXY Tab Addon:8 +target=android-7 diff --git a/projects/mtg/Android/jni/Android.mk b/projects/mtg/Android/jni/Android.mk index d160eb345..73b95ee2e 100644 --- a/projects/mtg/Android/jni/Android.mk +++ b/projects/mtg/Android/jni/Android.mk @@ -80,6 +80,7 @@ LOCAL_SRC_FILES := $(SDL_PATH)/src/main/android/SDL_android_main.cpp \ $(MTG_PATH)/src/GuiPhaseBar.cpp \ $(MTG_PATH)/src/GuiPlay.cpp \ $(MTG_PATH)/src/GuiStatic.cpp \ + $(MTG_PATH)/src/IconButton.cpp \ $(MTG_PATH)/src/ManaCost.cpp \ $(MTG_PATH)/src/ManaCostHybrid.cpp \ $(MTG_PATH)/src/MenuItem.cpp \ diff --git a/projects/mtg/Makefile b/projects/mtg/Makefile index b2ca186fc..5d3c277da 100644 --- a/projects/mtg/Makefile +++ b/projects/mtg/Makefile @@ -1,4 +1,4 @@ -OBJS = objs/ActionElement.o objs/ActionLayer.o objs/ActionStack.o objs/AIHints.o objs/AIMomirPlayer.o objs/AIPlayer.o objs/AIStats.o objs/AllAbilities.o objs/CardGui.o objs/CardDescriptor.o objs/CardDisplay.o objs/CardEffect.o objs/CardPrimitive.o objs/CardSelector.o objs/CardSelectorSingleton.o objs/Counters.o objs/Credits.o objs/Damage.o objs/DamagerDamaged.o objs/DeckDataWrapper.o objs/DeckEditorMenu.o objs/DeckMenu.o objs/DeckMenuItem.o objs/DeckMetaData.o objs/DeckStats.o objs/DuelLayers.o objs/Effects.o objs/ExtraCost.o objs/GameApp.o objs/GameLauncher.o objs/GameObserver.o objs/GameOptions.o objs/GameState.o objs/GameStateAwards.o objs/GameStateDeckViewer.o objs/GameStateDuel.o objs/DeckManager.o objs/GameStateMenu.o objs/GameStateOptions.o objs/GameStateShop.o objs/GameStateStory.o objs/GameStateTransitions.o objs/GuiAvatars.o objs/GuiBackground.o objs/GuiCardsController.o objs/GuiCombat.o objs/GuiFrame.o objs/GuiHand.o objs/GuiLayers.o objs/GuiMana.o objs/GuiPhaseBar.o objs/GuiPlay.o objs/GuiStatic.o objs/ManaCost.o objs/ManaCostHybrid.o objs/MenuItem.o objs/ModRules.o objs/MTGAbility.o objs/MTGCardInstance.o objs/MTGCard.o objs/MTGDeck.o objs/MTGDefinitions.o objs/MTGGamePhase.o objs/MTGGameZones.o objs/MTGPack.o objs/MTGRules.o objs/Navigator.o objs/ObjectAnalytics.o objs/OptionItem.o objs/PhaseRing.o objs/Player.o objs/PlayerData.o objs/PlayGuiObjectController.o objs/PlayGuiObject.o objs/PlayRestrictions.o objs/Pos.o objs/PrecompiledHeader.o objs/PriceList.o objs/ReplacementEffects.o objs/Rules.o objs/SimpleMenu.o objs/SimpleMenuItem.o objs/SimplePad.o objs/SimplePopup.o objs/StoryFlow.o objs/StyleManager.o objs/Subtypes.o objs/TargetChooser.o objs/TargetsList.o objs/TextScroller.o objs/ThisDescriptor.o objs/Token.o objs/Translate.o objs/TranslateKeys.o objs/Trash.o objs/utils.o objs/WEvent.o objs/WResourceManager.o objs/WCachedResource.o objs/WDataSrc.o objs/WGui.o objs/WFilter.o objs/Tasks.o objs/WFont.o +OBJS = objs/ActionElement.o objs/ActionLayer.o objs/ActionStack.o objs/AIHints.o objs/AIMomirPlayer.o objs/AIPlayer.o objs/AIStats.o objs/AllAbilities.o objs/CardGui.o objs/CardDescriptor.o objs/CardDisplay.o objs/CardEffect.o objs/CardPrimitive.o objs/CardSelector.o objs/CardSelectorSingleton.o objs/Counters.o objs/Credits.o objs/Damage.o objs/DamagerDamaged.o objs/DeckDataWrapper.o objs/DeckEditorMenu.o objs/DeckMenu.o objs/DeckMenuItem.o objs/DeckMetaData.o objs/DeckStats.o objs/DuelLayers.o objs/Effects.o objs/ExtraCost.o objs/GameApp.o objs/GameLauncher.o objs/GameObserver.o objs/GameOptions.o objs/GameState.o objs/GameStateAwards.o objs/GameStateDeckViewer.o objs/GameStateDuel.o objs/DeckManager.o objs/GameStateMenu.o objs/GameStateOptions.o objs/GameStateShop.o objs/GameStateStory.o objs/GameStateTransitions.o objs/GuiAvatars.o objs/GuiBackground.o objs/GuiCardsController.o objs/GuiCombat.o objs/GuiFrame.o objs/GuiHand.o objs/GuiLayers.o objs/GuiMana.o objs/GuiPhaseBar.o objs/GuiPlay.o objs/GuiStatic.o objs/IconButton.o objs/ManaCost.o objs/ManaCostHybrid.o objs/MenuItem.o objs/ModRules.o objs/MTGAbility.o objs/MTGCardInstance.o objs/MTGCard.o objs/MTGDeck.o objs/MTGDefinitions.o objs/MTGGamePhase.o objs/MTGGameZones.o objs/MTGPack.o objs/MTGRules.o objs/Navigator.o objs/ObjectAnalytics.o objs/OptionItem.o objs/PhaseRing.o objs/Player.o objs/PlayerData.o objs/PlayGuiObjectController.o objs/PlayGuiObject.o objs/PlayRestrictions.o objs/Pos.o objs/PrecompiledHeader.o objs/PriceList.o objs/ReplacementEffects.o objs/Rules.o objs/SimpleMenu.o objs/SimpleMenuItem.o objs/SimplePad.o objs/SimplePopup.o objs/StoryFlow.o objs/StyleManager.o objs/Subtypes.o objs/TargetChooser.o objs/TargetsList.o objs/TextScroller.o objs/ThisDescriptor.o objs/Token.o objs/Translate.o objs/TranslateKeys.o objs/Trash.o objs/utils.o objs/WEvent.o objs/WResourceManager.o objs/WCachedResource.o objs/WDataSrc.o objs/WGui.o objs/WFilter.o objs/Tasks.o objs/WFont.o DEPS = $(patsubst objs/%.o, deps/%.d, $(OBJS)) RESULT = $(shell psp-config --psp-prefix 2> Makefile.cache) diff --git a/projects/mtg/bin/Res/rules/classic.txt b/projects/mtg/bin/Res/rules/classic.txt new file mode 100644 index 000000000..ae4962c6b --- /dev/null +++ b/projects/mtg/bin/Res/rules/classic.txt @@ -0,0 +1,38 @@ +include mtg.txt +name=Classic +[INIT] +mode=mtg + +[PLAYER1] +#Tutorial is an ability that works like all others, but it is only activated once for a given player +#Therefore triggering it with somthing such as @each... will actually only work once + +auto=tutorial(Welcome to Wagic!\n\nIn Wagic, you play as a wizard against the computer.\nYour goal is to kill your opponent with your spells and Creatures,\nby reducing your opponent's life to 0 or less.) +auto=tutorial(Wagic is divided in turns:one turn for you, one turn\nfor your opponent, and so on.\nEach turn is divided into phases, that we will explain.\n\nNote: If at any time you feel you are blocked\nand cannot play any card,\npress the "next phase" button\n-- LTrigger, Right click, or swipe up by default --\nto move to the next phase, until you reach the opponent's turn) + +auto=tutorial(This is your turn, and we are in the first "Main Phase".\nThis is basically the phase in which you will play your spells.\n\nNote: In General, you cannot\nplay spells during your opponent's turn,\nbut there are of course exceptions to the rule.) +auto=tutorial(Your hand -- by default, shown on the right side of the screen --\n is where you will find your spells\n\nIn order to play spells and Creatures, you need mana.\n\nMana is usually obtained by putting Lands into play.) +auto=tutorial(If you have some "Land" cards in your hand,\ntry to click on one of them,\nand put it into play!\n\nNote:If you don't have any land, go to your opponent's turn by\npressing "next phase" several times\n-- LTrigger, Right click, or swipe up by default --) + +auto=@movedTo(Land|myBattlefield):tutorial(Now that you have a Land into play,you can use it to get mana.\nMana is used to cast spells, but each spell has a cost,\nrepresented on the top right of the card.\n\nMana wears out at the end of each game phase,\nso if you want to cast a spell that costs 2 green mana,\nyou will generally need at least 2 forests in play.) +auto=@movedTo(Land|myBattlefield):tutorial(Once you have enough lands in play to cast your first spell,\nactivate the lands - click on them - then click on the spell.\n\nImportant note:\nLands don't require any mana to be played,\nbut you can only play one land per turn) +auto=@movedTo(Land|myBattlefield):tutorial(If you don't have enough lands in play to cast a spell,\nclick on the "next phase" button until you\nreach your opponent's turn.\n "next phase" is LTrigger, right click, or Swipe up by default) + +auto=@each my draw:tutorial(Each of your turns, at the "Draw" phase,\nyou will draw one card from your deck into your hand.\n\nSome spells also allow you to draw additional cards!\n\nIf you get to draw a card but your deck is empty,\nyou lose the game, so be careful!) + +auto=@movedTo(creature|myBattlefield):tutorial(Congratulations, you played your first creature!\n\nCreatures are used to attack your opponent\nduring your attacker's phase\n,and to protect you during your opponent's combat phase.\n\nCreatures are attached to two numbers P/T,\n called Power an toughness.\nPower is how much damage your creature can do,\ntoughness is how much damage it can take every turn) +auto=@movedTo(creature|myBattlefield):tutorial(Creatures can usually not attack\nduring the turn they came into play,\nyou have to wait an additional turn before you can\n"activate" them or attack with them.\nThis is known as "summoning sickness") +auto=@movedTo(creature|myBattlefield):tutorial(Some creatures have special abilities that\nare described on the card's text.\nThese abilities might require some mana to be activated,\nwhich is also described on the creature's text) + +auto=@lifeloss(opponent):tutorial(You did some damage to your opponent.\nKeep doing this until their life goes to 0 or below,\nand victory is yours! ) +auto=@lifeloss(controller):tutorial(You lost some life!\nBe careful to not go down to 0,\nor you will lose the game!)) + +auto=@each my combatattackers:tutorial(Attackers phase:\nThis is where you choose which of your creatures will\nattack your opponent.\n\nSelecting attacking creatures is done by clicking\non each creature you want to set as an attacker.\n\nCreatures usually can't attack on the turn they came into play,\nthis is known as "summoning sickness) +#Below doesn't work +#auto=@each my combatattackers:aslongas(creature|myBattlefield) tutorial(It seems you have creatures that can attack this turn\n, maybe you can run an offensive...) + +auto=@movedTo(*|opponentStack):tutorial(When the computer casts a spell,\nthe card being casted is shown to you,\nand you can click on the action button to move on) + +#this would work too and display a graphics file assuming there's a file in graphics/tutorials/tuto1.png +# Graphics files should be at most 480x272, 480x250 suggested +#auto=tutorial(tutorials/tuto1.png) \ No newline at end of file diff --git a/projects/mtg/bin/Res/rules/mtg.txt b/projects/mtg/bin/Res/rules/mtg.txt index 1c83bd9df..ee1abeb1a 100644 --- a/projects/mtg/bin/Res/rules/mtg.txt +++ b/projects/mtg/bin/Res/rules/mtg.txt @@ -1,5 +1,5 @@ #If you change this file, be sure to report your changes into testsuite.txt! -name=Classic +hidden [INIT] mode=mtg [PLAYERS] diff --git a/projects/mtg/bin/Res/sound/sfx/chain.wav b/projects/mtg/bin/Res/sound/sfx/chain.wav new file mode 100644 index 0000000000000000000000000000000000000000..0138ec979c0c5078274680bab6faa83873a6dfb2 GIT binary patch literal 104400 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 KbyS)x-Ti-w7j@kL literal 0 HcmV?d00001 diff --git a/projects/mtg/bin/Res/sound/sfx/tutorial.wav b/projects/mtg/bin/Res/sound/sfx/tutorial.wav new file mode 100644 index 0000000000000000000000000000000000000000..84240a07d3c422378e5a42a08e55f65b189f304b GIT binary patch literal 33800 zcmXt=1)NpI`~PR=oO?Iu?(UFAIwV9=N{|v%O1cCUky1cG;;V?HlprPDp>(Hoch>^D zd+$AGW`6I>>;He<*DlNMJ?G3k`FTFiGq+{K_um)a3(@wyHubyr9g;V#5JK{*w^E1+ zA4{P`TG92>A)j6yD}=GerVu5Bwg>FLR*IgYkI2dYvkK2v6YWJ~@eWtsw<$$^ep^J8 z6=8eECfQ6P$rcdRL`G3m{3@o3G-8Q8Y;%j$;*`B>10n@aNw$Lb$B32orfn@g6bW{d zJ!!RlX5ZL{_8ea~xmSKshNsmRV|ZF>amCKJKiGrzfxTrn^1Xm~Zr9jlcAZ_#%i8Lq zn1~heB9q7_DvG?UJ7P6W$1`h*p!m(M<<75c7JgTpzbD%bc9$(Cx{EF%i#W*& z@`zrdp~%cWE3v+JM0WAgKC)FsH_<{A6qi_8Zq}4Xq!+L3B0CDz& zBbM8VcC=k;FWRkkJ5o)y3CQCeWOs~vrWd>IZ@haxlAUA!u=nj9d&OSmUFmtw1{){d zW#uo~Xn1`iUuGlqe~l*ovYPe|^N0Q;COmi@j|# zi>NM(^X}Xto#-qsimEcF+$HLYQT7Yg{n|dUrN!6cN70VmJ>~uHqpf)EU6cLh5*@@= z@sIeN-`ub(?I>H%PPOUKP#b<1Mhm0u1T>e-U5;Qi1}P7=U3sU2C7eJxJ|Sp z#Xz3fl4ty4``I2yDL=cg*uxR5V7i@V$05_%c9{LtcDIwcPhl}l91}l?Z8pJtVuy%2 zqOy&**+iUdD(Z4Y5i!N~wqIeNJFwim;ydn8O^jft1=+_rdyG48vftafcDePiy~h0g z92UFDW*6^aVKv0JVh$cMUz`y~&_Hcb9veQyv*&ZgDVu@St`WP%XV_v8I}zdlT3pF} z^C0D3$UDM&DxkRvXd$~e%Qc;N_ibAcdG-^nkU&=PiRh2#c46)GrFNitmXF3G7~o z{pewx-G;7HBV%nViMFgTD>@9@qx^QU{hvL7N7f-OP0Eh!%*AQ7O=_|vA^P5uUSJ^`fxu8g)hp;G;%FFt;FF%yP4NClp8> zm}ycc&3&`L|6Q#z1Cr7tlualbTBnA_Z%ZAM`ebY=^-`x(g=6Dl>ju*XtTRD$2rYYg z@KsfRhQ04gUCWH|+j-5!u3)8LAu-8IV@d^v#L2i^!FuYN{xAGIl;3Y@j`qj7pP0_M==#*-Z-Dzsor~DT9ZRgRk}CsdE~v&A$wWYbyho`8YIgQoezl= z>U$NIM~LaZ`QH3&j+&3i9ZEE^clCNd=;!t`=`kioRFYN}Q5n<>c@kT!Eyjxke)pmL zKn{?*{}FW!spC`k;<6 zf0-}v)$<~Uye3BCxx?)HSYau#i8$9tekZ@?2~XK)GvdQ}^B%jpsvXnJ{Ar5e&&$Mm z*;Nftm5}ogq3lYX?AOqqUS@{i>z&1D;zKKP!2p}mX0xsF>C~bMDB}(>`CsGdrh21) z({F9kiZ;@h+hm-~Br4esM1y%)X)H*gvv`Vq=L0RwGpqbp-aWf2@Iwk6`&ndHic5J8 zCjWBo_uIeUi@!GWX6NVMrT!pouf+ca59c3}vrGEkIZhU=m1{=2>}fZrs~o>g)eP^r z-}`#&TQ8nwO)mFx+pA-a>zsMm;zE(9%Tm;IGTiI>Dn*WVMVIB>m-|inZix+Fd?R+m z^^H9cm=@bR{#5Xw9BMA>pjq!t4t*SI9=e^_^mVnwWsy~0^;feW#lHUA?HgagZJ-@B zGkvG*Z8H_jvLc&_Zf}6lt8$;?cS%m%M!`v!|YKr#)YO zfA;-PAFDUx#GkPvy@e9H2Lh9 z#3OHhPOcd48CmOh^EY`J{FDA{TU{BU{gvJ%^H>Z}8G^54>&ATH=5Y?Hwd#T>U=sXA zUb)EV@S4a8bIfTIzcKaq@vp?SQ07GaW@z&NysvGdeB;`f!NCRMtT!og#QRjQ)F=G( zet8`hc^xv8moD^9c#411)>JLkDw$2@v#Y$3$psSUB-Qac$XbCsfp6S1!A|k3;;Y8A zbn2<*Zoc4zKqY6t*hrq}W4y@i(DP8=@CT7(FQj+dx^lX6D0nk=Xza#72PZ)lcC<>N zuG;0=`d{ne=CC~|YDH4&q}bB6{u2Zsi> zyQuPTBj4m%8i}m7vMEw-D zu$gFP+RGxVTA^G8E;X%m8Z*HDCI-o(s<+xB-xXW2fjs6@a>i;g#CF!tBYDG4cxL39 zek`r~Jh0B~s`l7e9q{kzzVeEb(tXcasS;(9t*Iw^CB2^_xgvSJ**Z~t?9Ph$Cca6^ z+bN32c2#Zk50Sg!P2q!~{-I!Gh+ZVu1j@&L9&^{(EPgWE{4@SOJJ7l73>05`dy?M? z?bb^JUE?puHg+l+?N#)!tH_L*8?) zxUtSl)7|?o{6)CBx6Af*T00v-WOLMbcbO_;E9q;x4%uU+En`cYRr-NmY`y`VGz7U^ zH>pe~J=UZxM5U&+eD&22qGPti4vBkHM)?!myL;I`n3Kq2>Y^@;2vr>Nu3 zNhiHCN9|XW)iY5aWHXegJk}^3^gDVpA}UfllHh%5x{3-is17)90!?G~2fMiYWmhp* zluq zwYgy)+Z7^(dFkv&sY^JST>c$6q z5COJpHrY&Z*xs&1@yx!wlEA^>ee?&Jjms5vPq? zJ5V_AOt~T>)>KKiCKD%sQbv%mhk@GngL5B>h`c0S(Z%dDIm9-qfnBzSy=HouDPV}d z!Np;!@xQ1eN874k;2X9d>)ita=^<*`)aJGBXIj}VwzBd4Ievn_PM5TKIMO`_nKuq`7wy~DLAsYxGrkR3eu5HWdpTEWmYf2qW#4M(M#?Y#qCo)*sK>D zUCmP!R61FaDrEv*&`E5!7tF8bfw^G|iPSb|p6ScxxorTJ*=2+Y>tZHo zGMOj%#&a1^Jycnzx6|E8?UYkl)M2#XuaCZF*Q-_TXMs1^Ksu+pbnPwuMo$7G9#Vfge-giTx>MCJ zcB|g)x76kYm?uEmU)+TC7WG^0~2FP2EMXRq*Cb9a0mZWkv`Za#p4va zV(P1E;;Q)FF7pR__x)a0Nh|i7ao&Z`s}0v?)e zj@aF@qcSS9Tf|+Vl1;Tpu5fyuxdVg!gSkwJu;-5=O{Zu8y6SvS7@Bn0H(qxfUD9@`wBB>%z%BP2ZSpaaGh% zFJ(l9??)Dx{gLwFQQj?GGJG+qvRDwf=#Fq}xcNm<^TG@;L&Qtf*!|Hh>mD+R;o;_v zJm@xwHF00XeWu?e)C|>E`($^oy?0I}2Y+^#`^#Pj5{87@JMl63<>>ICNKjM`zD$`Z z<)}b$GtjS3g_^-x6090CH71{1$gK7M^{d&}PDiJwRo=F6IX^o{d6L)1>ur*-!qJhH zp@WgHbV~79R&e$NtHx!IS&C$r%8vebp;_U>=8k&hyi}`Y*skywgbyUYO#V0A)qAN& zQOBk8HhpXj^xlH4i(wO^RiW~rG0rXOU}s)FhaS!AA5#O-L?M&iB9qMGxyn?7g* zb=7Lq(=JjIoTBOv5tJXx-QJ>53V({}Onop03^3J<^ecwTCa(yM($maQ??m`?=$Thq zE_I3pKZscz%ofNi1A1fR@9;41i0LJcio$BH+GWe=R$i@0BU9Bq=8VSc>#ET)f5(mr z#5&v5KTZkdsJZTjV2apHL0{Fkt97l4ACx}(zoEq-*SKrHT zs4X2a-0U&q&3wP5*U|sURI@Ej33J!15r4RoW5&ep31pHp;r5iQr;4f_^0KTf4x2%1}AmhK)z9de$5^SL{5|7bfL%n6?VGl7BUF#@}V9k^>LPdg7od zPrY*9oEGENU?+p~qv&E=ii`G*xeR->NdN5r?l(2Z#7db$o{-g@FH}vD1D0qka^8!+ zUaCa(jcu!YnmFF)&a3={Jqci~NDihJqX($$w2l9X6kvYUZXG=$>{P$zFb4{|os-T~_;LZ@bBi z_m6n7CXdK0XW2da9s5k(4r~tI7mq?IL!Ws~O<1f|58y3cId9CQ(0s2J_Et&Mv3dRW zktU|Q^2HW2&3s_zsRBwu=Kd<$+dE+SzhsZtUt+#=ny5Eapu|-*An>EQtAjeF=|=@V zN0fBD!1S15fzQQhYJjnkh5l|)!l|N`;8_XgrTtyc^(yFZ$z*TrbCoF|oE!RyS5e1G z*C4XtC zOk@uKOB+b7N_#gG{|IT**Uc7uU*10XF!vmMMB{W zx-yK_UE9#M5F5o=8Sg%EQ@WGoPv(YxK%SlMTyVBx8Gq^Y`Z^rMNT!T;2c_@`}Yr+RGl*p{-BU)jH56d19Ux#KZk5-F9?{pFvDzebwdp@H-%m!?XHDI?N{@4Wi#WuL^ncE2;h znWC23c#{E{U!@9I9QaQj15cdrZpz1TV^SSRT{UIf;8{`1<H75%z(TGiG$`v0(dP zz|ChjMK&h?6^XHBontX&;}YD%`h##JG{}FYHpIMi68sCHl!@V2f#k2eH+rseVur{4 z9^2RbRBX_5ywv_Yzc#v8-n7U`?=O?m{VQ03NO&zWI9%WFqdzwf^dkSI-6_wydxDFd zk#>m|daz&Ke&ZgCs}~;=tfqdoAL}^(k#{5Vb0n{>Zr6Y&N7)#&$L3KRR8MEF9AKu1 zsm@l{jmZ&LH+G3rP^Su457+QU*vx^8!SnKsUs_i(HSHQ1R^5fv8Fe$U*6F5tdY`;* z@hU#_&_6>@po$smU-H{~W5X@rqbI8I&G~gyDywu zpssuRTklbLu372yRyEAOI)!Pg$LaAVi!AGGa>j@z{&{5A#up~uo--57PTk&1AKICm z-~U@4j4hn@PMXy*31(pUOmcdEvACw{$NikDJ3-4uUX6V!8tKqt8Z(xYb7=H4)Tk=qEj9=Uj_=h8rq!!8d^-3qLvrXSl zK8j@o^&aAVdQ-_C=;zm0{H1<@ zRR2tVB-g|1JL;rND>FN@-KFjnncr;C&Bbu%cUf7EmQ(5Pe2;Y<_wU&C)cft+Qtouw zK$r2VgD{U602w$nNs?h4ueuAc!PCU(MU}cU+aVBrTNiJkXPhM`I-As;GR=L z2JJJw#jH0iVMV_+onhN664$Spt-?{4{4;Xw4>wTd9kqDwasLk#o0w2_b*&SEBm>=rITUJ4ta(AZl<@*NH61%Sf;*r zl4UjGz(d(g9Mmav$gHC`l~xp#$+C_dAx5evYP*J&v;n)CXf$jH$C@In1COjSv>)JYep<(79h!CR~nOX=UOqG}wja>FGJkSG1J zBBaL4Yfk!@Y-hnUeWCl) zLAqhjie^;O_hon4+6t$en@smKVsn5jUYdx0Xlqg>c7(ZKO&8^bOoJy?hPU`gNh z!#7`7mF-gPko^+=dA-H%jcpys65bZ67pa-lQPhpE9<1cnNb#?lm{=)!q~G43;7|0; z>m4s$|EVe}55?5X+%jXXz#r+2|pEEx(s1h^X)C{r)iDHT~@}Inj*`WOAO1y5>_| z)886tW9EwUYC_D8;4`-+=;LLeC#_F6Kt?ob#i)E}r&m`q@TA_8?49jQNll?M1S~ACwb2)KIn6=^Y&9d`NXBhp&^5!5Jp{&WI8|#KL9WivF^N$*<($U+>X3OhA=Bhs8Z6PncuUlAQGuu7l z2w0&AI4j~6G<8gGGsS)mJNTtqsD7lMr0FZyWnLf;9jH_GF`UjoBH{tn*)8Y%s`5GQ z0`IxEWe1fc$J)y}y{SXDu>*0dG4=H?{%-$We?0N{hMu6y>n*mn94>Rqh4ujViP(TW z4NG*03ThDEKZEXjEqbxFMHXAs=ZG`WxglPg59tkk3)5b~KG2E2h8LNPBqkeUrkkG}E>qS`=_OD51~T_#(~kSHvR%S&{i;>~AvyIdfL z$Xj^k1Nz`=nQ|z`t{;mQ_NZP(JU&h@;Sh5H)0sJF&QGI=6D8G5=MU$9s*dWX9>@c* zS{;>5$BeB@zF!|}u)`CMk2=85j?pjv!u~}z*y9Dn|3v<1L zew+X?tOfbJ)C0|EbHL_e=3z3c{DaI@Up$ACJ_9e8Or`ihwooySaw@Bu@+Ttc1}f8; zcD=c3f2A54Yj&CI{v*Go`C5NsN}Bn4r0HO1(*OHPcCt^*pY$`s`n*YDw~HtAP^OA+ zaT?8!r_WcNu3~v&d0Tm2ZoyU))qFWdrc{}obj~BX zj2q~6KDK3ywBL!5@P=*Z%+;hb{vY?)#hk-wQ`@w+rR)$UFFqDyR66%KtAEUV#2Rsm zxqw~t{8swoKvF$S8)BPBM5`wAst44gi{u2XC{cK-sdHK!@P7zrN$QhyJJMbgh1Gia z!UC@ET$U;9J^x%}OLB|EQc1ldznBD7JSIncv-s^XpSzQ75r2UBUFL)_ALazrX!-%a zI!6Lsou)d6w@=@&nbiVWlCJtWrYX+rwSI4X!c1Vs<|BL4FBbVAGLjtfi`y+`k5fvV zqci!CzB}0hO*C{q*PFw?ME(e;O|Fytjdxy8*8!O-c5>=H>Bgik8(UOfP5k!B;RlIN zN`*QE-cNNZ)z}oVv8!bce@=LsKR^|VKb6YHR|s^_6}>P079wBZRB&<3#XvcEG4l9L z{OgrTo}Y*`m~}B-;N9OhuT{&SA5$W59NzZ?755Y}Oa)s<-wWRe*YiJ+8QlM=rQ(*Z z>UoiX9w#3MUI*4VgXAB!Jei;{oOk-b6;)RhBS#(e9{S&sFNeT@r-tutK;L>jcDq%U zQp2b(+v+s>NBbI7*&mGal{X|ZKQdRZR`&vv0}tFKbVKgg)mr*{z3HIec(0aU)^=3! zfn9-&?oj%R{pb&mF|X}0Jhi84uRg@E3A5}PVcw&XX#i|f@m{9Eq9WMAaD(4ul`CmGhdkf<`T0Yj#;J` z>JQ;%4%$5Oxyt4QoUQ7#C}HdCbbb-9cjUgez`x=THMi_m@eRF+`qT~0K=Wr*M1CUj z+h6n>Z)zlCI8S&-S=iDnV&kUHoOo!ZEEkpW8oeGcj9^AhwQY zvhA8}$;?oHrZud+2udz5=g4t#1s(lN@FeGTJRaiG#a=6`sdnoszt)b#bcn4|uedLcOGzTE~NzXEjji%cblGS4#}PO>6B zp@;NtKGENsvLctds>Z8q@GR$SvnV>U5%bt2nR z?=&auK#*8w)leOmCFChQdIsJ2cTEhq|4Vb5K4=^Jx%m(V|66{W5l@*V&d3kdO|{P1 zfMz|seynL_{-$R-%se#DRo+Y)!~cC+=mFd&Ozc*j(nby3=df%*gkR2WHobGZ}QoI!yPp z=j!g}4jFTfy=+et+eR}TH4{r10^&;)!&xJIzWj^%sJTpUJ!FsH(J{U%;zV<7CWRel zMiF_JGo#pzC$^Kf*48?CkkZ6Be#RRMeGE_RC7+-YM>0w7FJm)e8Hkasli`|2lPuRzIm+;KaPlMOBl7#IN=SSSN)Y2OeLK#lHuB8zethwN!Jt40PXt ziu65QHkiiy2DEdC{P;H>SDPuQ2mCzFtkI=S1N{3vI;NN9IQ5&l&V1Eib5eIPU)esw zkxk@jk;*3dMSY=DJr+`(KiMPeQYzH}y1ogeh(N7_a5dH4JjRQo?t2jy}~ zf`{taG5+F6o5(b8sJ3Q1lbdn!3pL1j>NI!fxLce~auNOCkUxW6d~5z^x|#x16KC~j z^f!*kN6ycICc&kF+s-g~#?T=<`0j7yC8Dv`wej_D$i=hWLcw&w((Zra zh2K3~CV6bqrKC5>=fX#PdeiQ|fu92p-LKvE+=oscXN%PAX^_6G=h?=}xJki`F=02i zO!TjWJB7-Iu7*V96E9w8x1UoHv=7`0dNCizeh|~eT`T76vtAqTn755JcQR#cBN40K zb58}f2kydHeQuij?|Z$xPyPLLv`-O>f2D(3o=J{;)MGPk7V{ai3DuC^$AMDHF;gN> zLPf&4y#}U_Z0PKCdO5vRPcZ@eO(6!VEly6S2aM5uz03P6vd?>9x~j+S&cJDRIeb=8 zW+AUL3)9nYU{|>@v0Z}AR4(kTt0-kQMmmHBhI&Qn>3Jf_X&F2oJm5YMA^%k5d8ChD z6|Wy9zg1tV6L@_=CY$OzTE4IW)5m`psS<7!${BXNlYTC2|6l5(xPS>v4V-kA%O1>I z{|_AT*mPoIz7z3kh%I8?gM}+?mrzp`at63ZUHS*`ddEdob09J)v@ra;{z6Vt`-N+& z_^te>IuqF7Bf7=!sjlobJ9zS*x7r_WCW<$7*Z!2ZiB`kld1}!M|Hm2SOj9-Ff7DdV z{2^X*`rhYsIp%t6Qw@!^J541s)Eu|I{M1by{3`fepp^62zUNO2-wZX4#Ot);I6a4C zI>5KpxAg3?+pn-Pdh+Hd^=x-g+ZlUbc5=StmIU&+r5Nv(a2_RtL|gBh^4H& zjq{h2%lQ}1;yS3}0$Hy}_SA35@1kGoKL)jqG*`hk^RrP1< zK{f_NG?Zz^QtGrUCX;Pzv%+8N-SsBGCtXry0)vC^2D`fLWE#`R+ZgTPAkM=? zatEow#;xf_uVyOqnH~n(93WcBd-5ui%n9~8Q;)hhr@1F;x~qZ@gURkadBhCxb9m{! zc76?`L;(CzmbJ5^j$3RwP|e95yAS{N8(%6+$ltMS|jd} z&6kR=q@zkJtU`Xrd|xeWHYYRkm&{^N-T*sHjDcVHPyMA<%EwfGj{mOrt=G@rtkc+c zMMU(cny$`_Rtjf1707v5)(Uh_ulh^$F?fx!a+Z3}dCys;4#Sx20k$ zXFJL^&O+CBJG=2tJ^2+gAm{z5er8?Dj3ASYly77)I-iDWy&-b$#{7I+`p&icEWzmFJmUJp*5QlX;tSwy516O;`Us&v{>V zkg4S;v6XC6-VD<({B6vC7KHt%h;21tSI5Dn&p0R12((v>x}qwR&?lJRNuxT->0s3f zwkJ7g8eGK#PBat~g~T&(1^wORxjFy;GP@e4xC0;&~sCJmwAS? zV8%Y8EPQROddLj<12Ic17LP5j2zf65FQzbK!NsM&1G(D0=>|TMo zmytieQ#I8_YO8Kc?G?6*O$GCYd?oPF*XF4GN6eDhu%Y&{IdhUH-lDNwXtR$TDc@zb z;Q&}^qA6_>^d%;&+nbQtZ#Rg);JnVOU87UxT<#fZ0cbu}3jypN+}L zy5O^moMk%kwnn)iO3TiyJx0#vtiw0pgYU7F52(hDGif~$jQ$>x;uw>G#o(W^$YzGFQn3H9P$ju#?zsreL zRKT92bx>=niN(CeaHgdYCs!QSpXTlPnZtGg=RR85npp5yc36{o;}k2}!-V-j6&I_1?k7oBrR2Wt9y1!rw`ipZ!@yaqU ztjQ2E+A4NDh&9Zl?pOeqHiLH^rq(LOsi4->r#U#~aT3gWgeaytC-aK>=og{~I1{U^ zOs6J>DZ-874JQI(IN$LLC)fT%&vki6VZQg{B+>!S8QdZQym)(uIIQO}TE9g-R~&@% ztJuexl5FU!5;pgSa|10|`*!;c)2)Tc#c$vVPJ*TrnD=Q6-}e*s>}AgXb*2_Pz@CK+ z^YnY@a}3D$K9>FuIims6z9Rxm`afniXdHSh!U>|ku#r!=^A4^bO3d2C>4v;wx;5m> z7;~IztO7HbjmfHAiA1%)Q?uoGSzn%|;@!Y*(qPGH;Jn_a66}Um{EfeqXa7GiGr66+ zO~ymoQEz?&=f0JgykGo5%~@X*re;!9P1&fLvN8pDjj6~*u(K18`ek_BEoiPT3}Okn zig#AGKXA_EkiO33=MM5)Nv0zIAkU0ad(?AfVPb}xT&Z9pc4Ru8GReACp;_d=ih~MB%ZV++HP`S6j zlje$ac=JKfWG_5)863$yxP&fbjtgXt6sEZO4Sr!T8Gb6&@)q7di#mTVw%Qk4DF>_F zST2`SK^b?5!@J=nzqc1aH(kg`=gHmudG>BrLv4?q9-CRFB@FpGru}LVkN@Mm+FtDI zIcqs)zeH30@Z1U5aSu4DpQt`FAh{`ULfzTnecgZ#?Lb|V8Ox7B!3~kYWBB6TvWvQ{ zq%%?dCOc7M)@1drJq1&mn~sDscl0Z*U^Tt~R~$EkVGfqVScb^epUMc=egImziru|I zzKz)58_@L~kpFC~qCD4?1LqW>mobCWO!L4rg^^b^=JV#$v&bO}$b8uRB68L%JjLwDSHUossRq-TT4e8?c9)nz_q2k_p?)U=p5TdXsf8<&FP~E1FC%J{gfIDq2$Ucy z%YoQ+Y1rNa_>UkOKZ1Mv5gXV*^jHlRyN!PKaK0(pMY=~eEJ_Sq394#ML>fj{GLLMl zsyl<7SDYu=B|6${CbRwlq&7!4H2rxkFqM%vT@w`QE4;6J7g=m?t(+Za7D=lsuo;r{7fg6AD9bBooc zg|6do^KN^d&-|TysJ?Z=YQ1bLnt)N#;OPT6$r;PU;xu^q-|PtyujYV&uQ65Lf=G4> zAKnIPm_&YVLhh-{Z$2U~{Yb=J1wPq^Uk#PH&`C=$^5TJl*?hDl;-8 z?N*ZkUk=zyVgvR5K&PHN%+mYeqIjW)fr4~vR+|%6Xs-t8pM3^e_)3N>@GK4 z<7;|#(%uzE)oteqv*A@>p2mv1AcTUPV=HM!>azMX9n$kmcf7KeOvCAxhH8lH!yIY! zJljrchbBbPvT$tU$WD#K$MR!3dnKKtOo#NP-&0%P_KJERcy;~tx(1!NkI4-EU>K{@ z%R9iFNq>1CTu==pvzaKI-QH%_^ao@f#P(hCSM&sURl1gO%!UsFz3(O}t|SK*luu;^ z^@tu!OYF2US$iyAR);#e6Y6JhGF_Xzlw=bxBz4z2d$+rkc@}+35^$ zcB?r|^gcJ&nYVcAS7q-10Ji-B?B;gjR%Z}j5WJU@3M2`1^anZYN043)xajKqemhY$ z4RP@wbAp+Xj&x*~bB6x{IIS_2Oqgwn|l$4X;7cR-QvMo%>3}Q+@^58U3 zgNu(orus{bymFbI#PWFJ_FDSLWxyMEK*E!`Y6q-&O+0NF_v{aj*~wXx>zqc8TKr|$ zVvjQoo$-R%WWGv#HbOsQOl`7LapFoh1l;L)GSW4Yf} zZ!OsEbU2wX_InzXaSi_HGpd3OMv#xs!qBf_8v0AQ3IzTery)+T=P345po6LOVD`hP zbeHe(`%;`HyG#sygtY$BN5GC3u#%CSF^yGIh$^S~o(?O1%IiW_gZPv@6U)R} z9owAl)Gqj&<*a85RX{!NvYpO;EG%&+dWt#7tas626)a~0C_W=t^q81S&;1A)FCOpu zjL)0sZPQa5ePf1Gfs}$J&rMX{Y&uW}l*ap3gR!f@R`-*Q=_p*q8;{XZJIhSKJ}Qgi z;G7^fI~O0DNOkf9`j|}K8cTjF2Kriv?3)nV67YCK>}v^H3`Wnlfs4KXGfif%SID7% z;|*2lB^1QVqv!KyvG0a-JjRk)`(Ry*&`cCf6#z%B$D?N9Q_Dea{kZ=Wp0XNzc7y%3 z#MakE%pcN z_zCRN2ED&S&Aky>mZG=#6dx=`Ep&|uje&G+E`$Fng7h;p!`GMCwh!6vr!FsujpqU( z{{yCterCr>u6SynBk7G~+OO?b#DZV>#DL6L_)I*tBk_3*pGdG6)G@>?BLe@3hb~4R znW#$RiBlV~kyhY!1)_e%of3GxB2GP}W_v&k-A}eS41RwD+j5it?|~PJr>0thJmaO3 z>xrRv@x!igNNxD+gzv$zOWtPv52=b9fQh1?E|G#9xES1&5zgx~B1vcbBc)tNe7;Oo z(2)F)*2ahos`SMw7ZnAGzBKQj8(h>NOud%9q$f-5V;OEF=9sTxH+_em!;ZTrj zFaR6y5S#dieElms8h||?qG~CDE%&68IueU0&3pFq*8%8n2<*Z*^z({5{1tWQE-KAG z$k~<1&PlA~7&6;IWL!>!iGK3TbpGy*R)B~Si{b(O@D=HdelHeb8SAmdIq2mRu2(Q?e{%OOuzfYChq@7wwsZd&?%y7-9?A-$eldpF+=O_M z5vxCp?<_4^io6N1{1E7rBvXDiDpsUsAv_#bGT5JG+l( z9OZQqtvn^ihxzibnQYiv3FH+0l%0Bfl_95R;i_0(hMxW%yy*%tB4` z`8}Rjgb14&Z@I|*j^gFJhy!b}`V+*%5IT)AqZ!zZLq&Uu-yi;eR(XxTN62Jv{=&Xw=wxoEcj2d&?bE36svkg#)-$eOR=B4^qLCr?u@KD zBQ}y63BF+;(I^zvL1859AYY%=zebZu{1p54-I>vFF8-QiNxUa&Z#U5JZS;DD zRldeAd}NV@{g*_hrCDPNUeQmSx`0M^va(a`nRvN{zjtZ=|Hm`D6Ni1u6MU`@l zcOSs=ck}(oTmO83Y+Y8G1&hefGYjJ-xsjIu8Qnx0yLhcfntOTTWh9eG-i>||Ts0y^ zU0(IE+frOdZ<>3g0r@0iZO_=xBV_WB{YAa<7S}#tl`r^fw4TetD<#)t;CoazaqKMm z`D*|1lv~I#C9&`s*7O`pj^k-%xO+zIT8zRPI810s1rT>BWhTyZ&$o+B&AdSVt$WX@GoE6FV(2Dj)jG%l)IDk$0EMbRpSfJ{sH#3faPICAH07B$k&w_XB}8 z;(0Iem_u*?g9fz`)azugGc+^2wu?36!hZUUU$sz0`np@*ob9OY86AhJT2PIf@el%Kv zSlxuxwZz8qvxoUa)lyW16_EZ3>VuzQ3`1~d*H~kAnCV*fFbpjHc&5RVZ5wL3l~lps zf#o*PDfyTlR#WQSv()A%dG8iZ)KmjA-!Mb4lc97(Uc&k9rBUZ1Z8?+n5mj z8=fmpEyD^XU}X_}rzKO98L6^!NIa5HJL#&=`Wu)muFjO|Ec2c1O^5!0d{;GqS3W>( zn}*K+5~MJmO1c4d`Vyb$1ykr7&t!uS>_qPGNzKs?hIb5%$iLWmeqzc5Dx8NRElkT( zs>4k5uRDT{HTJX_MtlnuQ5!rn2Y$AU4#*?EHek0Usr#GTW1K@MOdY+8`G>~vB->ce za5b1&mL+gKQ}B`~f^CZBZowl?Q=inM=ITeJibtMRSl=X2Vrx~1Z zQ)YZu!DauWN9m7rb3H`w(&fwncG(f8Eu&hX!t~x|z&A^oM+}1fdJc15hA7;ZXt3sNfRWj8N^m10ocvYXPC7&x%i%*oPNSA0ZR^J#Y zPe*!tSj|?V;XLF#iz;IY(RCa4oR(O>h3-gIy8lJw31ZoL;@1MsJ{E_=nn!o_A9`q4 zndA5XF6|8(Od)!~jjQwq)i(U+C z>V;IgQlEEyTk%Fe=dnFexe$GhU3}KUKDg#Iat1l-EY;XdDy{uwfnU$MpP#sXEdNe~<19m`@pp7mmWhpb=n>2# zPku-RdkqdhHT>#!IKwzN^R7%tRN;LS!3U>6JqaM$^ly<@F>q-BOcRyz&+r4sVeI~a z3vPqOZYIW5BLn9r6Ml?euK{xlY&ZiJ{fPX%4E-(wcbw#oiEr2UBNFsQdS>fi(|PO7 zK6YRwoR5Mbd`9dkNUc5`JARDbKjta>kddN~FUgiGiAlMM@#E<-SD<^@8}{rn&r6FG z3@g5c6|F-~|KlCeYIPOQO{Vuy2d$1|?LQO8IuXe%_OOS2t|!u8N4x3Cf1iRFrlGZ8 zVHbMizd497$B65{6OYECuPI=kogl~bV2DP@xjj+tJ?@nm9mJ4Xq6o+(TSs`}D_&83 zJm>w_z^f;~8__y9igFM0zlY$;Xr&OXHKNs4w0ek6zC5C;hy&k6k!)S;rXjBy*mZHx zNIs;R7rRep$48ORY`lFg-f@a2WdZ#+#VS7~hcxEhsfi#_4sS85pGy_E1-V?{-l?$K zhR9+RIbbq2@--;0F*qj|c|qQedBdmqo7V862|(SxNA2PGVIJY^XW2l&#UjXK&GLVeXoW zdquC0*8kC3?>xIY#`B}>z`t10X?`26`0^n8`ozm#Sstfg3rah^_=KhvSZsN-y*xRNV^=7wBaKhd5ic3 zo*F`D2EHfe|Ju5jC%dXD4B(xlA9<041PFQX5CS9^ODrjY5@aAFh7QGY;6LHOsRIYj zocRan5N8%86N?!l6%hp?U?OQ#NvAuIS0~+_#P4@LHqF3$>)t;1oW0jx>s#Mid+mL0 zZesba$gs}5o*pY1+q$dYmazufl55sb3wf@k#kE+mk)GQ#_K{>V>%W)7!1ewcov!6M8%vG^eH_}8==Yn!+k(2?joILEU#{CJv3E2Z49Pzj z{dP}n=fW^+YAa^h;O}AS2l0$msE6w5`-%8h^Zapm{#xcW`*??9`)Yjpuh?dPvPd)TlD{SGT8HJ`E1%A&1aFhJCS-IyxE)Ad|0;}51tP4eyjU@FrJA<2jiV5f~C6S z-f;g$T3yUIOH=MT8{F9aU^M#av@-iqVldxNOFsO0_WysK=y*4+w`Hs&@rGZCwvTZl zt@y+~+D4vRf{?wH9eJ9!wg#7tFmZLlbR|eHMyn6wr@zE=Zzl47lM#NE9RAznqQ3=~ zCz7Xrmi5ywvoHLMME_5+BX~TLE{8?=m+n)1Ud}4~sbsTPvsU~;xVJw@Uys~VsfXT7 z6#pr*UQbT^T{7dFnM>v1!(sd@(`xs%jPOFV-W8c=gK&OZE_1{?$sa4>$-!7;Z|X>5 z=WtMaG`KxI<+Eq=_i&hSJve-l+2q6c@?+9)263AC;7;Z=H)QR{@O}jpGW8UL@5S87JVQ4GN0IQ z`)}mfJAN;+?atiIIQzmM{MwOGZ-gXkFncd?@K*4CJN@5@H{Xvot3hvnQ2A!CdLjAgx%7BC*gu+nc4xMRNA|<* z|Cv2@=H>qwSV>fW9NSNYm#6alD0(j^x8Uc)!O*@}vqce*@3-V-H}ZC@7qPzCc2Dfu znQ_Wjv(xQxNk(wr>Z(vpKmX6beL-PgY?1fu9PdtqFT|ItX}OX(UyL6v1c_^5(blxL z|7J!|z1<1ocXMSe`0=5g>Y1Ehh<$e^jrevp675Cq2@BL3^TExYv>3e_t=1xWA$q_I zM~}u*8QE@`-Adot_%NE-3v!nLetc)I%Y1fEtn6O5-H-jbW(VYf=(#V~{LVVv)}!ZA znDAMwkv&i6$gZq?uBBM}dE~pBw;p{w{5rch&kwmIKd|st&dQV>pAJSgH?r7#vo#T` zRxmeeDU0FRe6-pTZS%toxpp^ps4*^P zX-`_u=Q%sQW+T)5+B`m+an&^9ins9QSh#m$nqg0bfd}IUvdqh@wZA-*&+eu)_nW=W z1|>1`&!GQVG&XarrL|Zw|I5c`qMsepx0CnmSYODMxyZ1O_?=|Z=aNxR=6NuBFHyEgstwY!9WqOsVJI;CMaq z7K6e+66L3JbS>?6B??cbW^s?|hk5^QwA&ZNWouRAr^$l7O(hf zM>NEwo$;aFefy~X_lRq;>1zJ^-vT@@PBL(2Zqo0;XlEz#a5Q`%OgIopYM1gs7Epy< z%-H9ni8>6c<%HR^GNbNJ50yL5f04H5(!w0MoY(bm;qI4NUw!sSJo(g==^u~H_f3en zw*dKzd0m=%x!bZ94sDBMF@7Kn*q_#L-xrq26Kt0)Xm~fA7mYVFo?6MB2=_+h1bErY zT#Y8{Q$ACpsRdN3Gm&DYax2%bq@|tj&+|!rPp%9luieR!cQG@cp1YHE?+;#wVu9*t z=QOVy*ZuJGdA|@0)M=}cBZ_BZjrgLyNNMd$=8Z}BYx%pB{aJ)9Vm>sD7cCQN+GfVDE_=eb5pcUAYsrUxf3 z_#a&!$Wzvz%hUf&b93qqQ(9tS{^4U@W(YHH@28jrx)rZ@osXI(^k2+tK1SxAFH86x}zLF!k&Wz&T(bZgU-jTOSk;!CDlF4^0*QjvY zng#A#VOr-d`O7Rc8`RuwYYbEe^Te&lSdTQTp57Ugvv;SR)n9$1;=l&$mz$F}uS7%K zlJPet-@=3UXoV5YoTAtrw|tpv(o^iLX4IQ`uI5R5w#;TEk!O`CZ`=70`{oQ!-e>Jh zT6P9COdZ0!d#XsIIhEDJi{K!XO=-kA6%68X%?WEr3Tw&mE&<*)PR%`vh{XhaJf z_40C-)n+X6I#R77limK#OkUv`ert?v&)HTZokLhg3%OC1U#YSPo!G9HDPDMhwea5v zlH_Y8t9v;vhO(!~q|2Q!(9Qzup>TVO8FFPq$nXio>uK6R0lGPrRxFm&TI0=3zJ>B! zcq6~aE>@N1B)LvL(Z^r@-=3FF-*(LnbRm zUTvJolFl!D*;XcPwMhoVpobM5mtAH;JSLxg^ziPC(TgxSyk4f!c`&OvGh%}s#Cct2 z#6e@N=M0{C7BShWo`#%tl?Um#*T^tSiws=$Xci-@@h5V-ey;x^=$zayv%`+g+OtvS zp?z843_N&Yds_7h?99n(+tWC1(~_ zesM>4Zi@1e7i4K{6XE5Sb)(FzAI)#%CDLUf*}*ELv0x3@dIjrc5xz8Y(y45?6GY6j zkaL!Qc15~5Qjb0yvljm#4hy{H!{)T=*qO1J$enq38555&u?%m$QO?V^{D_U>+BhPJ ztuVwK7~yU2cw6za6rw6ny2ybG(b(~r<+R$97df&O+_k%v@xF*u45BZe7}sCCB0Tc?~Tb6PR0v&vjHXfLihlN5Pc)!!Ix@6pI3*Z5}9V1xZOTA1ZGGU~=O>)@LT zUVXVI_U?#oxCU)?iwGtIlK4UTT1F|_Ea_TLoUTpny5`f4FU`KKQT0$Cn_Xm8*+uoJ z=CEpL^;7oZvlhIAH!3EqX#~?o_7um1E%FX8wem5d+$D2Zosqy!=XtMru2E%m(Al(E z*)=xd7A(YxT|BcG{*&vhxUIHwQrE9+sZK2HO1VDwT_D`!eOET)A5YYXWRuv~QM=M% zNBYd2z7;qfc-ZxFL^b1#wL5Nf=B&>} ztot`K)rXh)lO4@7@YaWB9luP1uSe@ZOkkmwwF+)}SOc@v=W-MpI9W7C_2rEHL}<&m zYWiwb7I!^TWZAu0>ljt+c&8D*!Kay~Iv0Pv8q;ipSAE#{Xx6CbJ4-r`d*NeBha0V;k$B!gI77QX$?koO6WhV_f*cu6%4uT5Z;>W*)j2 zi$49XW+SFPBg_0_e2nb8!0WZ%oFJxD$>qN@GJWHjhV+)#WI5W`0(N(0f(i7eJzVsp z34hOpacgOZHSSTgTGOLCbsa|=I(65rvk08=qnTtxNpa#0Ua4MCs19WoNsWAYqgl47 z$-1qdt(v+rs$UveTJsjUB+!9wMZKfeQrDWzU2Qy-C-r~1p&t)z<|locwP{@0baK>s z*O)w_h9IR;h8_A@1E^h#F>dJHd{H_2@{Be^G9BpExG|s8qAjW;%w+<1W3+Wvi=kO< zGk*2vOZa2az(wm@>EG35+0K3(Y;?f7`Jt%O99N(Maj}h|@+1#AYsS#dSY;oC=wA*s zTNu0R%CYX%rzln9M(kjUtMn$NwzHai7{Rmtt#nz+3u0Q6%zJ5+BM9gT<;E_(J(?pL z*&{yaq@CP^v(;A=LkDiI!$t<9Z8Le_MZY6jG+z7HS^S_Ge$k_P zlQ=NoGh^42m{V3k3uZpi*QfDdW!YXtaJR8rUx`W+f2{ zpLBu@wrxr-p9hjgGLGx?7&98CHO710XVO|5Iil5&+GASPG7)QLfuyISGH#$+8`(b? zYjm&9{E*kDnmcd&&idxE!C5(_`%Y^d2tc1`QQ>4_R@Rmy;QcpChUU&%ifRKQQQm-D+v-`=MITp&KIw~_fyB})xK}`#V(&3Z=<3r+j`b}qEzK(Wkx!cJ+S5ef20aDrr+z*)sI_s`39hC|>j}gBvl!8}$47 a0~Xamo{)L<8o6y~+g=0lfpgK`eE%O!q_|c9 literal 0 HcmV?d00001 diff --git a/projects/mtg/include/AllAbilities.h b/projects/mtg/include/AllAbilities.h index 22aa42607..489b0e02d 100644 --- a/projects/mtg/include/AllAbilities.h +++ b/projects/mtg/include/AllAbilities.h @@ -18,6 +18,7 @@ #include "ThisDescriptor.h" #include #include +#include "IconButton.h" #include using std::map; @@ -829,6 +830,38 @@ public: return a; } }; + + +//Tutorial Messaging +class ATutorialMessage: public MTGAbility, public IconButtonsController +{ +public: + string mMessage; + float mElapsed, mSH, mSW; + JTexture * mBgTex; + JQuad * mBg[9]; + bool mUserCloseRequest, mDontShow; + bool mIsImage; + + ATutorialMessage(MTGCardInstance * source, string message); + + void Update(float dt); + bool CheckUserInput(JButton key); + void Render(); + string getOptionName(); + bool alreadyShown(); + + ATutorialMessage * clone() const; + ~ATutorialMessage(); + + //JGuiListener Implementation + void ButtonPressed(int controllerId, int controlId); + + static ATutorialMessage * Current; + +}; + + //counters class AACounter: public ActivatedAbility { diff --git a/projects/mtg/include/GameOptions.h b/projects/mtg/include/GameOptions.h index 7c5314bc9..805231ac3 100644 --- a/projects/mtg/include/GameOptions.h +++ b/projects/mtg/include/GameOptions.h @@ -352,13 +352,15 @@ public: int load(); GameOption * get(int); + GameOption * get(string optionName); GameOption& operator[](int); + GameOption& operator[](string); GameOptions(string filename); ~GameOptions(); private: vector values; - vector unknown; + map unknownMap; }; class GameSettings @@ -408,6 +410,7 @@ public: GameOption* get(int); GameOption& operator[](int); + GameOption& operator[](string); GameOptions* profileOptions; GameOptions* globalOptions; diff --git a/projects/mtg/include/IconButton.h b/projects/mtg/include/IconButton.h new file mode 100644 index 000000000..643fae687 --- /dev/null +++ b/projects/mtg/include/IconButton.h @@ -0,0 +1,50 @@ +#ifndef _ICONBUTTON_H +#define _ICONBUTTON_H + +#include +#include + +using std::string; + +class IconButtonsController: public JGuiController, public JGuiListener +{ +public: + float mX; + float mY; + IconButtonsController(float x, float y); + void SetColor(PIXEL_TYPE color); +}; + +class IconButton: public JGuiObject +{ +private: + PIXEL_TYPE mColor; + IconButtonsController * mParent; + bool mHasFocus; + int mFontId; + string mText; + float mScale, mCurrentScale, mTargetScale; + float mX, mY; + float mTextRelativeX, mTextRelativeY; + JTexture * mTex; + JQuad * mQuad; + +public: + IconButton(int id, IconButtonsController * parent, string texture, float x, float y, float scale, int fontId, string text, float textRelativeX, float textRelativeY, bool hasFocus = false); + IconButton(int id, IconButtonsController * parent, JQuad * quad, float x, float y, float scale, int fontId, string text, float textRelativeX, float textRelativeY, bool hasFocus = false); + void init(IconButtonsController * parent, JQuad * quad, float x, float y, float scale, int fontId, string text, float textRelativeX, float textRelativeY, bool hasFocus); + ~IconButton(); + ostream& toString(ostream& out) const; + + bool hasFocus(); + + virtual void Render(); + virtual void Update(float dt); + + virtual void Entering(); + virtual bool Leaving(JButton key); + virtual bool ButtonPressed(); + void SetColor(PIXEL_TYPE color); +}; + +#endif diff --git a/projects/mtg/include/Tasks.h b/projects/mtg/include/Tasks.h index 8e584bad1..ca835b10d 100644 --- a/projects/mtg/include/Tasks.h +++ b/projects/mtg/include/Tasks.h @@ -52,7 +52,7 @@ public: Task(char _type = ' '); - static Task* createFromStr(string params, bool rand = false); + static Task* createFromStr(const string params, bool rand = false); virtual string toString(); string getDesc(); virtual string createDesc() = 0; diff --git a/projects/mtg/include/utils.h b/projects/mtg/include/utils.h index 5d67ef3b6..17deae7a6 100644 --- a/projects/mtg/include/utils.h +++ b/projects/mtg/include/utils.h @@ -100,6 +100,9 @@ std::vector parseBetween(const std::string& s, string start, string std::string wordWrap(const std::string& s, float width, int fontId); +//basic hash function +unsigned long hash_djb2(const char *str); + int loadRandValues(string s); int filesize(const char * filename); int fileExists(const char * filename); diff --git a/projects/mtg/src/ActionStack.cpp b/projects/mtg/src/ActionStack.cpp index 278956f2c..5f9a59c65 100644 --- a/projects/mtg/src/ActionStack.cpp +++ b/projects/mtg/src/ActionStack.cpp @@ -15,6 +15,7 @@ The Action Stack contains all information for Game Events that can be interrupte #include "Translate.h" #include "WResourceManager.h" #include "ModRules.h" +#include "AllAbilities.h" #include @@ -822,6 +823,12 @@ int ActionStack::receiveEventPlus(WEvent * event) void ActionStack::Update(float dt) { + + //This is a hack to avoid updating the stack while tuto messages are being shown + //Ideally, the tuto messages should be moved to a layer above this one + if (ATutorialMessage::Current) + return; + askIfWishesToInterrupt = NULL; //modal = 0; GameObserver * game = GameObserver::GetInstance(); @@ -1080,6 +1087,11 @@ void ActionStack::Fizzle(Interruptible * action) void ActionStack::Render() { + //This is a hack to avoid rendering the stack above the tuto messages + //Ideally, the tuto messages should be moved to a layer above this one + if (ATutorialMessage::Current) + return; + static const float kSpacer = 8; static const float x0 = 250; static const float y0 = 0; diff --git a/projects/mtg/src/AllAbilities.cpp b/projects/mtg/src/AllAbilities.cpp index f9a2ab510..6e393a3d5 100644 --- a/projects/mtg/src/AllAbilities.cpp +++ b/projects/mtg/src/AllAbilities.cpp @@ -1,5 +1,7 @@ #include "PrecompiledHeader.h" #include "AllAbilities.h" +#include "Translate.h" +#include //Activated Abilities @@ -3573,6 +3575,285 @@ ABlinkGeneric::~ABlinkGeneric() SAFE_DELETE(ability); } + +//Tutorial Messaging + +ATutorialMessage * ATutorialMessage::Current = NULL; + +ATutorialMessage::ATutorialMessage(MTGCardInstance * source, string message) : MTGAbility(0, source), IconButtonsController(0, 0) +{ + mBgTex = NULL; + + mElapsed = 0; + mIsImage = false; + + for (int i = 0; i < 9; i++) + mBg[i] = NULL; + + string gfx = WResourceManager::Instance()->graphicsFile(message); + if (fileExists(gfx.c_str())) + { + mIsImage = true; + mMessage = message; + } + else + { + mMessage = _(message); //translate directly here, remove this and translate at rendering time if it bites us + boost::replace_all(mMessage, "\\n", "\n"); + } + + if (mIsImage) + { + mX = SCREEN_WIDTH_F / 2; + mY = SCREEN_HEIGHT_F / 2; + + } + else + { + mX = 0; + mY = -SCREEN_HEIGHT_F - 0.1f; //Offscreen + } + mDontShow = mUserCloseRequest = alreadyShown(); + + if(mDontShow) + forceDestroy = 1; +} + + +string ATutorialMessage::getOptionName() +{ + std::stringstream out; + out << "tuto_"; + out << hash_djb2(mMessage.c_str()); + return out.str(); +} + +bool ATutorialMessage::alreadyShown() +{ + return options[getOptionName()].number ? true : false; +} + +bool ATutorialMessage::CheckUserInput(JButton key) +{ + if (mUserCloseRequest) return false; + + if(key == JGE_BTN_SEC || key == JGE_BTN_OK) + { + ButtonPressed(0, 1); + return true; + } + + //Required for Mouse/touch input + IconButtonsController::CheckUserInput(key); + + return true; //this ability is modal, so it catches all key events until it gets closed +} + +void ATutorialMessage::Update(float dt) +{ + if (!Current && !mDontShow) + Current = this; + + if (Current != this) + return; + + if (mUserCloseRequest && mY < -SCREEN_HEIGHT) + mDontShow = true; + + if (mDontShow) + { + Current = NULL; + forceDestroy = 1; + return; + } + + mElapsed += dt; + + IconButtonsController::Update(dt); + + if (mIsImage) + return; + + //Below this only affects "text" mode + if (!mUserCloseRequest && mY < 0) + { + mY = -SCREEN_HEIGHT + (SCREEN_HEIGHT * mElapsed / 0.75f); //Todo: more physical drop-in. + if (mY >= 0) + mY = 0; + } + else if (mUserCloseRequest && mY > -SCREEN_HEIGHT) + { + mY = -(SCREEN_HEIGHT * mElapsed / 0.75f); + } +} + +void ATutorialMessage::ButtonPressed(int controllerId, int controlId) +{ + //TODO : cancel ALL tips/tutorials for JGE_BTN_SEC? + options[getOptionName()].number = 1; + options.save(); //TODO: if we experience I/O slowness in tutorials, move this save at the end of a turn, or at the end of the game. + mElapsed = 0; + mUserCloseRequest = true; +} + +void ATutorialMessage::Render() +{ + if (mDontShow) + return; + + if (mY < -SCREEN_HEIGHT) + return; + + if (!mBgTex) + { + if (mIsImage) + { + mBgTex = WResourceManager::Instance()->RetrieveTexture(mMessage, RETRIEVE_LOCK); + if (mBgTex) + { + mBg[0] = NEW JQuad(mBgTex, 0, 0, (float) mBgTex->mWidth, (float) mBgTex->mHeight); + mBg[0]->SetHotSpot(mBg[0]->mWidth / 2, mBg[0]->mHeight / 2); + + //Continue Button + JQuadPtr quad = WResourceManager::Instance()->RetrieveQuad("iconspsp.png", 4 * 32, 0, 32, 32, "iconpsp4", RETRIEVE_MANAGE); + quad->SetHotSpot(16, 16); + IconButton * iconButton = NEW IconButton(1, this, quad.get(), 0, mBg[0]->mHeight / 2, 0.7f, Fonts::MAGIC_FONT, _("continue"), 0, 16, true); + Add(iconButton); + } + + if (options[Options::SFXVOLUME].number > 0) + { + JSample * sample = WResourceManager::Instance()->RetrieveSample("tutorial.wav"); + if (sample) + JSoundSystem::GetInstance()->PlaySample(sample); + } + } + else + { + mBgTex = WResourceManager::Instance()->RetrieveTexture("taskboard.png", RETRIEVE_LOCK); + + float unitH = static_cast (mBgTex->mHeight / 4); + float unitW = static_cast (mBgTex->mWidth / 4); + if (unitH == 0 || unitW == 0) return; + + if (mBgTex) + { + mBg[0] = NEW JQuad(mBgTex, 0, 0, unitW, unitH); + mBg[1] = NEW JQuad(mBgTex, unitW, 0, unitW * 2, unitH); + mBg[2] = NEW JQuad(mBgTex, unitW * 3, 0, unitW, unitH); + mBg[3] = NEW JQuad(mBgTex, 0, unitH, unitW, unitH * 2); + mBg[4] = NEW JQuad(mBgTex, unitW, unitH, unitW * 2, unitH * 2); + mBg[5] = NEW JQuad(mBgTex, unitW * 3, unitH, unitW, unitH * 2); + mBg[6] = NEW JQuad(mBgTex, 0, unitH * 3, unitW, unitH); + mBg[7] = NEW JQuad(mBgTex, unitW, unitH * 3, unitW * 2, unitH); + mBg[8] = NEW JQuad(mBgTex, unitW * 3, unitH * 3, unitW, unitH); + } + + //Continue Button + JQuadPtr quad = WResourceManager::Instance()->RetrieveQuad("iconspsp.png", 4 * 32, 0, 32, 32, "iconpsp4", RETRIEVE_MANAGE); + quad->SetHotSpot(16, 16); + IconButton * iconButton = NEW IconButton(1, this, quad.get(), SCREEN_WIDTH_F / 2, SCREEN_HEIGHT_F - 60, 0.7f, Fonts::MAGIC_FONT, _("continue"), 0, 16, true); + Add(iconButton); + + mSH = 64 / unitH; + mSW = 64 / unitW; + + if (options[Options::SFXVOLUME].number > 0) + { + JSample * sample = WResourceManager::Instance()->RetrieveSample("chain.wav"); + if (sample) + JSoundSystem::GetInstance()->PlaySample(sample); + } + } + } + + JRenderer * r = JRenderer::GetInstance(); + + //Render background board + if (mBgTex) + { + if (mIsImage) + { + int alpha = mUserCloseRequest ? MAX(0, 255 - (int)(mElapsed * 500)) : MIN(255, (int)(mElapsed * 500)) ; + if (mUserCloseRequest && alpha == 0) + mDontShow = true; + + r->FillRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, ARGB(alpha / 2,0,0,0)); + mBg[0]->SetColor(ARGB(alpha,255,255,255)); + r->RenderQuad(mBg[0], SCREEN_WIDTH_F /2 , SCREEN_HEIGHT_F / 2 , 0); + IconButtonsController::SetColor(ARGB(alpha,255,255,255)); + } + else + { + //Setup fonts. + WFont * f2 = WResourceManager::Instance()->GetWFont(Fonts::MAGIC_FONT); + f2->SetColor(ARGB(255, 205, 237, 240)); + + r->FillRect(0, mY, SCREEN_WIDTH, SCREEN_HEIGHT, ARGB(128,0,0,0)); + r->RenderQuad(mBg[0], 0, mY, 0, mSW, mSH); //TL + r->RenderQuad(mBg[2], SCREEN_WIDTH - 64, mY, 0, mSW, mSH); //TR + r->RenderQuad(mBg[6], 0, mY + SCREEN_HEIGHT - 64, 0, mSW, mSH); //BL + r->RenderQuad(mBg[8], SCREEN_WIDTH - 64, mY + SCREEN_HEIGHT - 64, 0, mSW, mSH); //BR + + //Stretch the sides + float stretchV = (144.0f / 128.0f) * mSH; + float stretchH = (176.0f / 128.0f) * mSW; + r->RenderQuad(mBg[3], 0, mY + 64, 0, mSW, stretchV); //L + r->RenderQuad(mBg[5], SCREEN_WIDTH - 64, mY + 64, 0, mSW, stretchV); //R + r->RenderQuad(mBg[1], 64, mY, 0, stretchH, mSH); //T1 + r->RenderQuad(mBg[1], 240, mY, 0, stretchH, mSH); //T1 + r->RenderQuad(mBg[7], 64, mY + 208, 0, stretchH, mSH); //B1 + r->RenderQuad(mBg[7], 240, mY + 208, 0, stretchH, mSH); //B1 + r->RenderQuad(mBg[4], 64, mY + 64, 0, stretchH, stretchV); //Center1 + r->RenderQuad(mBg[4], 240, mY + 64, 0, stretchH, stretchV); //Center2 + } + } + else + { + r->FillRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, ARGB(128,0,0,0)); + r->FillRect(10, 10 + mY, SCREEN_WIDTH - 10, SCREEN_HEIGHT - 10, ARGB(128,0,0,0)); + } + + if (!mBgTex || !mIsImage) + { + float posX = 40, posY = mY + 20; + string title = _("Help"); + + WFont * f = WResourceManager::Instance()->GetWFont(Fonts::MAGIC_FONT); + WFont * f3 = WResourceManager::Instance()->GetWFont(Fonts::MENU_FONT); //OPTION_FONT + f->SetColor(ARGB(255, 55, 46, 34)); + f3->SetColor(ARGB(255, 219, 206, 151)); + + f3->DrawString(title.c_str(), static_cast ((SCREEN_WIDTH - 20) / 2 - title.length() * 4), posY); + posY += 30; + + f->DrawString(_(mMessage).c_str(), posX, posY); + posY += 20; + + f->SetScale(1); + } + + IconButtonsController::Render(); + +} + +ATutorialMessage * ATutorialMessage::clone() const +{ + ATutorialMessage * copy = NEW ATutorialMessage(*this); + copy->mUserCloseRequest = copy->alreadyShown(); + return copy; +} + +ATutorialMessage::~ATutorialMessage() +{ + if (mBgTex) + { + WResourceManager::Instance()->Release(mBgTex); + for (int i = 0; i < 9; i++) + SAFE_DELETE(mBg[i]); + } +} + // utility functions // Given a delimited string of abilities, add the ones to the list that are "Basic" MTG abilities diff --git a/projects/mtg/src/GameOptions.cpp b/projects/mtg/src/GameOptions.cpp index 9141c9b25..fa9ee7245 100644 --- a/projects/mtg/src/GameOptions.cpp +++ b/projects/mtg/src/GameOptions.cpp @@ -91,10 +91,9 @@ int Options::getID(string name) } //Is it an unlocked set? - size_t un = strlen("unlocked_"); - if (un < name.size()) + if (name.find("unlocked_") == 0) { - string setname = name.substr(un); + string setname = name.substr(strlen("unlocked_")); if (setlist.size()) { int unlocked = setlist[setname]; @@ -195,7 +194,7 @@ GameOption::GameOption(int value) : { } GameOption::GameOption(string value) : - number(0), str(value) + number(atoi(value.c_str())), str(value) { } GameOption::GameOption(int num, string str) : @@ -335,7 +334,7 @@ int GameOptions::load() int id = Options::getID(name); if (id == INVALID_OPTION) { - unknown.push_back(s); + if (!unknownMap[name]) unknownMap[name] = NEW GameOption(val); continue; } @@ -385,8 +384,16 @@ int GameOptions::save() opt->write(&file, name); } - for (vector::size_type t = 0; t < unknown.size(); t++) - file << unknown[t] << "\n"; + for (map::iterator it = unknownMap.begin(); it != unknownMap.end(); it++) + { + if (it->second) + { + if (it->second->str.size()) + file << it->first << "=" << it->second->str << "\n"; + else if (it->second->number) + file << it->first << "=" << it->second->number << "\n"; + } + } file.close(); } return 1; @@ -401,6 +408,26 @@ GameOption& GameOptions::operator[](int optionID) return *go; } +GameOption& GameOptions::operator[](string optionName) +{ + int id = Options::getID(optionName); + if (id != INVALID_OPTION) + return operator[](id); + + GameOption * go = get(optionName); + + return * go; + +} + +GameOption * GameOptions::get(string optionName) +{ + if (!unknownMap[optionName]) + unknownMap[optionName] = NEW GameOption(0); + + return unknownMap[optionName]; +} + GameOption * GameOptions::get(int optionID) { //Invalid options! @@ -480,6 +507,10 @@ GameOptions::~GameOptions() for (vector::iterator it = values.begin(); it != values.end(); it++) SAFE_DELETE(*it); values.clear(); + + for (map::iterator it = unknownMap.begin(); it != unknownMap.end(); it++) + SAFE_DELETE(it->second); + unknownMap.clear(); } GameSettings options; @@ -570,6 +601,22 @@ GameOption& GameSettings::operator[](int optionID) return *go; } +GameOption& GameSettings::operator[](string optionName) +{ + int id = Options::getID(optionName); + if (id != INVALID_OPTION) + return operator[](id); + + if (!profileOptions) + return invalid_option; + + GameOption * go = profileOptions->get(optionName); + + assert(go); + + return *go; +} + GameOption* GameSettings::get(int optionID) { #ifdef DEBUG diff --git a/projects/mtg/src/GameStateShop.cpp b/projects/mtg/src/GameStateShop.cpp index 7c11a4346..16e46b789 100644 --- a/projects/mtg/src/GameStateShop.cpp +++ b/projects/mtg/src/GameStateShop.cpp @@ -477,8 +477,7 @@ void GameStateShop::Update(float dt) lightAlpha = 0; if (lightAlpha > 50) lightAlpha = 50; - // mParent->effect->UpdateSmall(dt); - // mParent->effect->UpdateBig(dt); + if (mStage != STAGE_FADE_IN) mElapsed += dt; diff --git a/projects/mtg/src/IconButton.cpp b/projects/mtg/src/IconButton.cpp new file mode 100644 index 000000000..40de6cabb --- /dev/null +++ b/projects/mtg/src/IconButton.cpp @@ -0,0 +1,137 @@ +#include "PrecompiledHeader.h" + +#include "IconButton.h" +#include "WResourceManager.h" +#include "WFont.h" + +#define SCALE_SELECTED 1.2f +#define SCALE_NORMAL 1.0f + + IconButtonsController::IconButtonsController(float x, float y): JGuiController(0, NULL), mX(x), mY(y) + { + mListener = this; + + } + +void IconButtonsController::SetColor(PIXEL_TYPE color) +{ + for (int i = 0; i < mCount; ++i) + if (mObjects[i]) + ((IconButton *)mObjects[i])->SetColor(color); +} + +IconButton::IconButton(int id, IconButtonsController * parent, string texture, float x, float y, float scale, int fontId, string text, float textRelativeX, float textRelativeY, bool hasFocus): JGuiObject(id) +{ + mQuad = NULL; + mTex = WResourceManager::Instance()->RetrieveTexture(texture, RETRIEVE_LOCK); + if (mTex) + { + mQuad = NEW JQuad(mTex, 0, 0, (float) mTex->mWidth, (float) mTex->mHeight); + } + init(parent, mQuad, x, y, scale, fontId, text, textRelativeX, textRelativeY, hasFocus); +} + +IconButton::IconButton(int id, IconButtonsController * parent, JQuad * quad, float x, float y, float scale, int fontId, string text, float textRelativeX, float textRelativeY, bool hasFocus): JGuiObject(id) +{ + mTex = NULL; + init(parent, quad, x, y, scale, fontId, text, textRelativeX, textRelativeY, hasFocus); +} + +void IconButton::init(IconButtonsController * parent, JQuad * quad, float x, float y, float scale, int fontId, string text, float textRelativeX, float textRelativeY, bool hasFocus) +{ + mParent = parent; + mQuad = quad; + mX = x; + mY = y; + mScale = scale; + mFontId = fontId; + mText = text; + mTextRelativeX = textRelativeX; + mTextRelativeY = textRelativeY; + mHasFocus = hasFocus; + + mCurrentScale = scale; + mTargetScale = mHasFocus ? SCALE_SELECTED * mScale : SCALE_NORMAL * mScale; + SetColor(ARGB(255,255,255,255)); +} + +void IconButton::SetColor(PIXEL_TYPE color) +{ + mColor = color; +} + +bool IconButton::hasFocus() +{ + return mHasFocus; +} + +void IconButton::Render() +{ + JRenderer * r = JRenderer::GetInstance(); + + float relX = mX + mParent->mX; + float relY = mY + mParent->mY; + + if (mQuad) + { + mQuad->SetColor(mColor); + r->RenderQuad(mQuad, relX, relY, 0, mCurrentScale, mCurrentScale); + } + if (mText.size()) + { + WFont * mFont = WResourceManager::Instance()->GetWFont(mFontId); + PIXEL_TYPE backup = mFont->GetColor(); + mFont->SetColor(ARGB(255,0,0,0)); + //TODO adapt if mTextRelativeX/Y/align are negative/positive + mFont->DrawString(mText.c_str(), relX + mTextRelativeX , relY + mTextRelativeY , JGETEXT_CENTER); + mFont->SetColor(backup); + } + +} + +void IconButton::Update(float dt) +{ + if (mCurrentScale < mTargetScale) + { + mCurrentScale += 8.0f * dt; + if (mCurrentScale > mTargetScale) mCurrentScale = mTargetScale; + } + else if (mCurrentScale > mTargetScale) + { + mCurrentScale -= 8.0f * dt; + if (mCurrentScale < mTargetScale) mCurrentScale = mTargetScale; + } +} + +void IconButton::Entering() +{ + mHasFocus = true; + mTargetScale = SCALE_SELECTED * mScale; +} + +bool IconButton::Leaving(JButton key) +{ + mHasFocus = false; + mTargetScale = SCALE_NORMAL * mScale; + return true; +} + +bool IconButton::ButtonPressed() +{ + return true; +} + +IconButton::~IconButton() +{ + if (mTex) + { + WResourceManager::Instance()->Release(mTex); + SAFE_DELETE(mQuad); + } + +} + +ostream& IconButton::toString(ostream& out) const +{ + return out << "IconButton ::: mHasFocus : " << mHasFocus; +} \ No newline at end of file diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index 71544d1ae..2653e6a2e 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -743,6 +743,15 @@ MTGAbility * AbilityFactory::parseMagicLine(string s, int id, Spell * spell, MTG } } + //This one is not a real ability, it displays a message on the screen. We use this for tutorials + // Triggers need to be checked above this one, as events are usuallly what will trigger (...) these messages + vector splitMsg = parseBetween(s, "tutorial(", ")"); + if (splitMsg.size()) + { + string msg = splitMsg[1]; + return NEW ATutorialMessage(card, msg); + } + int restrictions = parseRestriction(s); string newName = ""; diff --git a/projects/mtg/src/Rules.cpp b/projects/mtg/src/Rules.cpp index e5314fcae..0c831de29 100644 --- a/projects/mtg/src/Rules.cpp +++ b/projects/mtg/src/Rules.cpp @@ -588,7 +588,7 @@ int Rules::load(string _filename) if (_filename.size() < 5 || (_filename.find(".txt") == string::npos && _filename.find(".TXT") == string::npos)) return 0; - if (!filename.size()) //this check is necessary because of the recursive calls (a fil loads other files) + if (!filename.size()) //this check is necessary because of the recursive calls (a file loads other files) filename = _filename; char c_filename[4096]; if (fileExists(_filename.c_str())) @@ -608,6 +608,7 @@ int Rules::load(string _filename) if (!file) return 0; cleanup(); + while (std::getline(file, s)) { if (!s.size()) continue; @@ -618,6 +619,7 @@ int Rules::load(string _filename) if (s.find("include ") == 0) { load(s.substr(8)); + hidden = false; //To avoid transmitting the hidden param to children continue; } if (s.compare("[init]") == 0) diff --git a/projects/mtg/src/Tasks.cpp b/projects/mtg/src/Tasks.cpp index 30b01d198..2399931a0 100644 --- a/projects/mtg/src/Tasks.cpp +++ b/projects/mtg/src/Tasks.cpp @@ -8,47 +8,10 @@ #include "MTGDefinitions.h" #include #include +#include "utils.h" vector Task::sAIDeckNames; -/*---------------- Utils -----------------*/ -// TODO: Move to dedicated file - -//!! Copypaste from GameStateDeckViewer.cpp StringExplode. Move and #include here and there -void ExplodeStr(string str, string separator, vector* results) -{ - int found; - results->clear(); - found = str.find_first_of(separator); - while (found != (int) string::npos) - { - if (found > 0) - { - results->push_back(str.substr(0, found)); - } - else - { - results->push_back(" "); - } - str = str.substr(found + 1); - found = str.find_first_of(separator); - } - if (str.length() > 0) - { - results->push_back(str); - } -} - -string ImplodeStr(string separator, vector strs) -{ - string result = ""; - for (vector::iterator it = strs.begin(); it != strs.end(); it++) - { - result += (it == strs.begin() ? "" : separator) + (*it); - } - return result; -} - /*---------------- Task -----------------*/ Task::Task(char _type) @@ -80,7 +43,7 @@ string Task::toString() { storeCommonAttribs(); storeCustomAttribs(); - return ImplodeStr(ITEM_SEPARATOR, persistentAttribs); + return join(persistentAttribs, ITEM_SEPARATOR); } // Store basic attributes to vector, for saving @@ -226,12 +189,12 @@ string Task::getAIDeckName(int id) // End of AI deck buffering code // Each child class has to be added to the switch in this function (clumsy..) -Task* Task::createFromStr(string params, bool rand) +Task* Task::createFromStr(const string params, bool rand) { vector exploded; Task *result; - ExplodeStr(params, ITEM_SEPARATOR, &exploded); + split(params, ITEM_SEPARATOR[0], exploded); switch (exploded[0][0]) { diff --git a/projects/mtg/src/utils.cpp b/projects/mtg/src/utils.cpp index 115428d90..592f85a73 100644 --- a/projects/mtg/src/utils.cpp +++ b/projects/mtg/src/utils.cpp @@ -387,3 +387,13 @@ std::string wordWrap(const std::string& sentence, float width, int fontId) } +unsigned long hash_djb2(const char *str) +{ + unsigned long hash = 5381; + int c; + + while ((c = *str++)) + hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ + + return hash; +} \ No newline at end of file diff --git a/projects/mtg/template.vcxproj b/projects/mtg/template.vcxproj index 660972987..e9d983dd9 100644 --- a/projects/mtg/template.vcxproj +++ b/projects/mtg/template.vcxproj @@ -371,6 +371,7 @@ + @@ -489,6 +490,7 @@ + diff --git a/projects/mtg/template.vcxproj.filters b/projects/mtg/template.vcxproj.filters index 429c83977..84cb0a519 100644 --- a/projects/mtg/template.vcxproj.filters +++ b/projects/mtg/template.vcxproj.filters @@ -310,6 +310,9 @@ src + + src + @@ -645,6 +648,9 @@ res + + inc + diff --git a/projects/mtg/wagic-SDL.pro b/projects/mtg/wagic-SDL.pro index 5e0adebbe..6a559d0cb 100644 --- a/projects/mtg/wagic-SDL.pro +++ b/projects/mtg/wagic-SDL.pro @@ -97,6 +97,7 @@ SOURCES += \ src/GuiPhaseBar.cpp\ src/GuiPlay.cpp\ src/GuiStatic.cpp\ + src/IconButton.cpp\ src/ManaCost.cpp\ src/ManaCostHybrid.cpp\ src/MenuItem.cpp\ @@ -200,6 +201,7 @@ HEADERS += \ include/ThisDescriptor.h\ include/CardGui.h\ include/GameStateTransitions.h\ + include/IconButton.h\ include/OptionItem.h\ include/Token.h\ include/CardPrimitive.h\ diff --git a/projects/mtg/wagic.pro b/projects/mtg/wagic.pro index db6cf53d3..6ac37d6f3 100644 --- a/projects/mtg/wagic.pro +++ b/projects/mtg/wagic.pro @@ -93,6 +93,7 @@ SOURCES += \ src/GuiPhaseBar.cpp\ src/GuiPlay.cpp\ src/GuiStatic.cpp\ + src/IconButton.cpp\ src/ManaCost.cpp\ src/ManaCostHybrid.cpp\ src/MenuItem.cpp\ @@ -195,6 +196,7 @@ HEADERS += \ include/ThisDescriptor.h\ include/CardGui.h\ include/GameStateTransitions.h\ + include/IconButton.h\ include/OptionItem.h\ include/Token.h\ include/CardPrimitive.h\