It is currently 19 Jul 2025, 20:27
   
Text Size

Community Wad

Moderator: CCGHQ Admins

Re: Community Wad

Postby Splinterverse » 13 Nov 2016, 15:55

Question . . . I'm not sure how to handle part of Giant Albatross. I basically need to be able to iterate through creatures, ask their controllers a multiple choice, and then somehow flag the creature based on the response all within a nested set of loops.

Here's the current code with a comment where I am seeking advice: http://pastebin.com/ukW9W8fn
---------------------------------------------
The DOTP2014 CW is updated nightly between 11 PM and 12 AM EST.
Known Issues/Bugs |
Impossible Cards List | Update Your Land Pools
Splinterverse
 
Posts: 918
Joined: 04 Sep 2016, 13:32
Has thanked: 150 times
Been thanked: 76 times

Re: Community Wad

Postby Splinterverse » 13 Nov 2016, 16:29

Another question ... with CW_Tokens_TappedAndAttacking is there a way to pass in the P/T values? I see that the function itself calls CW_Tokens, but I don't see where I can pass in the P/T values. This is needed for Gemini Engine.
---------------------------------------------
The DOTP2014 CW is updated nightly between 11 PM and 12 AM EST.
Known Issues/Bugs |
Impossible Cards List | Update Your Land Pools
Splinterverse
 
Posts: 918
Joined: 04 Sep 2016, 13:32
Has thanked: 150 times
Been thanked: 76 times

Re: Community Wad

Postby migookman » 13 Nov 2016, 21:54

Splinterverse wrote:Another question ... with CW_Tokens_TappedAndAttacking is there a way to pass in the P/T values? I see that the function itself calls CW_Tokens, but I don't see where I can pass in the P/T values. This is needed for Gemini Engine.
You may want to check out this link: viewtopic.php?f=63&t=2891&p=183638&hilit=gemini+engine#p183638 about Gemini Engine.
User avatar
migookman
 
Posts: 135
Joined: 05 Aug 2014, 06:37
Has thanked: 22 times
Been thanked: 28 times

Re: Community Wad

Postby Splinterverse » 13 Nov 2016, 22:04

migookman wrote:
Splinterverse wrote:Another question ... with CW_Tokens_TappedAndAttacking is there a way to pass in the P/T values? I see that the function itself calls CW_Tokens, but I don't see where I can pass in the P/T values. This is needed for Gemini Engine.
You may want to check out this link: viewtopic.php?f=63&t=2891&p=183638&hilit=gemini+engine#p183638 about Gemini Engine.
Thanks for pointing that out migookman. I think I'll probably just skip that card for now as those options aren't really close enough to the rules.
---------------------------------------------
The DOTP2014 CW is updated nightly between 11 PM and 12 AM EST.
Known Issues/Bugs |
Impossible Cards List | Update Your Land Pools
Splinterverse
 
Posts: 918
Joined: 04 Sep 2016, 13:32
Has thanked: 150 times
Been thanked: 76 times

Re: Community Wad

Postby tmxk2012917 » 13 Nov 2016, 22:08

A bug of Transmute Artifact:

When I cast it, I was not asked to sacrifice an artifact so that I could not search my library for an artiact
tmxk2012917
 
Posts: 164
Joined: 15 Mar 2015, 09:52
Has thanked: 20 times
Been thanked: 12 times

Re: Community Wad

Postby Splinterverse » 13 Nov 2016, 23:18

Finished coding for today; all cards referenced are from the missing cards list except where noted.

Coded, tested, and uploaded:
Æther Web
Ætherflame Wall
Dread Wight
Game Preserve
Giant Slug
Gibbering Hyenas
Gigantoplasm
Glamer Spinners
Goblin Assassin
Goblin Festival
Goblin Kites
Goblin Lyre
Goblin Machinist
Goblin Psychopath
Goblin Sappers
Goblin Tinkerer
Gore Vassal
Grave Consequences
Grifter's Blade
Reyhan, Last of the Abzan -- from Commander 2016
Songstitcher
Wall of Diffusion

Open Items:

-- CW_CARD_QUERY_SPLINTERVERSE has been updated and uploaded.

-- Ivory Mask worked appropriately with Goblin Festival (which uses not_targeted on an opponent selection).

-- Open question viewtopic.php?f=109&t=15783&p=205606#p205596 (I repeat anything in this list that hasn't been answered so that people only need to check my latest post)

-- Goblin Spymaster http://pastebin.com/VeNsKCjQ gave me an error message that the token does not exist in the token list. I was using the latest version of the .wad.

-- Giant Oyster http://pastebin.com/h1XJYfTT everything works except the adding of the -1/-1 counters. It continues to add counters to the first target even after the Oyster has been untapped and re-tapped. I don't think my code covers that option, but I'm not sure what to add to make it so.

-- Telekinesis http://pastebin.com/NMjxK1ty everything works as it should except untapping of the creature after a few turns. It basically stays tapped forever.

-- The new reveal function (CW_General_RevealDC) isn't working for me. Here's the code I was using to test: http://pastebin.com/6rFPRUSN

Next:

Back tomorrow for more coding on missing cards.
---------------------------------------------
The DOTP2014 CW is updated nightly between 11 PM and 12 AM EST.
Known Issues/Bugs |
Impossible Cards List | Update Your Land Pools
Splinterverse
 
Posts: 918
Joined: 04 Sep 2016, 13:32
Has thanked: 150 times
Been thanked: 76 times

Re: Community Wad

Postby Splinterverse » 13 Nov 2016, 23:20

Splinterverse wrote:Finished coding for today; all cards referenced are from the missing cards list except where noted.

Coded, tested, and uploaded:
Æther Web
Ætherflame Wall
Dread Wight
Game Preserve
Giant Slug
Gibbering Hyenas
Gigantoplasm
Glamer Spinners
Goblin Assassin
Goblin Festival
Goblin Kites
Goblin Lyre
Goblin Machinist
Goblin Psychopath
Goblin Sappers
Goblin Tinkerer
Gore Vassal
Grave Consequences
Grifter's Blade
Reyhan, Last of the Abzan -- from Commander 2016
Songstitcher
Wall of Diffusion

Open Items:

-- Updated the targeting tags in Risky Move.

-- CW_CARD_QUERY_SPLINTERVERSE has been updated and uploaded.

-- Ivory Mask worked appropriately with Goblin Festival (which uses not_targeted on an opponent selection).

-- Open question viewtopic.php?f=109&t=15783&p=205606#p205596 (I repeat anything in this list that hasn't been answered so that people only need to check my latest post)

-- Goblin Spymaster http://pastebin.com/VeNsKCjQ gave me an error message that the token does not exist in the token list. I was using the latest version of the .wad.

-- Giant Oyster http://pastebin.com/h1XJYfTT everything works except the adding of the -1/-1 counters. It continues to add counters to the first target even after the Oyster has been untapped and re-tapped. I don't think my code covers that option, but I'm not sure what to add to make it so.

-- Telekinesis http://pastebin.com/NMjxK1ty everything works as it should except untapping of the creature after a few turns. It basically stays tapped forever.

-- The new reveal function (CW_General_RevealDC) isn't working for me. Here's the code I was using to test: http://pastebin.com/6rFPRUSN

Next:

Back tomorrow for more coding on missing cards.
---------------------------------------------
The DOTP2014 CW is updated nightly between 11 PM and 12 AM EST.
Known Issues/Bugs |
Impossible Cards List | Update Your Land Pools
Splinterverse
 
Posts: 918
Joined: 04 Sep 2016, 13:32
Has thanked: 150 times
Been thanked: 76 times

Re: Community Wad

Postby thefiremind » 13 Nov 2016, 23:48

Splinterverse wrote:Question . . . I'm not sure how to handle part of Giant Albatross. I basically need to be able to iterate through creatures, ask their controllers a multiple choice, and then somehow flag the creature based on the response all within a nested set of loops.
EDIT: I deleted the code because it wasn't working. If I'm successful you'll find the card in the CW.
Last edited by thefiremind on 15 Nov 2016, 10:06, edited 1 time in total.
< Former DotP 2012/2013/2014 modder >
Currently busy with life...
User avatar
thefiremind
Programmer
 
Posts: 3515
Joined: 07 Nov 2011, 10:55
Has thanked: 118 times
Been thanked: 722 times

Re: Community Wad

Postby Splinterverse » 14 Nov 2016, 12:03

Thanks for the Albatross code, thefiremind. I will test today.

New question . . . how does a PLAY_TIME_ACTION compare to an RTA? Is it that the PTA resolves first? Are there any signs of when we should use a PTA instead of an RTA?

Thanks as always for the help and support.
---------------------------------------------
The DOTP2014 CW is updated nightly between 11 PM and 12 AM EST.
Known Issues/Bugs |
Impossible Cards List | Update Your Land Pools
Splinterverse
 
Posts: 918
Joined: 04 Sep 2016, 13:32
Has thanked: 150 times
Been thanked: 76 times

Re: Community Wad

Postby thefiremind » 14 Nov 2016, 12:32

Splinterverse wrote:how does a PLAY_TIME_ACTION compare to an RTA? Is it that the PTA resolves first? Are there any signs of when we should use a PTA instead of an RTA?
PTA runs before the resolution of the spell/ability, about at the same time as eventual costs are paid.
Before generic costs were a thing, we used PTA for implementing them, but at the moment there are very few specific scenarios where you are forced to use a PTA, and I can't think of any example at the moment.

I took a very quick look at the other cards you are having problems with. I'll take a more detailed look later if I have time and the problems are still unsolved. What I can say for now is that I would have taken a different approach for Telekinesis:
  1. When you need to prevent damage without any additional clause you can use one of the characteristics used in the official Fog: grant CHARACTERISTIC_DOESNT_DEAL_COMBAT_DAMAGE to the creature and it should be enough. I have never tested how this kind of characteristics would interact with unpreventable damage, I have always trusted the official Fog. If you want to test this aspect, feel free to do so.
  2. In order to prevent the creature from untapping for 2 untap steps, I would have used target:TapAndHold(), then created a delayed trigger that calls target:Hold() on it at the beginning of its controller's next untap step (the previous "Hold" will be gone when the trigger fires, because the game untaps the permanents before firing beginning of untap step triggers, which is exactly what we want). Gatherer says that it doesn't matter if the creature changes controller, so you don't need to save the controller in delayDC, just save the target and make the delayed trigger fire when TriggerPlayer() == target:GetController() (where "target" is the appropriate card pointer containing it).

About Goblin Festival, I'm not sure if I understood correctly, but did you find problems in using ChooseItem when there are players in the filter? Even if no cards used it before, I think it should work. You know I'm very picky on those aspects, but if you use a target (even with not_targeted), the choice is made before resolution, and it's not how it's supposed to work.
I used targets with not_targeted on that particular modal card because it was a very special scenario where the choices needed to be made before resolution.
< Former DotP 2012/2013/2014 modder >
Currently busy with life...
User avatar
thefiremind
Programmer
 
Posts: 3515
Joined: 07 Nov 2011, 10:55
Has thanked: 118 times
Been thanked: 722 times

Re: Community Wad

Postby Splinterverse » 14 Nov 2016, 13:03

thefiremind wrote:I took a very quick look at the other cards you are having problems with. I'll take a more detailed look later if I have time and the problems are still unsolved. What I can say for now is that I would have taken a different approach for Telekinesis:
  1. When you need to prevent damage without any additional clause you can use one of the characteristics used in the official Fog: grant CHARACTERISTIC_DOESNT_DEAL_COMBAT_DAMAGE to the creature and it should be enough. I have never tested how this kind of characteristics would interact with unpreventable damage, I have always trusted the official Fog. If you want to test this aspect, feel free to do so.
  2. In order to prevent the creature from untapping for 2 untap steps, I would have used target:TapAndHold(), then created a delayed trigger that calls target:Hold() on it at the beginning of its controller's next untap step (the previous "Hold" will be gone when the trigger fires, because the game untaps the permanents before firing beginning of untap step triggers, which is exactly what we want). Gatherer says that it doesn't matter if the creature changes controller, so you don't need to save the controller in delayDC, just save the target and make the delayed trigger fire when TriggerPlayer() == target:GetController() (where "target" is the appropriate card pointer containing it).
I will give these ideas a try. Thanks!

thefiremind wrote:About Goblin Festival, I'm not sure if I understood correctly, but did you find problems in using ChooseItem when there are players in the filter? Even if no cards used it before, I think it should work. You know I'm very picky on those aspects, but if you use a target (even with not_targeted), the choice is made before resolution, and it's not how it's supposed to work.
I used targets with not_targeted on that particular modal card because it was a very special scenario where the choices needed to be made before resolution.
I didn't try it in this scenario. I will do that moving forward, and at some point, when there's time, I can alter Festival to use the ChooseItem approach.
---------------------------------------------
The DOTP2014 CW is updated nightly between 11 PM and 12 AM EST.
Known Issues/Bugs |
Impossible Cards List | Update Your Land Pools
Splinterverse
 
Posts: 918
Joined: 04 Sep 2016, 13:32
Has thanked: 150 times
Been thanked: 76 times

Re: Community Wad

Postby nachonal986 » 14 Nov 2016, 21:09

Xander9009 wrote:Oh, I'm sorry. Do you mean which cards were added to the decks themselves? No, there's no way to do that. Unless you have a backup of the deck from before it was changed, then that information is not stored anywhere.
oh no problem, maybe would be useful if it can put some date or something into the xml, then look on the deck builder from the advanced filter into the string filter?

You are the cracks, this way I think we can check the cards and maker new decks more easily.

Cya!
User avatar
nachonal986
 
Posts: 83
Joined: 27 Jul 2015, 21:13
Has thanked: 17 times
Been thanked: 1 time

Re: Community Wad

Postby Splinterverse » 14 Nov 2016, 21:50

Finished coding for today; all cards referenced are from the missing cards list.

Coded, tested, and uploaded:
Ashen-Skin Zubera
Dripping-Tongue Zubera
Ember-Fist Zubera
Erratic Explosion
Erratic Mutation
Excavator
Explosive Revelation
Flaming Gambit
Flay
Flesh Allergy
Flickering Spirit
Floating-Dream Zubera
Floodgate
Flow of Maggots
Flux
Fold into Æther
Force Bubble
Fractured Loyalty
Frenetic Sliver
Freyalise's Winds
Fungus Elemental
Furnace Scamp
Goblin Flotilla
Kaboom!
Read the Runes
Silent-Chant Zubera
Tempt with Discovery

Bugs fixed:
Goblin Machinist -- minor tweaks; tested

HQ art uploaded (all were missing):
Silent-Chant Zubera

Open Items:

-- CW_CARD_QUERY_SPLINTERVERSE has been updated and uploaded.

-- Fyndhorn Druid http://pastebin.com/mZaHdcHj It's not giving life on exit.

-- Telekinesis http://pastebin.com/vcHLwD31 Mostly working, but it's not keeping the targeted creature tapped for two of it's controller's turns (only one). thefiremind gave me good advice, but perhaps I implemented it incorrectly?

-- Is there an issue with using GetEffectX() in a triggered ability? I've nearly completed work on Frankenstein's Monster, but it's giving me grief when I call "GetEffectX()". It's showing as 0 in debug.

-- Goblin Spymaster http://pastebin.com/VeNsKCjQ gave me an error message that the token does not exist in the token list. I was using the latest version of the .wad.

-- Giant Oyster http://pastebin.com/h1XJYfTT everything works except the adding of the -1/-1 counters. It continues to add counters to the first target even after the Oyster has been untapped and re-tapped. I don't think my code covers that option, but I'm not sure what to add to make it so.

-- The new reveal function (CW_General_RevealDC) isn't working for me. Here's the code I was using to test: http://pastebin.com/6rFPRUSN

Next:

Back on Thursday to continue coding missing cards.
---------------------------------------------
The DOTP2014 CW is updated nightly between 11 PM and 12 AM EST.
Known Issues/Bugs |
Impossible Cards List | Update Your Land Pools
Splinterverse
 
Posts: 918
Joined: 04 Sep 2016, 13:32
Has thanked: 150 times
Been thanked: 76 times

Re: Community Wad

Postby tmxk2012917 » 14 Nov 2016, 23:18

A bug of Spark Elemental:

it was sacrificed at the next beginning step instead of the end step
tmxk2012917
 
Posts: 164
Joined: 15 Mar 2015, 09:52
Has thanked: 20 times
Been thanked: 12 times

Re: Community Wad

Postby Xander9009 » 14 Nov 2016, 23:31

For the token used by Goblin Spymaster, that's because I wasn't paying attention. The function file listed it as "GOBLIN_C_1_1_S_H" instead of "GOBLIN_C_1_1_R_S". I replaced "R" with "S" instead of replacing "H" with "S". It's been fixed.

For Fyndhorn Druid, try removing pre_trigger="1". pre-trigger replacements usually are used to replace an action entirely, such as when it says "instead of *whatever*". You don't need the int to be set before the actual blocking, so removing pre_trigger should be fine.

Also, remember what was mentioned recently. When you see a card phrased like this one, it uses an INTERVENING_IF block. When *this*, if *this*, do *this*. That's an intervening if, and it needs to use an intervening if block. It gets checked both before it's put onto the stack and before it resolves. In a case where it's impossible to change between those two checks (such as in this case), you can use ignore_resolution_check="1", but it still needs to be in the right block: INTERVENING_IF. Just return true if the "if" clause is met.
Code: Select all
<INTERVENING_IF ignore_resolution_check="1">
    return LinkedDC():Get_Int(33) == 1
</INTERVENING_IF>
Then remove the LinkedDC check in the RTA.
Hopefully removing the pre_trigger bit will fix it. Not certain, though.

Telekinesis: Don't need to protect the pointer on line 54. It's not meant to continue functioning if it changes zones.
Your spell ability tries to use LinkedDC() but it's not marked with linked_ability_group="1". However, neither it nor the delayed trigger need the LinkedDC(). Remove line 44. Remove linked_ability_group="1" from line 67.
Delayed triggers need a cleanup, and they need a resource id. Add resource_id="1" to line 67 (the 1 here matches the 1 used on line 55). Add the cleanup tag: <CLEANUP fire_once="1" />. Finally, the delayed trigger should be a replacement_effect.
The RTA at line 72 should just be this:
Code: Select all
<RESOLUTION_TIME_ACTION>
local target_creature = EffectDC():Get_CardPtr(0)
if target_creature ~= nil then
    target_creature:Hold()
end
</RESOLUTION_TIME_ACTION>
I'm considering what would happen if the creature is destroyed or moves zones before this trigger fires. With the current trigger (which doesn't check if it's nil), it would throw an error for trying to index a nil value ("target_creature:GetController()"). If you do check if it's nil before returning true, then it'll check for the rest of the game.


Perhaps a safe way to handle it would be to return true in the cleanup if the pointer is nil. I'm not sure, though, since I've never tried it.
Code: Select all
<TRIGGER value="BEGINNING_OF_PLAYERS_STEP">
    local target_creature = EffectDC():Get_CardPtr(0)
    return MTG():GetStep() == STEP_UNTAP and target_creature ~= nil and TriggerPlayer() == target_creature:GetController()
</TRIGGER>
<CLEANUP fire_once="1">
    return EffectDC():Get_CardPtr(0) == nil
</CLEANUP>
Giant Oyster: On line 51 you check if EffectSource() is nil and you also check if 'card' is nil, but card is EffectSource().
Lines 69 and 71 effectively do the same thing. A cleared register returns 0 when you check it. So, you don't need anything more than LinkedDC():Clear() in that RTA (you can remove the 'if' blocks entirely).
Line 75: CLEANUP tags are for delayed triggers. Remove this.
Line 101: Don't protect the pointer. Protecting the pointer should only be done if the ability should continue to do something with that card even after it changes zones, which is not the case here.
Line 118 and 129: Never uses or needs LinkedDC(), so I'd remove the linked_ability_group="1".
Delayed trigger #5 has no cleanup (which is probably why it isn't running). Its cleanup should be:
Code: Select all
<CLEANUP>
    return EffectSource() == nil or EffectSource():IsTapped() == false
</CLEANUP>
GetEffectX(): I looked into GetEffectX(), GetPaidX(), and GetManaX() awhile ago, but I don't remember the exact results. One of them always worked, whereas two of them worked only in some situations. I'd try replacing GetEffectX() with GetPaidX() or GetManaX() and see if that helps.

I'll look into the reveal function to make sure I didn't mess it up. (Also, completely irrelevant, but your test card says it will reveal 7 cards, but it reveals 8. 8-1=7, and i will start at 0. 0, 1, 2, 3, 4, 5, 6, 7. for i=0,6 would be 7 cards.)
_______________________________
Community Wad - Community Wad Website - How to Help and Report Bugs
Discord: discord.gg/4AXvHzW
User avatar
Xander9009
Programmer
 
Posts: 2905
Joined: 29 Jun 2013, 07:44
Location: Indiana, United States
Has thanked: 121 times
Been thanked: 445 times

PreviousNext

Return to 2014

Who is online

Users browsing this forum: No registered users and 6 guests

Main Menu

User Menu

Our Partners


Who is online

In total there are 6 users online :: 0 registered, 0 hidden and 6 guests (based on users active over the past 10 minutes)
Most users ever online was 7303 on 15 Jul 2025, 20:46

Users browsing this forum: No registered users and 6 guests

Login Form