2022-05-19 01:51:26 -07:00
|
|
|
#ifndef OBJECT_H
|
|
|
|
#define OBJECT_H
|
|
|
|
|
|
|
|
#include "db.h"
|
|
|
|
#include "geometry.h"
|
|
|
|
#include "inventory.h"
|
|
|
|
#include "map_defs.h"
|
|
|
|
#include "obj_types.h"
|
|
|
|
|
2022-09-23 05:43:44 -07:00
|
|
|
namespace fallout {
|
|
|
|
|
2022-05-19 01:51:26 -07:00
|
|
|
typedef struct ObjectWithFlags {
|
|
|
|
int flags;
|
|
|
|
Object* object;
|
|
|
|
} ObjectWithFlags;
|
|
|
|
|
|
|
|
extern unsigned char* _wallBlendTable;
|
|
|
|
extern Object* _moveBlockObj;
|
|
|
|
|
|
|
|
extern unsigned char _commonGrayTable[256];
|
|
|
|
extern Object* gEgg;
|
|
|
|
extern Object* gDude;
|
|
|
|
|
|
|
|
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 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);
|
2022-10-05 03:49:18 -07:00
|
|
|
void obj_set_seen(int tile);
|
2022-05-19 01:51:26 -07:00
|
|
|
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_save_dude(File* stream);
|
|
|
|
int _obj_load_dude(File* stream);
|
|
|
|
void _obj_fix_violence_settings(int* fid);
|
|
|
|
|
2022-08-14 12:07:22 -07:00
|
|
|
Object* objectTypedFindById(int id, int type);
|
|
|
|
|
2022-09-23 05:43:44 -07:00
|
|
|
} // namespace fallout
|
|
|
|
|
2022-05-19 01:51:26 -07:00
|
|
|
#endif /* OBJECT_H */
|