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.

Topics - DLPB_

Pages: [1] 2 3 4 5 6 7
oooo clickbait!

When compromise is the song that you sing, it's been going on too long.

Completely Unrelated / Locking threads
« on: 2019-05-16 18:13:30 »
Locking threads because one fool turns up and abuses me isn't really cool.  It just plays into the hands of the troll, so I request it be reopened.

Second, Ric instigated it and was 100% worse, yet is not moderated.  That needs addressing.

Scripting and Reverse Engineering / Broken Ladders
« on: 2018-10-09 15:54:08 »
Uprisen noted to me a few broken ladders in the game.  When pressing OK at the top/bottom of ladders it is possible to lock the game - or crash it entirely.

Here's why:

When you get onto a ladder the first time, generally the code is safe. A line activation leads to a script.

And the script is "Only if script not already running"  - so mashing the OK button will have no effect.

But the problem lies where you enter a screen already on a ladder.  Here, the script programmers made a mistake. They didn't factor in that the script version with "Only if script not already running" is no longer being used, as they elected to use MAIN of the character instead. This means that the script version hasn't yet run and can be activated at the same time as the MAIN version is active, leading to hangs and crashes.

How to fix is very simple:

Let's take sbw4_3, which has 2 ladders that will both crash the game.

Under LINE 1 I have added a check for [5][255] flag

Code: [Select]
If key [OK|CIRCLE] or [???] pressed once (else goto label 1)
If Var[5][255] == 0 (else goto label 1)
Execute script #4 in extern group cloud (No4) (priority 6/6) - Only if the script is not already running
Label 1

Only if 255 is 0 will the grab ladder code be accepted.

And in the MAIN of Cloud, at the top

Var[5][255] = 1 (8 bit)

and the bottom

Var[5][255] = 0 (8 bit)

This ensures that MAIN will be fully complete before allowing the ladder code.  So there will never be a simultaneous call while on a ladder.

I have added this to LINE 2 as well, as both ladders on this field are broken.

Code: [Select]
If key [OK|CIRCLE] or [???] pressed once (else goto label 1)
If Var[5][255] == 0 (else goto label 1)
Execute script #5 in extern group cloud (No4) (priority 6/6) - Only if the script is not already running
Label 1

Uprisen has noted various others that I've fixed for The Reunion. 

rktbas2, las0_2 among them.  So, if you know of any more, let me know.

General Discussion / FF Wiki - Too much nonsense
« on: 2018-10-08 00:42:45 »
Too much nonsense in the FF Wiki.

This one blew my mind.

1. It's not deliberate that you can save here to exploit the Midgardsormr.  It's an oversight by the developers. An easy fix I have implemented is to stop you opening the menu on the marsh.

2. If you were to save near the Midgardsormr's spawn position, it would still be "unwinnable".

3. The reason the Midgardsormr's position is not saved is because it respawns. It was of no consequence to the programmers that its position be saved. The memory needed to save its position is the same as it would be for ANY object on the world map - a number of bytes. It would not "bloat" sod all. The programmers would not have had to save all parts of it.

Honestly, I wish people would stick to the facts.

Also, as usual, a lot of the fixes and information in the Wiki has been taken from Qhimms without any credit whatsoever, which really pisses me off.

fhwise12 looks like the map I remember the instruments being set on.. but how does the game know when it's Eyes on Me or Irish Jig?

What and where are the vars being set?  I need a clear place in the Savemap where a value will = x if irishjig and y if eyesome.

I am using Deling, but it's no good in asm. Very hard to follow.

Archive / ff7 replacement of lego hands
« on: 2018-07-06 00:20:13 »
Anyone have a working link for that old mod?  Searched forum and found only dead links.  It's been a long time.

Damage formula is split into 2 parts [Use tool Wallmarket to have a better idea].  Let's use Conformer as an example.

First, the type of attack. Conformer uses A

A is Physical.  Check accuracy, Critical, and Ultimate Weapon formula (only used for the 9 ally Ultimate Weapons)

Next, the sub type.  Conformer uses 3.

3 sets the power value to be the average of enemy level.
3 is a subtype of A - so it HAS to be used with A.

The byte in full is thus A3, in the game, at Attacker's Data (99E308) + 40.

The game actually splits this back up into A and 3 in function 5D17C7 and places these values in Attacker's Data (99E308) + A0 and Attacker's Data (99E308) + A4.

From here, for some reason, it assigns another value for the type and subtype based on these values.

Conformer ends up with a Type of 5 (from table 8FF068) and a Subtype of D (from table 7B7720).

From here, 5 and D (for Conformer) are also used for other functions and to set certain conditions.

The alternate SubType value is placed in Attacker's Data (99E308) + BC

The alternate Type value is used (in function 5D17C7) to set other conditions (3 total).

If a Physical attack is set, it will set an unknown flag to Attacker's Data (99E308) + 6C.

If Special Formula (Type 7) is set, it does a meaningless(?) check to make sure that the Subtype lies within a range.

If Ultimate Weapon formula is set (A), it will assign a Subtype flag to Attacker's Data (99E308) + BC. As stated above, for Conformer, this is D.

The Ultimate Weapon power is calculated from hardcoded data at function 5DC880.
Since Yuffie's Conformer is set to use Subtype  03 (changed by engine, remember, to 0D) the jump at 5DC901 will be to 5DCD83 [Set power value to Enemy average level].

And there you go.  Funnily enough, the engine does something strange there and sets eax to 1 and then tests if it is 0.  lmao. Not sure why? 

So, the function 5DC880 deals with the 9 Ultimate Weapon calcs. It uses jumps 0A, 0B, 0C, 0D, 1E, 1F, 20, 21, 22.

It's likely many more of the core calculations are done in this same function, and I will be testing that soon.

Scripting and Reverse Engineering / Yuffie Conformer Bug
« on: 2018-05-13 12:17:09 »
If the flag added when Power is 0 at

is skipped, the Conformer will then correctly show damage and effects when targeting allies (damage 1).  But this check may be needed for other effects to disable damage and normal effects, like sound.

With Yuffie's conformer, there are three possibilities to what the developers wanted:

1. That when targeting allies, the damage will be 1 and that this damage be displayed.

2. That when targeting allies, the damage will be 0 and that this damage is not displayed.

3. That when targeting allies, the power rating be 1 - and thus damage will be at its minimum for allies.

I suspect that there was a miscommunication.  The normal minimum for any physical attack that lands a hit is 1.  The reason Yuffie's weapon takes 1 off is that the variance formula does it's job and makes it 1. 

But because of the power check being 0 (since allies' level isn't checked), the damage display and other effects are disabled by the flag at the address above.

The two possible fixes are:

Disable the ability to skip damage and effects when power is 0 (might break other effects)

Force Yuffie's conformer formula to have a minimum power rating of 1 (which would then affect allies with damage greater than developers intended)

It would be a lot of work to make a workaround that made her attack = 1 and display 1 when her power alone is 0.  Because then you'd be checking if her conformer is equipped.  That's possible,  but i'd prefer to not go down that route.

Could also add an additional line to variance to skip adding 1 when power is 0.

Question first is how many things are affected if 5DA71D = EB 1A

Too many are.  Frog Song, for example, will show damage being 0 instead of just doing the effect.

I think best way to fix this now is to just make the Conformer take off the minimum when targeting allies (power = 1).

Code: [Select]
5DCD8C = C7 45 E0 01000000
Will fix it.

Although, perhaps it's named this way because Delphi came back from the dead.

Been a while since I used it, but it's had a major release.  Open source, cross platform IDE for Pascal language. If you can't stand C, like me, and can't abide what they did to Delphi after D7, then this is for you!

Completely Unrelated / Yuzo Koshiro Interview
« on: 2018-02-21 14:38:41 »

I always like these kinds of things.  It's nice to hear from guys like this.  They formed part of our childhood without us realizing it at the time.  I knew his music was among the best back then too...  You could tell.  Also, since his copyright credit was always displayed on the title screen, he was the only japanese composer I had any idea about for years.

It's interesting that he notes his influences as Western rock/dance.  Uematsu is also heavily influenced by Western artists, such as Elton John.  And you can definitely hear certain tracks having been influenced by certain songs.  Like Red XIII theme intro sounding similar to, and maybe being influenced directly by, Apache (my view).

What originally influenced me was... American and British music. It feels kind of strange to hear those people say they like my music. I think, “But it was your music originally!”

Aali and 7h can load individual files from your hd outside of the archives. At the moment my mod manager is sleek and simple but it really could benefit from this feature. Without hooks I've managed to load the archives from new locations but i do not understand in any way shape or form how id make ff7 locate say aaaa.hrc on my hd instead of out of char.lgp. in fact im not even sure if ff7 loads all the files contained within to memory. It seems to? Are 3rd party dll hooks the only way of doing this or can i rewriteva ff7 function or two. I'd prefer the latter since 7h is chocabloc with 3rd party dlls.

My own dll can intercept functions if need be - but at the moment, all I've managed to do is locate and change path at the memory location the actual archives are loaded.  The functions related to that are a complete mystery to me.

I'm not really sure if I need to preserve edi,ebx,esi here.  Didn't check.

Still this nifty replacement I've made for the Enemy Skill mask ensures that, from now on, the enemy skills MISSING from the total are what count, not the ones that are PRESENT.  See, originally, if one of your characters had a full enemy skill set, it would then stop all other enemy skills from learning all abilities. And if one of the materias had, say, Frog Song, then none of the others without it would gain it either.

Code: [Select]
Procedure CreateEnemySkillMask5CFB93; stdcall;

push ebx
push esi
push edi

xor edi,edi
mov esi,$00FFFFFF

mov ecx,[esp+$10] //Starting address of character materia

xor ebx,ebx


cmp ebx,8
je @Label5

test edi,edi
jne @Label3
  mov eax,[ecx+ebx*4+$40] // Retrieve Materia ID and AP in Weapon slot.
  jmp @Label4
  mov eax,[ecx+ebx*4+$60] // Retrieve Materia ID and AP in Armour slot.

cmp al,$FF //If no materia in slot, then jump to next slot.
je @Label2

xor edx,edx
mov dl,al
imul edx,edx,$14
mov dl,[edx+$DBDF6D] //retrieve formula ID for materia
and dl,$F
cmp dl,7  //materia is Enemy Skill
jne @Label2

shr eax,8
and esi,eax
or esi,$80000000

inc ebx

jmp @Label1

  test edi,edi
  jne @End
    inc edi
    jmp @START


mov eax,esi

pop edi
pop esi
pop ebx


Not rigorously tested yet, but seems to work.

NFITC1 has done the rest, so gave him a little head start with this one.  It's more or less complete aside from a few unknown flags and their function.

Hopefully, that will prove useful to you, NFITC1 :)  Have at you.

The Sleep, Confusion, Manip flags are there to remove the status if hit.  Those 3 are removed on physical attack.  Not sure why it's ecx+0000023C and not ecx+00000228.  Evidently, the former is checked to see what needs removing.

Certain statuses (like Resist) are intentionally not shown in the battle menu.  To place them back:

41C4C0 = 90 90 90 90 90 90
41C5B9 = 90 90 90 90 90
6E17FB = B9 20 00 00 00
6DD2A4 = B9 20 00 00 00

However, the correct text will also need adding back if not present (Luksy's touphScript will need an update too if not adding back with hex)

For example, to add Resist back

91E94A = 32 45 53 49 53 54 FF

Other status such as Minimum (Small) are simply removed by a mask.  Easy to fix.

Next, I am adding a status toggle to battle, so that you can choose to see status in main menu rather than Limit/Time.

Scripting and Reverse Engineering / World Map Functions
« on: 2018-01-05 15:41:44 »
Jump Location Var: E045E4.

Set to 02 and you'll have menu access while submerged in the sub.  I needed to find this so I can fix the bug that causes Emerald Weapon battle music when resurfacing. [although I already had it in Ochu.  Whoops! ]

Event loader: 76420A

Events are loaded from here.  There are certain types. Special events, like Emerald Weapon's movement and battle are initiated from 7642D1. For example, when your sub comes into contact with Emerald, certain new functions are called from the parameter placed into the function (0x300 is deducted inside the function, so below are actual jump IDs):

This chain is in  order:

4A, 7659DF (sonic boom effect)
07, 7650d2
1D, 7657C4 Electric sound effect
36, 7650E7 Sub pushed away
28, 765184
3B, 7655F1
34, 765BF2
48, 7655CC Battle swirl - battle intro
55, 765808
17, 7657E1 Initiates Emerald Weapon battle

The World Map simply has opcodes like Field, it seems.  So you could call for a sonic boom effect around a model at any time.

03 is Emerald Weapon movement
04 is involved in Emerald Weapon's movement.  May be the direction change operations (the movement path).
05 Emerald Weapon collision detection.  If this isn't called, the sub will not interact with Weapon - but the battle can still happen if you touch a certain part of Weapon. Issues will arise.  Seems to also depend... I can't always make the collision disable.  May be the return value I am messing up.
06 is Emerald Weapon movement.

21 Unknown

It is likely that Ultima Weapon shares some or all of these functions.


[00E39BC0] is used for the collision and movement.  When it's set to 1, there is no movement and all collision is off.  It's used by 05.

Completely Unrelated / Best FF7 Death Ever.
« on: 2017-12-30 03:37:28 »

Noticed you can make Cloud kill himself in a psychotic episode when messing with the battle attack status flags.

I spent a while looking at how the flags work, and, tbh, it's a mess in there. Way too many things going on to provide a full picture. So, this fix may break other things.  I need people to test it.  Sega Chief would be a good bet :)

{this allows for the 0A to take effect below. 
0041C6D5 = 66 25 DF FF

{this ensures that 0x02 will be seen later on - and thus set the correct value to the field opcode battle result.
005DCB3E = 0C 0A

If this fails, I'll simply have to add in a completely new piece of code to account for the exact value that is seen when you escape using item/magic from battle arena.

The above might actually pose an issue at some point, since 0041C6D5 is used numerous times during battle to reset some (nearly all) flags I have no idea about.  So now that 0x02 isn't being reset... who knows what will happen.

Completely Unrelated / Underrated Game Music
« on: 2017-12-19 19:13:07 »
Not sure I ever sent this on the forum.  It's too good to ignore really.

The TV show was narrated by Levar Burton and he was also a character on it.  Whoopi Goldberg was Gaia.  It was corny as hell.

The game, on the other hand, was very fun, very difficult (I eventually finished it on a real NES as a kid... without using passwords), and had an awesome soundtrack. 

Post your own examples.  :mrgreen:

First to fall over when the atmosphere is less than perfect
Your sensibilities are shaken by the slightest defect.

Now, if I tell you that you suffer from delusions
You pay your analyst to reach the same conclusions.

Troubleshooting / FF8 - What's the deal with the textures?
« on: 2017-09-07 23:30:14 »
I don't come to this section often... but what's with the boxes around the textures?  Those should not be visible.

I worked with JWP to solve this issue for user Giud, and eventually we got there.  FF8 is a NIGHTMARE to debug.  The optimizer being on without stack frames is only the start.  This may be useful to those with epilepsy.  Use HextEdit (or other hex editor) with the following:

Code: [Select]

{For certain flashes like critical attacks
{1067BC = 90:5

{Disable all battle flashes
1712C0 = C3

When using HextLaunch (memory addresses), it is

Code: [Select]
{For certain flashes like critical attacks
{5067BC = 90:5

{Disable all battle flashes
5712C0 = C3

If you only want specific critical flashes to be disabled, move the curly bracket { over the second entry and remove it from the first.

This is for the English Steam version.  Other versions will need new addresses.

I seem to be missing them, and I need them if I am to work on Raw.dll

Anyone have a nice tidy package?  All languages, all versions. If so, let me know and I'll open PM for you.  If you already can PM me, then do so.  :)


Any GoT fans around?  Well, here are my thoughts - posted on imdb.

Contains spoilers.

Season 1 to 4 = 10/10.

TVW = TV writers.

Since the TV show left the books behind (around S5 on), the show's writing has gotten worse and worse. I think the first poor episode was probably the one where Arya is being pursued by the T- 1000. It was utterly absurd. But this season (s7) has been by far the worst.

Aside from the odd decent moment, and the awesome spectacle of the dragons, it has been average at best. Melodrama has replaced a proper narrative. Contrivances have replaced logic. Let me give you some examples:

1. Daenerys has spent her entire time planning to invade Westeros. And when it was finally time to do so, the dumb TVW threw a spoke in the wheel. Out of nowhere, she suddenly can't hurt any bystanders, so holds off the attack on King's Landing (Yeah, 'cause she hasn't had to hurt any innocent people in order to get to the position she is in now, has she!?) This silly little contrivance is designed to prolong Cersei on the throne (itself a really dumb idea) as long as possible in the most artificial way possible. The TVW are completely shitting on logic in order to force this demented Mexican standoff. The latest episode goes even further... A proposed alliance between Cersei and Daenerys and Jon - to defeat the Army of the Dead. Jon and co have to prove to Cersei that the army is real by capturing one of the living dead. Just think about how DUMB that sounds. As if Tyrion, or Daenerys, would be entertaining anything of the sort, especially at this moment in time. Tyrion would never even advise it, because he isn't stupid enough to trust his sister for ANY REASON.

2. The long awaited reunion of characters was handled in a really clumsy way. It was dreadful. Where was the real emotion with Sansa- Arya or Bran-Sansa? It was non existent. It was like these people were just ordinary buddies who chanced upon a meeting. I was really looking forward to seeing the reunions, because we have been waiting since SEASON 1 for it. What a complete let down that was.

3. Characters are everywhere at any time, as if they have a teleportation device. Daenerys hears that the Lannisters have taken Highgarden - and the next minute, her army is right there with Jaime in the thick of it. The continuity has gone out of the window. Whatever the writers want to happen happens. Magic wand, LAZY writing.

4. Melodrama / soap opera nonsense. In the last episode (S7E4), I had to suffer watching jaime being saved by Bronn in the most ridiculous way there is. The cliché and brainless 'last second save'. And then, as I fully expected, we open episode 5 to discover they haven't been captured and have miraculously managed to escape unscathed, floating in deep water while WEARING ARMOUR and A SWORD! Holy crap. That's what happens when you run out of actual genius (Martin's work) and have to work on your own crappy, limited brain (TVW).

5. Characters aren't behaving like they should be. I've already mentioned Daenerys in regards to this, but it extends across the board. Bran "OOooo I am suddenly not Bran anymore... but I can feel who he was" or some slop. He still hasn't explained ANYTHING to anyone, even though the world is about to do battle with a mortal threat that he understands better than any other person on the planet. Sansa's turned into some awful caricature, totally alien to who she is as a person. And don't give me the Ramsay bullshit, since that was a dumb TV move in the first place and never happens in the books. Cersei is somehow queen and ultimate ruler, and making logical tactical decisions. But, here's the thing, it's already been established long before now that she is a useless tactician, and a naive, childish brat, who has no leadership qualities. But that's all out now, because they need her to be a main antagonist on the show. Speaking of Cersei, her one remaining child died and her emotion to it was zero. That's after it being well established that her only reason for carrying on with life was her children. Oh, but let's just switch off our brains again. The TVW said it's all OK! Whoopi-doo.

6. Contrivances. For example, Jorah Mormont needs a cure. Suddenly, he's managed to trek to some sort of hostel hundreds and hundreds of miles away, seemingly to just die - where he meets up with Sam - who not only finds a cure in a random book, but manages to pull off the delicate procedure, explained within, at the first time of asking. Then Jorah is back with Daenerys super-quick time. It's just so damn lazy and transparent.

7. Dialogue. This has taken a big hit as well. It's always been the case that the writers think swearing is uber-cool and shoehorned it into as many places as possible - but now they are out of Martin's material, a lot of the meat is gone. Tyrion stands out the most. The TVW are in over their heads. They are out of their depth.

Does anyone think Martin will be remotely THIS incompetent? The TVW have always made a mess when changing things (very often for no sane reason) from the books. For example, army numbers and population numbers being exaggerated to absurd levels; ridiculous and unrealistic events, like Sansa marrying Ramsay; over the top swearing, sex, nudity - for no other reason than to appeal to the mindless, lowest common denominator. But this is worse.

It's still entertaining, but the quality slide after S1-4 is larger than people are admitting. Some cool scenes with dragons isn't making me blind and dumb to all these issues.

also see


It's my birthday today, but I seem to do things backwards... so I am the one handing out presents.

Supports LoopStart and LoopEnd tags (as will my FF7 dll - and the next version of RaW for ff8).  Any issues, let me know.

I created FixLoop to help me create the audio files for FF7 - which required precise loops. With this, you can use "GoTo" and see how your loops sound - whether there is any popping/clicking and so on. It will also play audio files perfectly, something most players fail at with small audio files.  Many formats can be played- but only OGG loops can be saved from the program. It isn't recommended (as far as I am aware) to use MP3 for loops anyway.

See the help file for more information.

Download 1.3 here

Completely Unrelated / Carmina Burana
« on: 2017-06-03 00:54:06 »

The opera that was used to form the lyrics of A One Winged Angel. Clearly a favourite of Uematsu's as well as mine. This performance is one of the best I have heard. 

Were diu werlt alle min
von deme mere unze an den Rin
des wolt ih mih darben,
daz diu chunegin von Engellant
lege an minen armen.

Were all the world mine
from the sea to the Rhine,
I would starve myself of it
so that the queen of England
might lie in my arms.

Pages: [1] 2 3 4 5 6 7