• Welcome to Final Fantasy Hacktics. Please login or sign up.
 
May 22, 2024, 07:14:20 am

News:

Please use .png instead of .bmp when uploading unfinished sprites to the forum!


Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - lirmont

61
Help! / Re: Help! Trying to extract Chocobo.
November 01, 2012, 10:05:15 am
I suggest you read the very first post in the thread you linked. It says everything you would need to know to get a single composite frame out of the program.
62
Tethical is an engine. This is about a game. You can do 90% of the work (i.e. content; scripts, maps, sprites, battle mechanics, GUI planning) without actually putting it into practice. That last 10% could be handled by Tethical's engine (assuming it gets finished), but it will not ever be responsible for that other 90% of making a game.
63
Short answer, there is a reason I do not post Tethical's stuff outside of Tethical's sub-forum.

If you don't benefit from it, don't use it. I've said several times in Sprite Animator's one and only thread that I will not be doing the work required to make it helpful for FFT modders only. It's not meant to just be useful for Tethical, either. It's meant to be a general purpose sprite animation tool which is easy to write an implementation for in real-world situations. What's your real-world situation? You have a game (FFT) that has an effects implementation (TIM binaries). You could write a program that converts the human-readable, easy to understand XML files my program creates and generate binary files out of them. Because my program is general purpose and modding FFT is obviously a very specific purpose, you would have to do that work if you want that feature, and it would probably not take that long if the binary format for FFT's TIM binaries is known. If you wrote that tool, though, you'd have an effective spell effects/item effects design program without having to lift a finger. That will probably never happen though, because it's expected to have things handed out without work.

That said, there are a lot of things that have been handed out to you, since the formats for fft-type1, fft-type2, fft-cyoko, fft-arute, and fft-kanzen are all directly pulled out of Shishi's code. The program automatically reloads your image (by default) when it changes to help you see changes in animations; if you saved it in Graphics Gale with it open in Sprite Animator, you would not need to reload the file in Sprite Animator. The program can overlay your sprite sheet on top of a reference image so that you can see what things are named (I only used numbers for mine, but you could use names). You can also change how fast the stuff animates. Most of all, you can export it quickly to a GIF format that is easy to show off to others. Instead of having to say, "Here's my sprite sheet," without a lot of work (because it's work to create a GIF out of a sprite sheet), you can say, "Here's my character," without a lot of work (because the work to create a GIF out of a sprite sheet is done for you). And you can have GIF's of any arbitrary set of animation frames you want, because, once again, my program is general purpose.

All of this stuff is posted already in Tethical's forum here: http://ffhacktics.com/smf/index.php?topic=7409.0
64
The Lounge / Re: E3 Stuff.
June 07, 2012, 10:12:01 pm
Unfortunately, I think this will just be another instance of what they demonstrated years ago with their FF7 tech demo: whoever is in charge of the tech demos is clearly not in charge of and has no influence over Square-Enix's games. Otherwise, we'd get something truly engrossing and dynamic in the franchise if they even got a little bit inspired by all the motion/fluidity/interest the demos seem to consistently have. Here's to five more games having summons turn into cars and motorcycles in place of anything intriguing.
65
New green comments/syntax highlighting strategy:


  • Download ScintillaNET (a zip file): http://scintillanet.codeplex.com/

  • Extract the zip file to someplace temporary.

  • Inside VisualStudio, add the SciLexer.dll as a regular file to the project, set it to "Copy if Newer" in the properties so that it shows up in the same directory as the .EXE of your program when your project is built by VisualStudio.

  • Now, reference the ScintillaNet.dll from the temporary directory.

  • If all goes well, you should now have access to a Scintilla form item in your VisualStudio Toolbox on the Windows Form editor (Designer) view (NOTE: if you haven't set up VisualStudio to show EVERY form item in the toolbox, you will have to manually make it show up by right-clicking and choosing "Choose Items..." in the toolbox).

  • For more information about installation, check here: http://scintillanet.codeplex.com/wikipage?title=Installation&referringTitle=Documentation

  • For information about usage, check here ("Examples" heading): http://scintillanet.codeplex.com/documentation#Examples

66
Spam / Re: FFT sexual puns
January 27, 2012, 04:34:27 pm
Afternoon Delita


(pronounce his name wrong)
67
Help! / Re: Art Related Help!
January 23, 2012, 08:30:42 pm
You have to load the model into a 3d modeling program (whichever one doesn't matter). Then, add that texture to the model, setting it to map to UV coordinates. The UV coordinates are imported with the model; the texture isn't, because I didn't spend enough time to make it do that.

Once you have it loaded, look at the UV layout to find the parts that are used, but know that the remaining parts may be used in weather. Note the purple areas on the right side of the screen:



Additionally, powerful 3d modeling programs offer you an option to bake your texture into a new UV map. With blender, that would result in a smaller image with just the parts of that image that are used by that model.
68
Help! / Re: Art Related Help!
January 18, 2012, 04:05:18 am
This is how you run it from the command-line:


The word "python" in this case stands for "python.exe". If it isn't in your Windows path envrionment variable (i.e. if "C:\Python-2.7.2" isn't part of your PATH environment variable), then you'll need to type out the whole path or run it from that directory (that is copy map2gl and its fft folder into C:\Python-2.7.2 to run it if you don't want to set up the environment variable).



You can't run it from the shell easily like that (the picture you posted), since you'd have to do something extra to pass arguments (the filename) in. Just running the program from there is this command: execfile("map2gl.py")

"fft" is part of gomtuu's "map2gl" program.
69
Help! / Re: Art Related Help!
January 18, 2012, 12:19:45 am
Fortunately, it uses its own code to load the map files. Inasmuch, gomtuu's program loads all maps on a valid PSX CD. I can't help you address the errors unless you post them.

Otherwise, it may have something to do with being on a 64-bit OS. I don't know which OS you're on, but most windows operating systems have a compatibility mode. Python files aren't executable, but .BAT files are. .BAT files are just text files with the ".bat" extension. Yours would look like "start.bat": "python map2gl.py" or "c:\Python-2.7.2\python.exe map2gl.py" in the map2gl folder. Now, right-click that file and go to "Properties". There should be a compatibility tab. Pick XP or 2000. Perhaps this will fix whatever issue you are having. Double-click the start.bat file to run the program in the compatibility mode you selected.
70
Help! / Re: Art Related Help!
January 17, 2012, 01:54:08 am
You're on a 64-bit OS, huh? Did you install it as 64-bit? Uninstall the 64-bit edition. Install it as 32-bit. Otherwise, your option is this: http://selfsolved.com/problems/setuptools-06c11-fails-to-instal/s/63

I've put all the installers you need to run that software here: download.

After you've run all those installers, you're almost ready. Do you have a copy of FFT's original CD? Put that in your CD drive. Do you only have an ISO? Mount it. Double-click the map2gl program. It will ask you to locate a .GNS file. These are the files FFT has its maps in. They are located on the game's CD.

If you wind up not wanting to bother with all that, FFT's maps usually have a single mesh for the map set to scale (0.01, 0.01, 0.01). The first square starts its lower-left vertex at (0,0,0). Squares go north and east from there at 28 units for width and length. Z-heights start at 0 going up in increments of 24 units. Half-steps are 12 units. All squares have the geometry of a square (in two conjoined triangles). Where you might be tempted to join like-area into simpler geometry, normal FFT maps don't; they still have geometry for each square. Added geometry (rocks, columns) are typical low-poly model approaches using triangle fans. A single large image is UV mapped as the map's texture. The original maps include baked lighting and weather effects all in that one file (meaning, one section is for sunny, one for rainy, etc).
71
Help! / Re: Art Related Help!
January 16, 2012, 10:16:45 pm
Stuff you need to use this:
72
The Lounge / Re: Poll: Strictly support, no Offense
January 13, 2012, 11:31:16 pm
Attacking such a character in an unhealed state (re: after transfering one or more wounds but prior to self-healing) could result in the attacking player needing to save against an automatic wound transfer to them. To prevent abuse (intentionally injuring yourself and then not healing yourself), there could be a penalty for not finishing the ritual. If the per-wound damage is tracked, that could even make way for transferring specific wounds (say, in the order of most damaging to least damaging). That means that other players would be aware mostly of how dangerous it would be to attack such a character. The sense of this is that, if the character has just transferred a large wound, the character is very dangerous to attack. If the character has only small wounds, it may not be very dangerous to attack this player. If the character is in a healed state, it may be something like a 50% chance that whatever damage they do to the character is transferred back to them immediately afterward (returning the attacked character to the healed state).
73
Non-FFT Modding / Re: [Fangame] Megaman: Power Up!!
January 06, 2012, 08:23:31 pm
I like the super-deformed idea. You'd get to be a miniature version of your enemies. Another option would be to only alter the buster weapon, making it unwieldly-looking to show off maybe that you can only use it once or twice at a time (or that it's otherwise slower than normal attacks) and that that's all Copy Man was able to copy.
74
You'll have to fine-tune the location it looks at for each control you use it on. I didn't test the control nested inside of anything or even away from the upper-left corner of the form (or with padding or with margins). Look that function up on MSDN, figure out what's different about your program, and go from there (that's where I'd start).
75
Non-FFT Modding / Re: [Fangame] Pony RPG
December 27, 2011, 03:05:07 am
Using a keyboard wasn't bad to me. I did not understand immediately that I needed to press the same attack button twice for spells (as opposed to attack + confirm), but using a gamepad would not have made a difference there. It seemed pretty solid, and was surprisingly fast-paced in battle, but, for all the stray ponies youtube videos I've watched because of this forum (youtube suggests them to me now), I definitely expected loads of random lines from them during battle.
76
Well, if it's highlighting something it shouldn't, that means the offset is wrong (which means what I provided you was wrong). Here's a more involved solution that goes line-by-line through what's displayed to the user, checking against a string array to see if it needs to format the line or not after locking the control. The first function is an imported one for locking/unlocking the control, the second one is the highlighter, and the third one invokes the highlighter when you scroll the window. The functionality of the third one could have been better linked to the VScroll event, but I didn't notice it until after I had written it.

   
    Private Declare Auto Function SendMessage Lib "user32.dll" ( _
        ByVal hWnd As IntPtr, _
        ByVal wMsg As Int32, _
        ByVal wParam As IntPtr, _
        ByVal lParam As IntPtr _
    ) As IntPtr

    Private Const WM_SETREDRAW As Int32 = &HB   

    Dim lastUsedStartIndex = 0
    Dim lastUsedEndIndex = 0
    Dim previousText As  System.IO.StringReader = New System.IO.StringReader("")
    Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
        Dim richTextBoxBufferObject As RichTextBox = CType(sender, RichTextBox)' Pass the control by reference (for use in copying

        Dim previousOffset = richTextBoxBufferObject.SelectionStart ' Get current offset for use with reseting text at very end.
        Dim displayedStartIndex = richTextBoxBufferObject.GetCharIndexFromPosition(New Point(richTextBoxBufferObject.Location.X, richTextBoxBufferObject.Location.Y+1)) ' Get character index at location in form.
        Dim displayedEndIndex = richTextBoxBufferObject.GetCharIndexFromPosition(New Point(richTextBoxBufferObject.DisplayRectangle.Right, richTextBoxBufferObject.DisplayRectangle.Bottom-1)) ' Get character index at bottom right of RichTextBox.
        Dim lineReader As System.IO.StringReader = New System.IO.StringReader(richTextBoxBufferObject.Text) ' Prepare string reader for all text in RichTextBox
        Dim buffer(displayedStartIndex) As Char ' Prepare dummy object for use in following two methods.
        lineReader.ReadBlock(buffer, 0, displayedStartIndex) ' Skip forward to first displayed text.
        previousText.ReadBlock(buffer, 0, displayedStartIndex) ' Skip forward to first dispalyed text (in the previous buffer).

        ' Lock control by not sending it any events.
        With Me.RichTextBox1
        SendMessage( _
            .Handle, WM_SETREDRAW, New IntPtr(CInt(False)), IntPtr.Zero _
        )
            ' Do highlighting.
            Dim runningLength = displayedStartIndex
            Dim line As String = ""
            Dim previousLine As String = ""
            Dim lineCount = 0
            Do While (True)
                line = lineReader.ReadLine()
                previousLine = previousText.ReadLine()
                lineCount += 1
                If (line Is Nothing) Then
                    Exit Do
                End If
                ' If this line isn't the same as what we had stored before, format it.
                ' If this line starts earlier than the previously used start index, format it.
                ' If this line starts after the previously used end index, format it.
                If line <> previousLine OrElse runningLength < lastUsedStartIndex OrElse runningLength > lastUsedEndIndex
                    ' Otherwise, clear line to black.
                    Dim currentOffset = runningLength
                    richTextBoxBufferObject.Select(runningLength, line.Length)
                    richTextBoxBufferObject.SelectionColor = Color.Black

                    ' Update line to green.
                    If line.IndexOf("//") <> -1 Then
                        Dim offsetOfComment = richTextBoxBufferObject.Find(str:="//", start:=runningLength, [end]:=runningLength + line.Length, options:=RichTextBoxFinds.None)
                        If offsetOfComment > -1 Then
                            currentOffset = runningLength
                            richTextBoxBufferObject.Select(offsetOfComment, (runningLength + line.Length - offsetOfComment))
                            richTextBoxBufferObject.SelectionColor = Color.Green                   
                        End If
                    End If
                End If
                ' Increase running length.
                runningLength += line.Length + 1
                If runningLength >= displayedEndIndex
                    Exit Do
                End If
            Loop
            lastUsedStartIndex = displayedStartIndex
            lastUsedEndIndex = displayedEndIndex
            previousText = New System.IO.StringReader(RichTextBox1.Text)
            RichTextBox1.Select(previousOffset, 0)
        ' Unlock control by sending it events again.
        SendMessage( _
            .Handle, WM_SETREDRAW, New IntPtr(CInt(True)), IntPtr.Zero _
        )
        .Refresh()
        End With       
    End Sub
   
    Private Sub RichTextBox1_KeyUp( ByVal sender As System.Object,  ByVal e As System.Windows.Forms.KeyEventArgs) Handles  RichTextBox1.KeyUp
        If e.KeyCode = Keys.Down OrElse
           e.KeyCode = Keys.Up OrElse
           (e.KeyCode = Keys.Home Or Keys.ControlKey) OrElse
           (e.KeyCode = Keys.End Or Keys.ControlKey)  OrElse
           e.KeyCode = Keys.PageDown OrElse
           e.KeyCode = Keys.PageUp
            ' Get existing display for comparsion.
            Dim displayedStartIndex = RichTextBox1.GetCharIndexFromPosition(New Point(RichTextBox1.Location.X, RichTextBox1.Location.Y+1))
            Dim displayedEndIndex = RichTextBox1.GetCharIndexFromPosition(New Point(RichTextBox1.DisplayRectangle.Right, RichTextBox1.DisplayRectangle.Bottom-1))
            ' Compare to state prior to key event.
            If displayedStartIndex <> lastUsedStartIndex OrElse displayedEndIndex <> lastUsedEndIndex
                RichTextBox1_TextChanged(RichTextBox1, Nothing)
            End If
        End If       
    End Sub


As a note, I know how I'd do this in C#. Basically, you subclass a textbox control and take on the responsibility of drawing it yourself. There are Win32 functions that draw borders and text, so it's not as difficult as you might think. Basically, when the control would go to actually draw to the screen, you'd put the coloring in there, instead of after the fact. I tried looking up examples for how to do this in VB.NET, but I couldn't come up with a working example of that for you.
77
This is the TextChanged handler (on a RichTextBox form control):

   Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
       ' Reset color to black.
       Dim previousOffset = RichTextBox1.SelectionStart ' Get current offset for use with reseting text.
       RichTextBox1.SelectAll() ' Push all text into selection.
       RichTextBox1.SelectionColor = Color.Black ' Turn to black.
       RichTextBox1.SelectionStart = previousOffset ' Return selection offset to where it was.
       RichTextBox1.Select(previousOffset, 0) ' Select no characters.

       ' Do highlighting.
       Dim runningLength = 0
       Dim lineCount = 0 ' Account for newlines.
       For Each line In RichTextBox1.Lines
           If line.Contains("//") Then
               Dim offsetOfComment = RichTextBox1.Find(characterSet:="//", start:=runningLength)
               Dim currentOffset = RichTextBox1.SelectionStart
               RichTextBox1.SelectionStart = offsetOfComment
               RichTextBox1.Select(offsetOfComment, runningLength + line.Count - offsetOfComment + lineCount)
               RichTextBox1.SelectionColor = Color.Green
               RichTextBox1.SelectionStart = currentOffset
               RichTextBox1.Select(currentOffset, 0)
           End If
           lineCount = lineCount + 1
           runningLength = runningLength + line.Count
       Next
   End Sub


The other code is for putting text at a specific point in a specific RichTextBox control and returning the cursor to be right before it (replace "TextBox1.Text" with whatever text you want to place at the cursor).

       Dim currentOffset = RichTextBox1.SelectionStart
       RichTextBox1.SelectedText = TextBox1.Text
       RichTextBox1.Focus()
       RichTextBox1.SelectionStart = currentOffset
78
Well, it's a VS2010 project that targets .NET 4.0, so you may need to just lift the code of the TextChanged event handler to use in your own code. I wasn't aware at the time that I'd compiled it with a bunch of unused default references. I don't believe I actually used anything other than: System, System.Core, System.Drawing (the Color class), and System.Windows.Forms. You can remove all the other references, if that's what the error messages are about, but it's probably just simpler to copy and paste the event code (RichTextBox1_TextChanged) out of the source I provided into the project source you have (then link your RichTextBox in the designer to the event) to get it running. Sorry about that.
79
Non-FFT Modding / Re: [Fangame] Megaman: Power Up!!
December 20, 2011, 03:01:07 am
Your graphics drivers are probably set to disable vsync permanently (instead of letting the application decide).
80
Non-FFT Modding / Re: [Fangame] Megaman: Power Up!!
December 14, 2011, 01:50:51 pm
Seems like megaman controls to me, except that the squares in the middle are sticky (which causes unintended side-effects); the border squares on the left don't suffer from this. I was able to stand megaman on the sides of the blocks in both down and up gravity so long as I landed on the side correctly and kept the direction arrow pressed. You can't jump from this position (because you're probably still considered to be falling), but I'm sure I could abuse this to dodge linear attacks.