mirror of
https://github.com/fallout2-ce/fallout2-ce.git
synced 2026-07-27 16:47:11 -07:00
Compare commits
6
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
67be4333ac | ||
|
|
04e4ca1ac3 | ||
|
|
f89e5043b8 | ||
|
|
a95fcd69a1 | ||
|
|
f8b3cebc77 | ||
|
|
fd806bb3a1 |
+37
-24
@@ -704,6 +704,24 @@ void gameMouseRefresh()
|
||||
int primaryAction = -1;
|
||||
|
||||
switch (FID_TYPE(pointedObject->fid)) {
|
||||
case OBJ_TYPE_SCENERY:
|
||||
case OBJ_TYPE_WALL:
|
||||
case OBJ_TYPE_MISC: {
|
||||
if (_obj_action_can_use(pointedObject)) {
|
||||
primaryAction = GAME_MOUSE_ACTION_MENU_ITEM_USE;
|
||||
break;
|
||||
}
|
||||
|
||||
primaryAction = GAME_MOUSE_ACTION_MENU_ITEM_LOOK;
|
||||
|
||||
// if the pointedObject is scenery/wall/misc object then it finds possible outlined item object behind it
|
||||
Object* itemObject = gameMouseGetObjectUnderCursor(OBJ_TYPE_ITEM, true, gElevation);
|
||||
if (itemObject == nullptr) {
|
||||
break;
|
||||
}
|
||||
pointedObject = itemObject;
|
||||
}
|
||||
// FALLTHROUGH
|
||||
case OBJ_TYPE_ITEM:
|
||||
primaryAction = GAME_MOUSE_ACTION_MENU_ITEM_USE;
|
||||
if (gGameMouseItemHighlightEnabled) {
|
||||
@@ -733,16 +751,6 @@ void gameMouseRefresh()
|
||||
}
|
||||
}
|
||||
break;
|
||||
case OBJ_TYPE_SCENERY:
|
||||
if (!_obj_action_can_use(pointedObject)) {
|
||||
primaryAction = GAME_MOUSE_ACTION_MENU_ITEM_LOOK;
|
||||
} else {
|
||||
primaryAction = GAME_MOUSE_ACTION_MENU_ITEM_USE;
|
||||
}
|
||||
break;
|
||||
case OBJ_TYPE_WALL:
|
||||
primaryAction = GAME_MOUSE_ACTION_MENU_ITEM_LOOK;
|
||||
break;
|
||||
}
|
||||
|
||||
if (primaryAction != -1) {
|
||||
@@ -993,6 +1001,25 @@ void _gmouse_handle_event(int mouseX, int mouseY, int mouseState)
|
||||
Object* targetObj = gameMouseGetObjectUnderCursor(-1, true, gElevation);
|
||||
if (targetObj != nullptr) {
|
||||
switch (FID_TYPE(targetObj->fid)) {
|
||||
case OBJ_TYPE_WALL:
|
||||
case OBJ_TYPE_SCENERY:
|
||||
case OBJ_TYPE_MISC: {
|
||||
// if the targetObj is wall/scenery/misc object then it allows to pickup outlined items potentially behind
|
||||
Object* itemObj = gameMouseGetObjectUnderCursor(OBJ_TYPE_ITEM, true, gElevation);
|
||||
if (!objectIsOutlined(itemObj)) {
|
||||
if (_obj_action_can_use(targetObj)) {
|
||||
_action_use_an_object(gDude, targetObj);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
targetObj = itemObj;
|
||||
|
||||
if (objectExamine(gDude, targetObj) == -1) {
|
||||
objectLookAt(gDude, targetObj);
|
||||
}
|
||||
}
|
||||
// FALLTHROUGH
|
||||
case OBJ_TYPE_ITEM:
|
||||
actionPickUp(gDude, targetObj);
|
||||
break;
|
||||
@@ -1018,20 +1045,6 @@ void _gmouse_handle_event(int mouseX, int mouseY, int mouseState)
|
||||
}
|
||||
}
|
||||
break;
|
||||
case OBJ_TYPE_SCENERY:
|
||||
if (_obj_action_can_use(targetObj)) {
|
||||
_action_use_an_object(gDude, targetObj);
|
||||
} else {
|
||||
if (objectExamine(gDude, targetObj) == -1) {
|
||||
objectLookAt(gDude, targetObj);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case OBJ_TYPE_WALL:
|
||||
if (objectExamine(gDude, targetObj) == -1) {
|
||||
objectLookAt(gDude, targetObj);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return;
|
||||
|
||||
+13
-15
@@ -821,10 +821,8 @@ void _obj_render_pre_roof(Rect* rect, int elevation)
|
||||
if ((objectListNode->obj->flags & OBJECT_HIDDEN) == 0) {
|
||||
_obj_render_object(objectListNode->obj, &updatedRect, lightIntensity);
|
||||
|
||||
if ((objectListNode->obj->outline & OUTLINE_TYPE_MASK) != 0) {
|
||||
if ((objectListNode->obj->outline & OUTLINE_DISABLED) == 0 && _outlineCount < 100) {
|
||||
_outlinedObjects[_outlineCount++] = objectListNode->obj;
|
||||
}
|
||||
if (objectIsOutlined(objectListNode->obj) && _outlineCount < 100) {
|
||||
_outlinedObjects[_outlineCount++] = objectListNode->obj;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -859,10 +857,8 @@ void _obj_render_pre_roof(Rect* rect, int elevation)
|
||||
if ((objectListNode->obj->flags & OBJECT_HIDDEN) == 0) {
|
||||
_obj_render_object(object, &updatedRect, lightIntensity);
|
||||
|
||||
if ((objectListNode->obj->outline & OUTLINE_TYPE_MASK) != 0) {
|
||||
if ((objectListNode->obj->outline & OUTLINE_DISABLED) == 0 && _outlineCount < 100) {
|
||||
_outlinedObjects[_outlineCount++] = objectListNode->obj;
|
||||
}
|
||||
if (objectIsOutlined(objectListNode->obj) && _outlineCount < 100) {
|
||||
_outlinedObjects[_outlineCount++] = objectListNode->obj;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1881,7 +1877,7 @@ int objectHide(Object* object, Rect* rect)
|
||||
|
||||
object->flags |= OBJECT_HIDDEN;
|
||||
|
||||
if ((object->outline & OUTLINE_TYPE_MASK) != 0) {
|
||||
if (objectIsOutlined(object)) {
|
||||
object->outline |= OUTLINE_DISABLED;
|
||||
}
|
||||
|
||||
@@ -1919,7 +1915,7 @@ int objectDisableOutline(Object* object, Rect* rect)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((object->outline & OUTLINE_TYPE_MASK) != 0) {
|
||||
if (objectIsOutlined(object)) {
|
||||
object->outline |= OUTLINE_DISABLED;
|
||||
}
|
||||
|
||||
@@ -2335,10 +2331,7 @@ void objectGetRect(Object* obj, Rect* rect)
|
||||
return;
|
||||
}
|
||||
|
||||
bool isOutlined = false;
|
||||
if ((obj->outline & OUTLINE_TYPE_MASK) != 0) {
|
||||
isOutlined = true;
|
||||
}
|
||||
bool isOutlined = objectIsOutlined(obj);
|
||||
|
||||
CacheEntry* artHandle;
|
||||
Art* art = artLock(obj->fid, &artHandle);
|
||||
@@ -2888,6 +2881,11 @@ void _intensity_mask_buf_to_buf(unsigned char* src, int srcWidth, int srcHeight,
|
||||
}
|
||||
}
|
||||
|
||||
bool objectIsOutlined(Object* obj)
|
||||
{
|
||||
return obj != nullptr && (obj->outline & OUTLINE_TYPE_MASK) != 0 && (obj->outline & OUTLINE_DISABLED) == 0;
|
||||
}
|
||||
|
||||
// 0x48C2B4 obj_outline_object
|
||||
int objectSetOutline(Object* obj, int outlineType, Rect* rect)
|
||||
{
|
||||
@@ -2895,7 +2893,7 @@ int objectSetOutline(Object* obj, int outlineType, Rect* rect)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((obj->outline & OUTLINE_TYPE_MASK) != 0) {
|
||||
if (objectIsOutlined(obj)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
@@ -102,6 +102,7 @@ void _obj_fix_violence_settings(int* fid);
|
||||
|
||||
Object* objectTypedFindById(int id, int type);
|
||||
bool isExitGridAt(int tile, int elevation);
|
||||
bool objectIsOutlined(Object* obj);
|
||||
|
||||
// RAII wrapper for Object*.
|
||||
class UniqueObject {
|
||||
|
||||
Reference in New Issue
Block a user