#include "global.h" #include "entity.h" #include "manager.h" #include "object.h" void (*const gObjectFunctions[])(Entity*) = { [GROUND_ITEM] = ItemOnGround, [DEATH_FX] = DeathFx, [SHOP_ITEM] = ItemForSale, [BUTTON] = Button, [OBJECT_4] = Object4, [POT] = Pot, [OBJECT_6] = Object6, [PUSHED_BLOCK] = BlockPushed, [LOCKED_DOOR] = LockedDoor, [OBJECT_9] = Object9, [OBJECT_A] = ObjectA, [OBJECT_B] = ObjectB, [CHEST_SPAWNER] = ChestSpawner, [OBJECT_D] = ObjectD, [OBJECT_E] = ObjectE, [SPECIAL_FX] = SpecialFx, [OBJECT_10] = Object10, [OBJECT_11] = Object11, [OBJECT_12] = Object12, [RAILTRACK] = Railtrack, [LILYPAD_LARGE] = LilypadLarge, [OBJECT_15] = Object15, [FLOATING_PLATFORM] = FloatingPlatform, [OBJECT_17] = Object17, [EVIL_SPIRIT] = EvilSpirit, [HOUSE_DOOR_EXT] = HouseDoorExterior, [OBJECT_1A] = Object1A, [GREAT_FAIRY] = GreatFairy, [OBJECT_1C] = Object1C, [OBJECT_1D] = Object1D, [OBJECT_1E] = Object1E, [OBJECT_1F] = Object1F, [OBJECT_20] = Object20, [OBJECT_21] = Object21, [FIGURINE_DEVICE] = FigurineDevice, [EYE_SWITCH] = EyeSwitch, [OBJECT_24] = Object24, [BIG_BARREL] = BigBarrel, [OBJECT_26] = Object26, [PUSHABLE_STATUE] = PushableStatue, [OBJECT_28] = Object28, [OBJECT_29] = Object29, [OBJECT_2A] = Object2A, [OBJECT_2B] = Object2B, [BEANSTALK] = Beanstalk, [SMOKE] = Smoke, [PUSHABLE_ROCK] = PushableRock, [HITTABLE_LEVER] = HittableLever, [OBJECT_30] = Object30, [FROZEN_FLOWER] = FrozenFlower, [PULLABLE_MUSHROOM] = PullableMushroom, [BOLLARD] = Bollard, [WARP_POINT] = WarpPoint, [OBJECT_35] = Object35, [OBJECT_36] = Object36, [OBJECT_37] = Object37, [JAR_PORTAL] = JarPortal, [BOSS_DOOR] = BossDoor, [OBJECT_3A] = Object3A, [PORTAL_MUSHROOM_STALKS] = MacroMushromStalks, [PORTAL_FALLING_PLAYER] = MacroPlayer, [OBJECT_3D] = Object3D, [OBJECT_3E] = Object3E, [GIANT_LEAF] = GiantLeaf, [FAIRY] = Fairy, [LADDER_UP] = LadderUp, [OBJECT_42] = Object42, [OBJECT_43] = Object43, [OBJECT_44] = Object44, [OBJECT_45] = Object45, [GIANT_BOOK_LADDER] = GiantBookLadder, [HEART_CONTAINER] = HeartContainer, [FILE_SCREEN_OBJECTS] = FileScreenObjects, [OBJECT_49] = Object49, [BACKGROUND_CLOUD] = BackgroundCloud, [OBJECT_4B] = Object4B, [PUSHABLE_FURNITURE] = PushableFurniture, [FURNITURE] = Furniture, [MINISH_SIZED_ENTRANCE] = MinishSizedEntrance, [ARCHWAY] = Archway, [GIANT_ROCK] = GiantRock, [OBJECT_51] = Object51, [OBJECT_52] = Object52, [OBJECT_53] = Object53, [PULLABLE_LEVER] = PullableLever, [MINECART] = Minecart, [THOUGHT_BUBBLE] = ThoughtBubble, [HIDDEN_LADDER_DOWN] = HiddenLadderDown, [GENTARI_CURTAIN] = GentariCurtain, [LAVA_PLATFORM] = LavaPlatform, [OBJECT_5A] = Object5A, [OBJECT_5B] = Object5B, [MASK] = Mask, [HOUSE_DOOR_INT] = HouseDoorInterior, [WHIRLWIND] = Whirlwind, [OBJECT_BLOCKING_STAIRS] = ObjectBlockingStairs, [SWORDSMAN_NEWSLETTER] = SwordsmanNewsletter, [OBJECT_61] = Object61, [GIANT_TWIG] = GiantTwig, [OBJECT_63] = Object63, [OBJECT_64] = Object64, [LADDER_HOLE] = LadderHoleInBookshelf, [OBJECT_66] = Object66, [OBJECT_67] = Object67, [OBJECT_68] = Object68, [OBJECT_69] = Object69, [OBJECT_6A] = Object6A, [CRENAL_BEAN_SPROUT] = CrenalBeanSprout, [MINECART_DOOR] = MinecartDoor, [OBJECT_ON_PILLAR] = ObjectOnPillar, [MINERAL_WATER_SOURCE] = MineralWaterSource, [MINISH_SIZED_ARCHWAY] = MinishSizedArchway, [OBJECT_70] = Object70, [PUSHABLE_GRAVE] = PushableGrave, [OBJECT_72] = Object72, [LILYPAD_SMALL] = LilypadSmall, [OBJECT_74] = Object74, [OBJECT_75] = Object75, [OBJECT_76] = Object76, [BELL] = Bell, [HUGE_DECORATION] = MacroDecoration, [OBJECT_79] = Object79, [STEAM] = Steam, [PUSHABLE_LEVER] = PushableLever, [HUGE_SHOES] = MacroShoes, [OBJECT_ON_BEETLE] = ObjectOnSpinyBeetle, [OBJECT_7E] = Object7E, [PICO_BLOOM] = PicoBloom, [OBJECT_80] = Object80, [OBJECT_81] = Object81, [BIG_VORTEX] = BigVortex, [BIG_PUSHABLE_LEVER] = BigPushableLever, [SMALL_ICE_BLOCK] = SmallIceBlock, [BIG_ICE_BLOCK] = BigIceBlock, [OBJECT_86] = Object86, [OBJECT_87] = Object87, [HUGE_BOOK] = MacroBook, [OBJECT_89] = Object89, [OBJECT_8A] = Object8A, [OBJECT_8B] = Object8B, [BOOK] = Book, [FIREPLACE] = Fireplace, [OBJECT_8E] = Object8E, [FROZEN_WATER_ELEMENT] = FrozenWaterElement, [OBJECT_90] = Object90, [OBJECT_91] = Object91, [BAKER_OVEN] = BakerOven, [OBJECT_93] = Object93, [WIND_TRIBE_FLAG] = WindTribeFlag, [BIRD] = Bird, [OBJECT_96] = Object96, [OBJECT_97] = Object97, [OBJECT_98] = Object98, [OBJECT_99] = Object99, [HUGE_ACORN] = MacroAcorn, [OBJECT_9B] = Object9B, [TREE_HIDING_PORTAL] = TreeHidingPortal, [LIGHTABLE_SWITCH] = LightableSwitch, [OBJECT_9E] = Object9E, [FAN] = Fan, [OBJECT_A0] = ObjectA0, [PALACE_ARCHWAY] = PalaceArchway, [OBJECT_A2] = ObjectA2, [CLOUD] = Cloud, [MINISH_LIGHT] = MinishLight, [OBJECT_A5] = ObjectA5, [OBJECT_A6] = ObjectA6, [OBJECT_A7] = ObjectA7, [OBJECT_A8] = ObjectA8, [OBJECT_A9] = ObjectA9, [WATERFALL_OPENING] = WaterfallOpening, [OBJECT_AB] = ObjectAB, [FOUR_ELEMENTS] = FourElements, [OBJECT_AD] = ObjectAD, [FLOATING_BLOCK] = FloatingBlock, [OBJECT_AF] = ObjectAF, [METAL_DOOR] = MetalDoor, [JAIL_BARS] = JailBars, [OBJECT_B2] = ObjectB2, [OBJECT_B3] = ObjectB3, [OBJECT_B4] = ObjectB4, [OBJECT_B5] = ObjectB5, [OBJECT_B6] = ObjectB6, [WELL] = Well, [WIND_TRIBE_TELEPORTER] = WindTribeTeleporter, [OBJECT_B9] = ObjectB9, [OBJECT_BA] = ObjectBA, [WINDCREST] = Windcrest, [LIT_AREA] = LitArea, [OBJECT_BD] = ObjectBD, [PINWHEEL] = Pinwheel, [OBJECT_BF] = ObjectBF, [ENEMY_ITEM] = EnemyItem, [OBJECT_C1] = ObjectC1, }; void InitObject(Entity*); void ObjectUpdate(Entity* this) { if ((this->flags & ENT_DID_INIT) == 0 && this->action == 0) InitObject(this); if (this->iframes != 0) this->iframes++; if (!CheckDontUpdate(this)) { gObjectFunctions[this->id](this); this->bitfield &= ~0x80; } DrawEntity(this); }