Advertisement
DynamixDJ

For DLPB

Feb 27th, 2019
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 44.47 KB | None | 0 0
  1. For DLPB
  2.  
  3.  
  4.  
  5. Formations that should have the FFED (Pre-Emp OFF flag), not including the ones I've already sent to you in the past:
  6.  
  7. #342 Rocket Launcher should not be Back Attacked
  8. #440 3x Soldier:3rd, only Soldier:3rd battle that *cannot* be preempted
  9. (possibly not an error ?)
  10. #127 2x Skeeskee, 2 x Griffin. Griffin cannot be back attacked in #121 or
  11. #125, so it's probable that the Griffin was not meant to be preempted
  12. #553 and #554 2x & 3x Gi Spector. These are the forced encounters on the
  13. first screen; the random encounters with Gi Spector have Pre-Emp OFF
  14. #158 2x Velcher Task. All other Velcher Tasks cannot be back attacked except
  15. for this formation in the (small) Forests of Rocket Areas.
  16. #190 2x Kelzmelzer. The other Kelzmelzer encs in TOTA do nor allow for a
  17. preemp
  18. #208 1x lessaloploth. All other lessal's in GG cannot be back attacked. they
  19. also all have an escape value of 2 on a field Map, whereas the WM
  20. encounter has an escape value of 1
  21. #209 2x Ice Golem. Can't be preempted on Field maps, can on the Icicle
  22. Snowstorm
  23. #826 1x Crazy Saw, 1x Cromwell. Cromwell can't be preempted in any other
  24. formation.
  25.  
  26.  
  27. I have also noticed that Formation #947 (Attack Squad encounter in the Press Conference Room on Disc 2) does not make use of the FFF9 Can't Escape Flag. All other forced encs with Attack Squad are non-escapable, and this one feels like it should be too. It is not the first encounter found in the "nether-regions" of the scene.bin (scene 235 onwards) that contains a mistake/non-consistency.
  28.  
  29. Another observation - Formation #813 is the 2x Attack Squad in Mt. Corel. This correctly uses the Can't Escape F9 Flag, but does not turn Pre-Emps off. It should have the E9 Flag used (can't escape and Pre-Emp off)
  30.  
  31.  
  32.  
  33. Incorrect use of Cover Flag in Formations:
  34.  
  35. #359 - Back Attacked by 3x Blood Taste (the Back Row Blood Taste can be
  36. targeted)
  37. #612 - 3x Jayjujayme, 1x Garuda. Flag set for Jayjujayme [B] (enemy 2) but
  38. not set for Garuda in Back Row
  39.  
  40.  
  41.  
  42. Weirdness with Attacks:
  43.  
  44. Air Buster has all of his attacks duplicated, except for Bodyblow, where one version has Att% 90 and the other has Att% 95 (possibly not an error).
  45.  
  46. *Hindsight* - This is most likely not an error, given how many instances there are of enemies using attacks that are identical bar the Att%.
  47.  
  48.  
  49.  
  50. Elemental/Status Abnormalities:
  51.  
  52. Hell House Version 1 is immune to Death Sentence, whereas version 2 is vulnerable (possibly not an error)
  53.  
  54. Demons Gate is immune to the element Poiosn, but is vulnerable to the status. If you were to Added Effect Poiosn onto him, the damage taken would be 0 each time.
  55.  
  56. Jenova Life's Blue Light uses two Elements - Water and Shout. Not sure if that's a mistake or not.. I haven't seen any other actions that use an 'Element' element and a 'Physical' Element.. I'll keep my eyes peeled.
  57.  
  58. Five enemies are subject to the "Berserk" glitch, but I'm sure you've clocked that one already.
  59.  
  60.  
  61. Field Script:
  62.  
  63. In the Kalm Flashback, if you were to return to Nibelheim after you gain control of Cloud by the bridge, the music still plays out the Rotting Pizza theme
  64.  
  65.  
  66. In the Junon Underwater Reactor mission, the theme changes to "Hurry". This theme plays throughout battles; however, the victory fanfare will still play, which sounds a little out of place.
  67.  
  68.  
  69. Same mission - just after you defeat the 2x forced encs outside the grey submarine, you drop down to fight another forced encounter (screen with the save point). The 2x forced encs on the dock screen have the "Hurry Faster" theme playing, with the fanfare disabled. The following screen in the sub does not change the music or the fanfare.
  70.  
  71. Similarly, when you get the red sub, the the Hurry theme plays throughout the forced enc in the cockpit, but not the hallway.
  72.  
  73. Yet another observation - if you kill the "special" battle with the captain and 2x Sumbarine Crew in the blue sub, fail the mission the same battle with play out on the red sub if you choose to battle them. This doesn;t make sense, as the enemies are supposed to be the same NPCs you trained with at the beginning of the game in Junon; you can't kill them twice! Also, the "Rufus' Welcoming Ceremony" Theme plays throughout battle on the blue sub, but not the red (for the cockpit battle #786).
  74.  
  75.  
  76. Shinra HQ revisited - I don't know if this is present in the later releases, but in the PS1 version the chests in the shop do not make the correct opening sound; instead you hear the sound made when picking up a loose field item.
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83. AI Script Bugs:
  84.  
  85.  
  86.  
  87. MP:
  88.  
  89. Should change its Attack pattern according to the rows of the Players, but does not.
  90. Change the opening script from:
  91.  
  92. 0x040 If ( (BattleAddr(&AllPlayers).BattleAddr(&FrontRow) == 0) )
  93. 0x040 {
  94. 0x04D LovalVar:PlayerRow <- LovalVar:PlayerRow AND 1
  95. 0x057 If ( (BattleAddr(&AllPlayers).BattleAddr(&FrontRow) == 1) )
  96. 0x057 {
  97. 0x064 LovalVar:PlayerRow <- LovalVar:PlayerRow AND 2
  98. 0x06E If ( (BattleAddr(&Self).BattleAddr(&FrontRow) == 0) )
  99.  
  100. TO:
  101.  
  102. 0x040 If ( (BattleAddr(&AllPlayers).BattleAddr(&FrontRow) == 0) )
  103. 0x040 {
  104. 0x04D LovalVar:PlayerRow <- 1
  105. 0x057 If ( (BattleAddr(&AllPlayers).BattleAddr(&FrontRow) == 1) )
  106. 0x057 {
  107. 0x064 LovalVar:PlayerRow <- 2
  108. 0x06E If ( (BattleAddr(&Self).BattleAddr(&FrontRow) == 0) )
  109.  
  110. NFITC1 EDIT:
  111.  
  112. It's easier just to change:
  113.  
  114. 0x000LovalVar:PlayerRow <- 0
  115.  
  116. to
  117.  
  118. 0x000LovalVar:PlayerRow <- 3
  119.  
  120. Apply the same to the next three errors (although my fix works the same way, although NFI's way is easier and neater).
  121.  
  122.  
  123.  
  124. Guard Hound:
  125.  
  126. Should change its Attack pattern according to the rows of the Players, but does not.
  127. Change the opening script from:
  128.  
  129. 0x040 If ( (BattleAddr(&AllPlayers).BattleAddr(&FrontRow) == 0) )
  130. 0x040 {
  131. 0x04D LovalVar:PlayerRow <- LovalVar:PlayerRow AND 1
  132. 0x057 If ( (BattleAddr(&AllPlayers).BattleAddr(&FrontRow) == 1) )
  133. 0x057 {
  134. 0x064 LovalVar:PlayerRow <- LovalVar:PlayerRow AND 2
  135.  
  136. TO:
  137.  
  138. 0x040 If ( (BattleAddr(&AllPlayers).BattleAddr(&FrontRow) == 0) )
  139. 0x040 {
  140. 0x04D LovalVar:PlayerRow <- LovalVar:PlayerRow <- 1
  141. 0x057 If ( (BattleAddr(&AllPlayers).BattleAddr(&FrontRow) == 1) )
  142. 0x057 {
  143. 0x064 LovalVar:PlayerRow <- LovalVar:PlayerRow <- 2
  144.  
  145.  
  146.  
  147. Mono Drive:
  148.  
  149. Should change its Attack pattern according to the rows of the Players, but does not.
  150. Change the opening script from:
  151.  
  152. 0x040 If ( (BattleAddr(&AllPlayers).BattleAddr(&Row) == 0) )
  153. 0x040 {
  154. 0x04D LovalVar:PlayerRow <- LovalVar:PlayerRow AND 1
  155. 0x057 If ( (BattleAddr(&AllPlayers).BattleAddr(&Row) == 1) )
  156. 0x057 {
  157. 0x064 LovalVar:PlayerRow <- LovalVar:PlayerRow AND 2
  158.  
  159. TO:
  160.  
  161. 0x040 If ( (BattleAddr(&AllPlayers).BattleAddr(&Row) == 0) )
  162. 0x040 {
  163. 0x04D LovalVar:PlayerRow <- LovalVar:PlayerRow <- 1
  164. 0x057 If ( (BattleAddr(&AllPlayers).BattleAddr(&Row) == 1) )
  165. 0x057 {
  166. 0x064 LovalVar:PlayerRow <- LovalVar:PlayerRow <- 2
  167.  
  168.  
  169.  
  170. Grunt:
  171.  
  172. Should change its Attack pattern according to the rows of the Players, but does not.
  173. Change the opening script from:
  174.  
  175. 0x040 If ( (BattleAddr(&AllPlayers).BattleAddr(&Row) == 0) )
  176. 0x040 {
  177. 0x04D LovalVar:PlayerRow <- LovalVar:PlayerRow AND 1
  178. 0x057 If ( (BattleAddr(&AllPlayers).BattleAddr(&Row) == 1) )
  179. 0x057 {
  180. 0x064 LovalVar:PlayerRow <- LovalVar:PlayerRow AND 2
  181.  
  182. TO:
  183.  
  184. 0x040 If ( (BattleAddr(&AllPlayers).BattleAddr(&Row) == 0) )
  185. 0x040 {
  186. 0x04D LovalVar:PlayerRow <- LovalVar:PlayerRow <- 1
  187. 0x057 If ( (BattleAddr(&AllPlayers).BattleAddr(&Row) == 1) )
  188. 0x057 {
  189. 0x064 LovalVar:PlayerRow <- LovalVar:PlayerRow <- 2
  190.  
  191.  
  192.  
  193. 1st Ray:
  194.  
  195. Formation #312 has the cover flag used for 1st Ray 1 & 3, seemingly for no reason.
  196.  
  197.  
  198.  
  199. Sweeper:
  200.  
  201. The AI Script searches for a Player without Darkness to target for its Smoke Shot Attack, which suggests that Smoke Shot should inflict Darkness. The Custom Sweeper uses the same attack, and the same check for Darkness is carried out.
  202.  
  203.  
  204.  
  205. Blugu:
  206.  
  207. The AI Script searches for a Player without Paralyzed to target for its Hell Bubbles Attack, when Hell Bubbles inflicts Sleep.
  208. Change all PSHA (4019) Arguments to (4002) to change to the check to search for targets that have Sleep instead of Paralyzed.
  209.  
  210.  
  211. Machine Gun / Laser Cannon (from Warning Board)
  212.  
  213. There is script that plays out for both of these which searches for the Death Status of its counterpart, which is redundant seeing as when one of them dies the other will cease to spawn in. That's because the dead killed enemy is still flagged as "active", so the other enemy will act as though the enemy you killed is still present.
  214.  
  215. Adding a Death Counter to the machine Gun and Laser Cannon will fix this:
  216.  
  217. 0x000BattleAddr(&2060).BattleAddr(&4020) <- 0
  218. 0x00ASCRIPT END
  219.  
  220. 0x000: PUSH (2060) Type (12)
  221. 0x003: PUSH (4020) Type (10)
  222. 0x006: MASK
  223. 0x007: PUSH (00) Type (01)
  224. 0x009: STRA
  225. 0x00A: END
  226.  
  227. 12 2060
  228. 10 4020
  229. 80
  230. 60 00
  231. 90
  232.  
  233. (I fixed and tested it myself, it works - the Machine Gun spawns in after killing the Laser Cannon and vice-versa; unless you've already killed one of them ofc).
  234.  
  235.  
  236.  
  237.  
  238. Soldier:3rd
  239.  
  240. Falls victim to a bug whereby a check is not performed to make sure that it has enough MP, so a "Skill Power" used message appears (not sure if this was intentional or not). The check occurs for Sleepel, Ice2, Bolt2 but not Flying Sickle which costs 8MP.
  241.  
  242. An easy fix is to make it so that the Attack 01FC Flying Sickle costs 0MP, but the Flapbeat and Frozen Nail also use Flying Sickle, although none if those AI Scripts have the MP cost check, so they would fall victim to the same bug. The long way to fix it requires a lot of AI script editing for the Soldier:3rd (but an easy edit for the other two).
  243.  
  244. Alternatively, you could make the Soldier3rd more balanced if it just had less of a chance of using Flying Sickle on three of its five turns, seeing as Kal and NFI both think that this is normal. I think it uses Flying Sickle far too often (and therefore skips too many turns once MP < 8). Especially since this is considered a "tier 2" random enemy, such as the Eligor.
  245.  
  246.  
  247.  
  248. Sample:H0512-opt
  249.  
  250. Searches for a Player that has Paralyzed, when no Attack in that Battle inflicts Paralyzed. Logic suggests that the search should have been for Poison.
  251.  
  252.  
  253.  
  254.  
  255. Hundred/Heli
  256.  
  257. Fighting theme plays instead of Still More Fighting. Also, EXP AP and GIL will not be earned for Hundred Gunner.
  258.  
  259.  
  260.  
  261. Rufus:
  262.  
  263. Take a look at the general counter:
  264.  
  265.  
  266. GENERAL COUNTER:
  267.  
  268. 0x000LocalVar:CurrentHP <- BattleAddr(&Self).BattleAddr(&CurrentHP)
  269. 0x00BLocalVar:HPDiff <- LocalVar:PrevHP - BattleAddr(&Self).BattleAddr(&CurrentHP)
  270. 0x01ALocalVar:PrevHP <- BattleAddr(&Self).BattleAddr(&CurrentHP)
  271. 0x025SCRIPT END
  272.  
  273. the first time this runs, LovalVar:0020 "PrevHP" will be 0, and will underflow to a huge number. To prevent this form happening, add to the Pre-Battle Setup Script:
  274.  
  275. 0x000LocalVar:PrevHP <- BattleAddr(&Self).BattleAddr(&CurrentHP)
  276.  
  277. or
  278.  
  279. 0x000LocalVar:0020 <- BattleAddr(&2060).BattleAddr(&4160)
  280.  
  281.  
  282.  
  283.  
  284. Marine:
  285.  
  286. Checks to see if at least one player has Paralyzed, which is pointless seeing as no attack inflicts Paralyzed in Junon's Cargo ship. It is highly likely that the check should have been for Sleep, seeing as the subsequent check is for Darkness (and.... Marine inflicts Sleep and Darkness).
  287.  
  288. I'm fairly certain that Smoke Bullet should have inflicted Sleep (as opposed to Paralyzed) seeing as there are two Accessories in Junon available to buy which defend from Sleep and Darkness.
  289.  
  290.  
  291.  
  292. Grangalan Jr.Jr.
  293.  
  294. Grangalan Jr.Jr carries the attack Stop Eye 01DB, which it will never use unless berserked. They may have decided to remove the attacks use from the AI script, however, take a look at the script:
  295.  
  296. MAIN:
  297.  
  298. 0x000 If (Random MOD 4 == 0)
  299. 0x000 {
  300. 0x009 }
  301. 0x009 Else
  302. 0x009 {
  303. 0x00C }
  304. 0x00C Else
  305. 0x00C {
  306. 0x00F BattleAddr(&TarSelected) <- RandomBit(BattleAddr(&AllPlayers))
  307. 0x017 Perform("Silver Wheel"[01DC], EnemyAttack)
  308. 0x01D }
  309. 0x01D Else
  310. 0x01D {
  311. 0x020POP(Random MOD 4)
  312. 0x021SCRIPT END
  313.  
  314.  
  315. It has a 1/4 chance of using Silver Wheel and a 3/4 chance of skipping a turn. At least i think that's what's happening (could be 3/4 chance of using silver wheel). Anyway, I reckon that the Jr.Jr should have had a 1/4 chance of using Stop Eye and a 3/4 chance of using silver wheel, although, it may make the battle harder than necessary. It's probable that they decided to remove an attack that could Stop all players but didn't ammend the script properly. At the very least they should just use Silver Wheel every attack.
  316.  
  317.  
  318.  
  319. 2-Faced
  320.  
  321. It seems as though the 2-Faced should have had a 100% chance of using one of its two counter attacks if it is the last enemy alive, but a mistake in one of the arguments means that it only run that script if it is the last actor alive (all three players dead). I think. I'm not quite sure what's supposed to be happening with the 2faced.
  322.  
  323.  
  324. Land Worm:
  325.  
  326. The Land worm does a check to see if it is inflicted with Poison OR Confusion, which is illogical seeing as it is immune to Confusion. Perhaps the 4006 should have been 4007, to see if it had Silence? This would make more sense, seeing as the attack used if the check passes is a physical attack. It's what I would change it to anyway.
  327.  
  328.  
  329. Harpy:
  330.  
  331. The General Counter script is a weird one. I cannot say for certain what they were trying to do, but they are manually changing the localvar:0020 from the value it should be, which is 3 (the Chocobo is the 4th actor) to a different value according to the harpy's HP. A Chocobo only exists in the 4th slot (as it is the 1st enemy), so when the value gets changed it looks at an enemy that is either itself, or an empty enemy slot.
  332.  
  333. When it's HP is 25% or less, the script plays out as it should. If, however, the Harpy's HP is above 25% then the battle will not end when the Harpy dies. Instead, you'll have to wait for the Chocobo's ATB gauge to fill, at which point the normal script will play out to capture a Chocobo, or, if the Choc passes the chance to flee the battle then you'll instead see "Wark! Wark" as the message (you'll still get the Chocobo and the battle will end if this happens).
  334.  
  335. Revisit - I think I know what's happening now. The Counter script should have been a "SpclChance", as seen time and time again for many enemies. There are two things wrong here: the LocalVar used has already been assigned to ChocID; they should have used LocalVar:0060 for SpclChance. the 2nd problem is the fact that it's not used for anything anyway; just delete the General Counter script altogether (but not the Death Counter).
  336.  
  337.  
  338. Gagighandi:
  339.  
  340. Possibly not an error, but worth noting. The check when it performs Stone Stare only check for a player with Petrified Status, meaning it will use Stone Stare on a target that has slow-numb. Perhaps this was meant to be? It would be a lot tougher if it also did a check to only target players without Petrify AND slow-numb.
  341.  
  342.  
  343. Turks:Reno Gongaga
  344.  
  345. Reno II will react to Attack IDs 21h (Bolt), 22h (Bolt2) and 23h (Bolt3). Due to a flaw it will react to Item IDs 21h (Ice Crystal), 22h (Bolt Plume) and 23h (Swift Bolt). This is due to a lack of a check preceding the Command ID check.
  346.  
  347. Look at the start of the Chocobos disassembled general counter script:
  348.  
  349. GENERAL COUNTER:
  350.  
  351. 0x000 If ( ( (BattleAddr(&LastCommndID) == 4) Or (BattleAddr(&LastCommndID) == 23) ) )
  352. 0x000 {
  353. 0x010 LocalVar:ChocGreensUsed <- 0
  354. 0x016 If ( (BattleAddr(&LastAttID) == 62) )
  355.  
  356. The Last Command ID (&2000) is checked prior to the Last ATT ID. Something similar needs to be in place for Reno's Magic Counter script, checking for Command ID == 2 (Magic).
  357.  
  358. Revisit - after looking at the final bosses, I can see that a different Addr is being used; 2008 is Last Attack ID and 2150 is Last Attack Index; using 2150 removes the need for a Command ID check. Needs testing.
  359.  
  360.  
  361.  
  362. Flower Prong 1st Form:
  363.  
  364. He has 68 MP. Bio2 costs 36 MP, which means it will fall 4mp short of being able to cast it twice. Possibly not an error, but seems a bit silly to me to give it that much MP to not be used.
  365.  
  366. The same applies for the 3rd Form Flower Prong.
  367.  
  368. In hindsight, I'm not sure this is noteworthy, as there are a number of enemies that fall short of being able to cast their only Magic attack twice:
  369.  
  370. Bagrisk (has 50 MP, Quake2 costs 28 MP)
  371.  
  372.  
  373.  
  374.  
  375. Golem:
  376.  
  377. The golem does a check to see if the amount of HP dealt is greater than 200. This check does not account for the fact that the attack could have been healing the enemy. If you do heal the Golem then the game thinks that you've caused a stupid amount of damage ((2^32)-damage), and will trigger the script.
  378.  
  379. To fix it, you'd need to do and AND check against 2120 (elements of last action), so that:
  380.  
  381. If ( (LocalVar:0040 > 200) )
  382.  
  383. Looks like this:
  384.  
  385. If ( (LocalVar:0040 > 200) AND (NOT (BattleAddr(&2120) AND 512) ) )
  386.  
  387. This *should * make sure that the HP dealt was over 200 AND the last element used was not 0x0200 (Restorative). I haven’t tested this.
  388.  
  389. Also, the Magic stat will underflow (4070), seeing as it has a base value of 5, and reduces by either 6, 12 or 18 depending on the stage that it is in, so it becomes 255 or less. None it its attacks are magical anyway, so it doesn't matter.
  390.  
  391.  
  392.  
  393.  
  394. Desert Sahagin:
  395.  
  396. Compare the Desert Sahagin's Pre-Action Setup to the Sahagin's Pre-Action Setup:
  397.  
  398. Desert Sahagin:
  399.  
  400. 0x000LocalVar:DamagedAnimID <- BattleAddr(&Self).BattleAddr(&DamagedAnimID)
  401. 0x00BLocalVar:Def <- BattleAddr(&Self).BattleAddr(&Def)
  402. 0x016 If ( (Random MOD 16 == 0) )
  403. 0x016 {
  404. 0x020 BattleAddr(&Self).BattleAddr(&DamagedAnimID) <- 5
  405. 0x02A BattleAddr(&Self).BattleAddr(&Def) <- 512
  406. 0x035SCRIPT END
  407.  
  408. Sahagin:
  409.  
  410. 0x000BattleAddr(&Self).BattleAddr(&DamagedAnimID) <- LocalVar:DamagedAnimID
  411. 0x00BBattleAddr(&Self).BattleAddr(&Def) <- LocalVar:Def
  412. 0x016 If ( (Random MOD 16 == 0) )
  413. 0x016 {
  414. 0x020 BattleAddr(&Self).BattleAddr(&DamagedAnimID) <- 5
  415. 0x02A BattleAddr(&Self).BattleAddr(&Def) <- 512
  416. 0x035SCRIPT END
  417.  
  418. See the problem? The Sahagin's script work correctly; the Def value is set to 512 for one action only, after which it will be set to LocalVar Def, which is set during the pre-battle setup script
  419.  
  420. Desert Sahagin is completely backwards. It sets LocalVar:0020 to its MDef during the pre-battle setup, then does nothing with it. It just keeps setting localVar:0020 to the Desert Sahagin's Def, which will always be 512 once the 1/16 chance has passed.
  421.  
  422. The Damaged Anim ID is also not being set correctly when the subsequent action is performed.
  423.  
  424.  
  425.  
  426.  
  427. Bagrisk:
  428.  
  429. No errors here, just a clean up. The checks that search for any players that doesn't have Petrify is unnecessary, seeing as it's impossible for all three players to have Petrify and the game still be active.
  430.  
  431.  
  432.  
  433.  
  434. Nibel Wolf:
  435.  
  436. Visual glitch just after Howling has been used to revive its teammate. The revived Nibel Wolf will be facing the Nobel Wolf that revived it until its next turn.
  437.  
  438.  
  439.  
  440.  
  441. Dorky Face:
  442.  
  443. You may already have this one. It's checks are for 4007 (Silence) and 4019 (Paralyzed), but one cannot be inflicted with Paralyzed unless it is self-inflicted. The 4019 check should be for 4006 (Confusion).
  444.  
  445.  
  446.  
  447. Mirage:
  448.  
  449. The script is a bit of a mess. it searches for a player without Death Sentence, however, the only way for you to be inflicted with D. sentence is to inflict it on yourself. I can only guess that they may have intended you to obtain the Curse Ring in the Shinra Mansion initially?
  450.  
  451.  
  452.  
  453.  
  454. Jersey:
  455.  
  456. The Magic Counter script is wrong. It checks for 4080 (IdleAnimID) to be a value of 8, which it will never be. When it changes to Right Counter down (2nd form), the 4080 gets set to 7, and 4088 (DamageAnimID) gets set to 8. Change the argument at 0x007 from 08 to 07 to fix the issue, allowing the Jersey to toggle back to its 1st form.
  457.  
  458.  
  459.  
  460.  
  461. Ying:
  462.  
  463. the check in the Main script is supposed to check for any Players that are dead, but it uses the wrong var. Change the Battle Var argument @ 0x000 from 2050 to 20A0, and that should fix the problem.
  464.  
  465.  
  466.  
  467.  
  468. Zuu:
  469.  
  470. When encountered on the bridge it has a row value of 16 (can't reach). everywhere else it has a row value of 1. Mistake?
  471.  
  472. edit - No. Look at Sephiroth's AI Script (Flashback version). It purposely looks for the encounter with the Zuu, and will use Fire3 if it is flying and Attack if it is not flying.
  473.  
  474. Sephiroth can never encounter the Zuu anyway...
  475.  
  476.  
  477.  
  478.  
  479. Battery Cap
  480.  
  481. Inflicts Darkness, however, it performs a silly check for Poison. 4003 should be 401A. it also checks for a player that *has* Poison, this should be a target that *does not have* Darkness (the only way you can be inflicted with Poison against the Battery Cap is to self inflict it, or get it while at the Bat Square, which is an obsolete point).
  482.  
  483.  
  484.  
  485.  
  486. Adamantaimai:
  487.  
  488. You probably already know about this one. If you were to cast Big Guard on the Adamantaimai before its first turn, it will try to use LocalVar:0000 as its attack, however, this is not given a value in the pre-battle script, so it will try to use Attack [0000] Cure which id does not have, causing a data error to occur.
  489.  
  490. It will also try to use MBarrier if it has MBarrier for the same reason. I was going to suggest setting LocalVar:000 in the pre-battle, but thinking on it, it would be tidier to add an additional check at the beginning of the Main script that looks like checks to see if Self (2060) has Barrier AND Mbarrier, jump to the end script point. This will not only avoid the data error, but also stop Adamantaimai using MBarrier when it already has it set up.
  491.  
  492.  
  493.  
  494.  
  495. Thunderbird:
  496.  
  497. One of the few enemies that makes use of the 2120 "Element of last action used" var. It is set to check for Ice, which doesn't make a whole lot of sense given that it is a lightning based attack. Change the AND 2 in the counter script to AND 4 to change the check to Lightning.
  498.  
  499.  
  500.  
  501.  
  502. Staniv:
  503.  
  504. No errors, just untidiness. The C+P'ed script from the Screamer leaves in the check for Paralyzed, which is moot seeing as Staniv does not appear alongside an enemy that can inflict Paralyzed (unlike the Screamer).
  505.  
  506.  
  507.  
  508.  
  509. Dual Horn
  510.  
  511. Remove the script to use attack [271] No Name.
  512.  
  513.  
  514.  
  515.  
  516. Jemnezmy
  517.  
  518. Performs a check for any character inflicted with Poison, which is illogical as they cannot be inflicted with Poison unless self inflicted. Maybe the Toxic Frog was supposed to inflict you with Poison?
  519.  
  520.  
  521.  
  522.  
  523. Acrophies:
  524.  
  525. Performs a check for any player *without* Darkness to use Big Red Clipper on, if all targets have Darkness, it will use Isogin Smog. The only way for the player to beome inflicted with Darkess without inflicting iton themselves is via Isogin Smog, which will never be used. Change the Darkness check from 0 to 1, so it checks for any player *with* Darkness to use BRC on, and if no players have Darkness it will use isogin smog.
  526.  
  527.  
  528.  
  529.  
  530. Jumping:
  531.  
  532. Does a weird check for players with Death, but it does not play out correctly. I don't know hat's going on there...
  533.  
  534. NFITC1 EDIT:
  535. I got it! 20A0 is the LIVING enemy actors. So testing the death status against living targets will always result in a 0.
  536.  
  537.  
  538.  
  539.  
  540.  
  541. Malboro:
  542.  
  543. SpclChance (LocalVar:0020) is set to 3 when its HP drops to below 50%, then stays at 3 when it drops to below 25%.
  544.  
  545. The use of SpclChance is a repeated script, seen time and time again with enemies; however, this is the first time I've seen an instance where SpclChance remains the same value when it drops below 25%. This leads me to believe that it could have been an error; it would be consistent with every other enemy for 0020 to be set to a value of 2 when its HP drops below 25%. For your consideration.
  546.  
  547. Alternatively, the value could remain at 3 when its HP drops below 25%, but instead change the value when its HP drops below 50% to 4. Either way, one of them needs changing.
  548.  
  549. When it uses Bio2, it performs a Check to see if any player is without Poison AND its MP is greater than the MP cost of Bio2, if that check fails, it then selects a rnd Target. The MP check either needs to be moved, removed, or repeated.
  550.  
  551.  
  552.  
  553.  
  554. Zolokalter:
  555.  
  556. really not sure if this was intentional or not, but the zolo does a 2050 check for all actors with Poison, and attacks any actor, even its allies. It seems to be an error; change 2050 to either 20B0 or 20A0 (I'm not sure which; I think 20A0 would work).
  557.  
  558. With that said, it would be pretty difficult to accidentally write the counter script in the way its written. It's peculiar, for sure.
  559.  
  560.  
  561.  
  562.  
  563. Blue Dragon:
  564.  
  565. Two things to point out. Firstly, it performs an MP check for Great Gale on its 5th attack, however, Great Gale does not cost MP, so that can be cleaned.
  566.  
  567. Secondly, this one is weird, and may very well be intentional. When it plays out its third attack (LocalVar:0000 = 2), LocalVar:0000 will remain the same value, and the third attack will loop itself. This will repeat itself until the BD's HP drops below its thresholds, and then it moves on with its normal cycle, until (if) it gets to the third Att again, in which case it loops itself once more.
  568.  
  569. It very well could be the intentional design, but it's a weird one. Worth your consideration.
  570.  
  571.  
  572.  
  573.  
  574. Cuahl:
  575.  
  576. OK, so it will counter magically if attacked physically, and counter physically if attacked magically. Not necessarily a mistake; however, if its Last Attacker has death, it will use its magical attack on the target with lowest Def, and its physical attack on target with lowest MDef. Definitely feels like a mistake to me. I think Var:0000 and Var:0020 should have been reversed, either that or swap the Attack IDs around.
  577.  
  578.  
  579.  
  580.  
  581. Jenova-DEATH:
  582.  
  583. The Attack Tropic Wind [39B] has the "Toggle Multiple" flag disabled; however, the AI Script will try to use the attack on all targets. It is likely that the "Toggle Multiple" flag was supposed to have been enabled for this attack.
  584.  
  585. Also, given that Jen-Death is the Fire variant to Jen Life, it is possible that they had intended for Death to absorb Fire. Maybe.
  586.  
  587.  
  588.  
  589.  
  590. SOLDIER:2nd
  591.  
  592. The AI script is a mess. it makes use of the 2040 var, which as far as I can tell clears the target selected. The problem with the script is that it allows for 2x Soldier:2nds to attack each other if you manipulated one and have it attack the other.
  593.  
  594. There is no simple fix for this. The whole script requires a complete re-think.
  595.  
  596.  
  597.  
  598.  
  599. Hippogriff:
  600.  
  601. The Magic Counter uses LocalVar:0060 as a hit count. The problem is, this hit count is never set, so it will always be a value of 0. I assume that at some point this was supposed to be set, presumable after the Physical counter triggers to set it to stage 2 (just after 0x065, after "Row" (4270) is set to 16).
  602.  
  603.  
  604.  
  605.  
  606. Diablo:
  607.  
  608. Similar to one of the Turks, there is a lack of a check for The last Command ID (&2000). It only checks for Last Att ID. As TF has documented, this allows for the following items to also trigger the Magic Counter Script:
  609.  
  610. BUG: Due to flaws in the AI script, Diablo does not react to most spells as
  611. he should:
  612.  
  613. He will react to the correct Magic/W-Magic spells properly
  614. He will react to Mute Mask, War Gong, Loco Weed, Impaler and Ink with Cold
  615. He will react to Fire Fang, Fire Veil, Antarctic Wind and T/S Bomb with
  616. Flame
  617. He will not react to Pahsana Greens or Holy Torch, despite them having the
  618. correct ID (they don't trigger the Counter Attack)
  619. He will NOT react to ANY Summon or E.Skill
  620.  
  621. err... not sure why he has stated that they will not react to any Summon or E Skill when he contradicts himself in the following paragraphs....
  622.  
  623. That's because it does not react to E Skills or Summons. I don't know why. I think that the attack id only pulls from the "pool" of Magic and Item commands. You will likely need to add three command checks, one for Magic, one for E Skills and one for Summon.
  624.  
  625.  
  626.  
  627.  
  628. Ho-chu:
  629.  
  630. Performs a check for any players without Confusion. The player cannot be inflicted with Confusion unless its self inflicted. None of the Ancient Forest enemies inflict you with confusion. It's likely the check was for Sleep.
  631.  
  632.  
  633.  
  634.  
  635. Death Machine:
  636.  
  637. The Death Machine needs to be looked at. It will only use its Count=0 Count=1 and Count=2 attacks normally, the other three attacks need to be triggered via the counter script.
  638.  
  639. There seems to be a flaw when it uses its count=3 attack. After the attack, it will change change the Count var, so it will keep using that attack until its HP drops to below 1/3, when it will jump to count=5. It seems as though it should have jumped to count=0 after using its count=3 attack. I'm not 100% tbh. Needs investigation.
  640.  
  641. Hm. I see what's happening. There is a jump at 0x0E3 (straight after using the count=3 attack) which jumps to 0x0EB, so it follows up with the count=4 attack. After the count=4 attack, count is set to 0. Unusual, for sure, but probably not an error.
  642.  
  643.  
  644.  
  645.  
  646. Submarine Crew:
  647.  
  648. Once it's HP drops below 75%, it starts using Machine Gun on the target with the lowest HP. It never uses Hand Grenade. This may or may not be intentional; the attacks have been C+Ped from the Grenade Combatant. Either that didn't bother to remove the unused action, or, they had intended for Hand Grenade to be used in place of Machine Gun once LocalVar:0020 had been toggled.
  649.  
  650. It's likely that the script plays as intended, I just thought I'd make a note of it.
  651.  
  652. Ah, wait, I see what should have happened. It should have used Hand Grenade three times only; that's why Var:0000 is counting down each time it uses Machine Gun. Once it has used Machine Gun three times, it instead uses.... Machine Gun. The countdown is redundant, unless they had intended the Submarine Crew to use Hand Grenade, similarly (if not identical) to the Grenade Combatant. Maybe, they just got lazy, and decided to C+P the script to then make a single change, so that it wasn't identical to the GC. That seems most likely, although TF reported it as a bug. Definitely one for consideration.
  653.  
  654. Also, a very small observation, when you enter the small lift previously not accessible at the end of the long tunnel, the "Hurry" theme starts playing, then moments later we're thrown into a battle with the Fighting theme. It seems that the scene would have ran smoother with the Hurry theme playing throughout the battle with the Fanfare theme disabled. Just a thought.
  655.  
  656.  
  657.  
  658.  
  659. Guard System (plus counterparts):
  660.  
  661. Exactly the same problem occurs here as it does with the Warning Board. When either the QMG or RL is killed, the 4020 'Self Active' is not toggled, so the other enemy thinks that it is still alive and will not spawn in. Both enemies are scripted to behave differently if their counterpart has died, but cannot spawn in.
  662.  
  663. Just use the same Death Counter script as suggested for the earlier for the Shinra HQ variants, and that should work fine.
  664.  
  665.  
  666.  
  667.  
  668. Turks:Reno (Gelnika Battle 112h)
  669.  
  670. Same as previous errors - no Command ID check, so it reacts to Ice
  671. Crystal, Bolt Plume and Swift Bolt as if they were Bolt spells. Include a 2000 Command ID check to fix the problem.
  672.  
  673.  
  674.  
  675.  
  676. Turks:Rude Gelnika
  677.  
  678. They seem to have copy and pasted the script from the Gongaga Battle, and done a really bad job of fixing it. Once Var:0060 has been toggled, he will no longer attack. Change the argument at 0x10C from 0 to 1 to fix the problem.
  679.  
  680.  
  681.  
  682.  
  683. Unknown:
  684.  
  685. Hm. Not sure if this is an error or not, but the Magic Counter deserves to be looked at. Once the Unknown enters into its second stage (HP <= 33.3% AND taken a physical blow once HP has dropped below threshold), it will begin using Blaster.
  686.  
  687. Each time it then takes Magical damage, LocalVar:0000 increases by one (starts off at a value) of 2. If 0000 = 3, the Unknown will sit idle, never to attack the player until it takes Mag damage, at which point 0000 becomes 0. It's a bit weird to say the least, but possibly not a design fault. definitely worth consideration.
  688.  
  689.  
  690.  
  691.  
  692. Unknown 3:
  693.  
  694. Silly, silly check. The MP check is for action [001B], which is Fire. The check should be for action [0022]; change the argument @ 0x023.
  695.  
  696. Also, if all players have Poison, the Unknown 3 will never attack. Error? Maybe. Maybe not.
  697.  
  698. Wow. They also seem to have messed up the values for LocalVar:0000. At 0x067 the check is to see if Rnd MOD 0000 = 3, but it has already performed that check at 0x056. It seems as though the check at 0x067 should have been an argument of 4 and 0x06F should have been 5. For your consideration. In fact, I'm certain, the values are wrong; as it stands (presuming the MP check is fixed for the correct action), it can still use Bolt2 if it fails the MP check.
  699.  
  700.  
  701.  
  702.  
  703. Serpent:
  704.  
  705. Dragoon Dance is scripted to target all players, but the action does not allow for the use of the "toggle multiple" flag.
  706.  
  707.  
  708.  
  709.  
  710. Turks:Elena:
  711.  
  712. Seems like an error to me. The Death Counter is a C+P from Reno, but they didn't change the dialogue, so when Elena is killed the text will display: Reno “Let's call it a day.” which is the same thing Reno says. lol.
  713.  
  714. edit - after battling them, the camera angle suggests that the dialogue could be coming from Reno. Worth taking a look at.
  715.  
  716. Oh, and the normal Fighting theme plays throughout the battle instead of the Still More Fighting theme.
  717.  
  718. Hm, I just noticed also - if you have not completed Yuffie's sidequest, a different Battle Mode is used - if you opt to battle them given the option, the victory pose will not play; however, it will play if the encounter was mandatory.
  719.  
  720.  
  721.  
  722.  
  723. Turks:Rude Sector 8:
  724.  
  725. 0x000BattleAddr(&2070) <- (BattleAddr(&20A0).BattleAddr(&4060) != 18)
  726.  
  727. This is wrong. He will try to attack all players except tifa with an ability that can only target one opponent, so instead he will just pick a random target (including tifa)
  728.  
  729. 0x000BattleAddr(&2070) <- RandomBit(BattleAddr(&20A0).BattleAddr(&4060) != 18)
  730.  
  731.  
  732. ^^ This is how it should look.
  733.  
  734.  
  735.  
  736.  
  737. Maximum Kimaira:
  738.  
  739. Magic Counter script is a bit flawed. It uses 40E0, which is last Physical attacker, so it will use Freeze on the last Physical attacker instead of the last Mag attacker. Change the 40E0 argument @ 0x01F to 40F0 to fix the problem.
  740.  
  741.  
  742.  
  743.  
  744. Lifeform-Hojo N
  745.  
  746. Uses the attack Absorb 3A2. It is supposed to drain the HP/MP from its target; however, it needs to also make use of the 'DrainDmg' flag, along with the Drain HP/MP flag.
  747.  
  748.  
  749.  
  750.  
  751. Gargoyle 1st Form:
  752.  
  753. It is supposed to transform into its second form when a Soft is thrown at it. A Soft will not trigger the General Counter script. I tried C+Ping it into the Magic Counter Script, this still did not work. I do not know how to make it so that throwing the Soft has the desired effect. Also, if you do get it to work, the W-Item Command check is not present, so that will need to be added.
  754.  
  755. Also, it checks to see if it is attacked via any command that isn't Attack; perhaps this should also check for 2x-Cut and Slash-All?
  756.  
  757.  
  758.  
  759.  
  760. Dark Dragon:
  761.  
  762. It uses Dragon Force on itself, but logically it should perform a count to stop it from using it more than twice; I hear Dragons are quite intelligent creatures....
  763.  
  764.  
  765.  
  766.  
  767. Allemagne:
  768.  
  769. Has a run count of 3 in all encounters on the left-lower path, but a run count of 1 in the swamp area.
  770.  
  771. It also does an MP check for L3 Flare when considering L4 Death; seeing as bot actions cost the same amount of MP, this will not matter. Still, an error nonetheless.
  772.  
  773.  
  774.  
  775.  
  776. Christopher:
  777.  
  778. Performs an MP check for High/Low Suit [3A5] variance, but then uses Suffocation Song; it's supposed to use S Song if the rnd chance passes, and High Low Suit if the chance fails, but instead uses S Song in both instances. S Song costs 0 MP, so the MP check does not cause a problem, but the 3A5 variant which inflicts Fury is never used, and seeing as it performs checks for Fury, 03A5 was definitely supposed to have been the argument at 0x0458.
  779.  
  780. Also, the jumps seem to be off when it is on its 5th attack - 0000 = 4. If no targets have Fury, it uses Aspil to absorb MP, and if its MP is less than the cost of High/Low suit if will repeat its 1st attack when 0000 = 0 (Flutilizer). This is inconsistent with the rest of its attacks, and with logic; it should use Aspil when its HP is less than 10, and Flutilizer when no targets have Fury.
  781.  
  782.  
  783.  
  784.  
  785. Dragon Zombie:
  786.  
  787. There is no MP check for Pandora's Box. If it has less than the MP required to cast the skill, the globalvar will still be toggled. This may have been intentional, it may not have been. It's worth consideration. You could either make it so that the globalvar is not set if it fails the MP check, or, if it fails the MP check you could have it replenish its own MP so it uses PB. Or keep it as it is; like I said, I don't know if the DZ behaves in the way it was designed re PB.
  788.  
  789.  
  790.  
  791.  
  792. Death Dealer:
  793.  
  794. Lol. It nullifies the Restorative element, then tries to Use Emperor on itself to cure itself, which uses the Restorative element, so it heals for 0 HP. Perhaps it was meant to take double damage from Restorative? Or maybe it should have nullified Holy? Either way, it should not nullify Restorative, haha. Perhaps remove the Restorative properties of Emperor so that it actually heals itself when the ability is used.
  795.  
  796.  
  797.  
  798.  
  799. Jenova-SYNTHESIS:
  800.  
  801. Uses the attack Absorb 3B3. It is supposed to drain the HP/MP from its target; however, it needs to also make use of the 'DrainDmg' flag, along with the Drain HP/MP flag.
  802.  
  803. This is not a bug, but a suggestion: the 4278 var controls the body part of the enemy selected. Jen [A] is set to 3 (head), [B] is set to 16 (base of left tentacle), and [C] is set to 20 (decimal).
  804.  
  805. It took me a long time to work out what 4278 did, but once I'd figured it out I stumbled across something interesting: if you set the value from 16 to 10 for the left tentacle (which I did by accident due to working with hex), then the body part selected will instead be the apex of the tentacle, and the finger icon even sways with the tentacle; it looks a lot cooler, you should see for yourself and consider changing it. I'll throw a quick vid together if you don't have the time to mess around yourself, you'll see what I mean. I don't know what J-Synth [C]' 4278 needs to be to target the mirrored body part on the right tentacle, but it won't take me long at all to find out.
  806.  
  807.  
  808. It appears as though Cloud's Lv being > 60 should have triggered the 3-party fight with Biz, however, the checks all run sequentially, and the check "quantity of levels < 45" will override value set via the 'Powerful Cloud' flag (cloud's lv > 60).
  809.  
  810.  
  811.  
  812.  
  813. Bizarro Sephiroth 1-Party variant (enemy 0145):
  814.  
  815. When it uses Stigma (Count = 4), it checks to see if the Core is alive and if the Head is alive. If this passes, it uses one of two versions of Stigma. The 3B2 variant can never be used, as the IdleAnim ID is set to 0 when the head is alive, and the head has to be alive for Biz-Seph to use Stigma meaning the idle anim ID will always be 0 if it gets to that check. Perhaps a C+P error?
  816.  
  817. ^ Same applies to all other variants
  818.  
  819.  
  820.  
  821.  
  822. Bizarro Sephiroth 2-Party "Main" variant (enemy 0147):
  823.  
  824. Fatal flaw with the Death Script:
  825.  
  826. DEATH COUNTER:
  827.  
  828. 0x000TempGlobal <- &GlobalVar(MainDeathMask)
  829. 0x005LocalVar:TempMask <- BattleAddr(&MemBank1/2)
  830. 0x00C If ( (LocalVar:BizHead.BattleAddr(&DeathStatus) == 1) )
  831. 0x00C {
  832. 0x019 LocalVar:TempMask <- LocalVar:TempMask OR 64
  833. 0x023 }
  834. 0x023 Else
  835. 0x023 {
  836. 0x026 LocalVar:TempMask <- LocalVar:TempMask AND 191
  837. 0x030 If ( (LocalVar:BizCore.BattleAddr(&DeathStatus) == 1) )
  838. 0x030 {
  839. 0x03D LocalVar:TempMask <- LocalVar:TempMask OR 32
  840. 0x047 }
  841. 0x047 Else
  842. 0x047 {
  843. 0x04A LocalVar:TempMask <- LocalVar:TempMask AND 223
  844. 0x054 If ( (LocalVar:BizShoulder.BattleAddr(&DeathStatus) == 1) )
  845. 0x054 {
  846. 0x061 LocalVar:TempMask <- LocalVar:TempMask OR 16
  847. 0x06B }
  848. 0x06B Else
  849. 0x06B {
  850. 0x06E LocalVar:TempMask <- LocalVar:TempMask AND 239
  851. 0x078 If ( (LocalVar:BizWing.BattleAddr(&DeathStatus) == 1) )
  852. 0x078 {
  853. 0x085 LocalVar:TempMask <- LocalVar:TempMask OR 8
  854. 0x08F }
  855. 0x08F Else
  856. 0x08F {
  857. 0x092 LocalVar:TempMask <- LocalVar:TempMask AND 8 << This should be 247!!
  858. 0x09CBattleAddr(&MemBank1/2) <- LocalVar:TempMask
  859. 0x0A3GlobalVar(MainDeathMask) <- &TempGlobal)
  860.  
  861.  
  862. The final AND 8 will set all of the flags to 0, which means that the Death Status of the other body parts is only recorded properly when the Wing is dead. If you kill the Shoulder with the wing still alive, the shoulder will incorrectly by alive when you switch from the right-side back to the left. Also, if you kill the head it should still be dead when you switch to the right; this glitch prevents that from happening.
  863.  
  864.  
  865.  
  866.  
  867.  
  868. Bizarro Sephiroth 2-Party "Sub" variant (enemy 0146):
  869.  
  870. Bizarro [D] and [E] will both absorb elements (33), which is Fire and Gravity. Seeing as they already have gravity defense, it's likely that they should have absorbed Fire and Earth (9), compared to the single and three parties.
  871.  
  872. Another fatal flaw identified. The count is completely messed up. Firstly, look at the Main script working *correctly* for the "main" (left-side) variant (enemy 0147):
  873.  
  874.  
  875. 0x17B TempGlobal <- &GlobalVar(Party1TurnCount)
  876. 0x180 BattleAddr(&MemBank1/2) <- BattleAddr(&MemBank1/2) + 1
  877. 0x18A GlobalVar(Party1TurnCount) <- &TempGlobal)
  878. 0x18F LocalVar:Count <- BattleAddr(&MemBank1/2)
  879. 0x196 If (LocalVar:Count == 1)
  880.  
  881. This correctly sets LocalVar:0100 (Count) to increment by 1 at the beginning of each turn, and begins where it left off from when you switch from the right side to the left.
  882.  
  883. Now look at the problem with the right side "sub" variant, enemy 0146:
  884.  
  885.  
  886. 0x182 TempGlobal <- &GlobalVar(Party2TurnCount)
  887. 0x187 BattleAddr(&MemBank1/2) <- BattleAddr(&MemBank1/2) + 1
  888. 0x191 GlobalVar(Party2TurnCount) <- &TempGlobal)
  889. 0x196 If (LocalVar:Count == 1)
  890.  
  891. The local var is not being set. Instead, LocalVar:00E0 (Count) is set earlier on:
  892.  
  893.  
  894. 0x059 If (BattleAddr(&Self).BattleAddr(&GrpFormID) == 0)
  895. 0x059 {
  896. 0x065 BattleAddr(&Self).BattleAddr(&CurrentMP) <- BattleAddr(&Self).BattleAddr(&MaxMP)
  897. 0x074 TempGlobal <- &GlobalVar(2ndPartyCoreVulTurnCount)
  898. 0x07A LocalVar:CoreVulTurnCount <- BattleAddr(&MemBank1/2)
  899. 0x081 If ( (LocalVar:CoreVulTurnCount > 0) )
  900. 0x081 {
  901. 0x08A LocalVar:CoreVulTurnCount <- LocalVar:CoreVulTurnCount + 1
  902. 0x094 BattleAddr(&MemBank1/2) <- LocalVar:CoreVulTurnCount
  903. 0x09B GlobalVar(2ndPartyCoreVulTurnCount) <- &TempGlobal)
  904. 0x0A1 LocalVar:Count <- BattleAddr(&MemBank1/2)
  905. 0x0A8 LocalVar:AttackConfirmed <- 0
  906.  
  907.  
  908. The line at 0x0A1 needs to be cut and pasted after 0x196. The "Count" variable is being incorrectly set to the "Core Vulnerable Turn Count"; if the core has physical and immunity in place, then it will just use Demi3 repeatedly. When you kill the Shoulder + Wing, it will just keep using Sephiroth Shock barring Count=4, when it will use Stigma or heartless Angel. It will never heal its two "Magic" parts as it was intended. It's completely broken!
  909.  
  910.  
  911.  
  912.  
  913.  
  914. Bizarro Sephiroth 3-Party "Main" variant (enemy 0148):
  915.  
  916. Both shoulders absorb Ice and Lightning. Group ID = 3 (Right Magic) correctly sets the absorbed elements to 6, which corresponds to the left-side variant of Bizarro's shoulder' however, the right (Left Magic) party absorbs elements "9", which is Fire and Earth. The main party Group ID = 4 (Left Magic) should also absorb elements "9" instead of 6.
  917.  
  918.  
  919.  
  920.  
  921. Emerald Weapon:
  922.  
  923. It seems they have messed up the count a little bit. There are two checks for Count being 3, one of which will never be looked at. It seems as though Emerald should have skipped one more turn than it currently does after transforming to stage 2. The Count vars (LovalVar:0000) all need to be increased by one from the 2nd check for 0000 being 3. Maybe. Perhaps they made it intentional (bypassing the check is easier than removing it).
  924.  
  925.  
  926.  
  927.  
  928. Ruby Weapon:
  929.  
  930. Absorbs the Hidden Element. Not sure why...
  931.  
  932. A glitch which stops the battle from ending (taken from the Wikia):
  933.  
  934. There is a glitch that makes the battle not end even after Ruby Weapon is defeated. In this situation the only way to get out is to escape. To make the glitch happen the player must kill both of Ruby Weapon's tentacles once, so that Ruby Weapon will remove them. Once Ruby Weapon puts the tentacles back the player must kill only one of the tentacles.
  935.  
  936. Even if the second one is still alive, Ruby Weapon will remove both. After Ruby Weapon has pulled the tentacles away the player must kill Ruby Weapon itself, triggering the glitch. The battle isn't over because one tentacle is still alive, even if there is nobody for the party to fight. After escaping the battle Ruby Weapon has disappeared from the world map.
  937.  
  938. My best guess to fix this is to have some looping script running in the Formation itself, similar to the script seen with Bottomswell or Carry Armor.
  939.  
  940. Either that or make it so that Ruby will only remove revert back to Stage 1 if *both* tentacles are dead (turn the OR into an AND).
  941.  
  942. Or, even easier and cleaner, just make use of the absent 4020 and 4022 addr in the death counter script. That would be the neatest way to fix the script
  943.  
  944.  
  945.  
  946.  
  947. Sephiroth (Kalm Flashback version):
  948.  
  949. Checks for encounters with only one enemy, which is the Zuu battle. It then acts differently if the Zuu is flying or not; however, the Zuu encounters are not faced during the Kalm flashback.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement