If you're talking about the PC version I can probably help you.
...Tent's have a unknown function, but it's pretty clear they restore all HP / MP ( which is too powerful imo ) but I've have no clue how to best change this. I thought about using the mega-lixir formula for this, but I found that to be working against me ( tents worked everywhere now ) I assume the tent function is stored in a script somewhere ( or it even accesses the same function as INNs which would help )
Tents access the item function beginning at 0x717010 which will essentially mark which characters need to be healed. Then, it calls a function at 0x6CBA6A (Generic HP increase function) which will "heal" all characters by 10000HP/MP then cap it by their MHP/MMP. Now there's only five bytes to play with which is just one shy of being able to change this into anything dynamic. However, you can have tents only heal a static amount of HP/MP. You can change the value to cap them quite easily. Currently, the code to cap them is:
0x003164B5 : 68 10 27 00 00 --for HP
0x003164C6 : 68 10 27 00 00 --for MP
These translate into "PUSH 10000" which is in big-endian format. Changing it to, say:
0x003164B5 : 68 88 13 00 00 --for HP
0x003164C6 : 68 F4 01 00 00 --for MP
Would restrict tents to heal no more than 5000 HP and 500 MP. So the value you push will limit the healing it will do. I'm not going to go into how to do this. It requires a hex editor and an understanding of endianness.
That's the SIMPLE way to do it. If you wanted to get REALLY complicated you could re-write the whole tent function (or redirect it) to do something different. The function's range is between 0x717010 and 0x717123.
I've planned to adjust all INNs in my mod to only restore HALF the HP / MP of everyone and don't touch status effects. Now, the game itself doesn't have such a function. ( oddly enough, there are 3 versions of "restore all HP / MP for every party member" and one that also removes status additionally )
Now, where would I find where that function is stored, and how would I go best about changing it?
( going in and removing the function and replacing it by 3x "increase hp" and 3x "increase mp" is not really an option because that screws with the script file too much )
Inns won't touch status effects because they don't carry over as it is. I don't think that Inns use the standard heal function I was just talking about. Modifying it may be more difficult. I'm not sure where they are. I think making Inns more expensive would make more sense mechanically. The farther along in the game you are the more they should cost.
Then, is there a way to restore hp/mp by 50% with one item? recovery always restores you completely, regardless of what the item strength is. Using MHP * power and enabling "affect MP" results in a ether function.
You're looking at two separate actions if you want it to work the way you're thinking. First of all, make an item that restores 50% health:
Strength: 16
Damage: 24h (MHP * (strength / 32) )
Additional Effect 18h ( Perform action [index] upon completion )
Effect Modifier: 125 (any blank attack)
Then set up an attack that heals 50% MP at the index of the Effect Modifier.
Strength: 16
Damage: 24h (MHP * (strength / 32) )
Affect MP
I don't know if target data is reset between these actions so you may not get to choose the target of this second action (eg, if Cloud does gives the initial item to Barret, the second action might affect Barret OR Cloud). You can set the target data to only allow the person using it to use it on themselves and set the other action's target to the same thing.
On that note, is it possible to make status effects linger after the battle like anger / sadness? I guess the game lacks flags to set those statuses on a character but well, was worth asking.
Yes and no. There's no where in the characters' data to store those additional statuses. The Fury/Sadness is all part of one byte which is the first eight statuses (Death, Near-Death, Sleep, Poison, Sadness, Fury, Confuse, Silence). Those would be the only ones you could carry over, but as it is the game only allows Fury/Sadness to take effect at the start of a battle. Death is determined by HP (not the status) and even if you could have a character with those other statuses they wouldn't do anything outside of battle.