#ifndef OBJECT_H #define OBJECT_H #include "db.h" #include "geometry.h" #include "inventory.h" #include "map_defs.h" #include "obj_types.h" typedef struct ObjectWithFlags { int flags; Object* object; } ObjectWithFlags; extern bool gObjectsInitialized; extern int _updateHexWidth; extern int _updateHexHeight; extern int _updateHexArea; extern int* _orderTable[2]; extern int* _offsetTable[2]; extern int* _offsetModTable; extern int* _offsetDivTable; extern ObjectListNode** _renderTable; extern int _outlineCount; extern ObjectListNode* gObjectListHead; extern int _centerToUpperLeft; extern int gObjectFindElevation; extern int gObjectFindTile; extern ObjectListNode* gObjectFindLastObjectListNode; extern int* gObjectFids; extern int gObjectFidsLength; extern Rect _light_rect[9]; extern int _light_distance[36]; extern int gViolenceLevel; extern int _obj_last_roof_x; extern int _obj_last_roof_y; extern int _obj_last_elev; extern int _obj_last_is_empty; extern unsigned char* _wallBlendTable; extern unsigned char* _glassBlendTable; extern unsigned char* _steamBlendTable; extern unsigned char* _energyBlendTable; extern unsigned char* _redBlendTable; extern Object* _moveBlockObj; extern int _objItemOutlineState; extern int _cd_order[9]; extern int _light_blocked[6][36]; extern int _light_offsets[2][6][36]; extern Rect gObjectsWindowRect; extern Object* _outlinedObjects[100]; extern int _updateAreaPixelBounds; extern int dword_639D94; extern int dword_639D98; extern int dword_639D9C; extern ObjectListNode* gObjectListHeadByTile[HEX_GRID_SIZE]; extern unsigned char _glassGrayTable[256]; extern unsigned char _commonGrayTable[256]; extern int gObjectsWindowBufferSize; extern unsigned char* gObjectsWindowBuffer; extern int gObjectsWindowHeight; extern Object* gEgg; extern int gObjectsWindowPitch; extern int gObjectsWindowWidth; extern Object* gDude; extern char _obj_seen_check[5001]; extern char _obj_seen[5001]; int objectsInit(unsigned char* buf, int width, int height, int pitch); void objectsReset(); void objectsExit(); int objectRead(Object* obj, File* stream); int objectLoadAll(File* stream); int objectLoadAllInternal(File* stream); void _obj_fix_combat_cid_for_dude(); void _object_fix_weapon_ammo(Object* obj); int objectWrite(Object* obj, File* stream); int objectSaveAll(File* stream); void _obj_render_pre_roof(Rect* rect, int elevation); void _obj_render_post_roof(Rect* rect, int elevation); int objectCreateWithFidPid(Object** objectPtr, int fid, int pid); int objectCreateWithPid(Object** objectPtr, int pid); int _obj_copy(Object** a1, Object* a2); int _obj_connect(Object* obj, int tile_index, int elev, Rect* rect); int _obj_disconnect(Object* obj, Rect* rect); int _obj_offset(Object* obj, int x, int y, Rect* rect); int _obj_move(Object* a1, int a2, int a3, int elevation, Rect* a5); int objectSetLocation(Object* obj, int tile, int elevation, Rect* rect); int _obj_reset_roof(); int objectSetFid(Object* obj, int fid, Rect* rect); int objectSetFrame(Object* obj, int frame, Rect* rect); int objectSetNextFrame(Object* obj, Rect* rect); int objectSetPrevFrame(Object* obj, Rect* rect); int objectSetRotation(Object* obj, int direction, Rect* rect); int objectRotateClockwise(Object* obj, Rect* rect); int objectRotateCounterClockwise(Object* obj, Rect* rect); void _obj_rebuild_all_light(); int objectSetLight(Object* obj, int lightDistance, int lightIntensity, Rect* rect); int objectGetLightIntensity(Object* obj); int _obj_turn_on_light(Object* obj, Rect* rect); int _obj_turn_off_light(Object* obj, Rect* rect); int objectShow(Object* obj, Rect* rect); int objectHide(Object* obj, Rect* rect); int objectEnableOutline(Object* obj, Rect* rect); int objectDisableOutline(Object* obj, Rect* rect); int _obj_toggle_flat(Object* obj, Rect* rect); int objectDestroy(Object* a1, Rect* a2); int _obj_inven_free(Inventory* inventory); bool _obj_action_can_use(Object* obj); bool _obj_action_can_talk_to(Object* obj); bool _obj_portal_is_walk_thru(Object* obj); Object* objectFindById(int a1); Object* objectGetOwner(Object* obj); void _obj_remove_all(); Object* objectFindFirst(); Object* objectFindNext(); Object* objectFindFirstAtElevation(int elevation); Object* objectFindNextAtElevation(); Object* objectFindFirstAtLocation(int elevation, int tile); Object* objectFindNextAtLocation(); void objectGetRect(Object* obj, Rect* rect); bool _obj_occupied(int tile_num, int elev); Object* _obj_blocking_at(Object* a1, int tile_num, int elev); Object* _obj_shoot_blocking_at(Object* obj, int tile, int elev); Object* _obj_ai_blocking_at(Object* a1, int tile, int elevation); int _obj_scroll_blocking_at(int tile_num, int elev); Object* _obj_sight_blocking_at(Object* a1, int tile_num, int elev); int objectGetDistanceBetween(Object* object1, Object* object2); int objectGetDistanceBetweenTiles(Object* object1, int tile1, Object* object2, int tile2); int objectListCreate(int tile, int elevation, int objectType, Object*** objectsPtr); void objectListFree(Object** objects); void _translucent_trans_buf_to_buf(unsigned char* src, int srcWidth, int srcHeight, int srcPitch, unsigned char* dest, int destX, int destY, int destPitch, unsigned char* a9, unsigned char* a10); void _dark_trans_buf_to_buf(unsigned char* src, int srcWidth, int srcHeight, int srcPitch, unsigned char* dest, int destX, int destY, int destPitch, int light); void _dark_translucent_trans_buf_to_buf(unsigned char* src, int srcWidth, int srcHeight, int srcPitch, unsigned char* dest, int destX, int destY, int destPitch, int light, unsigned char* a10, unsigned char* a11); void _intensity_mask_buf_to_buf(unsigned char* src, int srcWidth, int srcHeight, int srcPitch, unsigned char* dest, int destPitch, unsigned char* mask, int maskPitch, int light); int objectSetOutline(Object* obj, int a2, Rect* rect); int objectClearOutline(Object* obj, Rect* rect); int _obj_intersects_with(Object* object, int x, int y); int _obj_create_intersect_list(int x, int y, int elevation, int objectType, ObjectWithFlags** entriesPtr); void _obj_delete_intersect_list(ObjectWithFlags** a1); void _obj_clear_seen(); void _obj_process_seen(); char* objectGetName(Object* obj); char* objectGetDescription(Object* obj); void _obj_preload_art_cache(int flags); int _obj_offset_table_init(); void _obj_offset_table_exit(); int _obj_order_table_init(); int _obj_order_comp_func_even(const void* a1, const void* a2); int _obj_order_comp_func_odd(const void* a1, const void* a2); void _obj_order_table_exit(); int _obj_render_table_init(); void _obj_render_table_exit(); void _obj_light_table_init(); void _obj_blend_table_init(); void _obj_blend_table_exit(); int _obj_save_obj(File* stream, Object* object); int _obj_load_obj(File* stream, Object** objectPtr, int elevation, Object* owner); int _obj_save_dude(File* stream); int _obj_load_dude(File* stream); int objectAllocate(Object** objectPtr); void objectDeallocate(Object** objectPtr); int objectListNodeCreate(ObjectListNode** nodePtr); void objectListNodeDestroy(ObjectListNode** nodePtr); int objectGetListNode(Object* obj, ObjectListNode** out_node, ObjectListNode** out_prev_node); void _obj_insert(ObjectListNode* ptr); int _obj_remove(ObjectListNode* a1, ObjectListNode* a2); int _obj_connect_to_tile(ObjectListNode* node, int tile_index, int elev, Rect* rect); int _obj_adjust_light(Object* obj, int a2, Rect* rect); void objectDrawOutline(Object* object, Rect* rect); void _obj_render_object(Object* object, Rect* rect, int light); void _obj_fix_violence_settings(int* fid); int _obj_preload_sort(const void* a1, const void* a2); #endif /* OBJECT_H */