public OBJfFunctionEntry[] GenerateFunctionTable(OBJD obj) { OBJfFunctionEntry[] result = new OBJfFunctionEntry[33]; result[0].ActionFunction = obj.BHAV_Init; result[1].ActionFunction = obj.BHAV_MainID; result[2].ActionFunction = obj.BHAV_Load; result[3].ActionFunction = obj.BHAV_Cleanup; result[4].ActionFunction = obj.BHAV_QueueSkipped; result[5].ActionFunction = obj.BHAV_AllowIntersectionID; result[6].ActionFunction = obj.BHAV_WallAdjacencyChanged; result[7].ActionFunction = obj.BHAV_RoomChange; result[8].ActionFunction = obj.BHAV_DynamicMultiTileUpdate; result[9].ActionFunction = obj.BHAV_Place; result[10].ActionFunction = obj.BHAV_PickupID; result[11].ActionFunction = obj.BHAV_UserPlace; result[12].ActionFunction = obj.BHAV_UserPickup; result[13].ActionFunction = obj.BHAV_LevelInfo; result[14].ActionFunction = obj.BHAV_ServingSurface; result[15].ActionFunction = obj.BHAV_Portal; //portal result[16].ActionFunction = obj.BHAV_GardeningID; result[17].ActionFunction = obj.BHAV_WashHandsID; result[18].ActionFunction = obj.BHAV_PrepareFoodID; result[19].ActionFunction = obj.BHAV_CookFoodID; result[20].ActionFunction = obj.BHAV_PlaceSurfaceID; result[21].ActionFunction = obj.BHAV_DisposeID; result[22].ActionFunction = obj.BHAV_EatID; result[23].ActionFunction = 0; //pickup from slot result[24].ActionFunction = obj.BHAV_WashDishID; result[25].ActionFunction = obj.BHAV_EatSurfaceID; result[26].ActionFunction = obj.BHAV_SitID; result[27].ActionFunction = obj.BHAV_StandID; result[28].ActionFunction = obj.BHAV_Clean; result[29].ActionFunction = 0; //repair result[30].ActionFunction = 0; //client house join result[31].ActionFunction = 0; //prepare for sale result[32].ActionFunction = 0; //house unload return result; }
//hilariously large switch case. there's got to be a better way public static short GetEntityDefinitionVar(OBJD objd, VMOBJDVariable var, VMStackFrame context) { switch (var) { case VMOBJDVariable.Version1: return (short)(objd.Version%0xFFFF); case VMOBJDVariable.Version2: return (short)(objd.Version>>16); case VMOBJDVariable.InitialStackSize: return (short)objd.StackSize; case VMOBJDVariable.BaseGraphic: return (short)objd.BaseGraphicID; case VMOBJDVariable.NumGraphics: return (short)objd.NumGraphics; case VMOBJDVariable.MainTreeID: return (short)objd.BHAV_MainID; // should this use OBJf functions? case VMOBJDVariable.GardeningTreeID: return (short)objd.BHAV_GardeningID; case VMOBJDVariable.TreeTableID: return (short)objd.TreeTableID; case VMOBJDVariable.IntersectionGroup: return (short)objd.InteractionGroupID; case VMOBJDVariable.Type: return (short)objd.ObjectType; case VMOBJDVariable.MasterID: return (short)objd.MasterID; case VMOBJDVariable.SubIndex: return (short)objd.SubIndex; case VMOBJDVariable.WashHandsTreeID: return (short)objd.BHAV_WashHandsID; case VMOBJDVariable.AnimTableID: return (short)objd.AnimationTableID; case VMOBJDVariable.GUID1: return (short)(objd.GUID % 0xFFFF); case VMOBJDVariable.GUID2: return (short)(objd.GUID >> 16); case VMOBJDVariable.Disabled: return (short)objd.Disabled; case VMOBJDVariable.PortalTreeID: throw new VMSimanticsException("Not Implemented!", context); case VMOBJDVariable.Price: return (short)objd.Price; case VMOBJDVariable.BodyStringsID: return (short)objd.BodyStringID; case VMOBJDVariable.SlotsID: return (short)objd.SlotID; case VMOBJDVariable.AllowIntersectionTreeID: return (short)objd.BHAV_AllowIntersectionID; case VMOBJDVariable.UsesFnTable: return (short)objd.UsesFnTable; case VMOBJDVariable.Bitfield1: return (short)objd.BitField1; case VMOBJDVariable.PrepareFoodTreeID: return (short)objd.BHAV_PrepareFoodID; case VMOBJDVariable.CookFoodTreeID: return (short)objd.BHAV_CookFoodID; case VMOBJDVariable.PlaceOnSurfaceTreeID: return (short)objd.BHAV_PlaceSurfaceID; case VMOBJDVariable.DisposeTreeID: return (short)objd.BHAV_DisposeID; case VMOBJDVariable.EatFoodTreeID: return (short)objd.BHAV_EatID; case VMOBJDVariable.PickupFromSlotTreeID: return (short)objd.BHAV_PickupID; //uh case VMOBJDVariable.WashDishTreeID: return (short)objd.BHAV_WashDishID; case VMOBJDVariable.EatingSurfaceTreeID: return (short)objd.BHAV_EatSurfaceID; case VMOBJDVariable.SitTreeID: return (short)objd.BHAV_SitID; case VMOBJDVariable.StandTreeID: return (short)objd.BHAV_StandID; case VMOBJDVariable.SalePrice: return (short)objd.SalePrice; case VMOBJDVariable.Unused35: throw new VMSimanticsException("Not Implemented!", context); case VMOBJDVariable.Unused36: throw new VMSimanticsException("Not Implemented!", context); case VMOBJDVariable.BrokenBaseGraphicOffset: throw new VMSimanticsException("Not Implemented!", context); case VMOBJDVariable.Unused38: throw new VMSimanticsException("Not Implemented!", context); case VMOBJDVariable.HasCriticalAttributes: throw new VMSimanticsException("Not Implemented!", context); case VMOBJDVariable.BuyModeType: return (short)objd.FunctionFlags; case VMOBJDVariable.CatalogStringsID: return (short)objd.CatalogStringsID; case VMOBJDVariable.IsGlobalSimObject: return (short)objd.Global; case VMOBJDVariable.InitTreeID: return (short)objd.BHAV_Init; case VMOBJDVariable.PlaceTreeID: return (short)objd.BHAV_Place; case VMOBJDVariable.UserPickupTreeID: return (short)objd.BHAV_UserPickup; case VMOBJDVariable.WallStyle: return (short)objd.WallStyle; case VMOBJDVariable.LoadTreeID: return (short)objd.BHAV_Load; case VMOBJDVariable.UserPlaceTreeID: return (short)objd.BHAV_UserPlace; case VMOBJDVariable.ObjectVersion: return (short)objd.ObjectVersion; case VMOBJDVariable.RoomChangedTreeID: return (short)objd.BHAV_RoomChange; case VMOBJDVariable.MotiveEffectsID: return (short)objd.MotiveEffectsID; case VMOBJDVariable.CleanupTreeID: return (short)objd.BHAV_Cleanup; case VMOBJDVariable.LevelInfoRequestTreeID: return (short)objd.BHAV_LevelInfo; case VMOBJDVariable.CatalogPopupID: return (short)objd.CatalogID; case VMOBJDVariable.ServingSurfaceTreeID: return (short)objd.CatalogID; case VMOBJDVariable.LevelOffset: return (short)objd.LevelOffset; case VMOBJDVariable.Shadow: return (short)objd.Shadow; case VMOBJDVariable.NumAttributes: return (short)objd.NumAttributes; case VMOBJDVariable.CleanTreeID: return (short)objd.BHAV_Clean; case VMOBJDVariable.QueueSkippedTreeID: return (short)objd.BHAV_QueueSkipped; case VMOBJDVariable.FrontDirection: return (short)objd.FrontDirection; case VMOBJDVariable.WallAdjacencyChangedTreeID: return (short)objd.BHAV_WallAdjacencyChanged; case VMOBJDVariable.MyLeadObject: return (short)objd.MyLeadObject; case VMOBJDVariable.DynamicSpritesBaseID: return (short)objd.DynamicSpriteBaseId; case VMOBJDVariable.NumDynamicSprites: return (short)objd.NumDynamicSprites; case VMOBJDVariable.ChairEntryFlags: return (short)objd.ChairEntryFlags; case VMOBJDVariable.TileWidth: return (short)objd.TileWidth; case VMOBJDVariable.LotCategories: return 0; //NOT IN OBJD RIGHT NOW! case VMOBJDVariable.BuildModeType: return (short)objd.BuildModeType; case VMOBJDVariable.OriginalGUID1: return (short)objd.OriginalGUID1; case VMOBJDVariable.OriginalGUID2: return (short)objd.OriginalGUID2; case VMOBJDVariable.SuitGUID1: return (short)objd.SuitGUID1; case VMOBJDVariable.SuitGUID2: return (short)objd.SuitGUID2; case VMOBJDVariable.PickupTreeID: return (short)objd.BHAV_Pickup; case VMOBJDVariable.ThumbnailGraphic: return (short)objd.ThumbnailGraphic; case VMOBJDVariable.ShadowFlags: return (short)objd.ShadowFlags; case VMOBJDVariable.FootprintMask: return (short)objd.FootprintMask; case VMOBJDVariable.DynamicMultiTileUpdateTreeID: return (short)objd.BHAV_DynamicMultiTileUpdate; case VMOBJDVariable.ShadowBrightness: return (short)objd.ShadowBrightness; case VMOBJDVariable.RepairTreeID: return (short)objd.BHAV_Repair; case VMOBJDVariable.WallStyleSpriteID: return (short)objd.WallStyleSpriteID; case VMOBJDVariable.RatingHunger: return (short)objd.RatingHunger; case VMOBJDVariable.RatingComfort: return (short)objd.CatalogID; case VMOBJDVariable.RatingHygiene: return (short)objd.RatingHygiene; case VMOBJDVariable.RatingBladder: return (short)objd.RatingBladder; case VMOBJDVariable.RatingEnergy: return (short)objd.RatingEnergy; case VMOBJDVariable.RatingFun: return (short)objd.RatingFun; case VMOBJDVariable.RatingRoom: return (short)objd.RatingRoom; case VMOBJDVariable.RatingSkillFlags: return (short)objd.RatingSkillFlags; case VMOBJDVariable.NumTypeAttributes: throw new VMSimanticsException("Not Implemented!", context); //?? case VMOBJDVariable.MiscFlags: throw new VMSimanticsException("Not Implemented!", context); //?? case VMOBJDVariable.TypeAttrGUID1: throw new VMSimanticsException("Not Implemented!", context); case VMOBJDVariable.TypeAttrGUID2: throw new VMSimanticsException("Not Implemented!", context); case VMOBJDVariable.InteractionResultStrings: throw new VMSimanticsException("Not Implemented!", context); case VMOBJDVariable.ClientHouseJoinTreeID: throw new VMSimanticsException("Not Implemented!", context); case VMOBJDVariable.PrepareForSaleTreeID: throw new VMSimanticsException("Not Implemented!", context); default: throw new VMSimanticsException("Unknown definition var", context); } }