Forum Announcement, Click Here to Read More From EA_Cade.

"ev" enum values - how to create new ones?

TriplisTriplis Posts: 3,048 Member
edited March 5 in Nominated Threads
Wondering if it's possible to create new "ev" values (referred to in the custom content guide as: “ev” an enum value)

An example I pulled at random out of the tag file is:
<T ev="67">Theme</T>

I can't figure out what naming conventions one would follow in adding a custom value to avoid conflicts with Maxis naming, or if it's something that's supported in modding.
Mods moved from MTS, now hosted at: https://triplis.github.io
Post edited by EA_Cade on

Comments

  • Options
    TURBODRIVERTURBODRIVER Posts: 68 Member
    Hey!

    An enum is just a named number so as long as the number and the name of it are unique there won't be any conflicts. You can just add anything to it as long as it's unique. The number being much higher than the rest of the existing values is the best way to avoid conflicts.

    Following the example:
    [code]<T ev="1000123">MyNewTag</T>[/code]

    1000123 is really high so there is a low chance of a conflict but it doesn't have to be that big. Unless tags are saved somewhere it doesn't matter what their number is because they are just used as identification with their name instead of the number. Both still have to be kept unique.

    Still, what's the purpose of this? For example, overriding the tags file will cause a lot of issues when something will be missing because of future updates and most of the tuning tests can be done with raw instance ids of objects rather than referring to them with tags.

    If you're looking into extending tags for CAS then it might not be possible since outfit generation is not fully done on the scripting side which the tags tuning file is used on.

    Extending enums with scripts is a pretty safe way of doing it because you can automatically avoid conflicts but it's pretty pointless because enums are just numbers so you can use raw digits.

    I may be able to help more if you can explain the reason behind your interest in enums.
  • Options
    TURBODRIVERTURBODRIVER Posts: 68 Member
    Since that was pretty much my first post I assume that I can't use post formatting and the example was cut.
    It was something like this: http://i.imgur.com/5ezaLph.png
  • Options
    TriplisTriplis Posts: 3,048 Member
    Thanks, @TURBODRIVER!

    There's a couple reasons why I was looking into this (both related to my Sorcerer mod):

    One is, I wanted to use the Notebook. Adding my own kind of entries for usability, such that you can see what spells you have by name in the notebook, with a description of how it works. That kind of thing. So I was running into an issue where if I added to the notebook tuning file, I needed an "ev" value at some point in there for the new notebook categories and subcategories. Even with a made-up high number (I tried last night after reading your post), I'm getting an error like this:
    File "T:\InGame\Gameplay\Scripts\Core\enum.py", line 166, in _get_unknown_value KeyError: "<enum <class 'int'>: Pack> does not have value 492"
    So I'm not sure what I'm flubbing up with the notebook tuning, but anyway, that's one way in which I was wanting to use "ev" values.


    The other is part of a black hole of unknowns and probably a pipe dream, from the exploration I've done into it. As an alternative method for usability, I wanted to use a version of the Vampire Powers UI (where you press the button and brings up your powers) for Sorcerer, so people can just click a button and see what Spells they have and how they work. That sort of thing.

    So in that black hole process, there are files like TagOccultTypeMapping and here's some code from it:
        <U>
          <E n="OccultType">HUMAN</E>
          <E n="Tag">Occult_Human</E>
        </U>
        <U>
          <E n="OccultType">ALIEN</E>
          <E n="Tag">Occult_Alien</E>
        </U>
        <U>
          <E n="OccultType">VAMPIRE</E>
          <E n="Tag">Occult_Vampire</E>
        </U>
        <U>
          <E n="OccultType">SORCERER</E>
          <E n="Tag">Occult_Sorcerer</E>
        </U>
    
    The last one is something I added.

    And there are files like "sims.occult.occult_tracker" - here's its entry for Vampires:
          <U>
            <E n="key">VAMPIRE</E>
            <U n="value">
              <T n="add_current_occult_trait_to_babies">False</T>
              <L n="additional_occult_traits">
                <T>153867<!--Trait: trait_OccultVampire_Manifested--></T>
              </L>
              <T n="cas_add_occult_tooltip">0xD45A6BFA<!--String: "Add Vampire"--></T>
              <T n="cas_alternative_form_add_tooltip">0x43948CF3<!--String: "Add a Dark Form to your Vampire. Your Vampire will switch into their Dark Form when feeding, suffering from thirst, and using certain powers."--></T>
              <T n="cas_alternative_form_copy_options_heading">0xA8766AA4<!--String: "Parts to Copy"--></T>
              <T n="cas_alternative_form_copy_tooltip">0x8A3BB7ED<!--String: "Copy Sim to Dark Form."--></T>
              <T n="cas_alternative_form_delete_confirmation">0xBB1F5FFD<!--String: "Are you sure you want to delete the Dark Form? You cannot undo this change."--></T>
              <T n="cas_alternative_form_delete_tooltip">0xD8350272<!--String: "Delete Dark Form"--></T>
              <T n="cas_alternative_form_sim_name_tooltip">0x63DBBAEE<!--String: "{0.SimName}'s Dark Form."--></T>
              <T n="cas_disabled_while_in_alternative_form_tooltip">0x3253AEFD<!--String: "Cannot change age, gender, relationships, or walk style while in this form."--></T>
              <T n="current_occult_trait">149528<!--Trait: trait_OccultVampire_DarkForm--></T>
              <T n="disabled_confirm_tooltip">0xA5D594E7<!--String: "Your Sim is becoming more vampiric, losing {F0.her}{M0.his} humanity. Select weaknesses to confirm additional powers."--></T>
              <T n="experience_statistic">150071<!--RankedStatistic: rankedStatistic_Occult_VampireXP--></T>
              <T n="generate_new_human_form_on_add">False</T>
              <E n="min_age_for_occult_ui">TEEN</E>
              <T n="occult_trait">149527<!--Trait: trait_OccultVampire--></T>
              <T n="primary_buck_text">0xD9568944<!--String: "Power Points: <span class="balance">{0.OccultPoints}</span>"--></T>
              <E n="primary_buck_type">VampirePowerBucks</E>
              <T n="primary_power_remove_tooltip">0x591A9E30<!--String: "Deselect current Power and return {0.OccultPoints} to wallet."--></T>
              <T n="secondary_buck_text">0x6E63B809<!--String: "Take weaknesses: {0.Number}"--></T>
              <E n="secondary_buck_type">VampireWeaknessBucks</E>
              <T n="secondary_power_remove_tooltip">0xC88CAE1<!--String: "Deselect current Weakness."--></T>
              <T n="talent_subtitle">0xBA429D23<!--String: "Obtaining more powers will have some consequences. Select weaknesses as you gain in strength."--></T>
              <T n="talent_title">0x19A1B313<!--String: "Vampire Powers"--></T>
            </U>
          </U>
    

    So at first, I was thinking, maybe if I make a new occult type in such files, I can get the menu to appear, customize it in my own way. Well that has so far been a colossal no-go. I was looking into tagging for it because I noticed that the main "Tag" file has the tag "Occult_Vampire" in it, so I figured maybe that's important somehow to the overall process of adding something new under TagOccultTypeMapping and sims.occult.occult_tracker.

    I also discovered, through the use of JPEXS, and opening a bunch of GFX files until I found the right one, that pretty much everything to do with the special Vampire UI is tied to at least one "Occult_Vampire" check; meaning, it won't trigger unless the sim has that tag, I presume.

    So I tried making the entry in TagOccultTypeMapping be:
        <U>
          <E n="OccultType">SORCERER</E>
          <E n="Tag">Occult_Vampire</E>
        </U>
    
    Just to see if I could get the UI to appear. Still no-go.

    I also tried editing the GFX file, which uses "case" code, changing the following:
          protected function ShowOccultContent(param1:int) : *
          {
             switch(param1)
             {
                case OccultTypes.OCCULT_VAMPIRE:
                   this.mcVampireContent.visible = true;
                   this.mcVampireContent.HandleSimActivated(mSimId);
                   this.mcVampireContent.y = this.mcMotives.y + this.mcMotives.CalculateCommoditiesHeight() + SimInfoMotivePanelTunables.OCCULT_CONTENT_MARGIN.mTop;
                   break;
                default:
                   this.mcVampireContent.visible = false;
             }
             this.RefreshPanelHeight();
          }
    

    Adding in another case:
          protected function ShowOccultContent(param1:int) : *
          {
             switch(param1)
             {
                case OccultTypes.OCCULT_VAMPIRE:
                   this.mcVampireContent.visible = true;
                   this.mcVampireContent.HandleSimActivated(mSimId);
                   this.mcVampireContent.y = this.mcMotives.y + this.mcMotives.CalculateCommoditiesHeight() + SimInfoMotivePanelTunables.OCCULT_CONTENT_MARGIN.mTop;
                   break;
                case OccultTypes.OCCULT_SORCERER:
                   this.mcVampireContent.visible = true;
                   this.mcVampireContent.HandleSimActivated(mSimId);
                   this.mcVampireContent.y = this.mcMotives.y + this.mcMotives.CalculateCommoditiesHeight() + SimInfoMotivePanelTunables.OCCULT_CONTENT_MARGIN.mTop;
                   break;
                default:
                   this.mcVampireContent.visible = false;
             }
             this.RefreshPanelHeight();
          }
    

    But I don't think JPEXS can edit stuff without errors; it gave me a warning about possible errors when I went to edit and upon opening the edited part of the file today to explain what I'm doing, I noticed a big chunk of code straight up missing in that part.

    So if I can figure out a reliable way to edit that part of the code without catastrophic errors, adding a case like OCCULT_SORCERER might work. Might not even need to add a Tag to the master list (that was just a guess as to something that needs to happen, but I'm not sure if it's strictly necessary).


    Oh and yeah, there are posting restrictions on new accounts. I think it's once you get enough "points" from posting or receiving things like thanks/insightful/etc., the restrictions go away.
    Mods moved from MTS, now hosted at: https://triplis.github.io
  • Options
    TURBODRIVERTURBODRIVER Posts: 68 Member
    Yes @Triplis, I am aware of the new account restrictions. :smiley:

    So you're trying to refer to the 'Pack' enum? From what I can see in the code it's pretty restrictive with its content. Most of the existing enums don't seem to be like that. But nevermind, that doesn't seem to be your issue.

    About editing the TagOccultTypeMapping file.
    I am not sure if the 'TagOccultTypeMapping' is used for anything. It's just sort of there and it already refers to existing occults with the tag 'OccultType' so that's not the place to add them. I don't think it's even possible to add occults since they are hard-coded to the client. Occult names are only used in CAS parts and any in-game tests for occults are done with traits. I don't think you can add a new occult to the game.

    Your use of JPEXS is really cool and I have no idea what is this, but this proofs that it's a client only check with 'OccultTypes' (which is not present in the scripting). I don't see a way you would fool the client to use a new occult.

    I can only assume that there is an internal client enum for all of the occults and there is no way for you to edit it. Your custom menu might not be possible without tricking the game to think sorcerers are vampires. Sorcerers & Vampires.. sounds like a game.

    So far I have not seen anybody do custom interfaces, this looks really interesting, I have to investigate this JPEXS thing, thanks for showing that!

    Good Luck with figuring some other way to do this! :smile:
  • Options
    TriplisTriplis Posts: 3,048 Member
    Yes @Triplis, I am aware of the new account restrictions. :smiley:

    So you're trying to refer to the 'Pack' enum? From what I can see in the code it's pretty restrictive with its content. Most of the existing enums don't seem to be like that. But nevermind, that doesn't seem to be your issue.

    About editing the TagOccultTypeMapping file.
    I am not sure if the 'TagOccultTypeMapping' is used for anything. It's just sort of there and it already refers to existing occults with the tag 'OccultType' so that's not the place to add them. I don't think it's even possible to add occults since they are hard-coded to the client. Occult names are only used in CAS parts and any in-game tests for occults are done with traits. I don't think you can add a new occult to the game.

    Your use of JPEXS is really cool and I have no idea what is this, but this proofs that it's a client only check with 'OccultTypes' (which is not present in the scripting). I don't see a way you would fool the client to use a new occult.

    I can only assume that there is an internal client enum for all of the occults and there is no way for you to edit it. Your custom menu might not be possible without tricking the game to think sorcerers are vampires. Sorcerers & Vampires.. sounds like a game.

    So far I have not seen anybody do custom interfaces, this looks really interesting, I have to investigate this JPEXS thing, thanks for showing that!

    Good Luck with figuring some other way to do this! :smile:
    @TURBODRIVER

    Oh, haha, I didn't realize the occult types are hard-coded to the client. Never would have guessed that. Thanks for sharing your knowledge about things! I appreciate it. :)

    And yeah, I got the idea of using JPEXS from Neia related to another idea I had. If you're curious about checking out GFX files with JPEXS, I do have a few IDs written down, from looking through them (the only other method I know for looking through is opening them all, one at a time, trying to find what you're looking for... I'm guessing that GFX files can't be manually set as a file that should be indexed for searches like .py files, so I haven't even tried).

    One of the ones I've written down is the one that has a bunch of Vampire-related UI references in it, like the special ui_render_style and the components for the Vampire Powers/Weaknesses UI that I was trying to access. Its ID is: S4_62ECC59A_00000000_093958A845E285BA

    Then there's: S4_62ECC59A_00000000_5FFB8AE26BC11E96 (which has a lot of references to the Motives UI)

    And then: S4_62ECC59A_00000000_63DDA367DE3564AB (which, if I recall correctly, has a lot of the Clubs UI in it)

    I don't know if making custom UI changes or additions is feasible with modding, but I figure I might as well share the little I do know; make it a bit easier for those who might be curious, like yourself.

    And yeah, you bet. Happy to show what I know.

    I did think of an alternative approach last night, for showing people information about spells beyond temporary notifications. Haven't had time to test it yet, but we'll see how this one pans out. I'm hopeful about it. :)
    Mods moved from MTS, now hosted at: https://triplis.github.io
  • Options
    TriplisTriplis Posts: 3,048 Member
    Lol, so fun stuff. I got around to trying something I've been wanting to test for a while now. I wanted to see if the command SHOW_OCCULT_POWERS_PANEL in a notification will reliably bring up the Powers Panel. It worked more or less as I thought it would.

    Brought up the Vampire UI. But, uh... it's empty... lol. And the purple bar on the side just continuously fills up to the top and then starts over.

    FvvEQwq.jpg

    This shows:
    - Don't strictly speaking need access to the normal UI button to open the Powers Panel.
    - Need just about everything else probably, so it's probably a crapshoot anyway to use the Vamp UI for anything.
    Mods moved from MTS, now hosted at: https://triplis.github.io
  • Options
    TURBODRIVERTURBODRIVER Posts: 68 Member
    @Triplis

    Don't take my word for it but I am pretty sure occults are hard-coded. I think there was a topic here somewhere in which SimGuruModSquad confirms that. And where they didn't have to, they hard-coded it to easily detect Sims with different interface buttons and needs to display them quick.

    I can only add that there is no way to manipulate the vampire powers interface via scripts either. If that is an option you were considering.
    With scripts, you can only display (and customize) notifications, recipes menu, careers menu, outfits menu, purchase menu, some lot menu, some club menu, a generic list and some semi-custom input field dialog with text inputs and buttons. Maybe something else that I am missing, but not much of specific things like a vampire powers menu.

    There are some bugs with few of these interfaces that I might be able to figure out by using JPEXS. I will have to check it out.

    I hope you figure out some way to display the spells. :)
  • Options
    TriplisTriplis Posts: 3,048 Member
    @TURBODRIVER Gotcha. Thanks for the insight and for the well wishes!
    Mods moved from MTS, now hosted at: https://triplis.github.io
  • Options
    Hadron1776Hadron1776 Posts: 330 Member
    I'm thinking that the occult types are enum values just like in script and they're mapped to a number somewhere... Just a thought.
  • Options
    Hadron1776Hadron1776 Posts: 330 Member
    edited June 2017
    Triplis wrote: »

    Oh, haha, I didn't realize the occult types are hard-coded to the client. Never would have guessed that. Thanks for sharing your knowledge about things! I appreciate it. :)

    @Triplis:
    Hardcoded to the client, yes. However, the occult type enums are assigned their own values there as well:
    package gamedata.shared
    {
       public class OccultTypes
       {
          
          public static const OCCULT_NONE:int = 0;
          
          public static const OCCULT_HUMAN:int = 1 << 0;
          
          public static const OCCULT_ALIEN:int = 1 << 1;
          
          public static const OCCULT_VAMPIRE:int = 1 << 2;
           
          
          public function OccultTypes()
          {
             super();
          }
       }
    }
    

    That's from the "shared" section of siminfosummarypanel.gfx.
    I'm guessing that if you do something like this:
    package gamedata.shared
    {
       public class OccultTypes
       {
          
          public static const OCCULT_NONE:int = 0;
          
          public static const OCCULT_HUMAN:int = 1 << 0;
          
          public static const OCCULT_ALIEN:int = 1 << 1;
          
          public static const OCCULT_VAMPIRE:int = 1 << 2;
    
          public static const OCCULT_SORCERER:int = 1 << 3;
           
          
          public function OccultTypes()
          {
             super();
          }
       }
    }
    
    everywhere that references what you're trying to do, you might be able to get your new enum to work :)

    EDIT: And JPEXS does work for this kind of stuff; I used it for my "Vampire Aging Enabled - With Life Extension", in which I removed the OCCULT_VAMPIRE check from where it decides which aging format to use :)
  • Options
    TriplisTriplis Posts: 3,048 Member
    @Hadron1776 Interesting, thanks for the insight! With you editing in JPEXS, did you edit any actionscript files? That's where I ran into trouble, in particular. I edited an actionscript file, but it didn't save the information properly; it just erased the function when I tried to save the change. It may have been a bug particular to JPEXS and that file in particular. I'm not sure. I know JPEXS is a tool put together by volunteer work and they do say the actionscript editing part is "experimental" (e.g. not very reliable without bugs).
    Mods moved from MTS, now hosted at: https://triplis.github.io
  • Options
    Hadron1776Hadron1776 Posts: 330 Member
    edited June 2017
    Yup.
    GFX instance DA7597EAEB9BA388:
             if(SimAgeTypes.IsElder(_loc3_) || _loc4_)
             {
                _loc2_ = KeysGP.SUMMARY_PANEL_DAYS_LIVED.Clone([param1.days_alive]);
             }
             else
             {
                _loc2_ = KeysGP.SUMMARY_PANEL_DAYS_LEFT.Clone([param1.ready_to_age_day - param1.current_day]);
             }
    
    I removed the "|| _loc4_" check without issue. You have to click "save changes" on the actionscript, THEN you have to save the actual GFX file.

    If it says "Cannot save file" then yeah, your function will get deleted. Try "Save As".
  • Options
    Hadron1776Hadron1776 Posts: 330 Member
    Also, as a side note:
    Triplis wrote: »
    Adding in another case:
          protected function ShowOccultContent(param1:int) : *
          {
             switch(param1)
             {
                case OccultTypes.OCCULT_VAMPIRE:
                   this.mcVampireContent.visible = true;
                   this.mcVampireContent.HandleSimActivated(mSimId);
                   this.mcVampireContent.y = this.mcMotives.y + this.mcMotives.CalculateCommoditiesHeight() + SimInfoMotivePanelTunables.OCCULT_CONTENT_MARGIN.mTop;
                   break;
                case OccultTypes.OCCULT_SORCERER:
                   this.mcVampireContent.visible = true;
                   this.mcVampireContent.HandleSimActivated(mSimId);
                   this.mcVampireContent.y = this.mcMotives.y + this.mcMotives.CalculateCommoditiesHeight() + SimInfoMotivePanelTunables.OCCULT_CONTENT_MARGIN.mTop;
                   break;
                default:
                   this.mcVampireContent.visible = false;
             }
             this.RefreshPanelHeight();
          }
    
    Why do that, when you can do this?
          protected function ShowOccultContent(param1:int) : *
          {
             switch(param1)
             {
               case OccultTypes.OCCULT_SORCERER:
                case OccultTypes.OCCULT_VAMPIRE:
                   this.mcVampireContent.visible = true;
                   this.mcVampireContent.HandleSimActivated(mSimId);
                   this.mcVampireContent.y = this.mcMotives.y + this.mcMotives.CalculateCommoditiesHeight() + SimInfoMotivePanelTunables.OCCULT_CONTENT_MARGIN.mTop;
                   break;
                default:
                   this.mcVampireContent.visible = false;
             }
             this.RefreshPanelHeight();
          }
    
    The case instances fall through by default; that's why the "break" statements exist.
  • Options
    TriplisTriplis Posts: 3,048 Member
    @Hadron1776 I believe I did save the actionscript and then do a save as and it erased the function. After initially saving the actionscript, it didn't seem to have a problem. But when I saved the file and reloaded it, the function was gone. I can try again when I find the time, but that is what I remember.

    As for the switch statement, to be honest, I've never seen a switch statement done like that. Is there documentation somewhere you could link me to on that practice?
    Mods moved from MTS, now hosted at: https://triplis.github.io
  • Options
    Hadron1776Hadron1776 Posts: 330 Member
    edited June 2017
    The GFX language seems an awful lot like C++
    I found this in trait.IsValidForDisplay:
          protected function IsValidForDisplay(param1:SimTraitsInfo) : Boolean
          {
             switch(param1.TraitType)
             {
                case SimTraitsInfo.TRAIT_PERSONALITY:
                case SimTraitsInfo.TRAIT_GAMEPLAY:
                case SimTraitsInfo.TRAIT_GHOST:
                case SimTraitsInfo.TRAIT_ASPIRATION:
                case SimTraitsInfo.TRAIT_PHASE:
                   return true;
                default:
                   return false;
             }
          }
    
    I think this might be applicable:
    http://en.cppreference.com/w/cpp/language/switch
    ...as for saving the file, I made that OCCULT_SORCERER addition and reloaded it several times. It seems to be holding.

    One huge difference between the GFX files and the examples in the documentation is that I don't think TS4 gfx files use the std namespace. But the principle is the same.
    I just noticed that the GFX says "edit actionscript" meaning that's the language. But the code above was not modified before it was pasted, which confirms that sort of thing does work.
  • Options
    Hadron1776Hadron1776 Posts: 330 Member
  • Options
    Hadron1776Hadron1776 Posts: 330 Member
    edited June 2017
    Triplis wrote: »
    Lol, so fun stuff. I got around to trying something I've been wanting to test for a while now. I wanted to see if the command SHOW_OCCULT_POWERS_PANEL in a notification will reliably bring up the Powers Panel. It worked more or less as I thought it would.

    Brought up the Vampire UI. But, uh... it's empty... lol. And the purple bar on the side just continuously fills up to the top and then starts over.

    FvvEQwq.jpg

    This shows:
    - Don't strictly speaking need access to the normal UI button to open the Powers Panel.
    - Need just about everything else probably, so it's probably a crapshoot anyway to use the Vamp UI for anything.

    I think I know what the problem with that bar is.
    The bar is set to reference the value of a statistic (The vampire XP stat), but your Sorcerers do not have that stat IIRC. So it doesn't know what to set the bar to.

    Also, to add your occult to sims.occult_tracker tuning, you'd need to add your occult here:
    class OccultType(enum.IntFlags):
        __qualname__ = 'OccultType'
        HUMAN = 1
        ALIEN = 2
        VAMPIRE = 4
    
  • Options
    TriplisTriplis Posts: 3,048 Member
    Hadron1776 wrote: »
    The GFX language seems an awful lot like C++
    I found this in trait.IsValidForDisplay:
          protected function IsValidForDisplay(param1:SimTraitsInfo) : Boolean
          {
             switch(param1.TraitType)
             {
                case SimTraitsInfo.TRAIT_PERSONALITY:
                case SimTraitsInfo.TRAIT_GAMEPLAY:
                case SimTraitsInfo.TRAIT_GHOST:
                case SimTraitsInfo.TRAIT_ASPIRATION:
                case SimTraitsInfo.TRAIT_PHASE:
                   return true;
                default:
                   return false;
             }
          }
    
    I think this might be applicable:
    http://en.cppreference.com/w/cpp/language/switch
    ...as for saving the file, I made that OCCULT_SORCERER addition and reloaded it several times. It seems to be holding.

    One huge difference between the GFX files and the examples in the documentation is that I don't think TS4 gfx files use the std namespace. But the principle is the same.
    I just noticed that the GFX says "edit actionscript" meaning that's the language. But the code above was not modified before it was pasted, which confirms that sort of thing does work.
    Hadron1776 wrote: »
    Interesting. Never knew that about switch statements. Good to know. Guessing it's minutely less performance-cost.

    Oh, also, I don't know what we're doing differently. :/ I've tried saving the file multiple times in multiple ways. It always appears to save the changes fine and then when I reload it, that function is empty.

    Hadron1776 wrote: »
    Triplis wrote: »
    Lol, so fun stuff. I got around to trying something I've been wanting to test for a while now. I wanted to see if the command SHOW_OCCULT_POWERS_PANEL in a notification will reliably bring up the Powers Panel. It worked more or less as I thought it would.

    Brought up the Vampire UI. But, uh... it's empty... lol. And the purple bar on the side just continuously fills up to the top and then starts over.

    FvvEQwq.jpg

    This shows:
    - Don't strictly speaking need access to the normal UI button to open the Powers Panel.
    - Need just about everything else probably, so it's probably a crapshoot anyway to use the Vamp UI for anything.

    I think I know what the problem with that bar is.
    The bar is set to reference the value of a statistic (The vampire XP stat), but your Sorcerers do not have that stat IIRC. So it doesn't know what to set the bar to.

    Also, to add your occult to sims.occult_tracker tuning, you'd need to add your occult here:
    class OccultType(enum.IntFlags):
        __qualname__ = 'OccultType'
        HUMAN = 1
        ALIEN = 2
        VAMPIRE = 4
    
    Interesting, good to know!

    Right now, I've kind of set aside the attempts to add an "official" occult type while I focus on other things, but if I get back to it at some point, this should be valuable insight.
    Mods moved from MTS, now hosted at: https://triplis.github.io
  • Options
    Hadron1776Hadron1776 Posts: 330 Member
    When you click 'save as', the changes are saved - in a new file. Other than that, I really don't know what's going on :(
  • Options
    Hadron1776Hadron1776 Posts: 330 Member
    Here's what I've been doing, anyway:
    Gjb5jvz.jpg
    ^click that save button THEN

    I0g0WXr.jpg
    ^message box says 'code successfully saved'. Close it out. THEN

    OwCFJOF.jpg
    ^Click the button up top to save the GFX file

Leave a Comment

BoldItalicStrikethroughOrdered listUnordered list
Emoji
Image
Align leftAlign centerAlign rightToggle HTML viewToggle full pageToggle lights
Drop image/file
Return to top