Math-Attack game for my kids

Still in it’s early stages but the basic gameplay is complete by now. I don’t keep all of the stats that I plan to and there isn’t any user account management yet but that will come. I need to do some gameplay testing with the kids to work the kinks out as needed before going too far down that path.

Edit: latest game page is officially here now: Math Attack! - Simsilica, LLCSimsilica, LLC
…download links screen shots, etc…

For historical reasons, I’m leaving the following here also…

Links if you want to try it out:
Latest: http://simsilica.com/Downloads/MathAttack-Windows.zip
Latest: http://simsilica.com/Downloads/MathAttack-Linux.zip
Old: http://simsilica.com/Downloads/MathAttack-proto-Windows.zip
Old: http://simsilica.com/Downloads/MathAttack-proto-Linux.zip

Those are sort of hand-cobbled distros because the SDK 3.1a desktop builds don’t work on any of my platforms.

Art, sounds, UI style are all still basically placeholders but I think even this simple stuff works ok for the game. I plan to make the real version more 2.5D with some nicer backgrounds but that can wait.

Screen shots:

8 Likes

Nice work, my daughter loves it !
I liked particularly the sounds effects, how did you made it ? Reason ?

I downloaded them from Kenney’s site. I use lots of stuff there for placeholder assets:

P.S.: Thanks for the kind words.

Hi Paul!

I would have a victim for your game :laughing: The only problem is: This little girl only speaks german. Not that there is much need for reading the text, the calculations speak for themselfe. But it would be a little bit easier to motivate her, if she could use it by herself without having to ask for translation-help. So my suggestion to your game is:

If it isn’t that much work, would it be possible to create e.g. a language-file? I think of something like a property-list which can be changed from outside. Or even better, to provide multiple languages? For the german part I would be pleased to translate your stuff. But hey, it’s just a suggestion, so only if it is not to much work!

EDIT: Sorry, I forgot… Nice game! There should be more learning-games like this outside!

Greets Tankwart

Ah, localization is a good idea. I use Lemur for my UI library (and I wrote Lemur) and have been looking for an excuse to add easy localization support to it. This might be a pretty simple game to do that for.

Not to get hopes up too high, first I need to finish the user tracking and stats piece so that I can properly track my kids’ progress and deliver on promises of ice cream. :slight_smile: Then I will look at localization support.

1 Like

As mentioned on the screen shot thread, I recently added achievements to the game. Here is the level selector with the level-specific achievement icons:

Tonight I was able to add the category-specific achievements and daily achievements. (Still no category roll-up icon.)

Here is the level select screen again that shows the daily goals (no weekly goals yet)…

And here is what the achievement pop-up looks like when you first earn an achievement:

It cycles through all of the achievements you’ve earned as separate popups. So first I got the “Gold” achievement for the level and then the category attempted achievement. (Trying one level of a category gives you ‘attempted’ where as you have to pass 2 or more levels to get ‘passed’.)

Finally, I went and ‘attempted’ two more categories so I could get one daily achievement checked off:

1 Like

If you are really curious, here is what the achievement rule file looks like… (groovy DSL for the win)

levelAchievement("Attempted") {
    description = "Try the level."
    score = 1
    rule {
        currentScore.total >= 0
    }
}


levelAchievement("Passed") {
    description = "Pass the level."
    score = 2
    rule {
        currentScore.percent >= 0.7
    }
}

levelAchievement("Bronze") {
    description = "80% correct."
    score = 3
    rule {
        currentScore.percent >= 0.8
    }
}

levelAchievement("Silver") {
    description = "90% correct."
    score = 4
    rule {
        currentScore.percent >= 0.9
    }
}

levelAchievement("Gold") {
    description = "Perfect score."
    score = 5
    rule {
        currentScore.percent >= 1.0
    }
}

categoryAchievement("Attempted") {
    description = "Try one level."
    score = 1
    rule {
        it.categoryAchievements.count { it.level != null && it.name=="Attempted" } >= 1         
    }    
}

categoryAchievement("Practiced") {
    description = "Pass at least one level, try another."
    score = 2
    rule {
        def ours = it.categoryAchievements.findAll { it.level != null }   
        def result = ours.count { it.name=="Attempted" } >= 2         
        result && ours.count { it.name=="Passed" } >= 1
    }
}

categoryAchievement("Bronze") {
    description = "Scaled score >= 8"
    score = 3
    rule {
        def best = it.categoryAchievements.findAll { it.level != null }.best() 
        def totalScore = best.sum { it.totalScore }
        return totalScore >= 8; 
    }
}

categoryAchievement("Silver") {
    description = "Scaled score >= 12"
    score = 4
    rule {
        def best = it.categoryAchievements.findAll { it.level != null }.best() 
        def totalScore = best.sum { it.totalScore }
        return totalScore >= 12; 
    }
}

categoryAchievement("Gold") {
    description = "Scaled score >= 15"
    score = 5
    rule {
        def best = it.categoryAchievements.findAll { it.level != null }.best() 
        def totalScore = best.sum { it.totalScore }
        return totalScore >= 15; 
    }
}

dailyAchievement("Practice") {
    description = "Practice at least three categories."
    score = 1
    rule {
        def daily = it.dailyAchievements.findAll { it.level == null && it.category != null } 
        daily.count { it.score == 1 } >= 3
    }
}

dailyAchievement("Passed") {
    description = "Pass at least three categories."
    score = 2
    rule {
        def daily = it.dailyAchievements.findAll { it.level == null && it.category != null } 
        daily.count { it.score == 2 } >= 3
    }
}

dailyAchievement("Bronze") {
    description = "Bronze one category and pass at least three categories."
    score = 3
    rule {
        def daily = it.dailyAchievements.findAll { it.level == null && it.category != null }
        def passed = daily.count { it.score == 2 }
        def bronzed = daily.count { it.score == 3 }    
        passed >= 3 && bronzed >= 1
    }
}

dailyAchievement("Silver") {
    description = "Silver one category and pass at least three categories."
    score = 4
    rule {
        def daily = it.dailyAchievements.findAll { it.level == null && it.category != null }
        def passed = daily.count { it.score == 2 }
        def silver = daily.count { it.score == 4 }    
        passed >= 3 && silver >= 1
    }
}

dailyAchievement("Gold") {
    description = "Gold one category and pass at least three categories."
    score = 5
    rule {
        def daily = it.dailyAchievements.findAll { it.level == null && it.category != null }
        def passed = daily.count { it.score == 2 }
        def gold = daily.count { it.score == 5 }    
        passed >= 3 && gold >= 1
    }
}
2 Likes

Nice project… the name makes me think of mars attack… maybe you could have some popup vectorial like mars guy with a cone poppin-in and blabbering stuff. For me that movie will always be about funny looking aliens shooting people while screaming “we come in peace”. Would give you an artistic context.

Maybe would need donkey hats, cups and so on images depending on the score. Ideally the difficulty would be linked to an entered age.

Mars Attacks was the kind of thing I was specifically thinking of, actually. In fact the original name was Math Attacks but I changed it slightly to avoid tying too closely in a way that might get me in legal trouble should I publicly release ‘for real’.

It’s gotta be based on skill and not age, though. My son is way behind age-wise.

If I remember right, they can make you problems only if the name is ugly close while making it hard to distinguish while being on the same market or that kind of stuff.

  • you can’t open a Disseney attraction park, but you could sell Disseney financial services for example.

Now, if you add mars attacks like characters, yah, probably becomes too much.

Yah, I understand while not based on age now (just have to explain it to me sloOoOowly :D).

Uploaded a new version and adjusted the links in the main post.
http://simsilica.com/Downloads/MathAttack-Windows.zip
http://simsilica.com/Downloads/MathAttack-Linux.zip

This version has achievements and stuff and most of the UI is fully working. There are some missing things like volume settings screens and things. It will save your achievements if you play as a non-guest though I think there is a bug with tracking the daily stats as I was still adding to my previous day’s achievements today. (Actually, I think the achievements are calculated correctly but it’s the icon display that isn’t… I’ll have to test more.)

Other than that, there are at leas ta dozen fixes and enhancements… probably more like 20… over the last version.

I’ll try to post a video soon.

1 Like

I made a video… such as it is… (Not sure why youtube wants to wash out the thumbnail)

3 Likes

And if any Lemur users (or potential Lemur users) are curious about any of the UI, just ask… it’s all stock Lemur components, really. I think I even only added one background texture for the round borders on some of the popups. Everything else is part of the glass style. I’d originally planned to do a completely custom style but this one has grown on me and likes nice enough for this game.

1 Like

Updated main post with the new official game page:

I’m pretty much ‘done’ with the game for the most part. There are features I still want to add and tweaks to be made but what’s there has been polished front-to-back, music added, game page created, etc…

Check it out if you are interested or just want to see Lemur in action.

Cool game for sure!

However, when it comes to math… There is only one game that reigns supreme… :stuck_out_tongue:

Even though they are kind of ‘throw away’ songs, I added the Math Attack music to my Music page:

Heheh. I needed a game that kept track of their achievements and I looked but couldn’t find any. So I wrote one. I may have to point them to that game, anyway.

I’m sure your game blows MM away in terms of what it can do, I just joke because it came up the other day on another post (don’t think it was this forum). It was just one of those games that you tend to remember, just because of everything involved in the game.

TBh I didn’t remember a lot of the funny stupid stuff in the game, which I was reminded of when watching the video… The days when games had to try extra hard to make you want to play it… especially an educational game!

I say continue on! If anything your game could be a serious learning tool. I actually have a site that could be the perfect test bed if you wanted to go the “public” route… I’m not sure if we can PM people on this site???

by the way… sim silica…? hahah sim city 2000!

How long did it take you to do all this? I’m assuming you did it yourself? Just JME?

The site supports PMs.

My game is not very advanced as it’s more of a means to an end. Someday I hope to go back and make it juicier, give it some 3D backgrounds, add some ‘campaign maps’ so the achievement paths aren’t so hard to follow, etc… but as it is, I have a game that will do the job and let me polish up a nice animation package for Lemur. :smile:

I’m not sure. Yes, I did it all myself including the music. For the ships, I used Kenney assets: http://kenney.nl/ Nice stuff for placeholders or even full games.

It’s JME + Lemur + Zay-ES. (And says so in the game’s about box)

Partly this was an exercise in taking a game to polished completion, such as it is.

I’ve been working on the game for like 3+ weeks… but some days not at all and most days only 1-2 hours. I have no idea how many hours actually went into it. It’s also hard to separate the ‘game dev’ time from the ‘lemur dev’ time and so on.

For the music, each song took about 3-4 hours to write and mix down.

Oh okay, I’ll send you a pm about the site if you’re interested in getting it out to the public.

sounds cool, I hope it goes far! Maybe open it up so JME members can help, but I’m not sure if that’s how some projects go? You mention “Mythruna” a lot, is that a JME project, or is that another personal project of yours with others?

Nice, that’s awesome. I’ll check out the site, is it free stuff or paid?

Hmm, don’t think I’ve heard of Lemur or Zay-ES? Unless Lemur was your gui you posted in the other thread???

Nice exercise for sure, lots of stuff done, and the basics finished. I really like it so far!

So that’s a decent amoutn of time, so you probably spent around 50 hours total on it?

Now that I saw the video I realize it’s all 2D from what I see…??? So did you use JME with just 2d textures moving up and down? It seems that the “space” looks like it extends in a 3rd dimension, but maybe I’m wrong?

Also, It looks like the space ships move slow enough, but I find clicking the space ship, and then entering the number to be a “hassle” imo… Is it possible to use a tiny bit of real-estate on the side to have a calculator that you could enter the number, and then click the space ship to destroy it?