Magic Symbol Recognizer - Help and Request Thread

Hello, I recently created a Magic Symbol Recognizer and added it to the asset store.

I was feeling the Black and White nostalgia and wanted to create a magic system similar to their gesture tracking system. Anyway, here’s a thread for support with questions and a place to add feature requests if you are interested.

The project is 100% in blueprints.

Demo
Quick Setup Tutorial
Cropout Example Project Setup Tutprial - New

Currently there is a feature request for multiplayer replication. Would be good to know if players should be able to see the symbol the other player is drawing or not so let me know what you think.

The project should save you a lot of time. It is lightweight, performant, and fairly easy to setup, I have a setup tutorial included. I imagine it would not be too difficult to set up for side scrollers or VR, so if you want to see that, make a request here.

UPDATE The recognizer handles multi-stroke symbols and is template based. You can create and save templates in the example map.

Let me know if you have any questions, need help with something, or have feature requests, just respond to this thread.

Change Log

  • 10/20/23 Added multi-stroke capability. You can create more complicated symbols such as ‘+’, language characters, or runes. Also added the basis for the creation of a calculator.
  • 12/9/23 Fixed a bug where subsequent multi symbols were saving “on top” of each other. Added separate buttons for single and multi symbols. Improved instructions.
3 Likes

Hi, DangerRangerous
I need to and symbol “+” into data, can I do some change make the drawing can be more than one stroke?

Cureently the right mouse button start draw, and release mouse stop drawing.
Can I change it to stop the drawing only user click a key (any key)?

Hi Arthurliu,

I believe that is possible yes. I can break down the steps for you:
Change the event that triggers the stop capture mode to be triggered by a key press instead of on mouse button release.

Doing this alone, however, will still consider the shape as one stroke. To create two stroke (or more) recognition you will want to have a key button press to complete the whole capture mode as you mentioned, and there will need to be a way to signal the end of the first stroke (probably just releasing the mouse button).

Right mouse button would start capture of first symbol, releasing right mouse button would stop capture mode, then pressing right mouse button again would start capture mode again for the second stroke - you would need to add the new points to the existing array instead of overwriting anything. Afterwards a key press would complete the capture mode and trigger the StopCaptureAndRecognize event.

It is a little tricky but I believe it is definitely possible. It may even be a useful feature I may add if there is interest. Let me know if you have any luck getting something like that to work. If you have troubles I can take a shot at it.

Actually, now that I think about it, it may be more complicated than I originally thought. Probably better to create two arrays, one for each stroke, then compare them each separately.

Hi again Arthurliu,

I believe I have a rough prototype of the feature you are asking for. I’ll add it to the main project most likely this week after further testing.

hey, Looking to contact you to see how i can get a replicated version of this asset.
Idk if its better to communicate here, Or via email. feel free to email me at theshadefilms@gmail.com & we would happily commission a replicated version of this asset & willing to provide more information. Thank you, Looking forward to hearing back !

1 Like

Hi ShadeGameDev, I sent you an email from Everflame Studio account asking for more information, you can respond there and I’ll get back to you. If for some crazy reason I don’t respond for a while you can ping me here again.

Thanks.

do you have it setup where you can have strokes take a certain amount of time and or order?. for example drawing a triangle but the first stroke is the bottom right to left and you need to make the stroke take 3 seconds but then the stroke from bottom left to triangle point and back down to bottom right can be done at any speed or limited to 1 sec each? i know that’s a specifically odd question. im just trying to implement that myself and am struggling. thanks in advance. watched your everflame studio youtube videos your work is inspiring. thanks agian

edit: a visual example is the long notes on the rythm game OSU! they require different timing and direction

1 Like

Hey thanks for the nice comments. The project is set up so that stroke order does matter, the traces create a series of points and each point is compared to the users input and given a score based on roughly how close they are. You can create multiple variations of one symbol if you want to accept more than one stroke order, hope that helps you understand it a bit more.

OSU! looks like it is a series of custom slider button ui elements which probably check what percentage of the bar has been filled over a period time for the longer notes, but that’s just my guess.

To modify MSR for what you are trying to do you would want to associate a goal time with each stroke, then probably have some wiggle room for how close to that time the player should be. And of course UI indicators and all that. That’s actually kind of tricky now that I think about it.

So first step, associate a goal time with each stroke, probably in the struct but it could be it’s own variable that updates each stroke. Second step would be to track the player’s stroke time (lol) which you can do with an event timer that’s triggered by players input and increment a float each time it loops. Third step is to compare the player’s stroke time to the template’s goal time. For a multi-stroke symbol there will need to be a way to differentiate between the sub-strokes, I believe right now they are all just added together into one new array… which since the sub strokes are re-sampled you will know roughly how many points between each new stroke there are.

Another thing, in your example the first stroke and the triangle connecting stroke could be their own separate single stroke symbols to make things much easier, just fake it by having a hit box that the player has to draw inside so they can’t draw a vertical line (which MSR reads the same as a horizontal line since it’s rotation invariant) instead of a horizontal line. I hope that helps. Also, that is a cool project idea btw.

1 Like

Hi @DangerRangerous, I just discovered this.

Currently there is a feature request for multiplayer replication. Would be good to know if players should be able to see the symbol the other player is drawing or not so let me know what you think.

In my opinion, the potential for Multiplayer Gesture Recognition for both non-VR/VR is Great! I’ve acquired a couple of other Gesture Recognition assets from the Marketplace previously. Neither are Multiplayer.

I believe in implementing features as options for the developer so they can extend as options to their players. This gives the asset the most flexibility and wider use-case. With that said, I vote Yes to Symbol Drawing Visibility.

With this option available, it can be enabled/disabled by the developer or used in-game as option for the players toggle or use by game logic itself like a Skill that gives the player the ability to see the Gesture as a form of Telegraphing.

With regard to Symbol Visibility, displaying the Symbol Drawing Pointer with different Images/Meshes and Drawing Traces using various vfx/sfx, should be considered. I believe this would increase the visual impact of creating gestures themselves.

I also think Gestures are a great way to handle complex and numerous input with fewer controls, like input combo buffering in Fighting Games. Gestures could also be used to execute avatar and camera movement patterns, melee attack/guard animations and combos, switching projectile weapons, troop formations, Typing Words to be displayed in Text or Audio, Sign Language, and more.

I develop my games in various perspectives, although a majority are First/Third Person perspective. Do you plan to support these perspectives.

I do understand if the Asset was initially developed for a particular game you’re personally developing, but as a public marketplace asset (with Developers working on all types of games) its limitation to just Top-Down and Side-Scroller games is handicapping your sales.

1 Like

Hey, I know it’s been a couple of weeks but I made a tutorial explaining how to capture the time a button is held, which you could connect to the input when drawing symbols. Here’s the link: https://www.youtube.com/watch?v=3ov-MEtacNw

@TechLord

First/Third Person perspective. Do you plan to support these perspectives.

I think adding these perspectives will be the next update. Thanks for the input.

2 Likes

Hey man! sorry I’m late. I never got a notification or email to your responses and been super distracted with the project. thank you for your wisdom and information! if i have anymore questions i know who to ask and i hope you wont mind. The Tutorial was great by the way, thanks a million!

1 Like

Thank you so much, DangerRangerous.
I tested it , The multi symbol function is so good, it is like a magic.

Now I face a new issue:
I have input shape as “7” and “L”, I tried to remove the “rotate by”, but it is able to recognize.
Can I have some clue to recogenize “7” and “L”?

Hey thanks Arthurliu. So it is dependent upon being able to rotate the shapes so a “7” will read like an “L” unfortunately. The solution is to draw the 7 with a dash in the center like the picture I’ve attached.
7

If it is not possible to draw the 7 with the dash, another potential fix is to create the 7 with the angle and create an L that has a more straight vertical line. The scores may be too similar though. It is a drawback of the system’s feature of not depending upon shape direction.

Another potential solution… is maybe the rotation amount can be limited so it only rotates to around 120 degrees or less (the rotate by function would keep track of how many times it has been called and stop once the limit is hit, then reset for the next symbol).

Hope that helps and thanks again.

Thank you.
I will try to see how to limit the rotates to 120 degrees.
(Because I also have “-”, and “1”, so I think limit the rotates is the best way. Let me try it)

The created symbol becomes empty after being deployed to devices.

Hi Master,

I created some symbol and saved in Unreal Editor, but after I deploy my Game to devices, the symbol become empty.

(I deployed to Ios, Android).

How to deploy the symbol I created to device?

(Maybe in Unreal settings, I need set a file include to package, if it is true, which file I need to include?)

Ok so this sounds like it should be a feature of the Engine, maybe it already is and I can’t find it, but I did find a potential solution.

It looks like there is currently a workaround to be able to load the saved symbols in a packaged build - it’s the bottom post of this thread: https://forums.unrealengine.com/t/can-you-export-a-save-game-to-use-in-a-packaged-build/1296246/13

Basically it sounds like you have to create a blueprint actor with the same variables as the save game object, save the symbols that are being created in the editor to that actor, hit the pause simulation button and apply instance changes to that actor blueprint. Then instead of the save game object you will spawn that actor and load its variables similar to how the save game object works.

It’s a hack but it sounds like it should work. Maybe there is an option in the settings somewhere to export save game to packaged builds… that would save a headache, if there isn’t then Epic should add that feature.

Hi Beebs,
Can I know in Demo project, which blue print object or file that save the symbols?
(I tested different blue print object, but not success).

Hi! Please tell me if it is possible to use this asset in a compartment with a first-person controller, as in Arx Fatalis. Will there be any problems?

Hi Arthurliu sorry for the late response,

There should be a save game object but if you are trying that work-around to create a new object then I’m not sure.

Hi Linkrus,

Right now it is set up for top-down but if you know how to convert it to first then it would work. First step would be to duplicate the component then start changing any casts that may exist, then change the line traces for drawing symbols to either get screen position instead or trace in front of the player where you could put an invisible plane in front of the character (kind of hacky).

I might get around to a first person update at some point but I’m pretty busy and about to be more so.