[ Login | Register ]

The Shining Source

Pages: [1] 2 3 ... 10
 1 
 on: December 23, 2017, 07:22:29 pm 
Started by DrEthan - Last post by DrEthan
Hello everyone, happy holidays! I just updated my game on GameJolt and I decided to post a summary here! So here is a list of changes (this is usually called a change list)

 - Added attack animation for Enu Knight casting magic.
 - Redid the inventory menu so that it is now a scroll rect and you can see the stats of the items.
 - Added death animations for the Goblin and the Brick Man.
 - Removed the black outline for the villager eyes and nose.
 - Made the villager’s pupils be in the center of the eye instead of them being cross-eyed.
 - Implemented walls, art on the walls, windows on the walls, door, and a countertop.

Read the whole change list here https://gamejolt.com/games/KingsofEmber/201483/devlog


Have a good time with your family and friends, and if you have comments or suggestions please post them down below. Bye!
- DrEthan

 2 
 on: December 22, 2017, 08:16:23 pm 
Started by Chaoswizard98 - Last post by Chaoswizard98
Merry Christmas everyone!
I added a nightmare challenge battle to the game which puts you up against all 66 enemies from chapter 1 all in a single battle royale. You can play this battle by setting 'Challenge Mode' to true in the options menu before starting a new game.

Best of luck! (You're going to need it)

(Version 1.6.2)
https://drive.google.com/file/d/1gJQsh2xI_R8HwE_QMU-tunq1SyP4e76H/view?usp=sharing

 3 
 on: December 17, 2017, 01:54:56 am 
Started by Chaoswizard98 - Last post by Ty
Wow, thanks for the detailed answer! There's a lot of things there I hadn't considered before, so it's given me a lot to think about.

 4 
 on: December 15, 2017, 04:41:47 pm 
Started by Chaoswizard98 - Last post by Chaoswizard98
AI works as follows:

First we have a switch for battle state which is updated based on the location of the player. If the player is near the start of the map, battle state is 1, and as they progress further, it is updated to a higher number. This is useful as it allows you to change a unit's AI based on player location. In the ship battle for example, some of their AI is set to move to a specific location until the player gets close enough to that area. Once the region updater gets triggered, so does their AI.

Within that switch, we have yet another switch which tests for a specific unit (so we can give each their own AI). Each unit has an ID which tells the game what type of monster they are, and a SubID which is used to tell individual groups or instances apart from one another. And finally, we get to the bit about how AI works.

I wrote a bunch of different AI action scripts that tell the character what to do. These are 1 liners that you can call to have a unit perform that action. For example, FindAttackableTarget will cause the enemy to attack a target in range, and AI_DoNothing will end that character's turn. Now, all of these scripts are basically 'attempts' for that character. In other words, if you call 'FindAttackableTarget' you're telling the character 'try to attack a target.' If that fails, it attempts the next action in the list. Here's an example:

AIDone = FindEnemyItemTarget(Character,14,'Normal',25,AIDone);//try to use a medical herb
AIDone = FindEnemyItemTarget(Character,15,'Normal',25,AIDone);//try to use a shining ball
AIDone = FindEnemyMagicTarget(Character,1,1,'Normal',25,AIDone);//try to cast heal level 1
AIDone = FindEnemyMagicTarget(Character,2,1,'Normal',25,AIDone);//try to cast blaze level 1
AIDone = FindAttackableTarget(Character,'Normal',AIDone);//attack target (if there is one in range)
AIDone = AI_MoveTowardsAttackableTarget(Character,10,15,AIDone);//walk closer to target

So this script here would cause the character to first attempt to use a medical herb on itself or an ally. If it cant find a target, or no one is in need of healing, then it tries the next thing on the list. Again, it tries to use a shining ball, if that fails, then it continues down the list and so on until something checks out.

Now to explain the arguments. First off, AIDone is used to quickly exit a script should one succeed. If a script succeeds, AIDone is set to true and at the start of each one of those scripts, if AIDone is true, then it exits as it already found an action to perform. Character is pretty much self explanatory, it's the guy performing the action.

Items:
FindEnemyItemTarget(Character,Item,ThreatScript,MinThreat,AIDone)
Item is the ID of the item that's being used. 14 is the ID for Medical Herb, 15 for Shining Ball, ect
ThreatScript is something that gives the user more control on target selection. Right now the only script I have is the 'Normal' one which basically picks the target that can either be dealt the most damage, or one that can be killed. Should you wish to make more advanced decisions like 'always go for the healer' or 'try to stand on 30%LE tiles' you can create your own threat script.
MinThreat is the minimum amount of threat that is needed for the script to succeed. So in the case of healing for example, you don't want them to cast heal or use a medical herb on someone who is only down 1 HP.

Magic:
FindEnemyMagicTarget(Character,SpellSlot,SpellLevel,ThreatScript,MinThreat,AIDone)
Magic works the same way as items. The only difference here is 'SpellSlot' which determines what spell slot they are casting from, and SpellLevel which determines what level it should be cast at.

Generic:
AI_MoveTowardsAttackableTarget(Character,Speed,MaxSearchDistance,AIDone)
In the case of NOT being able to act on a target, you have 2 other variables to worry about.
Speed is how fast you want that unit to move towards their destination. (in tiles)
MaxSearchDistance is how far from the unit are they going to search for a target. In other words, if this value is set to 15 and all targets are 16 or more spaces away, this script wont run.

===================

And this just scratches the surface with what you can do with AI. AI is one of those things that most people are concerned about when it comes to how it works and how flexible it is since that's the main part of any SF game. As such, I put in as much work as I could towards it to make it as easy to use and as flexible as possible.

So to answer your question, yes. AI units can have different goals.  Wink


 5 
 on: December 15, 2017, 02:54:31 pm 
Started by Chaoswizard98 - Last post by Ty
I like the relative spawning idea! Do the AI units have different goals? I noticed in the demo (the ship battle in particular) that certain enemies head to specific spots, so I'm guessing there's an SF2 style setup. In the past I've had AI just target the most powerful/most likely to die character, but that always seems a bit unnatural.

 6 
 on: December 12, 2017, 05:31:10 pm 
Started by DrEthan - Last post by DrEthan
Thanks for the help, it's always nice to see that people care enough to comment Cheesy. In the next patch I am releasing in a few days I will try your method and see how it goes. (The town will also get prettied up a bit).
- DrEthan

 7 
 on: December 12, 2017, 04:18:49 pm 
Started by Chaoswizard98 - Last post by Chaoswizard98
-Fixed a bug with level schemes. Darn typos lol.

The enemy death trigger is now added. Now if a certain enemy (or group of enemies) is wiped out, that can cause an update in AI for other units, cause currently hidden units to instantly reveal themselves, cause units to change teams or take poison damage, and so much more. Tyadran also requested the ability for relative spawning. In other words, if a slime mob dies, it can be split into several smaller slimes around that area.

 8 
 on: December 11, 2017, 03:21:45 pm 
Started by DrEthan - Last post by Ty
In the demo I managed to kill all of the goblins with a little practice, but the brick golem seems to have all the luck and thoroughly beats me every time.

Battles definitely have a shining feel to them, and the little bit of town exploration works well. Looking forward to seeing more of this!

 9 
 on: December 11, 2017, 03:16:43 pm 
Started by DrEthan - Last post by Ty
One method I've used with random numbers is to add two together instead of using a single larger value. It reduces the number of times extreme values crop up, so can help prevent attacks always missing.

e.g.

Rand(0,6) gives a random value between 0 and 6 with equal distribution.

Rand(0, 3) + Rand(0, 3) also gives a random value between 0 and 6, but it's more likely to give numbers in the middle range (2, 3 and 4).

 10 
 on: December 07, 2017, 11:51:01 pm 
Started by DrEthan - Last post by DrEthan
The randomness of damage and misses are a bit TOO random.
P.S. Game needs some music!   Wink
Hello Chaoswizard98,
First off, thanks for playing my game (Yours is pretty cool btw) and leaving feedback Cheesy. For the first part of what you said about the randomness, I have realized it and I am thinking about how to rectify how damage is done. My first idea is to make it so that there is only a one or two damage difference between the base damage of a weapon and make all the rest of the damage be modified by terrain, skills, the position of other player units, etc so there is absolutely no rng. My second idea is to keep the random system that exists right now but also add weapons that have little to no rng to them, so you can either choose between a highly random damage weapon that can hit harder than other weapons or a no to little rng weapon where it may not hit as hard but you can count on it to do about the same damage every time. my last idea is to make a mix of the two.

As for the music, I am definitely not good at making music and I am planning on making this game purchasable in the future so I do not want to use music that is just lying around on the internet, so I plan to hire a music and sound designer near the halfway mark of the development of my game so that I can get music made and so I know what kind of music I want for the game.

P.S. The magic I just added to my game helps you kill the brick golem easier Smiley.
Once again thank you for the feedback!
- DrEthan

Pages: [1] 2 3 ... 10
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines