[Scummvm-git-logs] scummvm master -> fc4617148981404a9548c98432363f359760bd2c
joostp
noreply at scummvm.org
Thu Aug 4 14:58:51 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:
fc46171489 ICB: ELDORADO: handle fn_set_as_player differences
Commit: fc4617148981404a9548c98432363f359760bd2c
https://github.com/scummvm/scummvm/commit/fc4617148981404a9548c98432363f359760bd2c
Author: Joost Peters (joostp at 7fc1.org)
Date: 2022-08-04T16:57:39+02:00
Commit Message:
ICB: ELDORADO: handle fn_set_as_player differences
Changed paths:
engines/icb/bone.cpp
engines/icb/bone.h
engines/icb/function.cpp
engines/icb/player.cpp
diff --git a/engines/icb/bone.cpp b/engines/icb/bone.cpp
index 883d1604f48..8baec086556 100644
--- a/engines/icb/bone.cpp
+++ b/engines/icb/bone.cpp
@@ -216,6 +216,13 @@ void SetPlayerShotBone(int32 obj_id) {
#define STANDARD_MARKER_HEIGHT 170
+void ResetPlayerLook() {
+ _logic *log = MS->player.log;
+ BoneDeformation *b = &(log->voxel_info->lookBone);
+
+ b->boneTarget.vx = b->boneTarget.vy = b->boneTarget.vz = 0;
+}
+
// update the neck bone
// should only be called with player as logic
void UpdatePlayerLook() {
diff --git a/engines/icb/bone.h b/engines/icb/bone.h
index 027716d7ac1..16c23b81ce5 100644
--- a/engines/icb/bone.h
+++ b/engines/icb/bone.h
@@ -37,6 +37,8 @@ void UpdateTalking(_logic *log, RapAPI *rap);
void SetPlayerShotBone(int32 obj_id);
+void ResetPlayerLook();
+
void UpdatePlayerLook();
} // End of namespace ICB
diff --git a/engines/icb/function.cpp b/engines/icb/function.cpp
index 471a6ed3dee..6deef8fd0ce 100644
--- a/engines/icb/function.cpp
+++ b/engines/icb/function.cpp
@@ -338,8 +338,6 @@ mcodeFunctionReturnCodes fn_shadow(int32 &result, int32 *params) { return (MS->f
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 *) {
// no params
@@ -3580,5 +3578,36 @@ mcodeFunctionReturnCodes _game_session::fn_can_save(int32 &result, int32 *) {
return IR_CONT;
}
+mcodeFunctionReturnCodes _game_session::fn_set_as_player(int32 &, int32 *params) {
+ if (g_icb->getGameType() != GType_ELDORADO)
+ return IR_CONT;
+
+ const char *object_name = (const char *)MemoryUtil::resolvePtr(params[0]);
+
+ uint32 id = LinkedDataObject::Fetch_item_number_by_name(objects, object_name);
+
+ if (id == PX_LINKED_DATA_FILE_ERROR)
+ Fatal_error("fn_set_as_player object [%s] does not exist", object_name);
+
+ // first, if there is a current player then he needs to be told to re-run context as he ain't anymore
+ if (player.Player_exists()) {
+ logic_structs[player.Fetch_player_id()]->context_request = TRUE8;
+ logic_structs[player.Fetch_player_id()]->mega->async_list_pos = 0; // reset list position
+ logic_structs[player.Fetch_player_id()]->mega->asyncing = 0;
+ ResetPlayerLook(); // old player straightens out - i.e. reset look at interact object
+ }
+
+ player.Set_player_id(id);
+
+ player.Reset_player();
+
+ player.interact_lock = TRUE8;
+
+ logic_structs[id]->context_request = TRUE8;
+ logic_structs[id]->mega->async_list_pos = 0; // reset list position
+ logic_structs[id]->mega->asyncing = 0;
+
+ return IR_CONT;
+}
} // End of namespace ICB
diff --git a/engines/icb/player.cpp b/engines/icb/player.cpp
index 6fba98c2eca..416a21f86ce 100644
--- a/engines/icb/player.cpp
+++ b/engines/icb/player.cpp
@@ -2900,8 +2900,10 @@ void _player::Set_player_id(uint32 id) {
// get player structures - we can be sure they wont get moved
log = g_mission->session->Fetch_object_struct(player_id);
- // get initial barriers for player
- MS->Prepare_megas_route_barriers(TRUE8);
+ if (g_icb->getGameType() == GType_ICB) {
+ // get initial barriers for player
+ MS->Prepare_megas_route_barriers(TRUE8);
+ }
// reset pointer to player parent barrier box
MS->logic_structs[id]->mega->cur_parent = nullptr;
More information about the Scummvm-git-logs
mailing list