• Welcome to Final Fantasy Hacktics. Please login or sign up.
November 28, 2020, 06:57:01 am


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.

Control Panel Development Discussion

Started by lirmont, December 10, 2011, 04:03:58 pm


February 28, 2012, 01:07:13 pm #40 Last Edit: February 28, 2012, 05:19:05 pm by lirmont
Welcome back.

I've almost got a universal targeting function feature finished (in the control panel). The concept is done; I'm just bug testing the interface for it.

Concept-wise, you need to define two piece-wise functions. The first function appears in the control panel as an "Area Function Prototype" (or just "Area Function"). This is a list of squares that substitutes in for the map. This abstraction lets you only send necessary data (via server-to-client packets). The other function you have to define is called a "Target Function" or "Select Function". This picks squares in the "Area Function" and gives you a place to define applicable heights. The square selection is stored in a bit mask/byte list on the target/select function, read from left to right.

So, a 1-byte bitmask on an target/select function might look like "0x1F" in hexadecimal. That becomes "1111 1000". That would read:

  • First square: available.

  • Second square: available.

  • Third square: available.

  • Fourth square: available.

  • Fifth square: available.

  • Sixth square: not available.

  • Seventh square: not available.

  • Eigth square: not available.

And then that data gets paired with a height-list string on the target/select function to determine who can be picked when the function is used as a targeting function OR who can be selected when the function is used as a selection function.

Target/Select functions have defined levels which will allow them to be mathematically chosen/advanced based on a formula defined on a skill defined in a skillset. In other words, a skill like "Fire" could grow in size by having its level formula choose the appropriate level. In addition to that, this feature also allows for target/selection function nerfing (downgrading) in the case of a character not meeting certain requirements. For instance, perhaps a knight with black magic should not be able to target very many squares or select very many squares with any of the black magic skillset skills because it fails an intelligence or magic attack check within the formula to choose what level of the target/selection functions are chosen.

Anyway, this is what the definition interface looks like; you can see area functions in the first two and target/select functions in the last ones:


That's so great Lirmont, my mind is blown thanks for the example of the knight.. helps me understand why it makes a lot of sense to have this effect.
Lol at the smileys.
  • Modding version: PSX


Next: File System Resources (images, etc.)

Item Categories

Items (with categories shown)


This is looking to me more like an SRPG Maker.
For the record, LOVING THAT IDEA


Looks fantastic Lirm, question though. Will the items display "equipped by: Holy Knight, Dark Knight, other special class, etc." seems like it would be a pretty long list since most everybody can equip accessories, armor types, etc.

This thing's looking more exciting with each update though :D


March 11, 2012, 12:18:01 pm #46 Last Edit: March 13, 2012, 03:35:13 am by lirmont
@luna: Yes, but using that name would give people the wrong impression of what the thing is, considering anything game-related with the word "Maker" in its title may well be considered part of the huge "RPG Maker" franchise. I feel like SRPGs in general have more rules than RPGs, and so it'd be a lot more work than "Maker" suggests. I think you'll wind up with a more satisfying end product, though.

@Choto: It's just placeholder text at the moment for testing. As much as possible, I want to take away your ability as a game maker to write things like "Equipped by..." (hardcoded text) in favor of the game actually telling you the truth at any given moment of the development cycle. That doesn't mean you won't have any control over it, that just means you won't end up lying to the end-user unintentionally. If you want to intentionally lie to them, you'll still have that option at a menu-creation level, but the defaults will be geared towards what actually exists in any given game's database.



Tethical, the first ever DECENT SRPG creator!


April 09, 2012, 08:20:10 am #48 Last Edit: April 19, 2012, 01:51:08 pm by lirmont
Art Directives + Export to PDF feature:

And the PDF that button generated: view.


My Work-in-Progress Python IntelliSense Implementation (on top of my paged implementation of MonoDevelop's TextEditor control):

Text-Matching a Built-in (keyword?)

Text-Matching a String (literal) Function

However, I don't know how to tell which functions require being called from the module versus what can be called from the literal. For instance, string.capwords ("string") versus "string".capitalize(). This may only affect the string module, though.

Saving and then Running

MonoDevelop's TextEditor beneath the Paged Interface:

Syntax Highlighting

Other Color Schemes

Firefox-esque Find Bar (Replace and Go-To-Line are like this, too)


Showing Parts of the Panda3d Engine as Python Sees It


April 21, 2012, 09:56:18 am #50 Last Edit: May 01, 2012, 02:56:31 pm by lirmont
Nope, I'm not creative enough to relate that to a GUI.

But (and the image obviously will not show the animation) here's what code for animating water (i.e. the texture of a loaded model) looks like: Tethical Event Demo.

I want to be clear about what's going on in the demo so that people understand the utility of Python-based events. This event demonstrates how to animate water on a map. It's done completely in Python, and it's 126 lines of code long. It has two modes: (1) "event" mode and (2) "test" mode. That is, when Tethical calls the event, the Python code gets imported allowing the event to make changes to the scene (in this case, animating a texture on the map indefinitely; lines 84-125). Now, you can call this same event outside of Tethical as a stand-alone application; doing so will cause it to open up a test environment (this particular one loads the map the way the game would and then runs the event code afterwards). In other words, one file accomplishes what you want to accomplish AND lets you test it.

About testing, understand that you won't have to write the code for the test case, since I've already written it for you. You will either need to use templates that will be provided for you (say, on adding a client-side map event) or add it to your event on your own, but you won't have to do any of the heavy lifting (i.e. targeting the test environment or creating test environments). There will also be a button to launch the event script (i.e. the steps you see in the command-line window). It will be part of the control panel (rather than the text editor component I'm still working on).


Multi-Line Formula Printing with Typical Resulting Number Type

Number types: natural (N; 0 to positive infinity), integers (Z; negative infinity to positive infinity), fractional (Q; integers over integers), and real (R; continuous numbers; negative infinity to positive infinity, including all decimal places).


Tethical, an online FFT clone


May 12, 2012, 03:31:40 am #52 Last Edit: May 24, 2012, 03:34:55 am by lirmont
Download the testing application:

Windows: FormulaToImage.zip
Linux: FormulaToImage.tar.gz


This is a call for formula editing suggestions.

So, my earlier post shows formula images that get created in memory during runtime (and then cached to disk). The next step is getting in-line editing into place. That requires writing an export path for the user interface. There are three components to that: displaying the current formula, ability to replace existing operators/operands, and ability to add/remove new operators/operands. I've got native display ready for testing, and I have a tentative function for replacement of operators ready.

So, basically, you can left-click on operators in the bottom half of the application to switch them through a list. You can right-click operators in the bottom half of the application to switch them backwards through the list. The formula will update after any part of it is changed.

The top-half of the application is the formula RPN string, a description of what it is, and an image to help verify the accuracy of the interface elements in the bottom half of the application.

Later, my plan is to have operands be able to be selected from a drop-down list that's grouped by the type of game mechanic. After that (and I don't really have a good plan for this yet) I'll get adding/removing new operations into the formula. Don't get me wrong, the system could go as-is if people could stomach writing formulas in RPN notation, but I doubt that's a popular idea.


Operand replacement added to the test application.


Operator legend/help screen.


Comparison functions.


I tried it on Linux too, works like a charm. (except ^M in the shell file, and the Cancel button of the Help window)
What about adding live preview for RPN editing?
Is it easy to convert from infix to postfix ? People could write infix.
Tethical, an online FFT clone


May 24, 2012, 03:53:50 am #54 Last Edit: July 03, 2012, 11:42:08 pm by lirmont
It's getting added to/integrated with what's already in this section of the control panel: http://ffhacktics.com/smf/index.php?topic=8157.0#msg162571

Hopefully, we can get it into a state that doesn't require writing anything (but just uses the interactive editing feature).


Background section cloning feature completed so that comparison functions can properly display duplicate versions of operations in their condition statements (note: this includes duplication of the replacement feature, so you can change any of the duplicates without worrying about changing the wrong operand or operator).

All that's left now is finding a concise way to add new operations to an existing formula. I may not bother to do that until I get some solid ideas, since I've gotten quite comfortable with just typing the things in (and so I'd only be using the display feature anyway).


Functionality now split effectively into: design (add/edit), display (the main area), and usage (the evaluator).


FFT's base hit % formula, completely written with the drag-and-drop feature. This demonstrates that line wrapping is in place (not available for download yet).


Video of the editor in action: download video.

First formula demonstrates using the actor's class level in a damage calculation. Second formula demonstrates using how many targets the attack will hit in a damage formula. Third formula demonstrates type and location aware formula design. The game mechanics list is hard-coded for the demonstration. When it gets integrated into Tethical's control panel, that list will be pulled by game from the database the engine runs on.


NICE video... thing's lookin powerful and easy to use! One question, can you add in another formula into a new formula. Like say I have one formula called "magic damage" and one called "elemental modification", can I select those from the pull-down menu and throw them into a new formula? Would be super-convenient for auxiliary modifications


Yes, the server expression evaluator (as opposed to the one in the tool) will source values of game mechanics based on single values (scalar game mechanics) or other formulas (non-scalar game mechanics). The point is, they eventually resolve to scalar values, whether the designer provided them in the database (like, the bonus/penalty percentage of ".25") or whether it's depending on the server-side engine to provide that (any of the "Programming Supplied" game mechanics; single use things like flags; aggregate functions like summation, counting, average, etc). Also, if you scroll back to some of the images of formulas in the actual control panel, they have something called "INPUT_VALUE" that lets you chain formulas (like how the FFT battle mechanics guide's damage chain is laid out in 20+ steps). Since rewriting most of the code, I have a better understanding of how this should have been done in the database (rather than how it is done), and so all formulas won't be required to have an "INPUT_VALUE", but all games will ship with a default programming-supplied game mechanic called "INPUT_VALUE".


I've been following the progress of your project and I am very excited for the production release.  I noticed this discussion about the Control Panel and see you have a number of screenshots of a work in progress.  I was wondering if this utility has been released to the public yet and if so, where can I find a link to download it?

Excellent work


The download/installation instructions are in the first post of this thread, but they're involved because there isn't an installer at the moment. Additionally, the posted version is only compatible with the version of Tethical available on github and the database structure that corresponds to it; the toolset will have to be updated for the database and directory structure changes I've made since then, and I will not be releasing that as alpha-phase software (like the Sprite Animator and Control Panel currently are). You'll be able to get them after they're done via a "contributor's license" that doesn't necessarily cost money but will require you to contribute something to the project's community (re: meaningful feedback, royalty-free resources, like graphics, sounds, music, programming, etc, or donations). The licenses those non-alpha distributions will require will be linked to a user account (where your contributor or non-contributor status will be stored), and I've yet to start on that.


Thank you for getting back to me.  I followed the instructions listed on the first post and was able to get the program working.  Just a side note, even though I changed the connections.xml file to match MySQL installation, the TethicalUI program still wanted to use 'tethical-root' as the user, instead of the one specified in the XML file.  After some trial and error, I was able to get the Select Game to activate and view all the information in the current database.  Under Server-Related there is a Maps option.  If I double-click this 'Maps' option, I can see 6 maps to choose from (fft -> Maps -> (map001, map002, map027, map042, map056, and map103).  However, if I select one of the maps, I don't see the 3D mesh that makes up the map, just the gradient background, is this normal?

Also I was wondering what your setup was when you created the sources for this UI application.  I tried to build the project on my Window's system, however, I keep getting errors stating that the Mono.TextEditor assembly missing.  I tried searching through the references, but the only Mono assemblies available are Mono.Cairo and Mono.Posix.  Is there something else I have to install in order to get the Mono.TextEditor assembly?