[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