Pharonix

Shadow Walker
Veteran
Joined
Apr 22, 2012
Messages
764
Reaction score
367
First Language
English
Primarily Uses
RMMV
@Danielcross Fixed the Confusion (for enemies. For confused Allies, it might not work right. But for enemies, he'll attack the enemy until all his buddies are dead (or confusion wears off, but here its a passive state).
https://www.dropbox.com/s/4onvlchc63l2g7n/charmed.mp4?dl=0
spent about 3 hours today fixing this.

Lecode's definition of ally and enemy are solid:

Ally = Player Units
Enemy = Enemies.

The problem with this, is it breaks a ton of real-world logic.

If anyone wants to do this: TAKE A BACKUP YO.
and let me know if something's broken, most likely I forgot about an altered function :(
TBSAiManager is Ally:
basically I rewrote this in a way that...
If you are an actor, and the target is an ally, AND you are not inflicted with confusion lv3 (attack ally), then you are an ally
alternatively, if you are an enemy, and the target is an enemy and you ARE inflicted with LV3 confusion, then you count as ally.
TBSAiManager.prototype.isAlly = function (entity) {
aEntity = BattleManagerTBS.activeEntity();

if (entity.isSummon()) return entity._summonData.caster.battler().isActor() === this._battler.isActor();
return (this._battler.isActor() === entity.battler().isActor() && aEntity.battler().confusionLevel() != 3) || (aEntity.battler().isEnemy() && aEntity.battler().confusionLevel === 3);
}

Next is a reworking of my earlier getEnemiesOf function:
This was reworked to take into consideration an ally or enemy unit that is inflicted with confuions BUT is the last member of their team
alive.
It will then treat the character as if they do not have confusion (they will begin to attack the real enemy now).

Code:
TBSAiManager.prototype.getEnemiesOf = function (battler, needAlive) {
    var enemyEntities = this.BM().enemyEntities();
    var allyEntities = this.BM().enemyEntities();
    var isLastEnemy = battler.isEnemy() && enemyEntities.length == 1;
    var isLastActor = battler.isActor() && allyEntities.length == 1;
    var isLast = isLastEnemy || isLastActor;
   
    var group = battler.isActor() ? this.BM().enemyEntities() : this.BM().allyEntities();
   
    if (battler.hasConfusionStateAttackAlly())
        group = battler.isActor() ? this.BM().allyEntities() : this.BM().enemyEntities();
    if (battler.hasConfusionStateAttackAnyone() && Math.randomInt(2) === 0)
        group = battler.isActor() ? this.BM().allyEntities() : this.BM().enemyEntities();
   
    if(battler.isActor() && isLastActor)
    {
        group = this.BM().enemyEntities();
    }
    if(battler.isEnemy() && isLastEnemy)
    {
        group = this.BM().allyEntities();
    }
       
    for (var i = 0; i<group.length-1; i++)
    {
        if (group[i].battler() == battler)
        {
            group.splice(i, 1);
        }
       
    }
    if (needAlive) {
        return group.filter(function (ent) {
            return !ent.battler().isDead();
        });
    } else {
        return group;
    }
};

I think lastly these ones:

applyParamToScope needs to be edited - mainly regarding exclude_allies and exclude_enemies from scope:
originally these would just pull the respective pools, but we want the true allies/enemies

if (param.exclude_allies) {
var user = param.user;
var party = TBSAiManager.getAlliesOf(user, true);//user.battler().isEnemy() ? this.enemyEntities() : this.allyEntities();
cells = cells.filter(function (cell) {
return !party.some(function (e) {
return cell.isSame(e.getCell());
});
});
}
if (param.exclude_enemies) {
var user = param.user;
var party = TBSAiManager.getEnemiesOf(user, true); //user.battler().isActor() ? this.enemyEntities() : this.allyEntities();
cells = cells.filter(function (cell) {
return !party.some(function (e) {
return cell.isSame(e.getCell());
});
});
}

Under: TBSSequenceManager.prototype.readTargets

var aoeEnemyTargets = aoeTargets.filter(function (entity) {
var aEnt = BattleManagerTBS.activeEntity();
var isLast = BattleManagerTBS.enemyEntities().length>1;
return this.isEnemy(entity.battler()) || (aEnt.battler().isEnemy && aEnt.battler().confusionLevel === 3 && !isLast);
}.bind(this));
 

phazon1111

Warper
Member
Joined
Nov 10, 2018
Messages
2
Reaction score
0
First Language
English
Primarily Uses
RMMV
How can I make an AOE move affect only allies or only enemies?
 

Pharonix

Shadow Walker
Veteran
Joined
Apr 22, 2012
Messages
764
Reaction score
367
First Language
English
Primarily Uses
RMMV
How can I make an AOE move affect only allies or only enemies?

For allies only, use
Aoe_options: exclude_enemies

For enemies only, use
Aoe_options: exclude_user, exclude_allies
 

moldy

Veteran
Veteran
Joined
Nov 15, 2015
Messages
193
Reaction score
29
First Language
English
Primarily Uses
@Danielcross Fixed the Confusion (for enemies. For confused Allies, it might not work right. But for enemies, he'll attack the enemy until all his buddies are dead (or confusion wears off, but here its a passive state).
https://www.dropbox.com/s/4onvlchc63l2g7n/charmed.mp4?dl=0
spent about 3 hours today fixing this.

Lecode's definition of ally and enemy are solid:

Ally = Player Units
Enemy = Enemies.

The problem with this, is it breaks a ton of real-world logic.


[/SPOILER]

So happy to see you guys still collaborating on this awesome plugin. Since we're speaking of ally/enemy status differentiation, do you know if you guys plan to implement a system that Beastmaster had in Final Fantasy Tactics Advance that allowed them to temporarily control the actions of an enemy unit?
 

Pharonix

Shadow Walker
Veteran
Joined
Apr 22, 2012
Messages
764
Reaction score
367
First Language
English
Primarily Uses
RMMV
So happy to see you guys still collaborating on this awesome plugin. Since we're speaking of ally/enemy status differentiation, do you know if you guys plan to implement a system that Beastmaster had in Final Fantasy Tactics Advance that allowed them to temporarily control the actions of an enemy unit?

I can look into that but it might be difficult, since enemies arent actually actors.
 

Pharonix

Shadow Walker
Veteran
Joined
Apr 22, 2012
Messages
764
Reaction score
367
First Language
English
Primarily Uses
RMMV
Hi! so I got my battle running but after I have all the characters place and hit start battle I get this error

https://gyazo.com/ab082601e6438cacad2a139afd4523d4

then this error pops up as well

https://gyazo.com/0c6a763fb735b02e986f04ba235a0500

not sure what it could be but if anyone knows it would be greatly appreciated! :)

If you look at the first line it says unexpected odentifier in letbs config.js.
You either forgot a bracket or comma somewhere.
It gives you the line number.
 

Ygdrassill

Game dev
Veteran
Joined
Nov 17, 2013
Messages
105
Reaction score
11
First Language
English
Primarily Uses
If you look at the first line it says unexpected odentifier in letbs config.js.
You either forgot a bracket or comma somewhere.
It gives you the line number.
oh wow sweet thank you, that is exactly what happened actually! I tend to miss little things like that a lot lol. Thank you :)

I am getting one more error after that one, I ran the battle on a test map with nothing on it and it ran fine, however when I run the battle event in the town map I made I get this error.

https://gyazo.com/d28aa85662d6b319dc969954a6280789
 

Pharonix

Shadow Walker
Veteran
Joined
Apr 22, 2012
Messages
764
Reaction score
367
First Language
English
Primarily Uses
RMMV
oh wow sweet thank you, that is exactly what happened actually! I tend to miss little things like that a lot lol. Thank you :)

I am getting one more error after that one, I ran the battle on a test map with nothing on it and it ran fine, however when I run the battle event in the town map I made I get this error.

https://gyazo.com/d28aa85662d6b319dc969954a6280789

Check your events.
Any event that has its default page requiring a switch wont work.
Make sure page 1 is a blank [action button] page woth no requirements.
The battle manager cant build the event list properly if u dont.
 

Pharonix

Shadow Walker
Veteran
Joined
Apr 22, 2012
Messages
764
Reaction score
367
First Language
English
Primarily Uses
RMMV
@Lecode , @Chaosicaa

Is it possible to create a sequence with if statements?

I'm using the "Last Use Skill" plugin, and I've modified it to work with letbs (entity.lastAction, kinda deal).
I want to make a skill that:

If (last skill = [Skill ID of Thunder])
-> Use sequence [Magaflare]
else
-> Use sequence [firestorm]
 

Tagumon

Veteran
Veteran
Joined
Feb 3, 2016
Messages
75
Reaction score
5
First Language
English
Primarily Uses
RMMV
This has probably been asked already, but is it possible to make attacks that target a single enemy open a battle window/screen like in Fire Emblem/Super Robot Taisen?
 

Doktor_Q

I'm not a real doktor, but I am a real Q
Veteran
Joined
Aug 1, 2016
Messages
881
Reaction score
573
First Language
English
Primarily Uses
RMMV
Since it sounds like the new version is getting closer, I figured I should go ahead and post the errors I've found while building off the demo:
  1. The "Front Damage Rate" parameter doesn't work, because the code expects it to be named "Face Damage Rate" instead. Changing them to the same value makes it work as expected.
  2. The directional damage reduction tags don't seem to work as-listed. When I tried it out, they always returned "0" no matter what values I put in on the weapon, actor, or class. There might be a variable name mismatch involved again- dirDmgReduction vs directionalDmgReduction.
  3. The "pass_on_use" and "pass_on_attack_use" tags were being handled oddly- the passAfterObjUse tag simplified down to something like this:
    Code:
    if (obj.id == this._battler.attackSkillId()) {
        return this._battler.hasLeTBSTag("passOnAtkUse");
    }
    return this._battler.hasLeTBSTag("passOnUse", obj);
  4. Even after applying the simplification and confirming it returned true/false correctly, enemies would consistently ignore the trait.
  5. Occasionally, when deploying a character, it would crash in compareEntitiesOrder because one of the entities would return null for getCell(). It seems to happen if I had cancelled a placement previously, especially if I spent a while going back and forth over which cell I should place them on- maybe an issue with the method of finding an initial cell to place them on?
I imagine some of these are probably already fixed, but wanted to make sure they'd been noticed.
 

Adventurer_inc.

Technically a Programmer
Veteran
Joined
Sep 12, 2015
Messages
99
Reaction score
42
First Language
English
Primarily Uses
RMMV
@Lecode , @Chaosicaa

Is it possible to create a sequence with if statements?

I'm using the "Last Use Skill" plugin, and I've modified it to work with letbs (entity.lastAction, kinda deal).
I want to make a skill that:

If (last skill = [Skill ID of Thunder])
-> Use sequence [Magaflare]
else
-> Use sequence [firestorm]
I have never used the "Last Use Skill" plugin, but is there a particular reason you couldn't just create a sequence that if -> call another sequence?
Code:
"if: $gameParty.Last_Use_Skill(SkillId)",
    "call: Magaflare",
"else",
    "call: firestorm",
"end_if",
 

Pharonix

Shadow Walker
Veteran
Joined
Apr 22, 2012
Messages
764
Reaction score
367
First Language
English
Primarily Uses
RMMV
I have never used the "Last Use Skill" plugin, but is there a particular reason you couldn't just create a sequence that if -> call another sequence?
Code:
"if: $gameParty.Last_Use_Skill(SkillId)",
    "call: Magaflare",
"else",
    "call: firestorm",
"end_if",

I tried that and everything broke.

Ill try again tomorrow i guess
 

Adventurer_inc.

Technically a Programmer
Veteran
Joined
Sep 12, 2015
Messages
99
Reaction score
42
First Language
English
Primarily Uses
RMMV
@Pharonix
I just realized you made lastAction a property of entity. In that case, the correct way to call it could be this, maybe?
Code:
"if: entity('user').lastAction === skillId",
    "call: Magaflare",
"else",
    "call: firestorm",
"end_if",
The sequence thing is very particular.
 

Pharonix

Shadow Walker
Veteran
Joined
Apr 22, 2012
Messages
764
Reaction score
367
First Language
English
Primarily Uses
RMMV
@Pharonix
I just realized you made lastAction a property of entity. In that case, the correct way to call it could be this, maybe?
Code:
"if: entity('user').lastAction === skillId",
    "call: Magaflare",
"else",
    "call: firestorm",
"end_if",
The sequence thing is very particular.
For the life of me, I couldn't figure out WHY it kept evaluating to false.
Turns out, the last use script, runs as soon as you select the skill (not after it finishes the sequence)
so even though the actor DID use that skill last when he selected his new skill, it wouldn't work.

I fixed this by adding a second "layer" so to speak to the last use, whcih allows me to go back 2 skills (which is technically 1)
https://www.dropbox.com/s/r6vw48tswtfspfz/conditional sequences.mp4?dl=0

If he used "Dagger" before, it'll obliterate everything (test skills :) )
otherwise it casts "Dagger" on himself since dagger is set to attack the selected target.

But its all for testing to make sure it would actually work.

Which it does.

Thanks to this, if I ever go back to creating that game for my friends, my one pal wanted to be a gambler, and have his moveset change based on a "roll of a dice"
looks like that's possible now :).
 

Doktor_Q

I'm not a real doktor, but I am a real Q
Veteran
Joined
Aug 1, 2016
Messages
881
Reaction score
573
First Language
English
Primarily Uses
RMMV
This has probably been asked already, but is it possible to make attacks that target a single enemy open a battle window/screen like in Fire Emblem/Super Robot Taisen?
It's not a thing currently, but I think it might be in the todo list?
 

Pharonix

Shadow Walker
Veteran
Joined
Apr 22, 2012
Messages
764
Reaction score
367
First Language
English
Primarily Uses
RMMV
I made my own turn orders (using a supplementary script)
Not sure if anyone remembers that post. That was a lot of work.

But anyway, I tied in the pre-emptive and surprise system from the core.
So after it determines turn order it loads the correct "Advantage", then sets
the advantage to false, to prevent either side from being completely overwealmed because
they were caught off-guard

//Check For Pre-emptive strikes.
if(BattleManager._preemptive)
{
this.determineTurnOrderAllyFirst();
BattleManager._preemptive = false;
}
if(BattleManager._surprise)
{
this.determineTurnOrderEnemyFirst();
BattleManager._surprise = false;
}

Since I have 9 different turn orders, after setting surprise and preemptive to false, it'll just keep using whatever I set in my config.

I think at this point, with allllll the crazy stuff I have added, aside from upgrading to 0.80 I think my battle system is finished.
I have covered a ton of things, from neutral placement cells, to a complex counter system, to the confusion system and ForceAdvantage systems.

For anyone who's curious, here's my 160-line changelog, still being worked out.
Code:
/*
# - 0.77.PHX
#       * ===========
#       * Positioning
#       * ===========
#       * Added support for variable-based actor cells
#       * Added support for switch-based actor cells
#       * Added support for leader-based actor cells (Party Leader auto-positioning
#       * Added support for neutral positioning cells that can be used by enemies or actors
#       * Added custom color for neutral positioning
#        * Added logic to determine of all player entities are placed in the pre-positioning phase.
#        * If this is the case, the battle is immediately started, eliminating the need for the player
#          to "Confirm" they are ready. Eliminates a bug where you could "Cancel" on a pre-placed unit.
#          Causing the game to crash.
#       * ===========
#       * Scope Select
#       * ===========
#       * Added support for Scope_Select if Actor is afflicted with a specific State
#       * Added support for Scope_Select if Enemy Unit is afflicted with a specific State
#       * Added support for Scope_Select if A Team Member is afflicted with a specific State
#       * Added support for Scope_Select if An Enemy Team Member (enemies if player, player if enemies0
#       * is afflicted with a specific State
#       * Added support for Scope_Select if Actor Knows a specific Skill
#       * Added support for Scope_Select if Enemy Knows a specific Skill
#       * ===========
#       * Turn Order
#       * ===========
#        * Added support for "Redrawing" the Turn Order
#        * If enabled, the turn order will be determined at the end of every turn.
#        * This allows for skills that raise a unit's agility to have a better advantage
#          The next turn.
#       
#       * Added support for Initiative Battle System:
#       ** Allows the configuring of
#       *** Bonus Initiative for non-movement / remaining move points
#       *** Non-Action - Not attacking/using skills/items/ect.
#       *** Default Initiative cost - Initiative cost per turn
#       * ===========
#       * Special Turn Order
#       * ===========
#        * [Order Types]
#        * Type 0
#        * Fair Order - Alternates between Ally and Enemy. Ally and Enemy order is
#        * based on agility. [Ally1, Enemy1, Ally2, Enemy2....etc]
#        *
#        * Type 1
#        * Simple Order - Takes all ally/enemy together and sorts indiscriminately based on
#        * agility. Can Cause unfair turn order if either side is faster in general
#        * ex. [Ally1, Ally2, Enemy1, Enemy3, Enemy2, Ally3]
#        *
#        * Type 2 (Also known as Pre-emptive Strike)
#        * Actor First - Sorts Actors and Enemies by Agility order respectively 
#        * (Orders Actor List by AGI. and Enemy List by AGI.
#        * Then Combines the Two Lists. Results in order like the following:
#        * [Ally3, Ally1, Ally2, Enemy1, Enemy3, Enemy2]
#        *
#        * Type 3 (Also known as Surprise Attack)
#        * Enemy First - Sorts Actors and Enemies by Agility order respectively 
#        * (Orders Actor List by AGI. and Enemy List by AGI.
#        * Then Combines the Two Lists. Results in order like the following:
#        * [Enemy1 ,Enemy3, Enemy2,Ally3, Ally1, Ally2]
#        *
#        * Reverse
#        *
#        * Type 4
#        * Fair Order - Alternates between Ally and Enemy. Ally and Enemy order is
#        * based on agility. [Ally1, Enemy1, Ally2, Enemy2....etc] Slowest Acts First
#        *
#        * Type 5
#        * Simple Order - Takes all ally/enemy together and sorts indiscriminately based on
#        * agility. Can Cause unfair turn order if either side is faster in general
#        * ex. [Ally1, Ally2, Enemy1, Enemy3, Enemy2, Ally3] Slowest Acts First
#        *
#        * Type 6
#        * Actor First - Sorts Actors and Enemies by Agility order respectively 
#        * (Orders Actor List by AGI. and Enemy List by AGI.
#        * Then Combines the Two Lists. Results in order like the following:
#        * [Ally3, Ally1, Ally2, Enemy1, Enemy3, Enemy2] Slowest Acts First
#        *
#        * Type 7
#        * Enemy First - Sorts Actors and Enemies by Agility order respectively 
#        * (Orders Actor List by AGI. and Enemy List by AGI.
#        * Then Combines the Two Lists. Results in order like the following:
#        * [Enemy1 ,Enemy3, Enemy2,Ally3, Ally1, Ally2] Slowest Acts First
#        *
#        * Special
#        * Type 8
#        * Initiative Order - Currently uses the Actor's initial move points and agility to determine level of initiative.
#        * the higher the player's initiative, the higher in the order they go.
#        * After a turn ends, bonuses can be set for: 
#        * Non-Action (No attack / item / skill / etc
#        * Remaining Movepoints (ie: used 3 of 5 movepoints - results in 2 bonus initiative)
#        * Pre-Set initiative cost deducted on turn end (default of 10). When an actor or enemy
#        * has 0 or fewer initiative points, they are removed from the turn order, and must wait
#        * until the initiative order is re-structured (all units finished using all initiative)
#       * ===========
#       * Counter System
#       * ===========
#       * Repaired Counter System for 0.77
#       * Added support for Yanfly Counter Control
#       * Added support for Counter Conditions, Counter Distance
#       * Counter is selected by determining "Best Counters"
#
#       * First, the skill's Counter Conditions are checked.
#       ** If no counter condition is set, it is evaluated as true -
#       ** otherwise it evaluates the counter condition. If false, it
#          it does not add the skill to any array, if true, proceed to next step.           
#       * Second, it checks Counter distance (If unavailable, assumes "0") of all Counter Skills
#         for the "countering" entity.
#       * If Counter Distance = Distance between attacker and the entity that counters
#         or the Counter Distance = 0, then that counter skill is added to the "Best" counters
#       * If Counter Distance is greater than or equal to the distance between the two entities,
#         then it is considered a "good" or otherwise "valid" counter.
#        * If the "Best" counters has a length > 0 then it is returned, otherwise, it checks if
#         the "Good" counters array has a length of > 0, if so, that one is returned.
#        * If neither array has elements, it returns an empty array, and the character does NOT counter.
#
#        * After the Counter SKills array is determined, it randomly selects one.
#       * This counter is then checked to see what "Type" of counter it is.
#       * Using an array of "Defensive Counters" (Will later be updated to use a notetag) it checks if the skill
#         selected is a Defensive Counter and returns such, otherwise it returns "Offensive".
#       ** CheckCounter is also used by getBestCounter(), which uses it to determine if the counter is Invalid
#       ** Here, it is simply used to determine if it is defensive or offensive.
#
#        * If the skill is defensive, the cursor is set to the countering entity, and the action is performed.
#        ** A popup will display with "Defensive Counter" and "Skill Name"
#        * If the skill is offensive, the cursor is set to the entity to BE countered, and the action is performed.
#        ** A popup will display with "Offensive Counter" and "Skill Name"
#       *** Will add support later for other counter types such as:
#        **** Support Counter
#        **** Magic Counter
#        **** Physical Counter
#        **** Elemental Counters
#        ***** Fire,Ice,Thunder,Water,Wind,Earth,Light,Dark
#
#        ****TO-DO****
#        * Check if counters affect allies.
#        * Add notetag to prevent ally counters
#        * Add notetag to allow ally counters
#        * Add notetag for specialiszed counters
#        ** Nearest Enemy
#        ** Nearest Ally
#        ** ETC
# - 0.77.PHX.02
#        * Added support for "exclude_free_cells" in the AOE. previously
#        * this boolean did exist, but there was never a function to filter
#        * out cells without an entity in it. This also greatly reduces lag
#        * when selecting skills with 20+ range.
#        * 
#        * Fixed "Charm" System.
#        * Lecode used isAlly and isEnemy to determine which side the enemy/
#        * target was on, rather than using isAlly to determine if the target
#        * was an actual Ally of the user.
#        * 
#        * This resulted in crazy situations where the ally and enemy arrays
#        * for a confused user were identical, resulting in the AI getting confused.
#        * Any confused AI will continue to beat up their own allies, until the
#        * confusion wears off, the user dies, or all their allies are dead.
#        * 
#        * In these cases, the user will then proceed to attack the actual enemy.
#        * I believe that if the confused enemy has healing skills, he will heal
#        * and/or resurrect their teammates. This can cause even more hilarious
#        * situations where an enemy kills/revives/kills again their teammates.
#        * 
*/
 

Pharonix

Shadow Walker
Veteran
Joined
Apr 22, 2012
Messages
764
Reaction score
367
First Language
English
Primarily Uses
RMMV
So happy to see you guys still collaborating on this awesome plugin. Since we're speaking of ally/enemy status differentiation, do you know if you guys plan to implement a system that Beastmaster had in Final Fantasy Tactics Advance that allowed them to temporarily control the actions of an enemy unit?

Hey buddy.
Would you happen to be meaning something like this:
https://www.dropbox.com/s/flo7fdinkgpvum8/brainwashing.mp4?dl=0

The problem I encountered was the following
using common event AND inflicting state
common event always ran first, so it never worked.

What needed to be done? Simple.
Use a random integer to determine if the dude got "Brainwashed"

The BIGGEST issue is only "Actors" are controllable through the current system.
So what you would need to do is actually create an Actor counterpart for every enemy that can be "brainwashed"

I then used a notetag for <CloneID: x> which tells my brainwash function which counterpart to use

so if enemy 100 needs to be actor 47

enemy:
<CloneID: 47>

actor 47
<CloneID: 100>


UPDATE: One downside I found right now is the difference in stats, but as I complete this functionality, I plan on it actually working appropriately.
 
Last edited:

Adventurer_inc.

Technically a Programmer
Veteran
Joined
Sep 12, 2015
Messages
99
Reaction score
42
First Language
English
Primarily Uses
RMMV
\Shameless plug-ish
A IGMC 2018 entry that uses LeCode's TBS (v0.77) that shows a potential of this engine when fused with Yanfly's YEP.
https://itch.io/jam/igmc2018/rate/334451 (rate if you can)
Hints: More in-game or on the game itch.io game page
  • Both moving and actions cost AP, but you can keep moving and acting as long as you have AP. Enemies will do the same.
  • Armor blocks any physical damage. Any physical damage less than 10% of armor does 0.
  • Magic (Fields) apply direct damage to hp, if they apply damage, and sits on the ground for 3 turns.
You can support this by supporting LeCode's TBS.
 
Last edited:

Latest Threads

Latest Posts

Latest Profile Posts

I hate doing voice over videos but people said they like hearing about the details.
Modern Town Overworld, World of Solaria Dungeon, 80's Retro-Futuristic Font | RPG Maker News #73

I been slowing down and not focusing on project currently.
I had this idea for VTubers vs MOTHER and its a bunch of Vtubers finding eight melodies to fight a psychic alien and a fat kid. IDK, kinda find it hard to use RPG Maker for more than 15 minutes
Working on some wizard/magic bases:
TestChara-10-hover.gif

I mean, technically it's a flying base but I haven't made any wings yet, so magic hovering is it for now.

Forum statistics

Threads
112,297
Messages
1,067,160
Members
145,926
Latest member
kingxjosh01
Top