Author Topic: Mini-game Fixes  (Read 43951 times)

DLPB_

  • Banned
  • *
  • Posts: 11006
    • View Profile
Re: Mini-game Fixes
« Reply #75 on: 2013-02-24 02:08:43 »
Master Summon is not game breaking because to get the max points is out of the reach of over 99%.  It also costs a fortune in GP.  If people are good enough to beat the game with max points, fair play to them.  Even then, the Knights of the Round summon would not save them against most enemies because it costs a lot of AP and it can only be used once, not to mention it is weaker at start.  I could always make it so it is only available later in the game too.

My difficulty mod will balance it out.

I still haven't made top score.  I can get within 30 of it, and I am a very good player at it :)
« Last Edit: 2013-02-24 02:13:23 by DLPB »

DLPB_

  • Banned
  • *
  • Posts: 11006
    • View Profile
Re: Mini-game Fixes
« Reply #76 on: 2013-02-25 04:53:36 »
The other minigames in Gold Saucer needed change too

1.  The script is often programmed not to add on the GP if it will go over 10000, rather than set to 10000 when you go over.  Some places do, others don't.  Lazy and ridiculous...  The code can be far simpler. (You will still get 10000 with both systems, but it really is a bit silly when you can place if gp>10000 then gp=10000 at the bottom)

2. I am doing the following at the Gold Saucer Wonder Square:

a. Wrestler and Sumo Wrestler are harder.  Sumo is reasonably difficult, but Wrestler is more like Metal Gear Solid 2 Euro Extreme Mode. Probably worse. 

b. Wonder Catcher odds changed slightly.

c. Submarine game updated

d. 3d-Battler odds of winning whole thing made roughly 400-1 down from 3709-1 (the original programmer made a critical mistake with understanding how probability works).  Bug also fixed.  Bug exists because during test stage, no tester managed to beat this game.

e.  A lot of prizes amended. More prizes have been added to G-Bike.
« Last Edit: 2013-02-25 05:51:59 by DLPB »

DLPB_

  • Banned
  • *
  • Posts: 11006
    • View Profile
Re: Mini-game Fixes
« Reply #77 on: 2013-02-27 09:44:32 »
I need some people here to do some tests for me.  Need you to try and get the highest score you can at G-Bike.  My best is 17400.

That way I will know what prizes to use. I am confident of these already but would be good to know for sure.

mystery_editor

  • *
  • Posts: 76
  • Mmm... Pi
    • View Profile
Re: Mini-game Fixes
« Reply #78 on: 2013-02-27 12:19:57 »
Is there any scoring difference in G-Bike between the PSX and PC versions?

DLPB_

  • Banned
  • *
  • Posts: 11006
    • View Profile
Re: Mini-game Fixes
« Reply #79 on: 2013-02-27 20:14:48 »
No.  If there were, I would have fixed it.  8-)

Ansem

  • *
  • Posts: 136
    • View Profile
Re: Mini-game Fixes
« Reply #80 on: 2013-02-27 20:24:12 »
Judging by the G-Bike score I just did for the sake of showing off my skills your magnificent work, the maximum amount of points is 20000. Am I right?

Anyway, for the high score, see my screenshot here: http://i218.photobucket.com/albums/cc143/Shadow_Saix/G-BikeScore.png
NOTE: The hi-score in the screenie is outdated - look at the new score instead.   ;D

The truck got hit only two or three times during the entire chase. Also, I missed one red motorcycle at the very end of the road; whatever points I'm missing are the ones from that red motorcycle and the 2-3 hits the truck took.

DLPB_

  • Banned
  • *
  • Posts: 11006
    • View Profile
Re: Mini-game Fixes
« Reply #81 on: 2013-02-27 20:25:48 »
There is no maximum score that I know of.  There likely is a limit but online the highest I have seen is 29000.  Someone prob has slightly more or less.

At the moment, I have 20000+ as the top prize and that seems good.

Thank you for that. Seems to confirm to me that 20000 is a good high score.
« Last Edit: 2013-02-27 20:27:36 by DLPB »

Ansem

  • *
  • Posts: 136
    • View Profile
Re: Mini-game Fixes
« Reply #82 on: 2013-02-27 20:40:07 »
Fair enough. Glad to be of help. :)

DLPB_

  • Banned
  • *
  • Posts: 11006
    • View Profile
Re: Mini-game Fixes
« Reply #83 on: 2013-02-28 05:15:13 »
Although this one is tool assisted >

http://www.youtube.com/watch?v=YIYzKCi-bC4

So perhaps 29000 is either exactly the top score or very near it.
« Last Edit: 2013-02-28 05:17:45 by DLPB »

DLPB_

  • Banned
  • *
  • Posts: 11006
    • View Profile
Re: Mini-game Fixes
« Reply #84 on: 2013-03-01 11:30:27 »
Seems that there was meant to be another wonder catch minigame in the second room of Wonder Square. When you first get there an NPC is blocking it, but later in the game he is not there.  Even though he is not there anymore, it doesn't matter because any programming that was there in script is gone.

Probably very easy to put something back but for now I don't think I will bother.

I have updated the prize for Snowboard so that if you get 100 on every course you get top prize of 500GP.  I may try to update this so that it also gives out prize for brilliant times in speed attack.  But for now I am happy with this.

I have updated submarine so that each level gives out increasing GP and prize. Of course... the new minigame is also much harder for each level with the new updates I have made.
« Last Edit: 2013-03-01 12:22:55 by DLPB »

DLPB_

  • Banned
  • *
  • Posts: 11006
    • View Profile
Re: Mini-game Fixes
« Reply #85 on: 2013-03-26 20:16:12 »
I may need NFITC1's help to finish the Submarine minigame.  The AI of the enemy is a little weird to understand....  everything else is done.  I'd appreciate someone looking into what I have found here anyway because it makes no sense to me and someone with more insight into assembly would answer a few questions. I will get back to this soon.

DLPB_

  • Banned
  • *
  • Posts: 11006
    • View Profile
Re: Mini-game Fixes
« Reply #86 on: 2013-03-27 01:40:08 »
Submarine mini game.  The following addresses are memory.

009884F8
First table.  Seems to be main initialisation data of player submarine (initial position etc). I fixed this up to the International standard by copying the table from the PSX International game.

Some Questions.

1. Why does the game take these values from the exe at run time when it doesn't need to.  It is already  in memory. If you edit memory, it is simply replaced from the exe itself. In other words, it is replacing the SAME data.  Is it possible to disable this behaviour so that we can edit memory to reflect changes at runtime  rather than have to edit the exe?

2.  Why are there almost identical tables to this one further down, like the one starting at 0098B6E8?   What is this for?  I assumed each table was for the different game levels, but if this is so, why doesn't  changing the exe for them do anything?  (at least that I saw).    Is it the case that they were designing  5 unique difficulty levels and then just gave up?

3.  The tables (or at least parts of them?) are copied when  the sub game starts to yet another area (area  changes).  The area being the temp data area/ vars around 00125000)  Why isn't it just reading the  values from where they are originally in memory (009884F8 for example)?

4. The byte value A0 8C in the tables (and other hard coded places like 00780DB6) is the time limit (10  minutes, 36000/60/60).  This time value, and other values, are not reflected when they are changed.   Instead, all levels share the value at 00980DD0, which can be edited at run time.  So there are multiple  A0 8C values that appear completely redundant.

5. There is hard coded data related to the enemy subs starting at 00780E4A.  The value here is Sub 1  (of maximum 12) energy (4000). The following entries are related to Sub 1.  Sub 2 starts at 00780EBC  for example.  Each level has 12 hard coded subs (so total is 60 records for the 5 difficulty levels).  Whether a sub will appear or  not in any given level is dependent on whether its flag is set to 1.  I forget which this is now but it is  easy to find again.  probably the entry like at 00780E8C.  Some of these values affect the enemy sub's  starting point and possibly speed.  However, when I documented these entries a while ago (which I have  now lost), the actual sub's movement pattern remained a mystery.  Where is it coming from?  How  does the AI work for each sub in each level?

6. It seems that some of  this data is not used at all and again.. data is duplicated.  Why is there 2  identical sets of data, 1 hard coded and 1 tabled? For example, look at the main table 009884F8 and  then compare to 00780DB6.  What the fuck is going on???

7. The data above the main tables has a format like

Code: [Select]
37 37 37 37 37 37 37 37 37 37 37 37 34 30 30 34
34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34
34  34 34 34 34 34 34 34 34 34 34 34 34 34 34 34
34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34
34 34  34 34 34 34 34 34 34 34 34 34 34 30 30 30
30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30

I remember this being the actual level design itself?

 :o :o :o :o I need help.  I am going insane in that exe. :o :o :o :o
« Last Edit: 2013-03-27 01:43:21 by DLPB »

nfitc1

  • *
  • Posts: 3011
  • I just don't know what went wrong.
    • View Profile
    • WM/PrC Blog
Re: Mini-game Fixes
« Reply #87 on: 2013-03-27 04:27:07 »
Some Answers (or at least educated guesses):

Quote
1. Why does the game take these values from the exe at run time when it doesn't need to.  It is already  in memory. If you edit memory, it is simply replaced from the exe itself. In other words, it is replacing the SAME data.  Is it possible to disable this behaviour so that we can edit memory to reflect changes at runtime  rather than have to edit the exe?

Probably sanity checks. I'll explain this later on.

Quote
2.  Why are there almost identical tables to this one further down, like the one starting at 0098B6E8?   What is this for?  I assumed each table was for the different game levels, but if this is so, why doesn't  changing the exe for them do anything?  (at least that I saw).    Is it the case that they were designing  5 unique difficulty levels and then just gave up?

These are maps. There are TWO submarine mini-games in this game, the one the game forces you to play, then the one at Gold Saucer. They are both treated as different games although there is lots of duplicate and shared code. This is probably why the sanity checks exist. You can retry the Gold Saucer one, but not the one that's forced on you. The multiple memory replacements mentioned above probably exist to ensure that a retried game resets the data to the starting point.

Quote
3.  The tables (or at least parts of them?) are copied when  the sub game starts to yet another area (area  changes).  The area being the temp data area/ vars around 00125000)  Why isn't it just reading the  values from where they are originally in memory (009884F8 for example)?

Because anything less than 0x401000 is considered mutable. Every processor handles this differently, but it's essentially processor level cache that can be read and modified more cheaply than going out to RAM. It wouldn't be an issue with more modern hardware, but when it came out every tick counted.

Quote
4. The byte value A0 8C in the tables (and other hard coded places like 00780DB6) is the time limit (10  minutes, 36000/60/60).  This time value, and other values, are not reflected when they are changed.   Instead, all levels share the value at 00980DD0, which can be edited at run time.  So there are multiple  A0 8C values that appear completely redundant.

Not surprising. This kinda goes back to the sanity check thing.

Quote
5. There is hard coded data related to the enemy subs starting at 00780E4A.  The value here is Sub 1  (of maximum 12) energy (4000). The following entries are related to Sub 1.  Sub 2 starts at 00780EBC  for example.  Each level has 12 hard coded subs (so total is 60 records for the 5 difficulty levels).  Whether a sub will appear or  not in any given level is dependent on whether its flag is set to 1.  I forget which this is now but it is  easy to find again.  probably the entry like at 00780E8C.  Some of these values affect the enemy sub's  starting point and possibly speed.  However, when I documented these entries a while ago (which I have  now lost), the actual sub's movement pattern remained a mystery.  Where is it coming from?  How  does the AI work for each sub in each level?

It's possible it's getting set in 0x79CF47. Can't confirm that though, but it does have something to do with the sub game. I would imagine it as a bounded random motion until it detects the player's sub and begins attacking.

Quote
6. It seems that some of  this data is not used at all and again.. data is duplicated.  Why is there 2  identical sets of data, 1 hard coded and 1 tabled? For example, look at the main table 009884F8 and  then compare to 00780DB6.  What the f*ck is going on???

Sanity check.*

Quote
7. The data above the main tables has a format like

Code: [Select]
37 37 37 37 37 37 37 37 37 37 37 37 34 30 30 34
34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34
34  34 34 34 34 34 34 34 34 34 34 34 34 34 34 34
34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34
34 34  34 34 34 34 34 34 34 34 34 34 34 30 30 30
30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30

I remember this being the actual level design itself?

Yep. Those are altitudes of the terrain in ASCII format (30 = "0", 31 = "1", etc). Don't ask me why they chose that instead of straight byte numerics. They could have even compressed it further by grouping it in triplet bits since none of the values goes higher than "7". You remember this, right?

Now, as for sanity checks. Remember there are multiple people writing code for this game. The mini-game developers were a team, but they didn't always communicate everything. That's why some values are hard-coded in static memory and some are coded in the executable commands. Someone probably created modular instances after they were all hard-coded in another usage. Rather than convert the hard-coded instances to modular, they were just left there (probably because it would take too long to convert). That will make it slightly hard to track and sync with each instance, just know that there are two places to modify things like this.

DLPB_

  • Banned
  • *
  • Posts: 11006
    • View Profile
Re: Mini-game Fixes
« Reply #88 on: 2013-03-27 04:35:51 »
Thanks for that, it's at least a little clearer now...

The Gold Saucer gives the option for Mako reactor battle.  If I edit this game, can I assume the actual in game version will be changed also?  Or is it completely separate?

The tables I mentioned and other data... is  lot of that completely unused in game?  Redundant due to this Sanity Check?

If so, how can I know what is and is not used, and is it possible to make it simpler by just zeroing all the none used data?
« Last Edit: 2013-03-27 04:39:28 by DLPB »

nfitc1

  • *
  • Posts: 3011
  • I just don't know what went wrong.
    • View Profile
    • WM/PrC Blog
Re: Mini-game Fixes
« Reply #89 on: 2013-03-27 11:34:09 »
Quote
Thanks for that, it's at least a little clearer now..

Good. I'm not sure I understand it all. ???

Quote
The Gold Saucer gives the option for Mako reactor battle.  If I edit this game, can I assume the actual in game version will be changed also?  Or is it completely separate?

Very likely not. There are at least two copies of all the maps for this game. One set is for the forced game to randomly select from and the other set is the Gold Saucer maps. It shouldn't be too hard to tell which one is which.

Quote
The tables I mentioned and other data... is  lot of that completely unused in game?  Redundant due to this Sanity Check?

I wouldn't say completely unused. There are three possibilities. One is that both games load them all in which case only the second load is important. Another is that one of them loads both while the other only loads one. And finally, it's possible that they both are separate and only one gets loaded per game. Given what you've already said I'd say it's likely the second option. The shared code should stay.

Quote
If so, how can I know what is and is not used, and is it possible to make it simpler by just zeroing all the none used data?

Yup. This looks like a job for trial and error. Good old fashioned brute force attack. A "good" way to start IMO would be to figure out which maps go with what loading routines and five them different identifiable patterns ( like a big letter "A" in one, "B" in another, etc). Since they are ASCII values they are easy to modify.

DLPB_

  • Banned
  • *
  • Posts: 11006
    • View Profile
Re: Mini-game Fixes
« Reply #90 on: 2013-03-27 18:04:58 »
I think it is loading them twice you know... All data twice... if that is the case and only second set of data matters I suppose I can ignore whatever comes first.  I will do some proper tests soon on this.  It does seem that the code in there could be 10x simpler....  If I were making this game there is no way there would be 2 sets of data, or maps... if the data is there then it should be simple to use it without dupes.

I will see what happens.  I am sure I zeroed all that map data before... and nothing changed.  If that is so it means the maps are hardcoded elsewhere as well.  I will test all this out...  get to the bottom of it.

If you could, and have the time, see if you can find out how the AI works.  I mean I understand some of those values I sent deal with its start location, whether it is displayed, its type (blue,yellow, red) and what not, but I was never able to find what controls the enemy submarines movement pattern around the map.  They all move differently, at different speeds...
« Last Edit: 2013-03-28 00:18:47 by DLPB »

DLPB_

  • Banned
  • *
  • Posts: 11006
    • View Profile
Re: Mini-game Fixes
« Reply #91 on: 2013-03-28 01:09:33 »
The level map tables are used.  The game does use both sets of data separately for Mako battle and Gold Saucer Mako battle).  The main table at 9884F8 is used but all the identical type tables afterwards seem to have absolutely no use at all at the Gold Saucer.  haven't checked main game one yet but I am betting the only one that is used is 9884F8.  I am beginning to wonder whether this minigame was once to have unique level difficulties including different times etc... but that it was cut.  I mean... all 5 levels are the same except for submarine numbers and map type.  Something went really wrong with this game... very likely time ran out. 9884F8 sets the time, and ally sub data (starting position, health etc). It is my belief that each level was supposed to change all these values... that all 5 tables were once used (1 for each level) but now only the first is. 

Enemy sub data starts at 00783574 for first sub gold saucer mako battle version.  I am looking at what the values mean.  So far:

All values below are hex.

1. Health (1770) [Ally sub default damage is 200 a missile if I remember]
2. Unknown (0)
3. Unknown (0)
4. Angle of the submarine graphic. (0) 
5. Unknown (12C)  Related to movement of Sub. When set to 0 and record9 is set to 57, sub seems to continually move about with speed set at record6.  There are a lot of variables involved here, so the exact relationship is hard for me to get.

6. Speed of Sub (36B0) [Although after a certain amount of time, some subs have a secondary speed...weird).
7. Draw Sub flag 0 and 1 (if set to 0, sub will not appear)
8. Type (0=Yellow, 1=Blue, 2=Big Red, 3=Red)
9. Unknown (0) if set to incorrect value, game will crash.  Seems to be related to movement pattern of Sub.
This value may actually be an identifier for the AI itself. A value of 57 seems to be an example of a pattern that does not end, but loops.  The sub just roams about in a circle after moving to a certain point first.

10. Unknown (FFFFFFE4)
11.Unknown (0000000A)
12.Unknown  (FFFFFFF1)

Subs either seem to follow a pattern that never ends, or follow a pattern that ends with a. sub banking near end of map and staying there b. Sub changing to a new speed and roaming about the area.  I think AI patterns have 2 types, those that end, and those that loop.  It seems certain patterns work for a limited time and then the sub changes speed and behaviour. 
« Last Edit: 2013-03-28 03:26:21 by DLPB »

nfitc1

  • *
  • Posts: 3011
  • I just don't know what went wrong.
    • View Profile
    • WM/PrC Blog
Re: Mini-game Fixes
« Reply #92 on: 2013-03-28 17:46:46 »
What little I've seen so far (there's too much to comprehensively understand ???):

Subs have several things going for them. There's a xyz-coordinate set for position, rotation, direction, "up", and "right". I'm not sure what "right" means or what it has to do with anything.

Position is obvious.
Rotation is where the sub is pointing.
Direction is the vector along which it is traveling.
"Up" seems to point in the positive y direction initially and I'd guess this is the camera's "up" orientation. It changes from time to time, but not much.
"Right" is similar to "Up" in that it shows which direction the camera should consider to be the extreme right.

I can't tell for certain, but direction (at least for one sub) gets changed at 0x799969 based on rotation. The rotations are stored as magnitudes of 1/4096 of a complete circle.

Dir.x = cos( rot.x ) * sin( rot.y )
Dir.y = -sin( rot.x )
Dir.z = cos( rot.x ) * cos( rot.y )

It doesn't care about the rotation of z so I might be misinterpreting it's function.

It just gets more confusing from there. There are a lot of functions involved

DLPB_

  • Banned
  • *
  • Posts: 11006
    • View Profile
Re: Mini-game Fixes
« Reply #93 on: 2013-03-28 23:42:25 »
where can initial position of enemy sub be set?

DLPB_

  • Banned
  • *
  • Posts: 11006
    • View Profile
Re: Mini-game Fixes
« Reply #94 on: 2014-10-21 22:08:30 »
Here's an example....  This may be the sanity thing you mentioned ages ago.  But anyway>

The time limit for submarine is set 2 times [Both code areas are used on every level at Gold Saucer and in story version)

at

Code: [Select]
0077F7B2 (table) and again from table at 0077DAB6 (hardcode)
In this case, the table version is the one that is reflected in game.
In other areas, like the enemy submarines energy, it's the hardcode that takes precedence.

I have no idea what is what tbh. I don't think it's a very realistic task to figure out which parts are actually being used.   Or perhaps

they all are in different places at different times.

 ================

The actual map used and some starting values for each mode (0 is the story version)  is here:
77F131 (which originates at 77DA14)

Code: [Select]
0 [77F156] Story version
Map: 00996F10 (Map 7)
Data 1: 00988CF8
Data 2: 00997F6C

1 [77F191] Mako Battle at Gold Saucer
Map: 00994708 (Map 6)
Data 1: 00988CF8
Data 2: 00995764

2 [77F1CC] Level 1 at Gold Saucer
Map: 00991F00 (Map 5)
Data 1: 00988CF8
Data 2: 00992F5C

3 [77F207] Level 2 at Gold Saucer
Map: 0098F6F8 (Map 4)
Data 1: 00988CF8
Data 2: 00990754

4 [77F23F] Level 3 at Gold Saucer
Map: 0098CEF0 (Map 3)
Data 1: 00988CF8
Data 2: 0098DF4C

5 [77F277] Level 4 at Gold Saucer@
Map: 0098A6E8 (Map 2)
Data 1: 00988CF8
Data 2: 0098B744

Multiple maps at 981000 (unused?)

Notice straight after the maps above is a table
like the one at 997F18
It generally starts with a time value (which is never used to decide the time).
These tables are the enemy submarine data (as far as I can see) in table form.
However, this data is duplicated as hard-code.

I haven't checked yet, but I bet zeroing these tables does nothing to the game.

My only theory is that once upon a time.. there were gonna be 6 unique levels
each with their own time limit. But I can't be sure what is going on really.

========================

What I am doing at the moment is hijacking the code at
Code: [Select]
77DA14 (mov ax,[00E74760])
Which pulls the current submarine mode (0-5).

With this I can then set my own default values, like time limit (for each level) by forcing my own value over the one that is used (in this case of time limit, the address 980DD0).
The only time limit value used across ALL games is at 980DD0, which is set at 77DAB0.

But given multiple tables exist, is there any way to set the time and some other values from those instead?  The real question is...  Are the tables (apart from 9884F8) at the following addresses redundant in favour of their hard-coded counterparts?

Code: [Select]
997F18
995710
992F08
990700
9884F8 (actual used time limit value is taken from this table)
98DEF8
98B6F0
987018 (strangely, time limit value here differs from 8CA0).

Other instances of time limit (8CA0) [i..e, hard-coded versions of above tables]
at:
Code: [Select]
77F7B2 (hard-code)
77FC5E (hard-code)  [Corresponds to 987018]
780DB6 (hard-code)
78346E (hard-code)
785B26 (hard-code)
787698 (hard-code) and 7876D4 (hard-code) [Prob corresponds to  990700 and 990718]
788B56 (hard-code)
78A458 (hard-code)




« Last Edit: 2014-10-22 00:19:28 by DLPB »

DLPB_

  • Banned
  • *
  • Posts: 11006
    • View Profile
Re: Mini-game Fixes
« Reply #95 on: 2015-02-13 23:49:29 »
I have fixed up the Submarine battle half and half.  Now that R02 is completed, and retranslation completed, I can turn my attention to fixing up my difficulty mod.

I am still debating whether to scrap Cait Sith project.  Although, I'd dearly love to stick it to the fanboys.

In meantime, this is what I just wrote to luksy:
Quote
[00:42:38] Daniel Burke: the sub reprogramming has been far the biggest headache
[00:43:00] Daniel Burke: it's a total mess because a massive amount of it is unused
[00:43:07] Daniel Burke: entire tables unused
[00:43:13] Daniel Burke: tables dupllicated 3 times
[00:43:17] Daniel Burke: maps not used
[00:43:23] Daniel Burke: it's unbelievabl really
[00:44:31] Daniel Burke: in fact every enemy sub (12 * 6) has had its table duplicated by hardcode.  The hard code overrides the table version in most parts.
[00:44:32] Daniel Burke: Not all.
[00:44:57] Daniel Burke: The tables are copied, then copied again, then overwritten by hardcode making them totally redundant
[00:45:47] Daniel Burke: it's quite obvious that there was originally going to be 5 unique difficulties each with own time limits... but time ran out, so it all got scrapped, but it's all still in there... and a last minute fix was done to make the game at least playable
[00:46:29] Daniel Burke: the enemy subs don't even have AI... they have some crazy functions that they can use to decide what pattern to adopt
[00:46:46] Daniel Burke: a lot of those aren't complete either, so the enemy subs then just default to the screen edge and wait to die
[00:47:50] Daniel Burke: the enemy subs also fire 2 shots by default, but no delay has been included so both missiles are let off at same time and follow the exact same route