CCG Toolkit | Multiplayer Card Game Framework

So I am trying to make the taunt work first, and this is what I came up with what I read in earlier posts on the forum

Doesn’t seem to work, still new to unreal so not sure what is going on.

Hey MFHad0uken,

Interesting solution, I can see a few things for why this wouldn’t be working for you. Ultimately, you would be wanting to get the opponents cards and search through these to find the first or one taunt card in the list. In your solution I cant seem to see any reference to getting the opponents cards, so lets see if we can get something working for you.

My suggestion in the latest version of the toolkit would be to add the following example to your “Deal Damage to Card” function.

This solution basicly follows the following logic:

  • Asks whether or not the receiving card is a taunt card. If it is, than the interaction will continue as normal.
  • If the card is NOT a taunt card, then it will get a reference to the opponents cards on the board and search for the FIRST taunt card it finds
  • If it finds a taunt card within the opponents cards on the board, then it will change the Receiving card to reference the taunt card instead.
  • And if there are no taunt cards, then the interaction will continue as normal

You shouldn’t have to add this anywhere else as both the AI and Players use this same function. This isn’t the most efficient way of doing this but you shouldn’t see any real impact to performance at all, and once you get this working you can refactor the code so it works better for your project.

Let me know if this works for you!

Dear,

I just bought your toolkit, it’s amazing, you must be spending much time in creating and fixing the bugs. It’s truly awesome.

By the way i’m new to game development, and i want to publish my game to IOS apps store one day. If this is the plan, what would you recommend me to do?

  1. Should i get a computer with mac os to develop the game?
  2. Should i enroll in the apple developer program and learning xcode before start working on the game using your toolkit?
  3. Is your toolkit pre-build to be compatible when publishing it to IOS apps store?
  4. When we start designing, we need to chose which platform (MAC,OS,Console), therefore once i done my game in mac version, can it be used for other platform (android, ps4, xbox) ? What’s the best way to create a multi platform game in
  5. Can the toolkit alter the in game battle system to have different element on the card, then each element will deal extra or lower damage to another element?

Sorry i’m abit long winded, but i really need your kind advise of above.

Many Thanks.

Hey Xiao Wan,

Really glad to hear your enjoying the toolkit! :slight_smile:

To your questions…

  1. You will require a mac to build the project for submission to the app store or complete build to your devices for testing (Unless this has changed recently?)

  2. To deploy to an IOS device for testing you are required to be an apple developer. You can test your game in the mobile preview, but I would suggest signing up to the program as its really worth it being able to see your game running on device.

  3. You should not have any troubles deploying to an IOS device. Personally I do not have a mac, so I have not been able to submit any projects based off the toolkit to the app store. Maybe another user has had success with this?

  4. Multi-platform is a beast on its own really. Unreal handles most of the muscle work here to make other platforms accessible and deployable for almost all devices from the one project. Design wise, you will need to take into account that some platforms may or may not have the muscle to run as many visuals, code, post processing effects, etc per frame and performance issues may arise on lower end machines (Anything from assets, to complex code, post processing limitations etc), the list can go on for days. You have the option to branch a build and setup/ optimise the project based on the platform, however you shouldn’t do this unless its necessary (Such as porting from a visually detailed PC/Console game to a mobile platform)

  5. This is definitely possible, as likely expected you will need to modify the toolkit to meet these requirements.

Hope this helps

Hey, I am failing to get all rows. I have added them in so it should work, can you tell me what you think may be the issue?

Thanks!

Hey Zarsie,

Can be a number of different reasons for this, but in the images you attached only two of the 3 inputs are being used by the select node. Looks like your empire set may not be returned from the collapsed code into the select node.

If you still seem to be getting this error you can reply with another image of your “Get Card Data” function changes so we can have a look. If you are using UE4.16 > you should also be able to change this function to be like suggested in post #132 of this thread to be easier to add your card sets to reduce the hassle of adding your new card sets.

Also, one of the more common reasons for this would simply be to open the main menu/ deck builder if you haven’t done so already. Let me know

Can you explain the first part?

http://imgur.com/a/uWJnF

Screen shots

From your image you appear to have 3 execution pins entering the collapsed (“Get Selected Data Table Row Names”) node. but there only appears to be two arrays coming out. From what I can tell you should have a third array output connected to the Empire Set input on the select node right next to it.

acfd75bf0dcf51271d20ded3cf46598581cb7836.jpeg

This will fix it the card editor but not the issue you were seeing with the error.

What I can see in your Get Card Data function, your new set has been added below the Empty Card set execution flow. The function at the moment will return before it gets to your new card set because the empty set calls the error you were seeing and return without ever looking at your new set. If you go into the Card Set enum, and move your new set above the Empty set option, this should hopefully fix the issue your seeing. Alternatively you can change this function to be like the example I suggested in my last reply and this shouldn’t be an issue anymore.

So I did all of this and am still getting the “Failed to get X row” error when opening the deck builder. Here is a video showing everything. Sorry I’m a bit slow on navigating as I am reading the documentation the other screen to make sure I don’t miss a step.

Ok, a few cleanup things…

  1. The deck builder will try and open and display all card sets when its first open. In the “Get Card Data” function if you fail to get the card it will search in the next data table, but the issue seems to be occurring when its searching through each data table then returns without checking your new set. After the function checks the debug card set it it currently returns with the error, so the “Row Not Found” execution output from the debug card set so the should be attached to the “Get Empire Set Data Table Row”.

See:

  1. In the “Get All Cards in Active Sets” function the Sequence node flow “Then 2” will return before getting to your card set. You should plug your card set into “Then 2”, and have “Then 3” connected to the return path.

  2. In the Card Manager your almost there. It looks like because you moved your Empire set within the enum, the third array is now connected to the Empty Set, instead of your Empire Set. Just change this back and it should work as intended.

Hope this helps!

Thanks for taking the time to help me. I must be misunderstanding something you said, I think it is probably on point 1. here is an album http://imgur.com/a/2Ilx0 Still getting the same error.

Looks like everything has been setup correctly. Without seeing the contents of your data table its difficult to understand why this would now be failing. The error displays the card names and if they are the correct card names that align with the row names in the data tables, then there may be other variables at play.

I will suggest that you go ahead and make the change this function to below. Detach the current code and add the follow. This will save you the hassle of the spaghetti lines everywhere and make it a lot easier for you to add new cards sets to your game. With this change, as long as your card set is in the data table array and the card names are the same, then you shouldn’t see any other issues.

If you continue to get this, even after this change, send an email to and we can continue this discussion more specific to your project.

Worked like a charm!

I know its been a while since we talked bout converting cards into taunts when placed on the field, but I’m a little confused on how to convert cards to be “Taunts” by adding a bool to the placement.

your original quote

Thanks for helping!

This toolkit seems fantastic. I swore this was on sale this past weekend but seems i missed it, little late to the party i guess. Has there been any working online demos published yet? Cant wait to see one or try my luck when on sale. Great asset wish i found this sooner!

Perfect! As for the second part, that would be a more solid approach but this can be made easier if that’s what your after…

  1. In the placement blueprint, add a bool called something like bConvertToTaunt
  2. Whenever a card is added to a placement then you can check this bool, if true, then you can set the card type on the card actor.

Something like this:
94df364fbfb61fb903dbf16c21e7e3982fb461c7.jpeg

Keep in mind that this wont set it globally or set it for the card struct at all. Some systems may check the data table for the card info and wont necessarily load the card itself. Look out for these things and make the necessary changes as you come to them, or send another message and I can direct you to where they may be.

Let me know if this is easier to work with

Amazing toolkit! I’ve already implemented a number of my own abilities thanks to the great documentation. I was following the guidance you gave earlier on taunting cards and while it seems to work when preventing creatures, if I choose to attack the player, taunt doesn’t work. I tried using a similar work around I’m the Deal Damage to Player interaction blueprint, but with no success. I’m currently at work and can post pictures when I’m home. I’m hoping maybe you can shed some light however.

In case anybody was wondering. I did get this to work, but it only seems to work once. Any subsequent cards played with the taunt type will not work for a reason that I can not understand.

Hey Ridingkeys,

Glad to hear you got some of this working. Only working for one card seems a bit strange, as long as you are not Setting or Changing the taunt cards when you do this check, then it should work the same each time.

The solution mentioned before does have some limitations and this will change based on how you want the ability to function. It will find the first one in the list and then return that, so this may be what you are hitting if cards have improperly been removed from the board(?). Throw in some prints to see where the logic and flow of your changes go and what it checks as this will help you narrow down whats going on.

Feel free to send over some images of your blueprint setup and I can also take a look if that would help.

Using print strings was actually what helped me solve most of the issues. I do believe it is that the cards are being improperly removed from the board but I am not sure why. I do get an error when playing related to the Graveyard so I believe that may be it. Let me get the exact Graveyard issue and clean up my blueprint so that its easier to read.


Error Blueprint Runtime Error: Accessed None trying to read property Graveyard_Ref from function: 'ExecuteUbergraph_3DCard' from node: Add to Graveyard Visual in graph: EventGraph in object: 3DCard with description: Accessed None trying to read property Graveyard_Ref


http://puu.sh/wLw6u/16c4d421cf.jpg

tried to make blueprint as compact as possible

A couple of things stand out…

  • The first branch node in your for each loop currently returns after the first card is checked and returns false. Only one card is being checked so this is likely the cause why the issue with the player is occurring, and this leads onto the next point…
  • The for each node’s complete execution pin should be what returns to damage the player after all cards have been checked. You should be able to swap the execution from the branch so the complete execution is triggered instead. You wont need to have anything come out of the false for the branch node.

As for the error, this essentially means there is no reference to the players graveyard. This is handled in the game state which sets references for each player at the start of the game. You shouldn’t need a graveyard in your game as they are optional really. In the 3D card, the “Move Card to Graveyard” function calls a function in the game state (“Remove Card from Board”) which would handle the removal cleanly. Have you made any changes in the game state recently? If you can provide more details and specific cases then this may help narrow this down.