• Welcome to Final Fantasy Hacktics. Please login or sign up.
 
March 28, 2024, 01:10:35 pm

News:

Don't be hasty to start your own mod; all our FFT modding projects are greatly understaffed! Find out how you can help in the Recruitment section or our Discord!


I could use some help over here

Started by Adhelbert, November 09, 2018, 09:41:08 am

Adhelbert

Heyyyy everyone. :D :D

Sooooooooo, i ran into couple of problems yesterday at night while i was working on an event, this is the event i have been working on:

//Text(x00000A94)
//Remove the previous line if you wish text to compile directly after instructions.

LoadEVTCHR(x00,x0C,x00)
WaitForInstruction(x34,x00)
SaveEVTCHR(x00)
LoadEVTCHR(x01,x0D,x00)
WaitForInstruction(x34,x00)
SaveEVTCHR(x01)
Erase(x01,x00)
Erase(x04,x00)
Erase(x07,x00)
Erase(x35,x00)
UnitAnim(x80,x00,x0002,x00)
WaitForInstruction(x0B,x00)
UnitAnim(x81,x00,x0002,x00)
WaitForInstruction(x0B,x00)
UnitAnim(x82,x00,x0002,x00)
WaitForInstruction(x0B,x00)
UnitAnim(x14,x00,x001A,x00)
WaitForInstruction(x0B,x00)
Wait(00030)
Camera(+00672,+00000,+00240,+00302,+00512,+00000,+04096,+00001)
WaitForInstruction(x04,x00)
Reveal(060)
Wait(00090)
Sound(x004C)
Wait(00015)
RotateUnit(x02,x01,x03,x01,x02,x04)
WaitRotateAll()
Wait(00015)
AddUnitStart()
AddUnit(x04,x00,x01)
AddUnit(x07,x00,x01)
AddUnit(x01,x00,x01)
AddUnitEnd()
WaitAddUnitEnd()
BlockStart()
WarpUnit(x04,x00,000,003,x00,x03)
Draw(x04,x00)
WalkTo(x04,x00,002,001,x00,x00,+020,x01)
WalkToAnim(x04,x00,x0002)
WaitWalk(x04,x00)
RotateUnit(x04,x00,x0B,x02,x01,x00)
WaitRotateUnit(x04,x00)
UnitAnim(x01,x00,x0002,x00)
WaitForInstruction(x0B,x00)
BlockEnd()
BlockStart()
Wait(00030)
WarpUnit(x07,x00,000,003,x00,x03)
Draw(x07,x00)
WalkTo(x07,x00,002,003,x00,x00,+024,x01)
WalkToAnim(x07,x00,x0002)
WaitWalk(x07,x00)
RotateUnit(x07,x00,x0B,x00,x01,x00)
WaitRotateUnit(x07,x00)
UnitAnim(x01,x00,x0002,x00)
WaitForInstruction(x0B,x00)
BlockEnd()
Wait(00060)
WarpUnit(x01,x00,000,003,x00,x03)
Draw(x01,x00)
WalkTo(x01,x00,001,002,x00,x00,+016,x01)
WaitWalk(x01,x00)
WalkTo(x01,x00,002,002,x00,x00,+016,x01)
WalkToAnim(x01,x00,x0002)
WaitWalk(x01,x00)
RotateUnit(x01,x00,x0B,x00,x01,x00)
WaitRotateUnit(x01,x00)
UnitAnim(x01,x00,x0002,x00)
WaitForInstruction(x0B,x00)
Wait(00045)
DisplayMessage(x10,x71,x0001,x07,x00,x00,+00000,+00000,+00000,x01)
WaitForInstruction(x01,x00)
Wait(00020)
UnitAnim(x02,x01,x0021,x00)
WaitForInstruction(x0B,x00)
Wait(00030)
DisplayMessage(x10,x72,x0002,x80,x00,x00,+00000,+00000,+00000,x02)
WaitForInstruction(x01,x00)
Wait(00005)
UnitAnim(x01,x01,x0021,x00)
WaitForInstruction(x0B,x00)
Wait(00060)
DisplayMessage(x10,x71,x0003,x01,x00,x00,+00000,+00000,+00000,x01)
WaitForInstruction(x01,x00)
Wait(00010)
Camera(+00280,-00108,+00168,+00302,+00512,+00000,+04096,+00080)
WaitForInstruction(x04,x00)
BlockStart()
AddUnit(x35,x00,x01)
WaitAddUnit()
WarpUnit(x35,x00,000,003,x00,x03)
Draw(x35,x00)
WalkTo(x35,x00,000,000,x00,x00,+028,x01)
WaitWalk(x35,x00)
WalkTo(x35,x00,004,000,x00,x00,+028,x01)
WaitWalk(x35,x00)
UnitAnim(x35,x00,x0021,x00)
WaitForInstruction(x0B,x00)
Wait(00010)
BlockEnd()
Wait(00060)
UnitAnim(x35,x00,x004C,x00)
Effect(x001C,x00,006,002,x00)
EffectStart()
UnitAnim(x02,x01,x0024,x00)
EffectEnd()

Wait(00045)
UnitAnim(x35,x00,x003D,x00)
WaitForInstruction(x0B,x00)
DisplayMessage(x10,x71,x0004,x35,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)
Wait(00015)
UnitAnim(x01,x01,x0021,x00)
WaitForInstruction(x0B,x00)
Wait(00030)
DisplayMessage(x10,x71,x0005,x01,x00,x00,+00000,+00000,+00000,x02)
WaitForInstruction(x01,x00)
Wait(00020)
BlockStart()
WalkTo(x07,x00,005,003,x00,x00,+024,x01)
WaitWalk(x07,x00)
Wait(00002)
UnitAnim(x07,x00,x0041,x00)
WaitForInstruction(x0B,x00)
Wait(00002)
UnitAnim(x82,x00,x0019,x00)
WaitForInstruction(x0B,x00)
Wait(00015)
UnitAnim(x82,x00,x0034,x00)
WaitForInstruction(x0B,x00)
BlockEnd()
Wait(00005)
BlockStart()
WalkTo(x01,x00,005,002,x00,x00,+024,x01)
WaitWalk(x01,x00)
Wait(00002)
UnitAnim(x01,x00,x0041,x00)
WaitForInstruction(x0B,x00)
Wait(00002)
UnitAnim(x80,x00,x0019,x00)
WaitForInstruction(x0B,x00)
Wait(00015)
UnitAnim(x80,x00,x0034,x00)
WaitForInstruction(x0B,x00)
BlockEnd()
Wait(00005)
BlockStart()
WalkTo(x04,x00,005,001,x00,x00,+024,x01)
WaitWalk(x04,x00)
Wait(00002)
UnitAnim(x04,x00,x0041,x00)
WaitForInstruction(x0B,x00)
Wait(00002)
UnitAnim(x81,x00,x0019,x00)
WaitForInstruction(x0B,x00)
Wait(00015)
UnitAnim(x81,x00,x0034,x00)
WaitForInstruction(x0B,x00)
BlockEnd()
Wait(00030)
DisplayMessage(x10,x71,x0006,x07,x00,x00,+00000,+00000,+00000,x01)
WaitForInstruction(x01,x00)
BlockStart()
WalkTo(x07,x00,004,003,x00,x00,+008,x01)
WaitWalk(x07,x00)
BlockEnd()
BlockStart()
WalkTo(x01,x00,004,002,x00,x00,+004,x01)
WaitWalk(x01,x00)
BlockEnd()
BlockStart()
WalkTo(x04,x00,004,001,x00,x00,+006,x01)
WaitWalk(x04,x00)
BlockEnd()
Wait(00030)
UnitAnim(x07,x00,x002B,x00)
WaitForInstruction(x0B,x00)
Wait(00010)
Effect(x009A,x80,006,002,x00)
EffectStart()
EffectEnd()
Wait(00050)

Erase(x80,x00)
Erase(x81,x00)
Erase(x82,x00)
Wait(00060)
WalkTo(x07,x00,007,002,x00,x00,+020,x01)
WalkToAnim(x07,x00,x0021)
WaitWalk(x07,x00)
Wait(00020)
DisplayMessage(x10,x71,x0007,x07,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)
Wait(00090)
DisplayMessage(x10,x72,x0008,x14,x00,x00,+00000,+00000,+00000,x02)
WaitForInstruction(x01,x00)
Wait(00020)
DisplayMessage(x10,x71,x0009,x07,x00,x00,+00000,+00000,+00000,x02)
WaitForInstruction(x01,x00)
Wait(00030)
Camera(+00672,+00000,+02000,+00302,+04608,+00000,+04096,+00030)
WaitForInstruction(x04,x00)
Wait(00006)
UnitAnim(x04,x00,x0259,x00)
Wait(00006)
Wait(00120)
FadeSound(x00,060)
ColorScreen(x02,000,000,000,255,255,255,+00060)
WaitForInstruction(x0C,x00)
ZERO(x006E)
ADD(x006E,x0007)
ZERO(x006F)
ADD(x006F,x0003)
ZERO(x01C2)
ADD(x01C2,x0001)
ZERO(x0283)
ADD(x0283,x0001)
ZERO(x03F1)
ADD(x03F1,x0002)
{7C}()
EventEnd2()
EventEnd()


I have two questions for now:

1. What's the function of the text highlighted in red?
2. The camera makes unnecessary rotations whenever the two effects were to play, you will find the commands highlighted in green.



All help are appreciated and please, tell me if i missed up some details or something. :mrgreen:
  • Modding version: PSX

Xifanie

1. It's necessary for savestate event editing so the text offset always remains the same (otherwise if you add/remove an instruction, the text will be compiled right after the event, and thus will move). You normally need to make sure you're giving this a high enough number so that you have enough space to add a bunch of instructions, but not too high that it break the event space limit, which is 0x2000. 0x1800 is a good number for this. However you don't need to do any of this if you use the newest Event Instruction Upgrade hack.

2. Use the camera instruction helper to properly center the camera where the effect will play so it doesn't go back and forth when playing an Effect.
http://ffhacktics.com/smf/index.php?topic=10018.0
  • Modding version: PSX
Love what you're seeing? https://supportus.ffhacktics.com/ 💜 it's really appreciated

Anything is possible as long as it is within the hardware's limits. (ie. disc space, RAM, Video RAM, processor, etc.)
<R999> My target market is not FFT mod players
<Raijinili> remember that? it was awful

Adhelbert

Quote from: Xifanie on November 09, 2018, 11:26:30 am
Use the camera instruction helper to properly center the camera where the effect will play so it doesn't go back and forth when playing an Effect.
http://ffhacktics.com/smf/index.php?topic=10018.0


Okay, thanks for recommending to use your tool, it turned out to be useful the most.


I used your camera instruction helper to insert the camera command before the effect commands, the good thing is, unnecessary rotations doesn't happen anymore, now this happens:


I don't know what i missed up to make the effect play in the far western corner and also i don't want for any damage to be displayed on the screen. :cry: :cry: :cry: :cry: :cry:
  • Modding version: PSX

3lric

You can place a ghost unit on that location and call the effect on them instead to not show the damage. As for the effect playing in the wrong spot, either you derped the command somehow, or its just one of those weird effects that doesnt work quite right in events.
  • Modding version: PSX

Adhelbert

Quote from: Elric on November 12, 2018, 08:00:58 am
You can place a ghost unit on that location and call the effect on them instead to not show the damage.


Okay, i will definitely gonna try it out this weekend. Still, i gotta ask, is there a proper way to execute this command, cause as far as now, i haven't seen the game uses this command before.

Quote from: Elric on November 12, 2018, 08:00:58 am
As for the effect playing in the wrong spot, either you derped the command somehow, or its just one of those weird effects that doesnt work quite right in events.


I replaced Ultima effect with flare and it worked just fine. :D :D


Thanks for your time guys. :) :) :)
  • Modding version: PSX

Xifanie

Yeah, Ultima would need 3 parameters:
- Caster coordinates (used for a few 'throw' effects like lifebreak, IIRC)
- Main Effect coordinates
- Hit Effect target ID

As you can't define the main effect coordinates (defaults to X = 0 & Y = 0), or even set multiple targets, this definitely limits the list of effects we can use, unfortunately.

I wonder how hard it would be to make a hack to allow defining those coordinates
  • Modding version: PSX
Love what you're seeing? https://supportus.ffhacktics.com/ 💜 it's really appreciated

Anything is possible as long as it is within the hardware's limits. (ie. disc space, RAM, Video RAM, processor, etc.)
<R999> My target market is not FFT mod players
<Raijinili> remember that? it was awful