View Full Version : Tag enums in s4pe

19th Aug 2015, 10:30 PM
So I PMed with two different people about this; I guess it's better to put the conversation into a forum thread instead:

I'm currently trying to fix the wacky EmotionTags display in OBJD, and when I tried to see how those fields work that have a dropdown, I came across the huge long enum in CASP that has the entirety of tags in the game listed as "CASPFlagValues". Most of these aren't supposed to be used in the context of CASP though (Func_Painting and stuff like that); is there a specific reason it's done like this? I mean with one big list instead of several small ones?

Asking because for those tags in the OBJD there are not even 20 possible values I believe -- having a dropdown in the grid view that only contains those, and not all of them, would make the dropdown a lot easier to use (and I guess that goes for CASP as well .. I hope I have the latest dll in this version).

The reason is that's the way EA did it. The values should be filtered for the specific tags they apply to, and the tags themselves should be filtered for the item they're being applied to or like you said separated into smaller lists. I do that in CAS Tools. Unfortunately this situation hasn't come up before of EA dumping stuff that applies to CAS, objects, who knows what else, into one enum and s4pe isn't set up for it. I can see if I can find the code and do something about it - could be easy, could be very difficult. If you could give me a list of the tags that apply to objects, that would help.

Below is a list -- there is still some stuff in it that I'm not sure about, thought it was better to leave it in than remove it.

I believe the first two are probably from testing. I've never seen an "Optimism" mood in game.


Mood_Optimism = 0x0040,
Theme_Halloween = 0x0043,

Color_Red = 0x0041,
Color_Blue = 0x0044,
Color_Green = 0x0045,
Color_DarkBrown = 0x005A,
Color_Brown = 0x005B,
Color_Gray = 0x005C,
Color_Black = 0x005D,
Color_Orange = 0x005F,
Color_Yellow = 0x0068,
Color_White = 0x0069,
Color_Pink = 0x006A,
Color_Purple = 0x006B,
Color_BrownLight = 0x0125,

ColorPalette_Jewel = 0x008D,
ColorPalette_EarthTones = 0x0118,
ColorPalette_GrayscaleDark = 0x011A,
ColorPalette_GrayscaleLight = 0x011B,
ColorPalette_Spring = 0x011D,
ColorPalette_Summer = 0x011E,
ColorPalette_Winter = 0x011F,
ColorPalette_GothRockPunk = 0x0120,

Skill_Athletic = 0x0056,
Skill_Cooking = 0x0057,
Skill_Bartending = 0x0089,
Skill_Creative = 0x0150,
Skill_Mental = 0x0151,
Skill_Physical = 0x0152,
Skill_Social = 0x0153,
Skill_Musical = 0x01BD,
Skill_All = 0x01C0,
Skill_Child = 0x0281,
Skill_FitnessOrProgramming = 0x028C,
Skill_VideoGaming = 0x02A3,
Skill_Charisma = 0x02A4,
Skill_Logic = 0x02A5,
Skill_RocketScience = 0x02A6,
Skill_Writing = 0x02A7,
Skill_Handiness = 0x0558,
Skill_Psychic = 0x2002,
Skill_GuitarorComedy = 0x03A7,
Skill_ViolinorGuitar = 0x03A8,

Food_Any = 0x010C,
Food_Multi = 0x015B,
Food_Fridge = 0x015C,
Food_Dessert = 0x0167,
Food_Snack = 0x028B,
Food_Prepared = 0x02F7,
Food_Campfire = 0x2817,

Drinks_Bar_Alcoholic = 0x009D,
Drinks_Bar_NonAlcoholic = 0x009E,
Drinks_Any = 0x009F,
Drinks_Bar_Any = 0x00A0,
Drink_Alcoholic = 0x0108,
Drink_NonAlcoholic = 0x0109,
Drink_Any = 0x010D,
Drink_Crafted_Coffee_Tea = 0x01CB,
Drink_Crafted = 0x015F,
Drink_SpaceEnergy = 0x02B3,
Drink_Serum = 0x3002,

BuyCatEE_TV = 0x00A1,
BuyCatEE_Computer = 0x00A2,
BuyCatEE_Audio = 0x00A3,
BuyCatEE_TVSets = 0x00A4,
BuyCatEE_HobbySkill = 0x00A5,
BuyCatEE_Party = 0x00A6,
BuyCatEE_KidFurniture = 0x00A7,
BuyCatEE_KidToy = 0x00A8,
BuyCatEE_Alarm = 0x00A9,
BuyCatEE_Phone = 0x00AA,
BuyCatEE_Clock = 0x00AB,
BuyCatEE_Videogame = 0x00AC,
BuyCatEE_IndoorActivity = 0x00AD,
BuyCatEE_KidActivity = 0x00AE,
BuyCatEE_OutdoorActivity = 0x00AF,
BuyCatEE_Bar = 0x00B0,
BuyCatEE_MiscElectronics = 0x00B1,
BuyCatEE_MiscEntertainment = 0x00B2,
BuyCatEE_MiscKids = 0x00B3,
BuyCatEE_Basketball = 0x01C8,
BuyCatEE_Chess_Table = 0x01C9,
BuyCatEE_MonkeyBars = 0x01CA,
BuyCatEE_CreativeActivity = 0x03C8,
BuyCatEE_KnowledgeActivity = 0x03C9,
BuyCatEE_ActiveActivity = 0x03CA,
BuyCatEE_TVStand = 0x0462,

BuyCatPA_Sink = 0x00B4,
BuyCatPA_Toilet = 0x00B5,
BuyCatPA_SinkFreestanding = 0x00B6,
BuyCatPA_Shower = 0x00B7,
BuyCatPA_Tub = 0x00B8,
BuyCatPA_LargeAppliance = 0x00B9,
BuyCatPA_SmallAppliance = 0x00BA,
BuyCatPA_Stove = 0x00BB,
BuyCatPA_Disposable = 0x00BC,
BuyCatPA_Refrigerator = 0x00BD,
BuyCatPA_OutdoorCooking = 0x00BE,
BuyCatPA_MiscSmallAppliance = 0x00BF,
BuyCatPA_MiscPlumbing = 0x00C0,
BuyCatPA_MiscAppliance = 0x00C1,
BuyCatPA_CoffeeMaker = 0x03C6,
BuyCatPA_Microwave = 0x03C7,
BuyCatPA_DisposalIndoor = 0x03CC,
BuyCatPA_DisposalOutdoor = 0x03CD,
BuyCatPA_StoveHood = 0x0391,
BuyCatPA_SinkCounter = 0x0398,

BuyCatLD_BathroomAccent = 0x00C2,
BuyCatLD_LawnOrnament = 0x00C3,
BuyCatLD_KidDecoration = 0x00C4,
BuyCatLD_WindowTreatment = 0x00C5,
BuyCatLD_Rug = 0x00C6,
BuyCatLD_FountainDecoration = 0x00C7,
BuyCatLD_Sculpture = 0x00C8,
BuyCatLD_WallDecoration = 0x00C9,
BuyCatLD_Plant = 0x00CA,
BuyCatLD_TableLamp = 0x00CB,
BuyCatLD_FloorLamp = 0x00CC,
BuyCatLD_CeilingLight = 0x00CD,
BuyCatLD_OutdoorLight = 0x00CE,
BuyCatLD_Mirror = 0x00CF,
BuyCatLD_MiscLight = 0x00D0,
BuyCatLD_MiscDecoration = 0x00D1,
BuyCatLD_Fireplace = 0x0311,
BuyCatLD_Clutter = 0x0337,
BuyCatLD_WallSculpture = 0x0338,
BuyCatLD_FountainEmitter = 0x00E7,
BuyCatLD_WallLight = 0x0136,
BuyCatLD_MirrorWall = 0x03C4,
BuyCatLD_MirrorFreestanding = 0x03C5,
BuyCatLD_CurtainBlind = 0x03D2,
BuyCatLD_Awning = 0x03D3,
BuyCatLD_PoolObjects = 0x04CC,

BuyCatSS_Counter = 0x00D2,
BuyCatSS_Cabinet = 0x00D3,
BuyCatSS_DiningTable = 0x00D4,
BuyCatSS_EndTable = 0x00D5,
BuyCatSS_CoffeeTable = 0x00D6,
BuyCatSS_Desk = 0x00D7,
BuyCatSS_Display = 0x00D8,
BuyCatSS_DiningChair = 0x00D9,
BuyCatSS_Sofa = 0x00DA,
BuyCatSS_LoveSeat = 0x00DB,
BuyCatSS_OutdoorChair = 0x00DC,
BuyCatSS_LivingChair = 0x00DD,
BuyCatSS_DeskChair = 0x00DE,
BuyCatSS_OutdoorSeating = 0x00DF,
BuyCatSS_Barstool = 0x00E0,
BuyCatSS_Bed = 0x00E1,
BuyCatSS_Bookshelf = 0x00E2,
BuyCatSS_Dresser = 0x00E3,
BuyCatSS_MiscSurface = 0x00E4,
BuyCatSS_MiscComfort = 0x00E5,
BuyCatSS_MiscStorage = 0x00E6,
BuyCatSS_BedDouble = 0x0392,
BuyCatSS_OutdoorBench = 0x0394,
BuyCatSS_OutdoorTable = 0x0395,
BuyCatSS_DiningTableShort = 0x03C2,
BuyCatSS_DiningTableLong = 0x03C3,
BuyCatSS_BedSingle = 0x03CB,
BuyCatSS_PostcardBoard = 0x042F,
BuyCatSS_ElementDisplay = 0x0430,
BuyCatSS_AccentTable = 0x0463,
BuyCatSS_HallwayTable = 0x0466,

BuyCatMAG_LivingRoom = 0x010E,
BuyCatMAG_Bathroom = 0x010F,
BuyCatMAG_Bedroom = 0x0110,
BuyCatMAG_DiningRoom = 0x0111,
BuyCatMAG_Kitchen = 0x0112,
BuyCatMAG_Outdoor = 0x0113,
BuyCatMAG_Study = 0x0114,
BuyCatMAG_Misc = 0x0197,
BuyCatMAG_Empty = 0x01D4,
BuyCatMAG_Kids = 0x0360,

BuyCat_Collection_Crystal = 0x0411,
BuyCat_Collection_Element = 0x0412,
BuyCat_Collection_Fossil = 0x0413,
BuyCat_Collection_Alien = 0x0414,
BuyCat_Collection_Metal = 0x0415,
BuyCat_Collection_MySim = 0x0416,
BuyCat_Collection_SpacePrint = 0x0417,
BuyCat_Collection_Slide = 0x0418,
BuyCat_Collection_Postcard = 0x0419,
BuyCat_Collection_SpaceRock = 0x041A,
BuyCat_Collection_Fish = 0x041B,
BuyCat_Collection_Frog = 0x041C,
BuyCat_Collection_ALL = 0x041D,
BuyCat_Collection_Gardening = 0x0487,

BuyCat_Windows = 0x01AC,
BuyCat_Columns = 0x01AD,
BuyCat_SpanrelsFriezesTrim = 0x01AE,
BuyCat_Easel = 0x01B8,
BuyCat_Instrument = 0x01B9,
BuyCat_Painting = 0x01BE,
BuyCat_Shareable = 0x04ED,
BuyCat_Community = 0x0548,

BuyCat_Venue_Bar = 0x0549,
BuyCat_Venue_Club = 0x054A,
BuyCat_Venue_ForestPark = 0x054B,
BuyCat_Venue_Gym = 0x054C,
BuyCat_Venue_Library = 0x054D,
BuyCat_Venue_Lounge = 0x054E,
BuyCat_Venue_Museum = 0x054F,
BuyCat_Venue_Park = 0x0550,
BuyCat_Venue_Retail = 0x0551,
BuyCat_Venue_DoctorClinic = 0x0552,
BuyCat_Venue_PoliceStation = 0x0553,
BuyCat_Venue_ScientistLab = 0x0554,

Build_Door = 0x0217,
Build_Window = 0x0218,
Build_Gate = 0x0219,
Build_Column = 0x021A,
Build_RoofAttachment = 0x021B,
Build_Roof = 0x021C,
Build_Fence = 0x0220,
Build_Spandrel = 0x0221,
Build_Stair = 0x0222,
Build_Railing = 0x0223,
Build_Block = 0x0224,
Build_Style = 0x0225,
Build_Frieze = 0x0226,
Build_RoofTrim = 0x0227,
Build_Foundation = 0x0228,
Build_FloorTrim = 0x022A,
Build_WallAttachment = 0x022B,
Build_Flower = 0x022C,
Build_Shrub = 0x022D,
Build_Tree = 0x022E,
Build_Rug = 0x022F,
Build_Rock = 0x0230,
Build_Arch = 0x0231,
Build_Post = 0x030E,
Build_Buy_World_Objects = 0x0313,
Build_RoofDiagonal = 0x038A,
Build_GateDouble = 0x0393,
Build_DoorDouble = 0x0396,
Build_RoofChimney = 0x0397,
Build_DoorSingle = 0x03CE,
Build_RoofAttachmentMisc = 0x03CF,
Build_GateSingle = 0x03D0,
Build_RoofOrthogonal = 0x03D1,
Build_WeddingArch = 0x03D5,
Build_Shrub_Bush = 0x0429,
Build_Shrub_Cactus = 0x042A,
Build_Flower_GroundCover = 0x042B,
Build_Flower_Bush = 0x042C,
Build_Flower_Misc = 0x042D,
Build_FountainTrim = 0x0439,

Mood_Angry = 0x013D,
Mood_Bored = 0x013E,
Mood_Confident = 0x013F,
Mood_Cranky = 0x0140,
Mood_Depressed = 0x0141,
Mood_Drunk = 0x0142,
Mood_Embarrassed = 0x0143,
Mood_Energized = 0x0144,
Mood_Flirty = 0x0145,
Mood_Focused = 0x0146,
Mood_Tense = 0x0147,
Mood_Happy = 0x0148,
Mood_Imaginative = 0x0149,
Mood_Uncomfortable = 0x014A,
Mood_Fine = 0x014B,
Mood_Playful = 0x014C,
Mood_Sad = 0x014D,
Mood_Sloshed = 0x014E,

MicroscopeSlide_Fossil = 0x0157,
MicroscopeSlide_Crystal = 0x0158,
MicroscopeSlide_Plant = 0x0159,
Mailbox = 0x015A,

Object_Bar = 0x015D,

Instrument_Violin = 0x0191,

Crafting_Gardening = 0x01A8,

Fabric_Leather = 0x0213,
Fabric_Cotton = 0x0214,
Fabric_Synthetic = 0x0248,
Fabric_Silk = 0x0249,
Fabric_Wool = 0x024A,
Fabric_Denim = 0x024B,
Fabric_Metal = 0x03A4,
Fabric_Silver = 0x03A5,

Pattern_Animal = 0x024E,

Venue_Object_Painting = 0x0253,
Venue_Object_Sculpture = 0x0254,
Venue_Object_Microphone = 0x0255,
Venue_Object_Bench = 0x0256,
Venue_Object_MonkeyBars = 0x0257,
Venue_Object_Playground = 0x0258,
Venue_Object_Exercise = 0x0259,
Venue_Object_PatioTable = 0x025A,
Venue_Object_Chair = 0x03C1,

Tooltip_MotiveHygiene = 0x02B9,
Tooltip_MotiveEnergy = 0x02BA,
Tooltip_MotiveFun = 0x02BB,
Tooltip_MotiveSocial = 0x02BC,
Tooltip_MotiveBladder = 0x02BD,
Tooltip_MotiveHunger = 0x02BE,
Tooltip_CraftingQualityCooking = 0x02BF,
Tooltip_CraftingQualityDrinks = 0x02C0,
Tooltip_CraftingQualityPainting = 0x02C1,
Tooltip_CraftingQualityCarpentry = 0x02C2,
Tooltip_MoodReliefStress = 0x02C3,
Tooltip_MoodReliefUncomfortable = 0x02C4,
Tooltip_MoodReliefSad = 0x02C5,
Tooltip_MoodReliefAngry = 0x02C6,
Tooltip_MoodReliefBored = 0x02C7,
Tooltip_MoodReliefEmbarrassed = 0x02C8,
Tooltip_SkillCooking = 0x02C9,
Tooltip_SkillVideoGaming = 0x02CA,
Tooltip_SkillProgramming = 0x02CB,
Tooltip_SkillFitness = 0x02CC,
Tooltip_SkillBartending = 0x02CD,
Tooltip_SkillPainting = 0x02CE,
Tooltip_SkillHandiness = 0x02CF,
Tooltip_SkillRocketScience = 0x02D0,
Tooltip_SkillLogic = 0x02D1,
Tooltip_SkillMischief = 0x02D2,
Tooltip_SkillWriting = 0x02D3,
Tooltip_SkillPiano = 0x02D4,
Tooltip_SkillViolin = 0x02D5,
Tooltip_SkillComedy = 0x02D6,
Tooltip_SkillGuitar = 0x02D7,
Tooltip_SkillGardening = 0x02D8,
Tooltip_SkillCharisma = 0x02D9,
Tooltip_SkillWoohoo = 0x02DA,
Tooltip_SkillCreativity = 0x039F,
Tooltip_SkillMental = 0x03A0,
Tooltip_SkillMotor = 0x03A1,
Tooltip_SkillSocial = 0x03A2,
Tooltip_SkillPsychic = 0x2014,

Tooltip_AmbienceAngry = 0x02DC,
Tooltip_AmbienceBored = 0x02DD,
Tooltip_AmbienceConfident = 0x02DE,
Tooltip_AmbienceEmbarrassed = 0x02DF,
Tooltip_AmbienceEnergized = 0x02E0,
Tooltip_AmbienceFlirty = 0x02E1,
Tooltip_AmbienceFocused = 0x02E2,
Tooltip_AmbienceHappy = 0x02E3,
Tooltip_AmbienceImaginative = 0x02E4,
Tooltip_AmbiencePlayful = 0x02E5,
Tooltip_AmbienceSad = 0x02E6,
Tooltip_AmbienceTense = 0x02E7,

Tooltip_MiscUnbreakable = 0x02DB,
Tooltip_MiscUncomfortable = 0x02EB,
Tooltip_MiscChildrenOnly = 0x030F,
Tooltip_MiscComfort = 0x0310,
Tooltip_MiscReliablility = 0x038B,
Tooltip_MiscUncomfortableForAdults = 0x03AC,

Genre_Painting_Abstract = 0x029B,
Genre_Painting_Classics = 0x029D,
Genre_Painting_Impressionism = 0x029E,
Genre_Painting_Mathematics = 0x029F,
Genre_Painting_PopArt = 0x02A0,
Genre_Painting_Realism = 0x02A1,
Genre_Painting_Surrealism = 0x02A2,
Genre_Painting_Landscape = 0x2814,

Genre_Book_Biography = 0x0300,
Genre_Book_Childrens = 0x0301,
Genre_Book_Fantasy = 0x0302,
Genre_Book_NonFiction = 0x0303,
Genre_Book_Poems = 0x0304,
Genre_Book_Romance = 0x0305,
Genre_Book_SciFi = 0x0306,
Genre_Book_ScreenPlay = 0x0307,
Genre_Book_ShortStories = 0x0308,

Genre_Book_Emotion_Confident = 0x0316,
Genre_Book_Emotion_Energized = 0x0317,
Genre_Book_Emotion_Flirty = 0x0318,
Genre_Book_Emotion_Playful = 0x0319,
Genre_Book_Emotion_Sad = 0x031A,
Genre_Book_Skill_Bartending = 0x031D,
Genre_Book_Skill_Charisma = 0x031E,
Genre_Book_Skill_Comedy = 0x031F,
Genre_Book_Skill_Cooking = 0x0320,
Genre_Book_Skill_Gardening = 0x0321,
Genre_Book_Skill_Gourmet = 0x0322,
Genre_Book_Skill_Guitar = 0x0323,
Genre_Book_Skill_Hacking = 0x0324,
Genre_Book_Skill_Handiness = 0x0325,
Genre_Book_Skill_Logic = 0x0326,
Genre_Book_Skill_Mischief = 0x0327,
Genre_Book_Skill_Painting = 0x0328,
Genre_Book_Skill_Piano = 0x0329,
Genre_Book_Skill_Fitness = 0x032A,
Genre_Book_Skill_RocketScience = 0x032B,
Genre_Book_Skill_VideoGaming = 0x032C,
Genre_Book_Skill_Violin = 0x032D,
Genre_Book_Skill_Writing = 0x0332,
Genre_Book_Supernatural = 0x0333,
Genre_Book_Skill_WooHoo = 0x0361,
Genre_Book_Mystery_Thriller = 0x0362,
Genre_Book_Skill_Fishing = 0x0399,
Genre_Book_Emotional = 0x03D4,
Genre_Book_Skill = 0x0408,
Genre_Book_Emotion_Focused = 0x040E,
Genre_Book_Emotion_Inspired = 0x040F,
Genre_Book_Skill_Herbalism = 0x2810,

Genre_ActivityTable_Dino = 0x036D,
Genre_ActivityTable_Family = 0x036E,
Genre_ActivityTable_Horse = 0x036F,
Genre_ActivityTable_Shapes = 0x0370,
Genre_ActivityTable_Truck = 0x0371,

Royalty_Apps = 0x038C,
Royalty_Books = 0x038D,
Royalty_Games = 0x038E,
Royalty_Paintings = 0x038F,
Royalty_Songs = 0x0390,

Func_Television = 0x01D6,
Func_TV = 0x01D7,
Func_Workout = 0x01D8,
Func_Excercise = 0x01D9,
Func_Fitness = 0x01DA,
Func_Health = 0x01DB,
Func_Athletic = 0x01DC,
Func_Punching = 0x01DD,
Func_Treadmill = 0x01DE,
Func_Videogame = 0x01DF,
Func_Motion = 0x01E0,
Func_Game = 0x01E1,
Func_Easel = 0x01E2,
Func_Paint = 0x01E3,
Func_Art = 0x01E4,
Func_Chess = 0x01E5,
Func_Table = 0x01E6,
Func_Strategy = 0x01E7,
Func_Microphone = 0x01E8,
Func_Sing = 0x01E9,
Func_Vocal = 0x01EA,
Func_Music = 0x01EB,
Func_Carpenter = 0x01EC,
Func_Workbench = 0x01ED,
Func_Bench = 0x01EE,
Func_Rocket = 0x01EF,
Func_Ship = 0x01F0,
Func_Space = 0x01F1,
Func_Bar = 0x01F2,
Func_Drink = 0x01F3,
Func_Beverage = 0x01F4,
Func_Pirate = 0x01F5,
Func_Cube = 0x01F6,
Func_Future = 0x01F7,
Func_Stuffed = 0x01F8,
Func_Toy = 0x01F9,
Func_Animal = 0x01FA,
Func_Unicorn = 0x01FB,
Func_Bear = 0x01FC,
Func_Dinosaur = 0x01FD,
Func_Dragon = 0x01FE,
Func_Clay = 0x01FF,
Func_Blob = 0x0200,
Func_Craft = 0x0201,
Func_Computer = 0x0202,
Func_Laptop = 0x0203,
Func_Stereo = 0x0204,
Func_Sound = 0x0205,
Func_System = 0x0206,
Func_Refrigerator = 0x0207,
Func_Food = 0x0208,
Func_Meal = 0x0209,
Func_Recipe = 0x020A,
Func_Ingredient = 0x020B,
Func_Cook = 0x020C,
Func_Coffee = 0x020D,
Func_Microwave = 0x020E,
Func_Basket = 0x020F,
Func_Ball = 0x0210,
Func_Party = 0x0211,
Func_ToyBox_ToysToCleanUp = 0x0215,
Func_Hoop = 0x0229,
Func_Gym = 0x0232,
Func_Jungle = 0x0233,
Func_Monkey = 0x0234,
Func_Guitar = 0x0235,
Func_Piano = 0x0236,
Func_Puddle = 0x0237,
Func_TrashPile = 0x0238,
Func_Violin = 0x0239,
Func_Instrument = 0x023A,
Func_Telescope = 0x023B,
Func_Observatory = 0x023C,
Func_Canvas = 0x023D,
Func_Scythe = 0x023E,
Func_Death = 0x023F,
Func_Reaper = 0x0240,
Func_Tea = 0x0241,
Func_Machine = 0x0242,
Func_Box = 0x0243,
Func_Doll = 0x0244,
Func_Trash = 0x0245,
Func_Voodoo = 0x0246,
Func_ComedyRoutine = 0x024D,
Func_ComedyRoutine_Short = 0x0250,
Func_ComedyRoutine_Medium = 0x0251,
Func_ComedyRoutine_Long = 0x0252,
Func_Bed = 0x0309,
Func_DoubleBed = 0x030A,
Func_SingleBed = 0x030B,
Func_Object_Upgrade_Part = 0x030C,
Func_Bait_Frog = 0x0314,
Func_Bait_Organic = 0x0315,
Func_Ingredient_Fruit = 0x031B,
Func_Bait_SmallFish = 0x031C,
Func_Urnstone = 0x032E,
Func_Ingredient_Veggie = 0x032F,
Func_Ingredient_Herb = 0x0330,
Func_Ingredient_Fish = 0x0331,
Func_Bait_FreshFruit = 0x0339,
Func_Bait_RottenFruit = 0x033A,
Func_Bait_FreshFlower = 0x033B,
Func_Bait_RottenFlower = 0x033C,
Func_Bait_MedFish = 0x033D,
Func_Bait_Trash = 0x033E,
Func_Gardening_Seed_Common = 0x033F,
Func_Gardening_Seed_Uncommon = 0x0340,
Func_Gardening_Seed_Rare = 0x0341,
Func_Microscope = 0x0359,
Func_ScienceTable = 0x035A,
Func_Gardening_Fertilizer_High = 0x035B,
Func_Gardening_Fertilizer_Med = 0x035C,
Func_Gardening_Fertilizer_Low = 0x035D,
Func_Gardening_Fertilizer_Bad = 0x035E,
Func_Fish_Fishbowl = 0x0365,
Func_Gardening_Fertilizer_Max = 0x0366,
Func_Whirlpool_Tub = 0x0372,
Func_Book_PlayerCreated = 0x0290,
Func_Dollhouse = 0x029A,
Func_ActivityTable = 0x02B0,
Func_Baby = 0x02E8,
Func_Crib = 0x02E9,
Func_Oven = 0x02EC,
Func_Bed_Kid = 0x0378,
Func_TrashCan = 0x037B,
Func_TrashCan_Outdoor = 0x037C,
Func_Book = 0x037D,
Func_Painting = 0x037E,
Func_Poster = 0x037F,
Func_CardGame = 0x039A,
Func_Rubbish = 0x039B,
Func_Garbage = 0x039C,
Func_Bin = 0x039D,
Func_ActivityTable_Drawing = 0x03A6,
Func_FishingLocation_Hole = 0x03A9,
Func_FishingLocation_Spot = 0x03AA,
Func_Mailbox = 0x03BA,
Func_Bait_Element = 0x03D6,
Func_Bait_Crystal = 0x03D7,
Func_Bait_Metal = 0x03D8,
Func_CardTable = 0x03DC,
Func_Couch = 0x03DD,
Func_Bathtub = 0x03DE,
Func_Boombox = 0x03DF,
Func_Fish = 0x03E0,
Func_Potion = 0x03E1,
Func_Spaceship = 0x03E2,
Func_Bladder = 0x03E3,
Func_Hunger = 0x03E4,
Func_Energy = 0x03E5,
Func_Hygiene = 0x03E6,
Func_Fun = 0x03E7,
Func_Social = 0x03E8,
Func_MonkeyBars = 0x03E9,
Func_Fridge = 0x03EA,
Func_DrawSomething = 0x03EB,
Func_OutdoorChair = 0x03EC,
Func_LivingChair = 0x03ED,
Func_DiningChair = 0x03EE,
Func_Ottoman = 0x03EF,
Func_Stool = 0x03F0,
Func_BedsideTable = 0x03F1,
Func_Pillar = 0x03F2,
Func_PatioFurniture = 0x03F3,
Func_Cupboard = 0x03F4,
Func_OutdoorPlant = 0x03F5,
Func_Curtain = 0x03F6,
Func_Rig = 0x03F7,
Func_MotionGamingRig = 0x03F8,
Func_Toybox = 0x03FA,
Func_Science = 0x03FB,
Func_StuffedAnimal = 0x03FC,
Func_Plush = 0x03FD,
Func_Bath = 0x03FE,
Func_Bathroom = 0x03FF,
Func_Sign = 0x0403,
Func_Gardening_Seeds = 0x0405,
Func_Hutch = 0x0406,
Func_Screen = 0x0407,
Func_Divider = 0x0409,
Func_JungleGym = 0x040A,
Func_Etagere = 0x040B,
Func_PurchasePicker_Category_Book_Skill = 0x040C,
Func_PurchasePicker_Category_Book_Emotional = 0x040D,
Func_Sprinkler = 0x0425,
Func_Teddy = 0x0431,
Func_TeddyBear = 0x0432,
Func_Gaming = 0x0433,
Func_Urn = 0x0434,
Func_Steps = 0x0435,
Func_BBQ = 0x0436,
Func_Barbecue = 0x0437,
Func_Book_Homework = 0x0438,
Func_Musician = 0x043B,
Func_Baseboard = 0x043C,
Func_Wainscoting = 0x043D,
Func_Brick = 0x043E,
Func_Terracotta = 0x043F,
Func_Tile = 0x0440,
Func_Stone = 0x0441,
Func_Metal = 0x0442,
Func_Kid = 0x0443,
Func_Concrete = 0x0444,
Func_Grass = 0x0445,
Func_Flagstone = 0x0446,
Func_Hardwood = 0x0447,
Func_Masonry = 0x0448,
Func_Linoleum = 0x0449,
Func_Logic = 0x044A,
Func_Charisma = 0x044B,
Func_Handiness = 0x044C,
Func_Programming = 0x044D,
Func_Cooking = 0x044E,
Func_Mixology = 0x044F,
Func_GourmetCooking = 0x0450,
Func_RocketScience = 0x0451,
Func_Writing = 0x0452,
Func_Gardening = 0x0453,
Func_Tablet = 0x0454,
Func_Aquarium = 0x0455,
Func_Basin = 0x0456,
Func_Recliner = 0x0457,
Func_WallLamp = 0x0458,
Func_Criminal = 0x0459,
Func_Culinary = 0x045A,
Func_Chef = 0x045B,
Func_Mixologist = 0x045C,
Func_Writer = 0x045D,
Func_Journalist = 0x045E,
Func_Author = 0x045F,
Func_Painter = 0x0460,
Func_Reward = 0x0461,
Func_Dining = 0x0464,
Func_DiningHutch = 0x0465,
Func_SecretAgent = 0x0467,
Func_Villain = 0x0468,
Func_Entertainer = 0x0469,
Func_Comedy = 0x046A,
Func_Astronaut = 0x046B,
Func_SpaceRanger = 0x046C,
Func_TechGuru = 0x046D,
Func_eSportGamer = 0x046E,
Func_Trim = 0x046F,
Func_Child = 0x0470,
Func_StandingLamp = 0x0471,
Func_Faucet = 0x0472,
Func_Closet = 0x0473,
Func_Knife = 0x0474,
Func_Knives = 0x0475,
Func_Play = 0x0476,
Func_Sleep = 0x0477,
Func_Pot = 0x0478,
Func_Vase = 0x0479,
Func_Rack = 0x047A,
Func_Towel = 0x047B,
Func_Shelf = 0x047C,
Func_PlanterBox = 0x047D,
Func_Garden = 0x047E,
Func_Decal = 0x047F,
Func_Sticker = 0x0480,
Func_Blinds = 0x0481,
Func_Shades = 0x0482,
Func_Awning = 0x0483,
Func_Statue = 0x0484,
Func_Figurine = 0x0485,
Func_Model = 0x0486,
Func_Bottle = 0x0488,
Func_Carpet = 0x0489,
Func_Clothes = 0x048A,
Func_Bush = 0x048B,
Func_Chimney = 0x048C,
Func_FireAlarm = 0x048D,
Func_Stand = 0x048E,
Func_CoffeeMaker = 0x048F,
Func_Hood = 0x0490,
Func_Range = 0x0491,
Func_Unbreakable_Object = 0x0494,
Func_ChildViolin = 0x0498,
Func_Book_BookOfLife = 0x0499,
Func_Spooky = 0x049A,
Func_Halloween = 0x049B,
Func_Fortune = 0x049C,
Func_Teller = 0x049D,
Func_SPTable = 0x049E,
Func_Gypsy = 0x049F,
Func_CrystalBall = 0x04A0,
Func_Oracle = 0x04A1,
Func_Psychic = 0x04A2,
Func_Seer = 0x04A3,
Func_Medium = 0x04A4,
Func_Seance = 0x04A5,
Func_Ghost = 0x04A6,
Func_Web = 0x04A7,
Func_Spider = 0x04A8,
Func_Cobweb = 0x04A9,
Func_Phantom = 0x04AA,
Func_Apparition = 0x04AB,
Func_Spook = 0x04AC,
Func_Spirit = 0x04AD,
Func_Grave = 0x04AE,
Func_Tombstone = 0x04AF,
Func_Cemetery = 0x04B0,
Func_Crypt = 0x04B1,
Func_Tomb = 0x04B2,
Func_Gravestone = 0x04B3,
Func_Pumpkin = 0x04B4,
Func_Lantern = 0x04B5,
Func_Jackolantern = 0x04B6,
Func_Candle = 0x04B7,
Func_Skeleton = 0x04B8,
Func_Hand = 0x04B9,
Func_Bone = 0x04BA,
Func_Bony = 0x04BB,
Func_Skull = 0x04BC,
Func_Head = 0x04BD,
Func_Face = 0x04BE,
Func_Werewolf = 0x04BF,
Func_Beast = 0x04C0,
Func_Monster = 0x04C1,
Func_Witch = 0x04C2,
Func_Invisible = 0x04C3,
Func_Bat = 0x04C4,
Func_Kettle = 0x04C5,
Func_Bowl = 0x04C6,
Func_Haunted = 0x04C7,
Func_House = 0x04C8,
Func_Mansion = 0x04C9,
Func_Ladder = 0x04CE,
Func_Swim = 0x04CF,
Func_SwimmingPool = 0x04D0,
Func_Pool = 0x04D1,
Func_PoolLight = 0x04D2,
Func_PoolLadder = 0x04D8,
Func_Turtle = 0x04D9,
Func_Ingredient_Insect = 0x04DA,
Func_Ingredient_Mushroom = 0x04DB,
Func_Grill_Recipe = 0x04DF,
Func_PicnicTable = 0x04E0,
Func_IceChest = 0x04E1,
Func_Gardening_Wild = 0x04F8,
Func_SimRay = 0x04FE,
Func_Wilderness = 0x04FF,
Func_Outdoors = 0x0500,
Func_Propane = 0x0501,
Func_Kerosene = 0x0502,
Func_Lamp = 0x0503,
Func_Air = 0x0504,
Func_Mattress = 0x0505,
Func_Inflatable = 0x0506,
Func_Cot = 0x0507,
Func_Lotus = 0x0508,
Func_Tarp = 0x0509,
Func_Sheet = 0x050A,
Func_Bucket = 0x050B,
Func_Trunk = 0x050C,
Func_LampPost = 0x050D,
Func_Supplies = 0x050E,
Func_Mascot = 0x050F,
Func_Pans = 0x0510,
Func_Cans = 0x0511,
Func_Ketchup = 0x0512,
Func_Mustard = 0x0513,
Func_HotSauce = 0x0514,
Func_Mug = 0x0515,
Func_Cup = 0x0516,
Func_Chair = 0x0517,
Func_Folding = 0x0518,
Func_Fire = 0x0519,
Func_FirePit = 0x051A,
Func_Log = 0x051B,
Func_Stump = 0x051C,
Func_Map = 0x0520,
Func_Sink = 0x0521,
Func_Flower = 0x0522,
Func_Shower = 0x0523,
Func_Cards = 0x0524,
Func_Picnic = 0x0525,
Func_Rock = 0x0526,
Func_Wood = 0x0527,
Func_Rustic = 0x0528,
Func_Retail = 0x0529,
Func_Mannequin = 0x052A,
Func_Business = 0x052B,
Func_WorkoutMachine = 0x052C,
Func_Light_NoAuto_Lights = 0x052D,
Func_Holiday = 0x052E,
Func_Christmas = 0x052F,
Func_Candles = 0x0530,
Func_Hanukkah = 0x0531,
Func_Kwanzaa = 0x0532,
Func_Xmas = 0x0533,
Func_Tree = 0x0534,
Func_Snow = 0x0535,
Func_Garland = 0x0536,
Func_TableCloth = 0x0537,
Func_Snowman = 0x0538,
Func_Frosty = 0x0539,
Func_Lights = 0x053A,
Func_PublicBathroom = 0x053C,
Func_RangerStation = 0x053D,
Func_Jig = 0x053E,
Func_Ingredient_Metal = 0x0540,
Func_Ingredient_Crystal = 0x0541,
Func_Ingredient_Metal_Common = 0x0542,
Func_Ingredient_Metal_Uncommon = 0x0543,
Func_Ingredient_Metal_Rare = 0x0544,
Func_Ingredient_Crystal_Common = 0x0545,
Func_Ingredient_Crystal_Uncommon = 0x0546,
Func_Ingredient_Crystal_Rare = 0x0547,
Func_Gnome = 0x0555,
Func_Anniversary = 0x0556,
Func_Heart = 0x0559,
Func_ValentinesDay = 0x055A,
Func_Light_NonElectric = 0x055E,
Func_Cowplant = 0x055F,
Func_CupcakeMachine = 0x0560,
Func_Hospital = 0x0561,
Func_Cell = 0x0562,
Func_Jail = 0x0563,
Func_Prison = 0x0564,
Func_Cameras = 0x0565,
Func_Photo = 0x0566,
Func_Photography = 0x0567,
Func_Skills = 0x0568,
Func_Bake = 0x0569,
Func_Dessert = 0x056A,
Func_Baking = 0x056B,
Func_Striped = 0x056C,
Func_Bookcase = 0x056D,
Func_Gate = 0x056E,
Func_Cake = 0x056F,
Func_Alert = 0x0570,
Func_Saucer = 0x0571,
Func_Atom = 0x0572,
Func_Calendar = 0x0573,
Func_Laser = 0x0574,
Func_Shuttle = 0x0575,
Func_Sunflower = 0x0576,
Func_Pedestal = 0x0577,
Func_Lab = 0x0578,
Func_Crates = 0x0579,
Func_Cart = 0x057A,
Func_Flag = 0x057B,
Func_Pole = 0x057C,
Func_Magazine = 0x057D,
Func_Sale = 0x057E,
Func_Saline = 0x057F,
Func_Sawhorse = 0x0580,
Func_Cabinet = 0x0581,
Func_Pipe = 0x0582,
Func_Case = 0x0583,
Func_Folders = 0x0584,
Func_Instruments = 0x0585,
Func_Fan = 0x0586,
Func_Diploma = 0x0587,
Func_Exit = 0x0588,
Func_Extinguisher = 0x0589,
Func_Paper = 0x058A,
Func_Dispenser = 0x058B,
Func_Plaque = 0x058C,
Func_Badge = 0x058D,
Func_Portrait = 0x058E,
Func_Soap = 0x058F,
Func_Triangle = 0x0590,
Func_Fileholder = 0x0591,
Func_Chalkboard = 0x0592,
Func_Beam = 0x0593,
Func_Duct = 0x0594,
Func_Hydraulic = 0x0595,
Func_Outdoor = 0x0596,
Func_Cage = 0x0597,
Func_Glass = 0x0598,
Func_Tank = 0x0599,
Func_Sit = 0x059A,
Func_Portal = 0x059B,
Func_PhotographyDissallow = 0x059E,
Func_FortuneTelling = 0x2008,
Func_Ingredient_Crawdad = 0x2801,
Func_Ingredient_Locust = 0x2802,
Func_Cooler = 0x2803,
Func_Camping = 0x2805,
Func_Campfire = 0x2806,
Func_Herbalism = 0x2809,
Func_HerbalismPlant = 0x280A,
Func_HerbalismIngredient = 0x280B,
Func_Tent = 0x280C,
Func_Ingredient_Beetle = 0x280D,
Func_Gardening_Toxic = 0x280E,
Func_HerbalismPotion = 0x280F,
Func_RangerStation_Supplies = 0x281B,
Func_RangerStation_Furniture = 0x281C,
Func_RangerStation_Fun = 0x281D,
Func_RangerStation_Ingredient = 0x281E,
Func_HerbalismIngredient_Chamomile = 0x281F,
Func_HerbalismIngredient_Elderberry = 0x2820,
Func_HerbalismIngredient_Fireleaf = 0x2821,
Func_HerbalismIngredient_Huckleberry = 0x2822,
Func_HerbalismIngredient_MorelMushroom = 0x2823,
Func_Detective_Clue_Chemical = 0x3008,
Func_Ingredient_FruitMuffins = 0x300A,
Func_Ingredient_FruitScones = 0x300B,
Func_Ingredient_StandardFruitTart = 0x300C,
Func_Ingredient_ExoticFruitTart = 0x300D,
Func_Ingredient_ArtisanHerbBread = 0x300E,
Func_Ingredient_FishPie = 0x300F,
Func_Ingredient_StandardFruitPie = 0x3010,
Func_Ingredient_ExoticFruitPie = 0x3011,
Func_Ingredient_JellyFilledDoughnuts = 0x3012,
Func_Ingredient_Fruitcake_Set1 = 0x3013,
Func_Ingredient_Fruitcake_Set2 = 0x3014,
Func_Ingredient_RainbowGelatinCake_Set1 = 0x3015,
Func_Ingredient_RainbowGelatinCake_Set2 = 0x3016,
Func_RetailRegister = 0x3017,
Func_Detective_Clue_Picture = 0x3018,
Func_Detective_Clue_Sample = 0x3019,
Func_Detective_Clue_AddToMap = 0x301E,
Func_Detective_Clue_Database = 0x3026,
Func_Dectective = 0x3027,
Func_Doctor = 0x3028,
Func_Doctor_object_ExamBed = 0x3029,
Func_Doctor_item_Sample = 0x302A,
Func_FrontDesk = 0x302B,
Func_Doctor_object_XrayMachine = 0x302C,
Func_Doctor_object_SurgeryTable = 0x302D,
Func_Camera_Poor = 0x3035,
Func_Camera_Normal = 0x3036,
Func_Camera_Outstanding = 0x3037,
Func_CloneNormalMin = 0x3038,
Func_PhotoStudio = 0x3039,
Func_Doctor_object_MedicalTreadmill = 0x303C,
Func_EP01_Serum_SyntheticFood = 0x303F,
Func_EP01_Serum_RosePerfume = 0x3040,
Func_EP01_Serum_SnakeOil = 0x3041,
Func_EP01_Serum_NeedFixer = 0x3042,
Func_EP01_Serum_SparkDrive = 0x3043,
Func_EP01_Serum_Smart = 0x3044,
func_ChemLab = 0x3048,
Func_ChemAnalyzer = 0x3049,
Func_SimRay_Transform_AlienVisitor_Allow = 0x304A,
Func_Ingredient_RoseQuartz = 0x304C,
Func_Retail_NeonLight = 0x304D,
Func_EP01_AlienTransmute_Compatible = 0x3051,
Func_Alien_SatelliteDish = 0x3052,
Func_Clue = 0x3053,
Func_CrimeMap = 0x3054,
Func_Ingredient_CowplantEssence = 0x3055,
Func_WarmingRack = 0x3057,
Func_Recipe_Baking_Oven = 0x3058,
Func_Recipe_Baking_CupcakeFactory = 0x3059,
Func_Barrel = 0x305A,
Func_Crate = 0x305B,
Func_RetailPedestal = 0x305F,
Func_Retail_NPC_ItemForSale = 0x3060,
Func_Ingredient_Crystal_Alien = 0x3062,
Func_Ingredient_Metal_Alien = 0x3063,
Func_Ingredient_Plant_Alien = 0x3064,
Func_InventionConstructor = 0x306A,
Func_Registers = 0x306B,
Func_Scientist = 0x306C,
Func_Alien = 0x306D,
Func_Police = 0x306E,
Func_Neon = 0x3070,
Func_EP01_Serum_RedHot = 0x307E,
Func_EP01_Serum_Slimify = 0x307F,
Func_EP01_Serum_Embiggen = 0x3080,
Func_EP01_Serum_GhostGoo = 0x3081,
Func_EP01_Serum_OxStrength = 0x3082,
Func_EP01_Serum_FixersLuck = 0x3083,
Func_EP01_Serum_ReapersFriend = 0x3084,
Func_EP01_Serum_AlienAura = 0x3085,
Func_EP01_Serum_AgeAway = 0x3086,
Func_Store = 0x3088,
Func_Collection_Spawner = 0x3089,
Func_Orrery = 0x308D,
Func_Syrums = 0x308E,
Func_RetailFridge = 0x308F,
Func_SimRay_NotValid_TransformResult = 0x3091,
Func_Detective_ChiefChair = 0x3093,
Func_Alien_Portal = 0x3094

I'm looking at filtering the tags/values in s4pe - found the code that handles it at least. I also found it near impossible to change flag values for CASPs and TONEs in s4pe because of the sheer number of them.

[..]What I'll probably end up doing is making separate property lists for different uses: one for CASPs, one for objects, etc. and filter the master list of values from there. And then update when they add more in each patch. *sigh*

Hmm would there be a way to read those tags directly from the tag list? So that one doesn't need to update every time? Probably not I guess, since that's buried in the combined tuning resource .. but for a simpler updating procedure, maybe one could plunk just that one (extracted) XML resource into the s4pe folder and have it read everything from there? I don't know how you are sorting your lists in CASTools but if it goes by the prefix, it might be simpler to just feed it a new combined list with every patch and letting it do its thing, rather than having to add on to each of the small lists individually ..

I had thought of a separate list for s4pe but not for Tools for some reason. Actually it ought to be possible to read it directly from the game combined tuning and I'll take a look at Scumbumbo's code at some point to see how hard it would be. I guess an updated enum list people could pop into their folders would be better than updating the dll. Or maybe a separate tool that pulls the list from the game files. I already have the code to take the XML and convert to enum format. Lots to think about!

Hm, a separate tool might also make it a bit complex .. I mean, anyone who does XML tuning will have the updated XML very soon after they patch, so hopefully someone would always be able to post that list (I mean the exported XML) somewhere for the non-tuning folks to download. And when Kuree gets around to release a new s4pe version, shouldn't be a problem to provide him with the current XML either that he can stick into the folder.

Coincidentially, @scumbumbo updated the extractor (http://modthesims.info/showthread.php?t=556292) yesterday with a version that does read directly from the game files (as I understand it; I haven't used it yet) so that might be one less thing to worry about =)

Inge's version (http://www.simlogical.com/ContentUploadsRemote/uploads/3306/) of CatalogCommon.cs also contains that tag list (which I promptly forgot to update -- didn't check but I'm quite sure it can't be current any more), separate from the abovementioned CASPFlagValues I mean, which taken together seems a bit redundant. The Catalog stuff in the current relase (0.3c) does not seem to have labelled tags at all.

Soooo, I dunno .. discuss?

20th Aug 2015, 2:28 AM
As far as updating the tags goes it seems like the best way to go would be to just make it an XML file that users can update if and when they want to. Reading the binary tuning just for that would be pretty slow, and dependent on EA never changing how they store that again. The time to get that out could be cut down dramatically since you don't actually need to completely convert it to XML and write it back out to disk again. Maybe you could figure a way to get quickly at just what you need as well, which should load quite fast. Is it worth that kind of effort though?

Inge Jones
20th Aug 2015, 8:15 AM
I was always asking Peter to have these things in xmls and he never got round to it.

23rd Aug 2015, 12:14 AM
I was always asking Peter to have these things in xmls and he never got round to it.
If someone's going to do some XML hacking on this, make it where I can add some custom folders to the Open File list. Bookmarking a package is okay, but being able to bookmark some folders would be immensely useful.

Is there an official thread or forum somewhere for this tool to make suggestions like this?

23rd Aug 2015, 12:27 AM
I think this thread is a good place =). @Buzzler and I wanted to look into this tomorrow (well actually yesterday, but you know how it goes =P), I'll post if we get somewhere interesting! I have no idea how to do that bookmark thing but perhaps he does.

(The "official" forum might be the Issues department at github but there is not much activity over there .. https://github.com/Kuree/Sims4Tools/issues and I believe one needs to sell their soul make a github account to post, as well)

23rd Aug 2015, 8:05 PM
@scumbumbo, I'm not sure why you thought of bookmarks in the context of tags, but I can have a look at some point. pbox will probably remind me if I forget about it. *When* I forget about it, because I totally will. ;)

23rd Aug 2015, 11:22 PM
I've been thinking about this issue and maybe a separate wrapper/dll would be a good way to handle it, with all the resouces that use the tags referring to it. (So far CASP, TONE, and OBJD, maybe someone knows of more?) It could either read an external XML or be easy to update and drop into the s4pe folder, at least as a start. Also I want to look further into a selective dropdown for selecting tag values in the Grid, as soon as I get done with what I'm working on now.

23rd Aug 2015, 11:45 PM
We looked at it today (but not for very long since it was already late) and what it's doing right now is read an external XML that resides in the same folder as the rest -- personally I thought that would be easiest to update, particularly since users can also update themselves simply by plunking a current XML in there .. they don't need to go pester someone with coding skills to update for them, I mean. It's parsing that into a dictionary (reads all tags first, then splits them into groups by prefix) but right now isn't yet doing anything with that dictionary. That is all in a separate wrapper IIRC.

By "selective drodown" you mean the way it works in CASTools? Yeah that's the best way of dealing with these lists that I've seen so far .. that way the actual tags are less than five miles to scroll through and it also prevents nonsense tag/category combinations.

The tag lists are used all over the place -- in the CatalogResource version I have (based on Inge's) the enum is in CatalogCommon.cs; that is used for all sorts of buy/build items (columns and fences and so on, not just COBJ/OBJD) .. right now they're all using the same mega list as CasParts, so you could theoretically tag a column with AgeAppropriate_Elder =P

24th Aug 2015, 2:41 AM
Sounds good!

In CAS Tools I just populate a temporary value list by filtering on the prefix - no need for separate lists. Not sure which way is better. I still need separate tag lists to separate tags that pertain to CASPs from ones that pertain to objects, etc. Can't think of any better way.

24th Aug 2015, 6:45 AM
That is all in a separate wrapper IIRC.It is in a separate "project", but yes. That way the other stuffez can be retro-fitted to use it without having to deal with any nasty cross references or anything like that. I would add getters next and then start rewriting the other stuff to not use the enums, but tag classes/structs.

Also on the way I might aggressively refactor, e.g. extract lotsa classes (one frigging type per file, darnit!)... maybe. I might go completely nuts and add test harnesses, but maybe not.

PS: The dictionary thing is not written in stone at any rate. Is just the internal implementation that consumers won't see anyway. We'll see how it goes when we start to actually use it.

29th Aug 2015, 12:10 AM
OK, we're done \o/ (For the most part)

Current status is in https://github.com/pboxx/Sims4Tools

Reads the current tag list from S4_03B33DDF_00000000_D89CB9186B79ACB7.xml
Tags in COBJ and its relatives are now displayed in a two-tiered dropdown in Grid View (categories in the primary list, tags in the secondary list)
Tag dropdown is still editable (so one can paste any tag into it without having to scroll through the menu) and also supports autocomplete o.O


CASP and OBJD (Emotion tags) are not making use of it yet; we're probably going to look at that on the weekend. @CmarNYC were you about to edit CASP as well? We weren't sure whether we should change that right now.

Also, the entire list of tags is accessible from anywhere right now -- i.e. there is no filtering for "correct" categories per resource type (which means one can still tag a column as Fabric_Silk if one is so inclined). Not sure whether such a filter wouldn't perhaps get in the way of future updates to the XML .. ?

We're probably going to upload an updated release build in this forum (the changes aren't only in the dlls so just uploading wrapper updates wouldn't work for this).

(Oh and I should remind @Buzzler about the bookmark thing .. wot scumbumbo said in post #4)

29th Aug 2015, 1:42 AM
Show me an example and I'll revise the CASP and TONE. :)

I'll take a look before having an opinion on filtering. However, I think filtering on the tag value prefix should be pretty robust. That's what I do in CAS Tools and all I do with each update is paste the new list in and it just works.

Will look at it tomorrow - I've spent the last two days struggling with the FTPT wrapper which gave me the weirdest problems you ever saw.

29th Aug 2015, 9:28 PM
It is incorporated into the CatalogTag class in the CatalogResource.Common.CatalogCommon file. Basically the private enum field tag is now a s4pi.Resource.Commons.CatalogTags.Tag. Tag is implicitly convertible to ushort, so it should almost be a drop-in replacement. IIRC, the only code I had to change beyond the field type was in the Parse and Unparse methods. Implicit conversion from ushort to Tag could be done too, but I wasn't sure if that would help more than obfuscate things.

// Parse
this.tag = CatalogTagRegistry.FetchTag(br.ReadUInt16());

// Unparse
bw.Write(this.Tag); // <- implicit conversion to ushort in action

For editing I wrote a custom editor which is declared in the Editor attribute on the Tag class.

Will look at it tomorrow - I've spent the last two days struggling with the FTPT wrapper which gave me the weirdest problems you ever saw.I kinda doubt that. The last couple days at work I was in constant fear that my WTF face would stick. ;)

30th Aug 2015, 1:34 PM
I just incorporated the shtuff into ObjectDefinitionResource, i.e. the EnvironmentScoreEmotionTags. Was a little more complicated than for CatalogCommon, but not that much.

I changed the types of EnvironmentScoreEmotionTags and the respective field into CatalogTagList (extracted CatalogTagList and CatalogTag into separates class files in CatalogResource.Commons).

Changed the related branches of Parse and Unparse like that:

// Parse
case PropertyID.EnvironmentScoreEmotionTags:
count = r.ReadInt32();

var tags = new ushort[count];
for (int m = 0; m < count; m++)
tags[m] = r.ReadUInt16();

var catalogTags = tags.Select(CatalogTagRegistry.FetchTag)
.Select(t => new CatalogTag(CatalogCommon.kRecommendedApiVersion, this.OnResourceChanged, t));

this.environmentScoreEmotionTags = new CatalogTagList(this.OnResourceChanged, catalogTags);


// Unparse
case PropertyID.EnvironmentScoreEmotionTags:
ushort[] tags = this.environmentScoreEmotionTags.Select(t => t.Tag.Index).ToArray();
foreach (var value in tags)

I'll probably write extensions for BinaryWriter and BinaryReader for the parse/unparse part next if we need that in more places.

PS and ETA: It doesn't seem like Kuree has any inclination to accept my changes or even discuss them. I on the other hand am not sure if I feel like dealing with someone who seems to have strong opinions but at the same time keeps those opinions to himself.

Bottom of the line is that I apparently make those changes just for myself right now. Which seems kinda pointless, because I don't even use s4pe. Feels a little unsatisfying.

30th Aug 2015, 7:10 PM
I've just pushed a new folder bookmark functionality (available via the Settings menu) to pbox's repo. I - or someone else - can upload a testing version once we have that all in one place with cmar's changes.

31st Aug 2015, 12:30 AM
Sorry to be taking so long - RL interferes. I should be able to sit down and spend some time on this tomorrow.

31st Aug 2015, 3:42 PM
Well, I feel dreadfully stupid but I figure I might as well ask rather than spend hours figuring this out.

s4pe/s4pi is the only project I've ever downloaded and tried to build like this. With Kuree's branch I've just worked with one wrapper at a time and set the references to the dlls in the download of s4pe. With this branch there's no compiled version, and when I try to compile it I get almost 200 errors because it can't find the references.

How am I supposed to be doing this?

Edit: Never mind - after some blundering around I managed to build s4pi.Resource.Commons.dll, put it where the other projects expected to find it, and building the whole project Just Worked. :)

31st Aug 2015, 4:12 PM
Which "this branch" do you mean now? And are you working off my repo or our own or the master or .. ? (I’ve pulled/merged your most recent commits into mine yesterday, so that should be up to date -- the “three commits behind master” are just the ones where Kuree merged yours, so no actual difference)

You might need to build more than once to get all the references to work properly, I’ve had the same phenomenon but all I needed to do was 2 or 3 builds in a row (you’ll see that the error messages are much fewer the second time around). Not Re-Build, just Build one more time. Perhaps “Clean Solution” could also help.

Ah OK, didn’t see your edit in time. Good to hear that it worked now!

31st Aug 2015, 6:37 PM
Ah, I think the repeated builds are what fixed it. Good to know for the future. And I think my problems with the prebuild events not working in my previous work were because I was opening and building individual wrappers instead of opening the whole humongous project. Also good to know.

31st Aug 2015, 10:04 PM
I deleted everything and started over to make sure I didn't mess anything up, and after repeated builds the reference to s4pi.Resource.Commons didn't resolve. I again had to go into the s4pi.Resource.Commons folder and open and compile that project separately and then reference it from CatalogResource. Is that the way it's supposed to work?

A bigger issue - it looks to me like the catalog tags consist of only the UInt16 tag value?? Is that right? The CASP, TONE, and StyledLook resources have a tag list consisting of a UInt16 category and a UInt16 tag value, and the CatalogTagList class is not working correctly in them.

1st Sep 2015, 6:52 AM
I deleted everything and started over to make sure I didn't mess anything up, and after repeated builds the reference to s4pi.Resource.Commons didn't resolve. I again had to go into the
s4pi.Resource.Commons folder and open and compile that project separately and then reference it from CatalogResource. Is that the way it's supposed to work?Most definitely not. :P With the second attempt the whole solution should compile. And it only takes two times because the project references are messed up; some are pointing at the compiled assemblies instead of the projects.

A bigger issue - it looks to me like the catalog tags consist of only the UInt16 tag value?? Is that right? The CASP, TONE, and StyledLook resources have a tag list consisting of a UInt16 category and a UInt16 tag value, and the CatalogTagList class is not working correctly in them.Right now it's only a ushort tag value wrapped in a Tag class, yes. That's what I saw in CatalogCommon and OBJD, so that's how I implemented it. Are you saying that two flags are actually stored in CASP and TONE etc?

If so, I'll need to extend the functionality somewhat. The CatalogTagRegistry knows of catalog tags already. Expose some functionality in CatalogTagRegistry, extract a superclass from Tag and write a new custom editor.

1st Sep 2015, 12:46 PM
Right now it's only a ushort tag value wrapped in a Tag class, yes. That's what I saw in CatalogCommon and OBJD, so that's how I implemented it. Are you saying that two flags are actually stored in CASP and TONE etc?

Yes, in the CASP-family resources there are ushort pairs: category (i.e. Color) and value (i.e. Color_red). A bit redundant actually, and maybe they dropped the category when setting up object resources.

6th Sep 2015, 6:56 PM
Heya, short heads up: I'm working crazy hours right now, so I don't have much time to put into this. None, actually. I just made a little something anyway. A CompoundTag class with Converter and Editor that I incorporated into the CASPartResource. It's very much a WIP, as it is completely untested and not yet refactored. I pushed it to pbox's repo to feature/compound_tag_for_casp. I also refactored CASPartResource somewhat and extracted all those millions of nested classes. Sorry if that hurts your attempts to merge.

14th Sep 2015, 6:53 PM
Ok, and now it's tested and worky. :) It's in the new develop branch on pbox's github repo.

14th Sep 2015, 8:28 PM
I just published a beta that should contain all of the recent updates ( @CmarNYC ’s as well). @scumbumbo your folder bookmark thing is also in there!

See this post (http://modthesims.info/showthread.php?t=564418) / Download (https://github.com/pboxx/Sims4Tools/releases/tag/0.4_beta) on github.

15th Sep 2015, 6:05 AM
@scumbumbo your folder bookmark thing is also in there!
Oooh, awesome. I've been kind of on a vacation/hiatus, but that will be great when I get back in the swing of things!