Game Development Community

Final Fantasy-style "Battle Stage" Thoughts? Examples?

by Rick Austinson · in Torque 3D Professional · 01/30/2014 (11:55 am) · 12 replies

I'm starting work on an RPG, and the more we discuss it, the more my team and I like the idea of "Battle stages" like you'd see a lot in older role playing games. The Final Fantasy series used it on 7, 8, and 9, at least, but for those unfamiliar, basically when a battle starts instead of happening in real time, the character or characters are warped to a sort of stage that resembles the area, and then have turn-based combat.

While it uncomplicates a lot of things, it does complicate a number of others. Mostly, though, I am not even sure where to begin. I know its certainly possible with torque; has anyone ever done anything like this? Are there any examples out there I can look at?

#1
01/30/2014 (12:15 pm)
This really shouldn't be that hard to accomplish. Create yourself some kind of "arena" model, teleport it way outside the mission area, and then use some simple positional transformation math to place the individual characters where they need to be inside the arena.

For the purposes of simplicity, keep everything in a nice SimSet/SinGroup and delete everything when done, teleporting your players back into the world. I did something similar a long time ago for my party-dungeon system when I was playing around with TGEA.
#2
01/30/2014 (12:18 pm)
The simplest way would probably be to place your battle stage somewhere in the middle of nowhere in the level. When you encounter a battle, simply move the camera of your client over to there and populate it with your characters, setup up your gui, etc.

e.g. assuming you have a camera bookmark called BattleZoneCamera

function startBattle()
{
   spawnBattleActors();
   setupBattleGui();
   LocalClientConnection.camera.setTransform(BattleZoneCamera.getTransform());
}

Alternatively you could just load another level but depending on how fast you want things to happen, it might not be a fast enough solution.
#3
01/30/2014 (1:56 pm)
I was originally thinking I'd have to load a level but that just takes too long. Sticking the arena elsewhere would work great.

Tell me: is there any reason I can't just jam the arenas down under the terrian? Otherwise it wouldn't be a challenge to stick them off on a corner of the map or something.
#4
01/30/2014 (2:04 pm)
@Rick

Sticking it under the terrain is exactly what I had in mind. Should be no problem.
#5
01/30/2014 (2:10 pm)
@Rick & James:

Just make sure it's very far down, like -1000 if possible, otherwise your players will ask you wtf is that weird looking object in the sky not realizing it's the terrain, lol.
#6
01/30/2014 (3:06 pm)
If it's single-player you can put all of your non-arena terrain etc in a group, then set that group to hidden during the arena portion - if the arenas aren't enclosed or something.
#7
01/30/2014 (4:10 pm)
I was thinking about this a short while ago (more based on pokemon) and worked out the best way for it to work was using a trigger in the grass areas and then have it count and randomly pick a number from 1 to 9 then if the number matched it played a sound and teleported me to the new arena.

I didn't think much past that but i'd say once the enemy has all been killed you just have it send the character back to the same position (Maybe save the position of the player just before teleport then teleport back to that position once the battle is over)

That was how I envisioned for a somewhat classic rpg with random battles
#8
01/30/2014 (7:03 pm)
Well, what my team wants, and what I'm warming to, is to have the enemies actually out walking around in the world(so you can avoid them if you want - its not totally random)and then as soon as you touch one of them you get teleported to the arena and have a turn-based combat session.

The open-world portions of the game use a dynbamic free camera from the 3DAAK kit(as well as some platformer elements). The combat arena would use a completely fixed camera and the player character wouldn't actually move around freely, just execute attacks/spells/what have you. Its certainly an interesting combination.

All right, I am pretty much a novice to torque scripting at this point(and not much better at straight C++ coding). Tell me, do I do all this in script or will I break into the source code?

If I'm doing it in script, where can I go to start learning and whats the first step?
#9
01/30/2014 (7:19 pm)
All of what you want can be accomplished in TorqueScript alone.
#10
01/30/2014 (7:27 pm)
Thanks, that's very good to know! Not that I don't like messing about in source code as much as the next guy, but torque action script is a relaly good language - and it saves the trouble of having to compile.

http://xkcd.com/303/
#11
01/31/2014 (6:52 am)
It sounds like all you need is a on collision for the enemies that literally saves the current position the and the ID of the enemy you touched then teleport to the arena then once you have killed the enemy you teleport back to the save position and then delete the enemy based on their ID.

Or you could literally have both you and the enemy transported and have a realtime 1st person fight in the arena and then when enemy is dead it teleports you back to the same position.

#12
01/31/2014 (8:19 am)
Either that or just triggers. Or it could be a random timed event. Or a result of a conversation. Speaking of which, I should really finish my conversation system....