[Scummvm-git-logs] scummvm master -> a125e3d3d0fc4383d1238e37196b54d9f43c3c68
joostp
noreply at scummvm.org
Wed Aug 3 14:42:47 UTC 2022
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
a125e3d3d0 ICB: ELDORADO: some more El Dorado script functions and differences
Commit: a125e3d3d0fc4383d1238e37196b54d9f43c3c68
https://github.com/scummvm/scummvm/commit/a125e3d3d0fc4383d1238e37196b54d9f43c3c68
Author: Joost Peters (joostp at 7fc1.org)
Date: 2022-08-03T16:41:28+02:00
Commit Message:
ICB: ELDORADO: some more El Dorado script functions and differences
Changed paths:
engines/icb/fn_icon_functions.cpp
engines/icb/function.cpp
engines/icb/logic.cpp
engines/icb/object_structs.h
engines/icb/session.h
diff --git a/engines/icb/fn_icon_functions.cpp b/engines/icb/fn_icon_functions.cpp
index 19d324df31c..8e06c9c52b5 100644
--- a/engines/icb/fn_icon_functions.cpp
+++ b/engines/icb/fn_icon_functions.cpp
@@ -69,6 +69,8 @@ mcodeFunctionReturnCodes fn_add_ammo_clips(int32 &result, int32 *params) { retur
mcodeFunctionReturnCodes fn_use_ammo_clips(int32 &result, int32 *params) { return (MS->fn_use_ammo_clips(result, params)); }
+mcodeFunctionReturnCodes fn_shutdown_inventory(int32 &result, int32 *params) { return (MS->fn_shutdown_inventory(result, params)); }
+
mcodeFunctionReturnCodes _game_session::fn_is_carrying(int32 &result, int32 *params) {
const char *item_name = (const char *)MemoryUtil::resolvePtr(params[0]);
@@ -302,4 +304,11 @@ mcodeFunctionReturnCodes _game_session::fn_interact_choose(int32 &, int32 *param
return (IR_REPEAT);
}
+mcodeFunctionReturnCodes _game_session::fn_shutdown_inventory(int32 &, int32 *) {
+ g_oIconMenu->CloseDownIconMenu();
+
+ // Calling script can continue.
+ return IR_CONT;
+}
+
} // End of namespace ICB
diff --git a/engines/icb/function.cpp b/engines/icb/function.cpp
index ac2f839995b..fbcffee362d 100644
--- a/engines/icb/function.cpp
+++ b/engines/icb/function.cpp
@@ -125,6 +125,8 @@ mcodeFunctionReturnCodes fn_set_watch(int32 &result, int32 *params) { return (MS
mcodeFunctionReturnCodes fn_three_sixty_interact(int32 &result, int32 *params) { return (MS->fn_three_sixty_interact(result, params)); }
+mcodeFunctionReturnCodes fn_radial_interact(int32 &result, int32 *params) { return (MS->fn_radial_interact(result, params)); }
+
mcodeFunctionReturnCodes fn_near_list(int32 &result, int32 *params) { return (MS->fn_near_list(result, params)); }
mcodeFunctionReturnCodes fn_get_list_result(int32 &result, int32 *params) { return (MS->fn_get_list_result(result, params)); }
@@ -305,6 +307,12 @@ mcodeFunctionReturnCodes _game_session::fn_swordfight(int32 &, int32 *) { return
mcodeFunctionReturnCodes fn_set_as_player(int32 &result, int32 *params) { return (MS->fn_set_as_player(result, params)); }
+mcodeFunctionReturnCodes fn_inventory_active(int32 &result, int32 *params) { return (MS->fn_inventory_active(result, params)); }
+
+mcodeFunctionReturnCodes fn_can_save(int32 &result, int32 *params) { return (MS->fn_can_save(result, params)); }
+
+mcodeFunctionReturnCodes fn_is_actor_relative(int32 &result, int32 *params) { return (MS->fn_is_actor_relative(result, params)); }
+
mcodeFunctionReturnCodes _game_session::fn_set_as_player(int32 &, int32 *) { return (IR_CONT); }
mcodeFunctionReturnCodes _game_session::fn_rig_test(int32 &, int32 *) {
@@ -2412,11 +2420,27 @@ mcodeFunctionReturnCodes _game_session::fn_three_sixty_interact(int32 &, int32 *
if (L->image_type != PROP)
Fatal_error("fn_three_sixty_interact - object [%s] is not a prop!", CGameObject::GetName(object));
- L->three_sixty_interact |= THREE_SIXTY_INTERACT;
+ if (g_icb->getGameType() == GType_ELDORADO)
+ L->prop_interact_method = __THREE_SIXTY;
+ else
+ L->three_sixty_interact |= THREE_SIXTY_INTERACT;
return (IR_CONT);
}
+mcodeFunctionReturnCodes _game_session::fn_radial_interact(int32 &, int32 *params) {
+ //set object to use the simple distance based prop interaction type
+
+ if (L->image_type != PROP)
+ Fatal_error("fn_radial_interact - object [%s] is not a prop!", CGameObject::GetName(object));
+
+ L->prop_interact_method = __RADIAL;
+
+ L->radial_interact_distance = params[0];
+
+ return IR_CONT;
+}
+
mcodeFunctionReturnCodes _game_session::fn_prop_crouch_interact(int32 &, int32 *) {
// set object to use the prop 360deg interaction type
@@ -3179,6 +3203,15 @@ mcodeFunctionReturnCodes _game_session::fn_set_visible(int32 &, int32 *params) {
return IR_CONT;
}
+mcodeFunctionReturnCodes _game_session::fn_inventory_active(int32 &, int32 *params) {
+ if ((params[0] != 0) && (params[0] != 1))
+ Message_box("Must pass either 0 or 1 into fn_inventory_active");
+
+ M->inventoryActive = (bool8)params[0];
+
+ return IR_CONT;
+}
+
mcodeFunctionReturnCodes _game_session::fn_set_object_visible(int32 &, int32 *params) {
uint32 nObjectID;
@@ -3353,4 +3386,20 @@ mcodeFunctionReturnCodes _game_session::fn_set_to_floor(int32 &, int32 *params)
return IR_CONT;
}
+mcodeFunctionReturnCodes _game_session::fn_is_actor_relative(int32 &result, int32 *) {
+ if (player.Get_control_mode() == ACTOR_RELATIVE)
+ result = TRUE8;
+ else
+ result = FALSE8;
+
+ return IR_CONT;
+}
+
+mcodeFunctionReturnCodes _game_session::fn_can_save(int32 &result, int32 *) {
+ result = (int32)(MS->prev_save_state);
+
+ return IR_CONT;
+}
+
+
} // End of namespace ICB
diff --git a/engines/icb/logic.cpp b/engines/icb/logic.cpp
index 3880312b470..07aa76cbf74 100644
--- a/engines/icb/logic.cpp
+++ b/engines/icb/logic.cpp
@@ -259,6 +259,9 @@ void _mega::___init() {
// set to draw
display_me = TRUE8;
+ // inventory is active as a default
+ inventoryActive = TRUE8;
+
dead = FALSE8; // still alive!
// height for looking at
diff --git a/engines/icb/object_structs.h b/engines/icb/object_structs.h
index 223e89b2c79..618290924bb 100644
--- a/engines/icb/object_structs.h
+++ b/engines/icb/object_structs.h
@@ -316,6 +316,8 @@ public:
uint32 slice_hold_tolerance; // y distance to stray before slice hold kicks back in
uint8 idle_count; // how int32 just been stood
+ bool8 inventoryActive; // used to toggle the inventory on and off from scripts (El Dorado only)
+
// camera control
bool8 y_locked;
PXreal y_lock;
diff --git a/engines/icb/session.h b/engines/icb/session.h
index 7606e07ed0a..bb1eb03a59f 100644
--- a/engines/icb/session.h
+++ b/engines/icb/session.h
@@ -673,8 +673,14 @@ public:
mcodeFunctionReturnCodes fn_deactivate_sparkle(int32 &, int32 *);
mcodeFunctionReturnCodes fn_is_player_standing_still(int32 &, int32 *);
+ mcodeFunctionReturnCodes fn_inventory_active(int32 &, int32 *);
+ mcodeFunctionReturnCodes fn_radial_interact(int32 &, int32 *);
+ mcodeFunctionReturnCodes fn_shutdown_inventory(int32 &, int32 *);
mcodeFunctionReturnCodes fn_set_mega_height(int32 &, int32 *);
+ mcodeFunctionReturnCodes fn_is_actor_relative(int32 &, int32 *);
+ mcodeFunctionReturnCodes fn_can_save(int32 &, int32 *);
+
void Set_script(const char *script_name);
void Context_check(uint32 script_name);
void Shut_down_object();
More information about the Scummvm-git-logs
mailing list