Во-первых, используете служебные имена в кач-ве имён переменных - так нельзя.
Во-вторых:
Type Object_
Field Tip
Field Handle_%
End Type
Const OBJ_PLAYER=1, OBJ_BOT=2, OBJ_THING=3
Type Player
Field mesh, healph, power
End Type
Type Bot
Field mesh, healph, power, level
End Type
Type Thing
Field mesh, tip
End Type
For o.Object_ = Each Object_
Select o\Tip
Case OBJ_PLAYER
Local Plr.Player=Object.Player(Handle_)
UpdatePlayer(Plr)
Case OBJ_THING
Local Thi.Thing=Object.Thing(Handle_)
UpdateThing(Thi)
Case OBJ_BOT
Local Bt.Bot=Object.Bot(Handle_)
UpdateBot(Bt)
End Select
Next
вывод - размер струкутры-интерфейса Object_ имеет константный sizeof для лбого кол-ва типов; внедрение новых объектов хранения реализуется в двух,а не в тёрх местах кода (1 - добавить константу - код_типа, 2- дописать ещё один case в селекторе).
Минус - за счёт type cast`а int->ptr* (разумеется - это условность, аналогия) тратится немного больше времени.