It's been bothering me since the first custom graduate, and it didn't stop bothering me until i figured it out. Luckily, the original code was set up such that it made things easy, in that the list of majors is right there inside the diploma, along with the checks for their GUIDs. let's start
I'll be hiding the different stages in spoilers, so that an overview is readily available and someone experienced might get the gist just from those buttons, or examine one in detail as needed.
step 0. What you need before starting: SimPe, but not expert knowledge. In fact, you could be an absolute beginner, but then please take a moment before each step to be sure of what i'm saying. We'll be working on a cloned object, so if any mistakes happen, we'll just remove the item from the downloads folder and no harm done until it's fixed. But just in case your mouse goes on a click rampage and starts eating up at everything it sees, backup your game.
step 1. It's useful to have your major's GUID handy. If you have that already, skip to step 5. steps 2-4
step 2. Double-click your major in Downloads, or if you already have SimPe open, Open the major package. step 3. Click Object Data (OBJD), then Major - <custom name> on the right. Make sure Plugin View is selected at the bottom
As a general rule, in the default placement of tabs (if you have custom ones you already know this), the work flow will be Resource Tree on the left --> Resource List on the right --> Plugin View at the bottom.
step 4. Look in the GUID field and copy that number to Notepad or Sticky Notes or a piece of paper.
step 5. Now we're going to clone the in-game diploma. If you already have one (for instance the one i provided with the jewellery major), skip ahead to step 12.
step 6. If it's not already done, open SimPe, and open Object Workshop.
step 7. Start the workshop. It'll take a while, but there's no going around it. Read ahead for something to do :p.
step 8. When it finally opens, you'll have a nice and tidy list of a humongous number of objects. Go on and browse, but what we need is all the way down in Unknown. Expand that from the + button.
step 9. You only need to scroll down a little bit, because our intended target's name starts with apostrophes. Click on it then select Next (the blue arrows above the list)
step 10. In the next panel, you need to make sure the Task option says Clone, not Recolour; tick all the boxes; and finally press the Start button.
step 11. You can just click Finish in the next panel, and OK when the pop-up shows. It'll then ask you to Save your object: name it something recognisable (mine says diploma_override), and be sure to remember in which folder it resides. You'll always be able to open it in SimPe no matter where it is, but the game won't see it unless it's in Downloads.
step 12. With the diploma clone now open, we're interested in 3 sections of the Tree, but not changing the GUID. We want an object that replaces the original, and so it must have the same identifier in-game. Now, the first thing we'll look at is Text Lists (STR) - arrow 1 on the left, Dialog prim string set - arrow 2 on the right. You'll notice it's organised as a list of majors, then a list of honours, and finally the main body of the Read Sim's Diploma notice. We're going to Add another entry with the button marked with arrow 3 on the left side of this list, which will increase the number in brackets, but the text will be copied from whatever had been selected previously (default is the first entry, Undeclared). If you follow the 4th arrow all the way down, you'll find your new entry (5). Click this row and type in your custom major's name. Remember or write down that number in brackets, then commit the file.
Note: if you play in a different language, you'll have to edit the corresponding strings.
step 13. Next, we need Behaviour Constant (BCON) on the left, and Majors on the right. In this list, we'll Add a value from a button just like before, and in the Dec field we'll insert the number we took note of. Notice that the Hex value is updated automatically. Again, Commit, and because the safe part is done, also Save your package.
step 14. So far so good, we have added information to the diploma, but we also need to call it in action. At the last stage, we'll be looking at Behaviour Function (BHAV) on the left, and Interaction - Read Diploma on the right.
step 15. Sadly, what follows is a bit of a spider's web. Scrolling down to the rectangle marked 0xA, you'll see that they start testing for major GUIDs. They all seem in order, but i checked, and for some reason, halfway down the list the flow skips to Undeclared, then cycles back to the middle. To be honest, instead of finding the last test and risking to break something, i chose the easy way and just put mine before the first. So this step is: click the first Test rectangle (it says Test Object Type (Stack Object ID, is instance of: 0x2E9CF007)), then Add from the button marked 1 in the screenshot. This will add your new rectangle right at the bottom of the list, with a number on the left and arrows coming out of it on the right. Don't worry about them yet.
step 16. On the lower right hand side of either this or the original rectangle click the blue underlined number that comes after "true:", OR in the list following the many Test Object Type-s, find the first rectangle that says Expression (Local 0x0002 := Literal 0x000n). This is the line that tells the game "If the sim graduated the major with this GUID, put in local variable 2 the text in String ranked n" (that is, with the visible number n-1). Is one of these expressions selected? Good, now click Add again from the button on the right. Again, this will add an identical rectangle at the bottom of the list.
step 17. Now that we have these new lines inserted, let's make them our own. Click your Test rectangle, and on the right select the tiny hammer and wrench icon marked 2 in the above photo.
In the middle of the pop-up, paste your major's GUID, and click OK, but don't close Notepad yet, because we need that second number.
step 18. Click your Expression rectangle , and in the last field type the rank of the corresponding string. It is formed by adding 1 to the number we wrote down.
step 19. Time to link these. Click your Test. On the right, you will see True Target (marked with arrow 3 earlier). It currently points to the Expression for Art major. Click the number in the field, and enter the number for your Expression rectangle. If this is the first test added, it'll be 0x0033. Notice how the arrow has moved. Now click False Target. Originally, it pointed to Biology, but if we are to make this the first test performed, then we need it to point to Art. Change the number to 0x000A. Again, notice how the arrow in the grand scheme of things has moved. For the Expression, the False Target already points to Error, and True towards Get Honours, where it meets all the other true-s. All good here.
step 20. The last step before testing is making the flow of the instructions coming from the top actually call on our test. For this, find line 0x8 saying Set to Next (Stack Object ID, Object of type GUID in temp 0/1), which now points to 0xA, Art. Change its True Target to your Test (0x0032 if it's the first check added). For tidiness, you can move your two rectangles to the top of their respective sections by using the options to the left of the Add button. Be careful that the number there is in Hex, so if you type in 16 lines, don't be surprised that it'll actually move 22. Whether you move them or not, the true and false targets will follow them around, updating the numbers they point to.
We assigned a custom value to the variable used for the notification, and the game can take it from here. Commit again, save, and that's it. Unless you have a lot of custom majors... but it gets easier with every time.
Testing: It helps if you have a test neighbourhood which won't make you cry if broken. Mine used to be called just Test, but now it's "Darkest corner of the world", because it really felt like i was doing shady things (i lost track of the number of times my tests failed. The most hilarious was when i accidentally pointed to line rank D in strings, the one saying "with all the rights, privileges, and honors thereto pertaining here and elsewhere". Imagine that repeated twice in your diploma :p. But it helped in that i realised i need to point straight to the strings, and not to BCONs). It also helps if someone's already graduated your custom major and there's a diploma on the wall. Read that. Does it say what it needs to? Yay! Does it point to the line above it? Then you need to add 1 to the string number in the Expression rectangle. Is there a sad jump bug? Check those links above, see if from line 0x8 the arrows flow as they should. Does the game crash entirely? Oh my. It might be easier to start over.
And that took about four hours to write. Still, less than the research. If there are mistakes or dodgy instructions, please let me know, i wouldn't want anyone's game to break because of this attempt.
saint_diana, true Ravenclaw, perpetually amused that Galadriel is Arwen's granny