|
| Bionicle Cards AKA Japanese Children's Cardgames on Swedish Toy Robots | |
| Author | Message |
---|
Utso
Member Title : Barnacle Yoghurt Posts : 6 Join date : 2016-02-21 Age : 27
| Subject: Bionicle Cards AKA Japanese Children's Cardgames on Swedish Toy Robots Tue Mar 01, 2016 8:41 pm | |
| Originally made last year and uploaded into an imgur gallery ( https://imgur.com/a/3hxwY). Reposting the download link of the current version (2016-03-07) here for convenience: https://drive.google.com/file/d/0B1P3qZcQ-bVuR3ZjT2JSUFh5TEU/view I've already gone into a lot of detail on each card in the above gallery, so I'll spare myself the effort to list them all here again. Instead, here's a few more or less important things I haven't mentioned:
- My design process involves like 15% common sense and 85% trial and error. First drafts contain little to no restrictions and are for the most part completely reworked after some playtesting. Cards can go and have gone through 5-6 complete reworks before I'm happy with them. On the other hand, this means that any flaw I don't happen to catch during testing will stay to the final version, no matter how glaringly obvious it may be to others. Feel free to point these out.
- This expansion, titled "Coming of the Toa", is intended to be the first of several, covering the years of the Bionicle line in chronological order. The seconde one (Challenge of the Rahi) is currently in the middle of the "Trial and Error" phase, but I might upload and post it sometime soon if anyone is interested in some more experimental stuff.
- As for the years further down the line, I have a bunch of ideas that I've worked on a bit, but not to any presentable degree. Extrapolating from these first two expansions, it would take me like 15-20 years to reach all the way to the finale in 2010, but I do technically have concepts up to the point that I am planning to implement. Let's see how far I can get with that.
The problem below has already been solved and is only kept around for documentationAlso, there is one rather tricky effect in the first expansion that I have been unable to get to work properly so far. Maybe this board's expertise can be of some help here: - Spoiler:
- Code:
-
--Great Golden Kanohi function c10100052.initial_effect(c) --Activate local e1=Effect.CreateEffect(c) e1:SetCategory(CATEGORY_EQUIP) e1:SetType(EFFECT_TYPE_ACTIVATE) e1:SetCode(EVENT_FREE_CHAIN) e1:SetProperty(EFFECT_FLAG_CARD_TARGET) e1:SetTarget(c10100052.target1) e1:SetOperation(c10100052.operation1) c:RegisterEffect(e1) --Equip limit local e2=Effect.CreateEffect(c) e2:SetType(EFFECT_TYPE_SINGLE) e2:SetCode(EFFECT_EQUIP_LIMIT) e2:SetProperty(EFFECT_FLAG_CANNOT_DISABLE) e2:SetValue(c10100052.condition2) c:RegisterEffect(e2) --Gain effects local e3=Effect.CreateEffect(c) e3:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) e3:SetCode(EVENT_ADJUST) e3:SetRange(LOCATION_SZONE) e3:SetOperation(c10100052.operation3) c:RegisterEffect(e3) --Return local e4=Effect.CreateEffect(c) e4:SetDescription(aux.Stringid(10100052,0)) e4:SetCategory(CATEGORY_TODECK) e4:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) e4:SetCode(EVENT_PHASE+PHASE_END) e4:SetRange(LOCATION_SZONE) e4:SetCountLimit(1) e4:SetCondition(c10100052.condition4) e4:SetTarget(c10100052.target4) e4:SetOperation(c10100052.operation4) c:RegisterEffect(e4) end --e1 - Activate function c10100052.filter1a(c) return c:IsFaceup() and c:IsSetCard(0x155) and Duel.GetMatchingGroup(c10100052.filter1b,tp,LOCATION_GRAVE,0,nil,c):GetClassCount(Card.GetCode)>=6 and not c:GetEquipGroup():IsExists(Card.IsSetCard,1,nil,0x158) end function c10100052.filter1b(c,ec) return c:IsSetCard(0x158) and c:CheckEquipTarget(ec) end function c10100052.target1(e,tp,eg,ep,ev,re,r,rp,chk,chkc) if chkc then return chkc:IsLocation(LOCATION_MZONE) and c10100052.filter1a(chkc) end if chk==0 then return Duel.IsExistingTarget(c10100052.filter1a,tp,LOCATION_MZONE,LOCATION_MZONE,1,nil) end Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_EQUIP) Duel.ClearTargetCard() Duel.SelectTarget(tp,c10100052.filter1a,tp,LOCATION_MZONE,LOCATION_MZONE,1,1,nil) Duel.SetOperationInfo(0,CATEGORY_EQUIP,e:GetHandler(),1,0,0) end function c10100052.operation1(e,tp,eg,ep,ev,re,r,rp) local c=e:GetHandler() local tc=Duel.GetFirstTarget() local cg = Duel.SelectMatchingCard(tp,c10100052.filter1b,tp,LOCATION_GRAVE,0,6,6,nil,tc) cg:KeepAlive() if c:IsRelateToEffect(e) and tc:IsRelateToEffect(e) and tc:IsFaceup() and Duel.Remove(cg,POS_FACEUP,REASON_EFFECT) then local cgc = cg:GetFirst() while cgc do e:GetHandler():SetCardTarget(cgc) cgc = cg:GetNext() end print(tc) Duel.Equip(tp,c,tc) end end --e2 - Equip Limit function c10100052.condition2(e,c) return c:IsSetCard(0x155) and e:GetHandler():GetEquipTarget()==c end --e3 - Gain effects function c10100052.operation3(e,tp,eg,ep,ev,re,r,rp) local c=e:GetHandler() local wg=c:GetCardTarget() local wbc=wg:GetFirst() while wbc and wbc:IsLocation(LOCATION_REMOVED) do local code=wbc:GetOriginalCode() if c:IsFaceup() and c:GetFlagEffect(code)==0 then c:CopyEffect(code, RESET_EVENT+0x1fe0000,1) c:RegisterFlagEffect(code,RESET_EVENT+0x1fe0000,0,1) end wbc=wg:GetNext() end end --e4 - Return function c10100052.filter4(c) return c:IsSetCard(0x158) and c:IsAbleToDeck() end function c10100052.condition4(e,c) return Duel.GetTurnPlayer()==e:GetHandlerPlayer() end function c10100052.target4(e,tp,eg,ep,ev,re,r,rp,chk) if chk==0 then return Duel.IsExistingMatchingCard(c10100052.filter4,tp,LOCATION_REMOVED,0,1,nil) end Duel.SetTargetPlayer(tp) Duel.SetOperationInfo(0,CATEGORY_TODECK,nil,1,tp,LOCATION_REMOVED) end function c10100052.operation4(e,tp,eg,ep,ev,re,r,rp) local p=Duel.GetChainInfo(0,CHAININFO_TARGET_PLAYER) local g=Duel.GetMatchingGroup(c10100052.filter4,p,LOCATION_REMOVED,0,nil) if g:GetCount()>=1 then Duel.Hint(HINT_SELECTMSG,p,HINTMSG_TODECK) local sg=g:Select(p,1,1,nil) Duel.SendtoDeck(sg,nil,2,REASON_EFFECT) end Duel.ShuffleDeck(p) Duel.AdjustInstantly() end The script is roughly based on the anime version of Hundred Eyes Dragon, which is also were the use of EVENT_ADJUST comes from. The problems with this are manyfold: Sometimes it works just fine, sometimes no effects are copied at all, sometimes only some effects are copied, sometimes effects stay around even after the corresponding Kanohi has been shuffled into the Deck (the line Duel.AdjustInstantly() was intended to fix this, since it seems like it would trigger EVENT_ADJUST, but it actually doesn't help at all).
Any feedback or help is greatly appreciated
Last edited by Utso on Mon Mar 07, 2016 9:52 pm; edited 1 time in total |
| | | TGAP-Trixie
Member Title : Trixie does not even... Posts : 273 Join date : 2014-04-17
| Subject: Re: Bionicle Cards AKA Japanese Children's Cardgames on Swedish Toy Robots Thu Mar 03, 2016 2:25 am | |
| I'd recommend the ygopro forums for help, that's where I've been going (I've just been posting my cards here and "updates" to mackpro, which is usually just my cards). You'll still get help here but it seems everyone's been busier than when I was first here.
If you don't yet, would you mind adding some some deck profiles along with your download link? It would help in playtesting.
For your equip, I think I haven't done anything as challenging as that (best was either drawing cards if the opponent would or setting trap cards after resolving them instead of sending them to the graveyard). My only question is how does it know to check to gain the effects of cards banished for the equip cost and not just any "Kanohi" equip spells that have been banished already? I mostly ask for my own curiosity, I really don't know if I could help you. |
| | | Utso
Member Title : Barnacle Yoghurt Posts : 6 Join date : 2016-02-21 Age : 27
| Subject: Re: Bionicle Cards AKA Japanese Children's Cardgames on Swedish Toy Robots Thu Mar 03, 2016 9:08 am | |
| - TGAP-Trixie wrote:
- I'd recommend the ygopro forums for help, that's where I've been going (I've just been posting my cards here and "updates" to mackpro, which is usually just my cards). You'll still get help here but it seems everyone's been busier than when I was first here.
I guess it would be a good idea to ask over there. The main reason I came here instead is because from a quick look, the ygopro board seems mostly focused on coding and not the entire design process from start to finish, but they should be perfectly suited to help with a script. - TGAP-Trixie wrote:
- If you don't yet, would you mind adding some some deck profiles along with your download link? It would help in playtesting.
Can do, just be warned that they'll be crap because I suck at this game - TGAP-Trixie wrote:
- My only question is how does it know to check to gain the effects of cards banished for the equip cost and not just any "Kanohi" equip spells that have been banished already? I mostly ask for my own curiosity, I really don't know if I could help you.
The equip operation has you select the 6 targets to gain effects from and then loops through those targets, setting each one as a card target for the Golden Kanohi. The actual effect gain operation called at EVENT_ADJUST (whatever that may be) then loops through the card targets, checks if they are removed, copies the effect and assigns a flag effect to avoid copying anything multiple times. So it doesn't check your removed cards for "Kanohi" spells, but instead checks if the spells you selected at activation are still removed. Now that I think about it, there doesn't seem to be anything in the code about ever removing an effect once it has been gained. That might be the cause of one of my problems, but it can't be the only one because losing the effects frequently DOES work. BUT WAITLooking again, the loop terminates once it hits the first non-removed target, so I basically lose random effects based on the targets' internal ordering once something gets shuffled back. Past me, what exactly were you thinking when you wrote that and how did you not notice for months? Anyway, you might just have helped me fix this by making me critically evaluate my code, so thanks a lot! |
| | | TGAP-Trixie
Member Title : Trixie does not even... Posts : 273 Join date : 2014-04-17
| Subject: Re: Bionicle Cards AKA Japanese Children's Cardgames on Swedish Toy Robots Fri Mar 04, 2016 6:05 pm | |
| Ah I see now, it checks that all IDs are removed, but once one gets shuffled back, the loop terminates on that ID so it doesn't continue checking the others to get the next ID in line (so if you shuffle back the first equip you banished, you lose everything else, but if you shuffle back the fifth, you only lose out on the 6th). As much of a pain as it could be to do, isn't there some way you could shuffle the last equip that you banished as the cost and work backwards each time? Though I imagine it'd be quite difficult to describe what is going on in the card's description. |
| | | Utso
Member Title : Barnacle Yoghurt Posts : 6 Join date : 2016-02-21 Age : 27
| Subject: Re: Bionicle Cards AKA Japanese Children's Cardgames on Swedish Toy Robots Sun Mar 06, 2016 9:37 am | |
| The solution to the loop problem is really simple, actually - I just need to move the second condition into a nested if. Doesn't make the card work properly either, so I guess something is wrong with my use of EVENT_ADJUST. Oh well, hopefully someone on the YGOPro forums understands that stuff enough to explain what the problem really is. EDIT: Never mind, I managed to fix it after all. Just needed to change the approach a bit. - Code:
-
--Golden Great Kanohi function c10100052.initial_effect(c) --Activate local e1=Effect.CreateEffect(c) e1:SetCategory(CATEGORY_EQUIP) e1:SetType(EFFECT_TYPE_ACTIVATE) e1:SetCode(EVENT_FREE_CHAIN) e1:SetProperty(EFFECT_FLAG_CARD_TARGET) e1:SetTarget(c10100052.target1) e1:SetOperation(c10100052.operation1) c:RegisterEffect(e1) --Equip limit local e2=Effect.CreateEffect(c) e2:SetType(EFFECT_TYPE_SINGLE) e2:SetCode(EFFECT_EQUIP_LIMIT) e2:SetProperty(EFFECT_FLAG_CANNOT_DISABLE) e2:SetValue(c10100052.condition2) c:RegisterEffect(e2) --Gain effects local e3=Effect.CreateEffect(c) e3:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) e3:SetCode(EVENT_TO_DECK) e3:SetRange(LOCATION_SZONE) e3:SetOperation(c10100052.operation3) e3:SetLabelObject(e1) c:RegisterEffect(e3) local e3a=e3:Clone() e3a:SetCode(EVENT_REMOVE) c:RegisterEffect(e3a) local e3b=e3:Clone() e3b:SetCode(EVENT_TO_GRAVE) c:RegisterEffect(e3b) local e3c=e3:Clone() e3c:SetCode(EVENT_TO_HAND) c:RegisterEffect(e3c) --Return local e4=Effect.CreateEffect(c) e4:SetDescription(aux.Stringid(10100052,0)) e4:SetCategory(CATEGORY_TODECK) e4:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS) e4:SetCode(EVENT_PHASE+PHASE_END) e4:SetRange(LOCATION_SZONE) e4:SetCountLimit(1) e4:SetCondition(c10100052.condition4) e4:SetTarget(c10100052.target4) e4:SetOperation(c10100052.operation4) c:RegisterEffect(e4) end --e1 - Activate function c10100052.filter1a(c,tp) return c:IsFaceup() and c:IsSetCard(0x155) and Duel.GetMatchingGroup(c10100052.filter1b,tp,LOCATION_GRAVE,0,nil,c):GetClassCount(Card.GetCode)>=6 and not c:GetEquipGroup():IsExists(Card.IsSetCard,1,nil,0x158) end function c10100052.filter1b(c,ec) return c:IsSetCard(0x158) and c:CheckEquipTarget(ec) end function c10100052.target1(e,tp,eg,ep,ev,re,r,rp,chk) if chk==0 then return Duel.IsExistingTarget(c10100052.filter1a,tp,LOCATION_MZONE,LOCATION_MZONE,1,nil,tp) end Duel.Hint(HINT_SELECTMSG,tp,HINTMSG_EQUIP) Duel.ClearTargetCard() Duel.SelectTarget(tp,c10100052.filter1a,tp,LOCATION_MZONE,LOCATION_MZONE,1,1,nil,tp) Duel.SetOperationInfo(0,CATEGORY_EQUIP,e:GetHandler(),1,0,0) end function c10100052.operation1(e,tp,eg,ep,ev,re,r,rp) local c=e:GetHandler() local tc=Duel.GetFirstTarget() local cg = Duel.SelectMatchingCard(tp,c10100052.filter1b,tp,LOCATION_GRAVE,0,6,6,nil,tc) cg:KeepAlive() if c:IsRelateToEffect(e) and tc:IsRelateToEffect(e) and tc:IsFaceup() and Duel.Remove(cg,POS_FACEUP,REASON_EFFECT) then e:SetLabelObject(cg) local cgc=cg:GetFirst() while cgc do local code=cgc:GetOriginalCode() if cgc:IsLocation(LOCATION_REMOVED) then if c:IsFaceup() and c:GetFlagEffect(code)==0 then local cid=c:CopyEffect(code, RESET_EVENT+0x1fe0000,1) c:RegisterFlagEffect(code,RESET_EVENT+0x1fe0000,0,1) c:SetFlagEffectLabel(code,cid) end elseif c:GetFlagEffect(code)~=0 then c:ResetEffect(c:GetFlagEffectLabel(code),RESET_COPY) c:ResetFlagEffect(code) end cgc=cg:GetNext() end Duel.Equip(tp,c,tc) end end --e2 - Equip Limit function c10100052.condition2(e,c) return c:IsSetCard(0x155) and e:GetHandler():GetEquipTarget()==c end --e3 - Gain effects function c10100052.operation3(e,tp,eg,ep,ev,re,r,rp) local c=e:GetHandler() if e:GetLabelObject():GetLabelObject() then local wg=e:GetLabelObject():GetLabelObject() local wbc=wg:GetFirst() while wbc do local code=wbc:GetOriginalCode() if wbc:IsLocation(LOCATION_REMOVED) then if c:IsFaceup() and c:GetFlagEffect(code)==0 then local cid=c:CopyEffect(code, RESET_EVENT+0x1fe0000,1) c:RegisterFlagEffect(code,RESET_EVENT+0x1fe0000,0,1) c:SetFlagEffectLabel(code,cid) end elseif c:GetFlagEffect(code)~=0 then c:ResetEffect(c:GetFlagEffectLabel(code),RESET_COPY) c:ResetFlagEffect(code) end wbc=wg:GetNext() end end end --e4 - Return function c10100052.filter4(c) return c:IsSetCard(0x158) and c:IsAbleToDeck() end function c10100052.condition4(e,c) return Duel.GetTurnPlayer()==e:GetHandlerPlayer() end function c10100052.target4(e,tp,eg,ep,ev,re,r,rp,chk) if chk==0 then return Duel.IsExistingMatchingCard(c10100052.filter4,tp,LOCATION_REMOVED,0,1,nil) end Duel.SetTargetPlayer(tp) Duel.SetOperationInfo(0,CATEGORY_TODECK,nil,1,tp,LOCATION_REMOVED) end function c10100052.operation4(e,tp,eg,ep,ev,re,r,rp) local p=Duel.GetChainInfo(0,CHAININFO_TARGET_PLAYER) local g=Duel.GetMatchingGroup(c10100052.filter4,p,LOCATION_REMOVED,0,nil) if g:GetCount()>0 then Duel.Hint(HINT_SELECTMSG,p,HINTMSG_TODECK) local sg=g:Select(p,1,1,nil) if sg:GetCount()>0 then Duel.SendtoDeck(sg,nil,2,REASON_EFFECT) end end Duel.ShuffleDeck(p) end For reference, here's what I changed:
- Instead of having Effect #3 trigger on "EVENT_ADJUST", I split it into several identical effects that trigger when a card changes location. It might miss some ultra-specific edge case that could make the card need a refresh without any of that happening, but what's good enough for Exodia is good enough for me.
- As it turns out, card targets can never be in the deck, which means that they are "untargeted" the moment they're shuffled in there. This means I need to use a group of cards as a label object instead, but it needs to be set by one effect and read by the other. To accomplish this, I store the cards in Effect #1 and use that effect as the label object for Effect #3. Seems overcomplicated, but it has been done before and it works perfectly.
- The loop in Effect #3 had its second condition changed into a nested if to make sure it doesn't terminate prematurely. That if then got an else branch to remove the effects once the corresponding card becomes unbanished. For this, I need the id the effect is registered with, which somehow needs to be stored separately for each card. The solution for this is the flag effect that tells me whether an effect has already been copied - I can simply assign a "Flag Effect Label" that stores the registration id and can be accessed with the card id.
- Lastly, Effect #3 now only starts triggering after the initial banishing. This means that I have to run the loop once and make the initial effect copies in Effect #1 already.
I'll update the downloads with the changed script and some example decklists once I get home. |
| | | Sponsored content
| Subject: Re: Bionicle Cards AKA Japanese Children's Cardgames on Swedish Toy Robots | |
| |
| | | | Bionicle Cards AKA Japanese Children's Cardgames on Swedish Toy Robots | |
|
Similar topics | |
|
| Permissions in this forum: | You cannot reply to topics in this forum
| |
| |
| Who is online? | In total there are 6 users online :: 0 Registered, 0 Hidden and 6 Guests None Most users ever online was 270 on Sun Apr 11, 2021 4:35 pm |
Latest topics | » Goodbye allMon Aug 08, 2016 7:53 pm by Zenas» [PLEASE READ] [VERY IMPORTANT] MACKPRO REVIVALMon Aug 08, 2016 7:47 pm by Zenas» D.D. Dragons vs KozmosSun Jul 10, 2016 11:02 pm by cane_63106» Where's everyone?!Sat May 28, 2016 2:58 am by cane_63106» Mech Archetype (crappy it be, maybe you guys would like it)Sun May 15, 2016 1:11 pm by barti02» My Assassin ArchetypeSun May 15, 2016 1:10 pm by barti02» SO I have a "NEW ARCHETYPE THE "WolfPack"Sun May 15, 2016 12:35 pm by barti02» Fusion monster doesn't appear in extra deck? Sat Apr 30, 2016 9:02 pm by Marc1» Mackpro update 10/6/2015Sat Apr 02, 2016 6:36 pm by Hulkty» Bionicle Cards AKA Japanese Children's Cardgames on Swedish Toy RobotsSun Mar 06, 2016 9:37 am by Utso |
|