 |
 |
GoldenEye 007 Nintendo 64 Community, GoldenEye X, Nintendo 64 Games Discussion GoldenEye Cheats, GoldenEye X Codes, Tips, Help, Nintendo 64 Gaming Community
|
 |
 |
 |
 |
|
 |
 |
 |
 |
 |
Wreck Administrator


Joined: 14 Dec 2005 Posts: 7244 Location: Ontario, Canada  |
Posted: Fri Jun 12, 2020 10:41 pm Post subject: [HOW TO] Adding Objectives Mid-Mission... |
 |
|
One thing about GoldenEye, is that it was hard to really surprise players when it comes to story. Not just because it was based on a film that viewers may have already seen, but because of how the objectives system worked. Before every mission, Bond is given an in-depth briefing file. Within, you find a list of actions (dos and don'ts), as well as information provided by various members of MI6. Some of these tasks could in no way be known by anyone prior to 007 infiltrating the location. However, most are discussed in detail, or are at least touched on. This gives the player a heads up, and prevents anything new to be discovered during the operation. So how do you change this? How can you add in an objective, one that the person playing is not made aware of, in the middle of a mission?
Here is a video showing the following method being used in Zka's mission Descent.
https://youtu.be/47cWAMZJl8w
First of all, you need to have the "Footsteps" patch, created by Carnivorous. If you are not familiar with it, this takes the 7MB Expansion Pak mod (by Zoinkity), and puts in a bunch of great new features. Two of these can both be used. One is newer, and was designed with this in mind. It re-purposes action 36 to toggle on/off objectives, and modify their difficulty setting. While the other is what was first utilized for this tutorial. The ability to read and edit specific points in RAM during the course of a level, using action 2BFE. I would recommend using the "New Method", as it is much more user-friendly, and updates the folder menu properly.
In your mission, you can decide which difficulty level an objective should take place in. There are four options.
00: Agent +
01: Secret Agent +
02: 00 Agent +
03: 007
04: Hidden [NEW!]
When you choose the level on that difficulty, the corresponding objectives will display. But..., there is a way to prevent it from showing entirely. If you set the value to "04", it will keep the task from ever appearing, as that value is greater than the highest that it checks for. I refer to this setting as "04: Hidden". This affects both the setup file, as well as briefing file.
Alright, so my objective isn't showing up, even on 007 mode. Now what?
This is where you'll be creating an action block to update the difficulty value. When you know at what point the objective should be added to your mission, design your block.
NEW METHOD
360X
X = the objective number (starting at 0, which as A.)
If you want objective C to appear during the mission, use action 3602 in your action block. You can decide which difficulty you want it to appear in, as well. Unlike the "Old Method", this will also update the folder menu. When you die, abort, fail or complete the mission, whichever objectives were added during the mission will display in the folder. It will reset back to normal once you access a different page. You can also "remove" an objective during the level, if your story has a complication where something is no longer possible.
(if using "New Method", skip to final paragraph. yeah, it's that easy.)
OLD METHOD
AD (you can put descriptive text here to indicate what you are doing)
2BFE
AD 80075DXX+P0000000C+C0000000?
That's great, but what are the missing values in your block example?
The "?" is for the difficulty level. If you want it to show up on Agent +, use "0". Secret and up, put "1". 00 Agent and greater, is "2". Or if you want something that's only present on 007, type in "3". It will change it to appear inside your watch menu on said difficulty.
But what about the RAM address with the X's in there?
This is an area where each objective is stored. Normally GoldenEye has a max of 5 objectives, but you can go higher than that. The watch menu has room for a sixth. Each one has a place in RAM that points to where it is loaded to.
80075D30: Objective A
80075D34: Objective B
80075D38: Objective C
80075D3C: Objective D
80075D40: Objective E
80075D44: Objective F
Here is an example...
AD add objective F to 00 Agent
2BFE
AD 80075D44+P0000000C+C00000002
OK, cool. But there's a problem. When I exit the level, the folder is not showing that the objective was added???
This is because the folder menus rely on a separate file to show the objectives and briefing. Editing the setup file alone will not have any affect on this. So, how do we deal with this issue?
There is a file for each mission called "Ubrief_Z" in ROM. It is referenced within the 21990 file, in the table starting at 0x9E54. A RAM pointer is used to set the file for the level. In the case of Facility, it is 8004F328 (stored at 0x9EA4), which actually goes to 0x2E594 inside 21990. At that location, you will see "UbriefarkZ" written. This tells the game to use that briefing file for the mission inside the menu folders. If we are changing data in the setup, we must change this, as well. But it isn't quite as simple as editing it. In this case we need to replace it.
Your first step is creating a new briefing file. It will be pretty much identical to your original, except now it will have the correct difficulty value assigned to the objective. For every added objective in the mission, you need at least one extra briefing file. If you can trigger new objectives in a different order, you may require even more in order for things to show up correctly. Once you have the file made, enter the Game Configuration menu, under Stage Options, and "Add File with Name Above". You should probably place it under the one your level uses normally, and use the same name, but with something appended to it. Think "UbriefarkbZ".
Next, click the "Write 21990 file" button. Save it out someplace and pop it open in a Hex Editor. This part can be a tiny bit tricky, as you'll need to write the name of your new briefing file to a place that is not used by anything. It's becoming more difficult to find a safe spot, as custom modifications are beginning to use a lot of them. There should be some text you can write over at 0x3BD00, which in RAM would become 8005CA90. Type the name of your file there. It must match case, and end with zeroes (null padding) after the Z. Save the updated 21990 file, and then import it into your ROM.
In your mission action block, directly under where you updated the difficulty setting for the setup file, you'll need to then write the change for your briefing file. So, locate where in RAM your mission has its RAM pointer to the "Ubrief_Z" filename, and use that position in the following part of your block.
AD (you can put descriptive text here to indicate what you are doing)
2BFE
AD 8002AXXX+C800#####
If we keep using Facility as an example, with where we wrote the "UbriefarkbZ" to, it would be so...
AD (update briefing file)
2BFE
AD 8002AC34+C8005CA90
Now when you play your level, once the objective data is updated, the menu folders will also be.
However, once you have "replaced" the briefing file, it will continue showing the added objectives until you reset the game. One way you can help this just a little, is to have that level set the original briefing file at the start of the mission. Doing so will cause those objectives to be hidden again, at least until the player activates them. This is not a big deal, as the player is already now aware of them, and is not kept permanently. You could also add an action block to every mission that would reset each of these instances, should it be used frequently enough.
And there you have it. I do suggest adding some sort of text indication on-screen for when an objective has been added. That way, the player can quickly check the watch menu to see what they need to do. With this same technique, you can even update other briefing text, and modify what someone such as Q is informing 007 of. There is a lot you can do with the "Footsteps" patch, so get creative!
Last edited by Wreck on Tue Jun 16, 2020 9:17 pm; edited 3 times in total |
|
|
|
|
|
 |
 |
 |
 |
 |
Wreck Administrator


Joined: 14 Dec 2005 Posts: 7244 Location: Ontario, Canada  |
Posted: Sun Jun 14, 2020 1:15 am Post subject: |
 |
|
Sorry for the delay. I just knew it was going to take me a little bit to get it all typed out. Any questions, feel free to ask. I understand it could be confusing.
I had thought you might be able to add in some custom piece of ASM that could reset the briefing file after you skip past the end level stats screen, but I don't know how to do that stuff just now. |
|
|
|
|
|
 |
 |
 |
 |
 |
Carnivorous Moderator

Joined: 15 Oct 2016 Posts: 657 Location: Ukraine  |
Posted: Sun Jun 14, 2020 1:25 am Post subject: |
 |
|
I think it'd be just easier to hack difficulty flag 04 always show for the mission complete screen, as well as overwriting the unused alarm command to set on/off objective #
I'll investigate if this is possible and if to include with footsteps patch
Edit - just noticed, but it would be easier to use the objective pointer array [80075D30] instead of the setup pointer [80075D28]. Example argument can be 80075D30+P00000004+C0000000X with X being the difficulty flag. Each objective is plus 4 to the base address, so setting objective C to agent difficulty would be 80075D38+P00000004+C00000000 |
|
|
|
|
|
 |
 |
 |
 |
 |
Wreck Administrator


Joined: 14 Dec 2005 Posts: 7244 Location: Ontario, Canada  |
Posted: Sun Jun 14, 2020 1:44 am Post subject: |
 |
|
So long as the added objectives don't show on the mission complete folder screen without first being activated during the level (such as aborting at start or death before reaching trigger area). But if you can come up with a more user-friendly way to handle this, that'd be helpful. |
|
|
|
|
|
 |
 |
 |
 |
 |
Carnivorous Moderator

Joined: 15 Oct 2016 Posts: 657 Location: Ukraine  |
Posted: Sun Jun 14, 2020 1:47 am Post subject: |
 |
|
I'll check if I can do that, worse case is that I only show the hidden objectives if mission was successfully completed |
|
|
|
|
|
 |
 |
 |
 |
 |
Wreck Administrator


Joined: 14 Dec 2005 Posts: 7244 Location: Ontario, Canada  |
Posted: Sun Jun 14, 2020 1:51 am Post subject: |
 |
|
Ah, you are right about the objective locations being easier than using the setup as the base. Except P00000004 is actually the objective number, where P0000000C is the difficulty setting. Definitely easier to deal with, though. I will end up updating the post with this. |
|
|
|
|
|
 |
 |
 |
 |
 |
MRKane 007

Joined: 11 Dec 2008 Posts: 1076
 |
Posted: Sun Jun 14, 2020 2:36 am Post subject: |
 |
|
Very cool and a fantastic concept! _________________ No Mr. Bond, I expect you to be re-coded! |
|
|
|
|
|
 |
 |
 |
 |
 |
Carnivorous Moderator

Joined: 15 Oct 2016 Posts: 657 Location: Ukraine  |
Posted: Sun Jun 14, 2020 6:06 am Post subject: |
 |
|
Wreck wrote: | Except P00000004 is actually the objective number, where P0000000C |
Oops
So it is possible - this is what I have planned functionally. Does this seem correct?
Code: | * AI command 36 will trigger the hidden objective, triggering this again will hide the objective
* When an objective has been unhidden it will become an active objective. Recalling unhide objective will hide the objective
* Hidden objectives will not show on the mission complete briefing menu unless they were triggered in-game
* Hidden objectives do not have difficulty settings, this would be up to the action block to check before triggering a new objective |
This feature can be done but I'm wondering if anyone would find it useful. Otherwise I won't bother
Code: | * AI command 36 has the ability to hide objectives that are already active during mission, so it is possible to replace one objective with another mid-mission (can be useful for plot reasons) |
|
|
|
|
|
|
 |
 |
 |
 |
 |
Wreck Administrator


Joined: 14 Dec 2005 Posts: 7244 Location: Ontario, Canada  |
Posted: Sun Jun 14, 2020 7:59 pm Post subject: |
 |
|
That sounds good, but just some questions...
You can activate a hidden objective one at a time, correct? Some missions, such as Descent, use multiple. So you wouldn't obviously want all to show at once.
Only triggered hidden objectives will show on the mission complete screen? If I am playing on Agent, which does not add an extra objective, it won't show the others not activated on other difficulties?
As for hiding already active objectives, I would say yes. I have had some concept ideas which would require exactly that. As you say storywise, an objective you were supposed to complete, which may become impossible, could be replaced / updated. |
|
|
|
|
|
 |
 |
 |
 |
 |
Carnivorous Moderator

Joined: 15 Oct 2016 Posts: 657 Location: Ukraine  |
Posted: Sun Jun 14, 2020 8:52 pm Post subject: |
 |
|
Quote: | You can activate a hidden objective one at a time, correct? Some missions, such as Descent, use multiple. So you wouldn't obviously want all to show at once.
Only triggered hidden objectives will show on the mission complete screen? If I am playing on Agent, which does not add an extra objective, it won't show the others not activated on other difficulties? |
To better explain I'll give an example.
Let's say I have a mission which has 2 hidden objectives
Code: | * Contact double agent
* Defeat Janus (HIDDEN)
* Destroy illegal cache
* Defuse bomb (HIDDEN)
* Escape |
For the mission, hidden objective #1 [Defeat Janus] is only activated on 00 agent/007 after meeting Trev, however hidden objective #3 [Defuse bomb] is always activated after destroying the illegal cache regardless of difficulty. That would be possible by using the AI command 36 like so
Code: | 36 03 // toggle objective 3 [SHOW] |
For 00 agent, I would do this to replace the objective [Contact double agent] with [Defeat Janus].
Code: | 36 00 // toggle objective 0 [HIDE]
36 01 // toggle objective 1 [SHOW] |
The shown/hidden objective changes will synchronize with the mission complete menu - assuming the briefing file has the same objectives as the setup (hidden objectives should also be set to difficulty 04). |
|
|
|
|
|
 |
 |
 |
 |
 |
Wreck Administrator


Joined: 14 Dec 2005 Posts: 7244 Location: Ontario, Canada  |
Posted: Sun Jun 14, 2020 9:16 pm Post subject: |
 |
|
That makes sense. It'd be great if you can manage to get everything working together correctly.
Do you know what the maximum number of objectives is? I know six fills the watch menu, but if you were to switch out objectives during the level, you could have more. I've seen custom missions with around eight. |
|
|
|
|
|
 |
 |
 |
 |
 |
Carnivorous Moderator

Joined: 15 Oct 2016 Posts: 657 Location: Ukraine  |
Posted: Sun Jun 14, 2020 9:33 pm Post subject: |
 |
|
The maximum objectives are 10 (A-J), when replacing objectives the engine will not skip letters so you won't have to worry about that issue. Replacing objective 0 with objective 1 in the above example will still be called [Objective #A] in-game |
|
|
|
|
|
 |
 |
 |
 |
 |
Wreck Administrator


Joined: 14 Dec 2005 Posts: 7244 Location: Ontario, Canada  |
Posted: Sun Jun 14, 2020 10:13 pm Post subject: |
 |
|
So if that is "active" objectives, how many can be stored in the 80075DXX section of RAM, before running over into something else? |
|
|
|
|
|
 |
 |
 |
 |
 |
Carnivorous Moderator

Joined: 15 Oct 2016 Posts: 657 Location: Ukraine  |
Posted: Sun Jun 14, 2020 10:17 pm Post subject: |
 |
|
10, that is the maximum amount. To increase it would require rewriting anything that accesses objective logic |
|
|
|
|
|
 |
 |
 |
 |
 |
Wreck Administrator


Joined: 14 Dec 2005 Posts: 7244 Location: Ontario, Canada  |
Posted: Sun Jun 14, 2020 10:26 pm Post subject: |
 |
|
OK. That's plenty, as it is. I mean, it's basically two standard missions (five in each). I can't see anybody going overly crazy with these, but time will tell. |
|
|
|
|
|
 |
 |
 |
 |
 |
|
 |
 |
 |
 |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|
|
 |