1
0
mirror of https://github.com/rwengine/openrw.git synced 2024-11-25 20:02:40 +01:00

Implemented some locate opcodes

This commit is contained in:
Lucas Eriksson 2018-05-03 21:03:33 +02:00
parent 464a1e39b9
commit 263f861a7c

View File

@ -2449,53 +2449,44 @@ void opcode_00e2(const ScriptArguments& args, const ScriptPad padID, const Scrip
@brief player %1d% %6bin-sphere/%near_point %2d% %3d% radius %4d% %5d% @brief player %1d% %6bin-sphere/%near_point %2d% %3d% radius %4d% %5d%
opcode 00e3 opcode 00e3
@arg player @arg player Player
@arg arg2 @arg center Center of object
@arg arg3 @arg radius Radius of object
@arg arg4 @arg showMarker Show marker (True/False)
@arg arg5
@arg arg6
*/ */
bool opcode_00e3(const ScriptArguments& args, const ScriptPlayer player, const ScriptFloat arg2, const ScriptFloat arg3, const ScriptFloat arg4, const ScriptFloat arg5, const ScriptInt arg6) { bool opcode_00e3(const ScriptArguments& args, const ScriptPlayer player, const ScriptVec2 center, const ScriptVec2 radius, const ScriptBoolean showMarker) {
RW_UNIMPLEMENTED_OPCODE(0x00e3); auto plyChar = player->getCharacter();
RW_UNUSED(player); return script::objectInRadius(args, plyChar, center, radius, showMarker);
RW_UNUSED(arg2);
RW_UNUSED(arg3);
RW_UNUSED(arg4);
RW_UNUSED(arg5);
RW_UNUSED(arg6);
RW_UNUSED(args);
return false;
} }
/** /**
@brief player %1d% %6b:in-sphere/%near_point_on_foot %2d% %3d% radius %4d% %5d% @brief player %1d% %6b:in-sphere/%near_point_on_foot %2d% %3d% radius %4d% %5d%
opcode 00e4 opcode 00e4
@arg player @arg player Player
@arg coord0 @arg center Center of object
@arg coord1 @arg radius Radius of object
@arg arg6 @arg showMarker Show marker (True/False)
*/ */
bool opcode_00e4(const ScriptArguments& args, const ScriptPlayer player, const ScriptVec2 coord0, const ScriptVec2 coord1, const ScriptInt arg6) { bool opcode_00e4(const ScriptArguments& args, const ScriptPlayer player, const ScriptVec2 center, const ScriptVec2 radius, const ScriptBoolean showMarker) {
auto plyChar = player->getCharacter(); auto plyChar = player->getCharacter();
auto condition = plyChar->getCurrentVehicle() == nullptr; auto condition = plyChar->getCurrentVehicle() == nullptr;
return script::objectInRadius(args, plyChar, coord0, coord1, arg6, condition); return script::objectInRadius(args, plyChar, center, radius, showMarker, condition);
} }
/** /**
@brief player %1d% %6bin-sphere/%near_point_in_car %2d% %3d% radius %4d% %5d% @brief player %1d% %6bin-sphere/%near_point_in_car %2d% %3d% radius %4d% %5d%
opcode 00e5 opcode 00e5
@arg player @arg player Player
@arg center @arg center Center of object
@arg radius @arg radius Radius of object
@arg arg6 @arg showMarker Show marker (True/False)
*/ */
bool opcode_00e5(const ScriptArguments& args, const ScriptPlayer player, ScriptVec2 center, ScriptVec2 radius, const ScriptInt arg6) { bool opcode_00e5(const ScriptArguments& args, const ScriptPlayer player, ScriptVec2 center, ScriptVec2 radius, const ScriptBoolean showMarker) {
auto plyChar = player->getCharacter(); auto plyChar = player->getCharacter();
auto condition = plyChar->getCurrentVehicle() != nullptr; auto condition = plyChar->getCurrentVehicle() != nullptr;
return script::objectInRadius(args, plyChar, center, radius, arg6, condition); return script::objectInRadius(args, plyChar, center, radius, showMarker, condition);
} }
/** /**
@ -2503,102 +2494,91 @@ bool opcode_00e5(const ScriptArguments& args, const ScriptPlayer player, ScriptV
opcode 00e6 opcode 00e6
@arg player Player @arg player Player
@arg coord Coordinates @arg center Center of object
@arg radius Radius @arg radius Radius of object
@arg arg6 Boolean true/false @arg showMarker Show marker (True/False)
*/ */
bool opcode_00e6(const ScriptArguments& args, const ScriptPlayer player, ScriptVec2 coord, ScriptVec2 radius, const ScriptBoolean arg6) { bool opcode_00e6(const ScriptArguments& args, const ScriptPlayer player, ScriptVec2 center, ScriptVec2 radius, const ScriptBoolean showMarker) {
auto plyChar = player->getCharacter(); auto plyChar = player->getCharacter();
auto condition = plyChar->isStopped(); auto condition = plyChar->isStopped();
return script::objectInRadius(args, plyChar, coord, radius, arg6, condition); return script::objectInRadius(args, plyChar, center, radius, showMarker, condition);
} }
/** /**
@brief player %1d% stopped %6b:in-sphere/%near_point_on_foot %2d% %3d% radius %4d% %5d% @brief player %1d% stopped %6b:in-sphere/%near_point_on_foot %2d% %3d% radius %4d% %5d%
opcode 00e7 opcode 00e7
@arg player @arg player Player
@arg arg2 @arg center Center of object
@arg arg3 @arg radius Radius of object
@arg arg4 @arg showMarker Show marker (True/False)
@arg arg5
@arg arg6
*/ */
bool opcode_00e7(const ScriptArguments& args, const ScriptPlayer player, const ScriptFloat arg2, const ScriptFloat arg3, const ScriptFloat arg4, const ScriptFloat arg5, const ScriptInt arg6) { bool opcode_00e7(const ScriptArguments& args, const ScriptPlayer player, ScriptVec2 center, ScriptVec2 radius, const ScriptBoolean showMarker) {
RW_UNIMPLEMENTED_OPCODE(0x00e7); auto plyChar = player->getCharacter();
RW_UNUSED(player); auto condition = plyChar->isStopped() && plyChar->getCurrentVehicle() == nullptr;
RW_UNUSED(arg2); return script::objectInRadius(args, plyChar, center, radius, showMarker, condition);
RW_UNUSED(arg3);
RW_UNUSED(arg4);
RW_UNUSED(arg5);
RW_UNUSED(arg6);
RW_UNUSED(args);
return false;
} }
/** /**
@brief player %1d% stopped %6b:in-sphere/%near_point_in_car %2d% %3d% radius %4d% %5d% @brief player %1d% stopped %6b:in-sphere/%near_point_in_car %2d% %3d% radius %4d% %5d%
opcode 00e8 opcode 00e8
@arg player @arg player Player
@arg coord @arg center Center of object
@arg radius @arg radius Radius of object
@arg arg6 @arg showMarker Show marker (True/False)
*/ */
bool opcode_00e8(const ScriptArguments& args, const ScriptPlayer player, ScriptVec2 coord, ScriptVec2 radius, const ScriptInt arg6) { bool opcode_00e8(const ScriptArguments& args, const ScriptPlayer player, ScriptVec2 center, ScriptVec2 radius, const ScriptBoolean showMarker) {
auto plyChar = player->getCharacter(); auto plyChar = player->getCharacter();
auto condition = plyChar->isStopped() && plyChar->getCurrentVehicle() != nullptr; auto condition = plyChar->isStopped() && plyChar->getCurrentVehicle() != nullptr;
return script::objectInRadius(args, plyChar, coord, radius, arg6, condition); return script::objectInRadius(args, plyChar, center, radius, showMarker, condition);
} }
/** /**
@brief player %1d% %5b:in-sphere/%near_actor %2d% radius %3d% %4d% @brief player %1d% %5b:in-sphere/%near_actor %2d% radius %3d% %4d%
opcode 00e9 opcode 00e9
@arg player @arg player Player
@arg character @arg character Character goal
@arg radius @arg radius Radius of goal
@arg arg5 @arg showMarker Show marker (True/False)
*/ */
bool opcode_00e9(const ScriptArguments& args, const ScriptPlayer player, const ScriptCharacter character, ScriptVec2 radius, const ScriptInt arg5) { bool opcode_00e9(const ScriptArguments& args, const ScriptPlayer player, const ScriptCharacter character, ScriptVec2 radius, const ScriptBoolean showMarker) {
auto plyChar = player->getCharacter(); auto plyChar = player->getCharacter();
return script::objectInRadiusNear(args, plyChar, character, radius, arg5); /// @todo if character is in vehicle, game uses vehicle position instead of character one
return script::objectInRadiusNear(args, plyChar, character, radius, showMarker);
} }
/** /**
@brief player %1d% %5b:in-sphere/%near_actor_on_foot %2d% radius %3d% %4d% @brief player %1d% %5b:in-sphere/%near_actor_on_foot %2d% radius %3d% %4d%
opcode 00ea opcode 00ea
@arg player @arg player Player
@arg character @arg character Character goal
@arg arg3 @arg radius Radius of goal
@arg arg4 @arg showMarker Show marker (True/False)
@arg arg5
*/ */
bool opcode_00ea(const ScriptArguments& args, const ScriptPlayer player, const ScriptCharacter character, const ScriptFloat arg3, const ScriptFloat arg4, const ScriptInt arg5) { bool opcode_00ea(const ScriptArguments& args, const ScriptPlayer player, const ScriptCharacter character, ScriptVec2 radius, const ScriptBoolean showMarker) {
RW_UNIMPLEMENTED_OPCODE(0x00ea); auto plyChar = player->getCharacter();
RW_UNUSED(player); auto condition = plyChar->getCurrentVehicle() == nullptr;
RW_UNUSED(character); /// @todo if character is in vehicle, game uses vehicle position instead of character one
RW_UNUSED(arg3); return script::objectInRadiusNear(args, plyChar, character, radius, showMarker, condition);
RW_UNUSED(arg4);
RW_UNUSED(arg5);
RW_UNUSED(args);
return false;
} }
/** /**
@brief player %1d% %5b:in-sphere/%near_actor_in_car %2d% radius %3d% %4d% @brief player %1d% %5b:in-sphere/%near_actor_in_car %2d% radius %3d% %4d%
opcode 00eb opcode 00eb
@arg player @arg player Player
@arg character @arg character Character goal
@arg radius @arg radius Radius of goal
@arg arg5 @arg showMarker Show marker (True/False)
*/ */
bool opcode_00eb(const ScriptArguments& args, const ScriptPlayer player, const ScriptCharacter character, ScriptVec2 radius, const ScriptInt arg5) { bool opcode_00eb(const ScriptArguments& args, const ScriptPlayer player, const ScriptCharacter character, ScriptVec2 radius, const ScriptBoolean showMarker) {
auto plyChar = player->getCharacter(); auto plyChar = player->getCharacter();
auto condition = plyChar->getCurrentVehicle() != nullptr; auto condition = plyChar->getCurrentVehicle() != nullptr;
return script::objectInRadiusNear(args, plyChar, character, radius, arg5, condition); /// @todo if character is in vehicle, game uses vehicle position instead of character one
return script::objectInRadiusNear(args, plyChar, character, radius, showMarker, condition);
} }
/** /**
@ -2606,18 +2586,12 @@ bool opcode_00eb(const ScriptArguments& args, const ScriptPlayer player, const S
opcode 00ec opcode 00ec
@arg character Character/ped @arg character Character/ped
@arg coord Coordinates @arg center Center of goal
@arg radius Radius @arg radius Radius of goal
@arg arg6 Boolean true/false @arg showMarker Show marker (True/False)
*/ */
bool opcode_00ec(const ScriptArguments& args, const ScriptCharacter character, ScriptVec2 coord, ScriptVec2 radius, const ScriptBoolean arg6) { bool opcode_00ec(const ScriptArguments& args, const ScriptCharacter character, ScriptVec2 center, ScriptVec2 radius, const ScriptBoolean showMarker) {
RW_UNIMPLEMENTED_OPCODE(0x00ec); return script::objectInRadius(args, character.get(), center, radius, showMarker);
RW_UNUSED(character);
RW_UNUSED(coord);
RW_UNUSED(radius);
RW_UNUSED(arg6);
RW_UNUSED(args);
return false;
} }
/** /**
@ -2625,13 +2599,13 @@ bool opcode_00ec(const ScriptArguments& args, const ScriptCharacter character, S
opcode 00ed opcode 00ed
@arg character Character/ped @arg character Character/ped
@arg coord Coordinates @arg center Center of goal
@arg radius @arg radius Radius of goal
@arg arg6 @arg showMarker Show marker (True/False)
*/ */
bool opcode_00ed(const ScriptArguments& args, const ScriptCharacter character, ScriptVec2 coord, ScriptVec2 radius, const ScriptInt arg6) { bool opcode_00ed(const ScriptArguments& args, const ScriptCharacter character, ScriptVec2 center, ScriptVec2 radius, const ScriptBoolean showMarker) {
auto condition = character->getCurrentVehicle() == nullptr; auto condition = character->getCurrentVehicle() == nullptr;
return script::objectInRadius(args, character.get(), coord, radius, arg6, condition); return script::objectInRadius(args, character.get(), center, radius, showMarker, condition);
} }
/** /**
@ -2639,18 +2613,13 @@ bool opcode_00ed(const ScriptArguments& args, const ScriptCharacter character, S
opcode 00ee opcode 00ee
@arg character Character/ped @arg character Character/ped
@arg coord Coordinates @arg center Center of goal
@arg radius Radius @arg radius Radius of goal
@arg arg6 Boolean true/false @arg showMarker Show marker (True/False)
*/ */
bool opcode_00ee(const ScriptArguments& args, const ScriptCharacter character, ScriptVec2 coord, ScriptVec2 radius, const ScriptBoolean arg6) { bool opcode_00ee(const ScriptArguments& args, const ScriptCharacter character, ScriptVec2 center, ScriptVec2 radius, const ScriptBoolean showMarker) {
RW_UNIMPLEMENTED_OPCODE(0x00ee); auto condition = character->getCurrentVehicle() != nullptr;
RW_UNUSED(character); return script::objectInRadius(args, character.get(), center, radius, showMarker, condition);
RW_UNUSED(coord);
RW_UNUSED(radius);
RW_UNUSED(arg6);
RW_UNUSED(args);
return false;
} }
/** /**
@ -2658,12 +2627,13 @@ bool opcode_00ee(const ScriptArguments& args, const ScriptCharacter character, S
opcode 00ef opcode 00ef
@arg character Character/ped @arg character Character/ped
@arg coord Coordinates @arg center Center of goal
@arg radius Radius @arg radius Radius of goal
@arg arg6 Boolean true/false @arg showMarker Show marker (True/False)
*/ */
bool opcode_00ef(const ScriptArguments& args, const ScriptCharacter character, ScriptVec2 coord, ScriptVec2 radius, const ScriptBoolean arg6) { bool opcode_00ef(const ScriptArguments& args, const ScriptCharacter character, ScriptVec2 center, ScriptVec2 radius, const ScriptBoolean showMarker) {
return script::objectInRadius(args, character.get(), coord, radius, arg6); auto condition = character->isStopped();
return script::objectInRadius(args, character.get(), center, radius, showMarker, condition);
} }
/** /**
@ -2671,18 +2641,13 @@ bool opcode_00ef(const ScriptArguments& args, const ScriptCharacter character, S
opcode 00f0 opcode 00f0
@arg character Character/ped @arg character Character/ped
@arg coord Coordinates @arg center Center of goal
@arg radius Radius @arg radius Radius of goal
@arg arg6 Boolean true/false @arg showMarker Show marker (True/False)
*/ */
bool opcode_00f0(const ScriptArguments& args, const ScriptCharacter character, ScriptVec2 coord, ScriptVec2 radius, const ScriptBoolean arg6) { bool opcode_00f0(const ScriptArguments& args, const ScriptCharacter character, ScriptVec2 center, ScriptVec2 radius, const ScriptBoolean showMarker) {
RW_UNIMPLEMENTED_OPCODE(0x00f0); auto condition = character->isStopped() && character->getCurrentVehicle() == nullptr;
RW_UNUSED(character); return script::objectInRadius(args, character.get(), center, radius, showMarker, condition);
RW_UNUSED(coord);
RW_UNUSED(radius);
RW_UNUSED(arg6);
RW_UNUSED(args);
return false;
} }
/** /**
@ -2690,18 +2655,13 @@ bool opcode_00f0(const ScriptArguments& args, const ScriptCharacter character, S
opcode 00f1 opcode 00f1
@arg character Character/ped @arg character Character/ped
@arg coord Coordinates @arg center Center of goal
@arg radius Radius @arg radius Radius of goal
@arg arg6 Boolean true/false @arg showMarker Show marker (True/False)
*/ */
bool opcode_00f1(const ScriptArguments& args, const ScriptCharacter character, ScriptVec2 coord, ScriptVec2 radius, const ScriptBoolean arg6) { bool opcode_00f1(const ScriptArguments& args, const ScriptCharacter character, ScriptVec2 center, ScriptVec2 radius, const ScriptBoolean showMarker) {
RW_UNIMPLEMENTED_OPCODE(0x00f1); auto condition = character->isStopped() && character->getCurrentVehicle() != nullptr;
RW_UNUSED(character); return script::objectInRadius(args, character.get(), center, radius, showMarker, condition);
RW_UNUSED(coord);
RW_UNUSED(radius);
RW_UNUSED(arg6);
RW_UNUSED(args);
return false;
} }
/** /**
@ -2710,17 +2670,12 @@ bool opcode_00f1(const ScriptArguments& args, const ScriptCharacter character, S
opcode 00f2 opcode 00f2
@arg character0 Character/ped @arg character0 Character/ped
@arg character1 Character/ped @arg character1 Character/ped
@arg radius Radius @arg radius Radius of goal
@arg arg5 Boolean true/false @arg showMarker Show marker (True/False)
*/ */
bool opcode_00f2(const ScriptArguments& args, const ScriptCharacter character0, const ScriptCharacter character1, ScriptVec2 radius, const ScriptBoolean arg5) { bool opcode_00f2(const ScriptArguments& args, const ScriptCharacter character0, const ScriptCharacter character1, ScriptVec2 radius, const ScriptBoolean showMarker) {
RW_UNIMPLEMENTED_OPCODE(0x00f2); /// @todo if characters are in vehicles, game uses vehicle positions instead of character ones
RW_UNUSED(character0); return script::objectInRadiusNear(args, character0, character1, radius, showMarker);
RW_UNUSED(character1);
RW_UNUSED(radius);
RW_UNUSED(arg5);
RW_UNUSED(args);
return false;
} }
/** /**
@ -2729,17 +2684,13 @@ bool opcode_00f2(const ScriptArguments& args, const ScriptCharacter character0,
opcode 00f3 opcode 00f3
@arg character0 Character/ped @arg character0 Character/ped
@arg character1 Character/ped @arg character1 Character/ped
@arg radius Radius @arg radius Radius of goal
@arg arg5 Boolean true/false @arg showMarker Show marker (True/False)
*/ */
bool opcode_00f3(const ScriptArguments& args, const ScriptCharacter character0, const ScriptCharacter character1, ScriptVec2 radius, const ScriptBoolean arg5) { bool opcode_00f3(const ScriptArguments& args, const ScriptCharacter character0, const ScriptCharacter character1, ScriptVec2 radius, const ScriptBoolean showMarker) {
RW_UNIMPLEMENTED_OPCODE(0x00f3); auto condition = character0->getCurrentVehicle() == nullptr;
RW_UNUSED(character0); /// @todo if characters are in vehicles, game uses vehicle positions instead of character ones
RW_UNUSED(character1); return script::objectInRadiusNear(args, character0, character1, radius, showMarker, condition);
RW_UNUSED(radius);
RW_UNUSED(arg5);
RW_UNUSED(args);
return false;
} }
/** /**
@ -2748,234 +2699,178 @@ bool opcode_00f3(const ScriptArguments& args, const ScriptCharacter character0,
opcode 00f4 opcode 00f4
@arg character0 Character/ped @arg character0 Character/ped
@arg character1 Character/ped @arg character1 Character/ped
@arg radius Radius @arg radius Radius of goal
@arg arg5 Boolean true/false @arg showMarker Show marker (True/False)
*/ */
bool opcode_00f4(const ScriptArguments& args, const ScriptCharacter character0, const ScriptCharacter character1, ScriptVec2 radius, const ScriptBoolean arg5) { bool opcode_00f4(const ScriptArguments& args, const ScriptCharacter character0, const ScriptCharacter character1, ScriptVec2 radius, const ScriptBoolean showMarker) {
RW_UNIMPLEMENTED_OPCODE(0x00f4); auto condition = character0->getCurrentVehicle() != nullptr;
RW_UNUSED(character0); /// @todo if characters are in vehicles, game uses vehicle positions instead of character ones
RW_UNUSED(character1); return script::objectInRadiusNear(args, character0, character1, radius, showMarker, condition);
RW_UNUSED(radius);
RW_UNUSED(arg5);
RW_UNUSED(args);
return false;
} }
/** /**
@brief player %1d% %8b:in-sphere/%near_point %2d% %3d% %4d% radius %5d% %6d% %7d% @brief player %1d% %8b:in-sphere/%near_point %2d% %3d% %4d% radius %5d% %6d% %7d%
opcode 00f5 opcode 00f5
@arg player @arg player Player
@arg arg2 @arg center Center of object
@arg arg3 @arg radius Radius of object
@arg arg4 @arg showMarker Show marker (True/False)
@arg arg5
@arg arg6
@arg arg7
@arg arg8
*/ */
bool opcode_00f5(const ScriptArguments& args, const ScriptPlayer player, const ScriptFloat arg2, const ScriptFloat arg3, const ScriptFloat arg4, const ScriptFloat arg5, const ScriptFloat arg6, const ScriptFloat arg7, const ScriptInt arg8) { bool opcode_00f5(const ScriptArguments& args, const ScriptPlayer player, ScriptVec3 center, ScriptVec3 radius, const ScriptBoolean showMarker) {
RW_UNIMPLEMENTED_OPCODE(0x00f5); auto plyChar = player->getCharacter();
RW_UNUSED(player); return script::objectInRadius(args, plyChar, center, radius, showMarker);
RW_UNUSED(arg2);
RW_UNUSED(arg3);
RW_UNUSED(arg4);
RW_UNUSED(arg5);
RW_UNUSED(arg6);
RW_UNUSED(arg7);
RW_UNUSED(arg8);
RW_UNUSED(args);
return false;
} }
/** /**
@brief player %1d% %8b:in-sphere/%near_point_on_foot %2d% %3d% %4d% radius %5d% %6d% %7d% @brief player %1d% %8b:in-sphere/%near_point_on_foot %2d% %3d% %4d% radius %5d% %6d% %7d%
opcode 00f6 opcode 00f6
@arg player @arg player Player
@arg coord @arg center Center of object
@arg radius @arg radius Radius of object
@arg arg8 @arg showMarker Show marker (True/False)
*/ */
bool opcode_00f6(const ScriptArguments& args, const ScriptPlayer player, ScriptVec3 coord, ScriptVec3 radius, const ScriptInt arg8) { bool opcode_00f6(const ScriptArguments& args, const ScriptPlayer player, ScriptVec3 center, ScriptVec3 radius, const ScriptBoolean showMarker) {
auto plyChar = player->getCharacter(); auto plyChar = player->getCharacter();
auto condition = plyChar->getCurrentVehicle() == nullptr; auto condition = plyChar->getCurrentVehicle() == nullptr;
return script::objectInRadius(args, plyChar, coord, radius, arg8, condition); return script::objectInRadius(args, plyChar, center, radius, showMarker, condition);
} }
/** /**
@brief player %1d% sphere %8b% near_point_in_car %2d% %3d% %4d% radius %5d% %6d% %7d% @brief player %1d% sphere %8b% near_point_in_car %2d% %3d% %4d% radius %5d% %6d% %7d%
opcode 00f7 opcode 00f7
@arg player @arg player Player
@arg coord @arg center Center of object
@arg radius @arg radius Radius of object
@arg arg8 @arg showMarker Show marker (True/False)
*/ */
bool opcode_00f7(const ScriptArguments& args, const ScriptPlayer player, ScriptVec3 coord, ScriptVec3 radius, const ScriptInt arg8) { bool opcode_00f7(const ScriptArguments& args, const ScriptPlayer player, ScriptVec3 center, ScriptVec3 radius, const ScriptBoolean showMarker) {
auto plyChar = player->getCharacter(); auto plyChar = player->getCharacter();
auto condition = plyChar->getCurrentVehicle() != nullptr; auto condition = plyChar->getCurrentVehicle() != nullptr;
return script::objectInRadius(args, plyChar, coord, radius, arg8, condition); return script::objectInRadius(args, plyChar, center, radius, showMarker, condition);
} }
/** /**
@brief player %1d% stopped %8b:in-sphere/%near_point %2d% %3d% %4d% radius %5d% %6d% %7d% @brief player %1d% stopped %8b:in-sphere/%near_point %2d% %3d% %4d% radius %5d% %6d% %7d%
opcode 00f8 opcode 00f8
@arg player @arg player Player
@arg coord @arg center Center of object
@arg radius @arg radius Radius of object
@arg arg8 @arg showMarker Show marker (True/False)
*/ */
bool opcode_00f8(const ScriptArguments& args, const ScriptPlayer player, ScriptVec3 coord, ScriptVec3 radius, const ScriptInt arg8) { bool opcode_00f8(const ScriptArguments& args, const ScriptPlayer player, ScriptVec3 center, ScriptVec3 radius, const ScriptBoolean showMarker) {
auto plyChar = player->getCharacter(); auto plyChar = player->getCharacter();
auto condition = plyChar->isStopped(); auto condition = plyChar->isStopped();
return script::objectInRadius(args, plyChar, coord, radius, arg8, condition); return script::objectInRadius(args, plyChar, center, radius, showMarker, condition);
} }
/** /**
@brief player %1d% stopped %8b:in-sphere/%near_point_on_foot %2d% %3d% %4d% radius %5d% %6d% %7d% @brief player %1d% stopped %8b:in-sphere/%near_point_on_foot %2d% %3d% %4d% radius %5d% %6d% %7d%
opcode 00f9 opcode 00f9
@arg player @arg player Player
@arg arg2 @arg center Center of object
@arg arg3 @arg radius Radius of object
@arg arg4 @arg showMarker Show marker (True/False)
@arg arg5
@arg arg6
@arg arg7
@arg arg8
*/ */
bool opcode_00f9(const ScriptArguments& args, const ScriptPlayer player, ScriptVec3 coord, ScriptVec3 radius, const ScriptInt arg8) { bool opcode_00f9(const ScriptArguments& args, const ScriptPlayer player, ScriptVec3 center, ScriptVec3 radius, const ScriptBoolean showMarker) {
auto plyChar = player->getCharacter(); auto plyChar = player->getCharacter();
auto condition = plyChar->isStopped() && plyChar->getCurrentVehicle() == nullptr; auto condition = plyChar->isStopped() && plyChar->getCurrentVehicle() == nullptr;
return script::objectInRadius(args, plyChar, coord, radius, arg8, condition); return script::objectInRadius(args, plyChar, center, radius, showMarker, condition);
} }
/** /**
@brief player %1d% stopped %8b:in-sphere/%near_point_in_car %2d% %3d% %4d% radius %5d% %6d% %7d% @brief player %1d% stopped %8b:in-sphere/%near_point_in_car %2d% %3d% %4d% radius %5d% %6d% %7d%
opcode 00fa opcode 00fa
@arg player @arg player Player
@arg arg2 @arg center Center of object
@arg arg3 @arg radius Radius of object
@arg arg4 @arg showMarker Show marker (True/False)
@arg arg5
@arg arg6
@arg arg7
@arg arg8
*/ */
bool opcode_00fa(const ScriptArguments& args, const ScriptPlayer player, const ScriptFloat arg2, const ScriptFloat arg3, const ScriptFloat arg4, const ScriptFloat arg5, const ScriptFloat arg6, const ScriptFloat arg7, const ScriptInt arg8) { bool opcode_00fa(const ScriptArguments& args, const ScriptPlayer player, ScriptVec3 center, ScriptVec3 radius, const ScriptBoolean showMarker) {
RW_UNIMPLEMENTED_OPCODE(0x00fa); auto plyChar = player->getCharacter();
RW_UNUSED(player); auto condition = plyChar->isStopped() && plyChar->getCurrentVehicle() != nullptr;
RW_UNUSED(arg2); return script::objectInRadius(args, plyChar, center, radius, showMarker, condition);
RW_UNUSED(arg3);
RW_UNUSED(arg4);
RW_UNUSED(arg5);
RW_UNUSED(arg6);
RW_UNUSED(arg7);
RW_UNUSED(arg8);
RW_UNUSED(args);
return false;
} }
/** /**
@brief player %1d% %6b:in-sphere/%near_actor %2d% radius %3d% %4d% %5d% @brief player %1d% %6b:in-sphere/%near_actor %2d% radius %3d% %4d% %5d%
opcode 00fb opcode 00fb
@arg player @arg player Player
@arg character @arg character Character goal
@arg arg3 @arg radius Radius of goal
@arg arg4 @arg showMarker Show marker (True/False)
@arg arg5
@arg arg6
*/ */
bool opcode_00fb(const ScriptArguments& args, const ScriptPlayer player, const ScriptCharacter character, const ScriptFloat arg3, const ScriptFloat arg4, const ScriptFloat arg5, const ScriptInt arg6) { bool opcode_00fb(const ScriptArguments& args, const ScriptPlayer player, const ScriptCharacter character, ScriptVec3 radius, const ScriptBoolean showMarker) {
RW_UNIMPLEMENTED_OPCODE(0x00fb); auto plyChar = player->getCharacter();
RW_UNUSED(player); /// @todo if character is in vehicle, game uses vehicle position instead of character one
RW_UNUSED(character); return script::objectInRadiusNear(args, plyChar, character, radius, showMarker);
RW_UNUSED(arg3);
RW_UNUSED(arg4);
RW_UNUSED(arg5);
RW_UNUSED(arg6);
RW_UNUSED(args);
return false;
} }
/** /**
@brief player %1d% %6b:in-sphere/%near_actor %2d% on_foot radius %3d% %4d% %5d% @brief player %1d% %6b:in-sphere/%near_actor %2d% on_foot radius %3d% %4d% %5d%
opcode 00fc opcode 00fc
@arg player @arg player Player
@arg character @arg character Character goal
@arg arg3 @arg radius Radius of goal
@arg arg4 @arg showMarker Show marker (True/False)
@arg arg5
@arg arg6
*/ */
bool opcode_00fc(const ScriptArguments& args, const ScriptPlayer player, const ScriptCharacter character, const ScriptFloat arg3, const ScriptFloat arg4, const ScriptFloat arg5, const ScriptInt arg6) { bool opcode_00fc(const ScriptArguments& args, const ScriptPlayer player, const ScriptCharacter character, ScriptVec3 radius, const ScriptBoolean showMarker) {
RW_UNIMPLEMENTED_OPCODE(0x00fc); auto plyChar = player->getCharacter();
RW_UNUSED(player); auto condition = plyChar->getCurrentVehicle() == nullptr;
RW_UNUSED(character); /// @todo if character is in vehicle, game uses vehicle position instead of character one
RW_UNUSED(arg3); return script::objectInRadiusNear(args, plyChar, character, radius, showMarker, condition);
RW_UNUSED(arg4);
RW_UNUSED(arg5);
RW_UNUSED(arg6);
RW_UNUSED(args);
return false;
} }
/** /**
@brief player %1d% %6b:in-sphere/%near_actor %2d% in_car radius %3d% %4d% %5d% @brief player %1d% %6b:in-sphere/%near_actor %2d% in_car radius %3d% %4d% %5d%
opcode 00fd opcode 00fd
@arg player @arg player Player
@arg character @arg character Character goal
@arg radius @arg radius Radius of goal
@arg arg6 @arg showMarker Show marker (True/False)
*/ */
bool opcode_00fd(const ScriptArguments& args, const ScriptPlayer player, const ScriptCharacter character, ScriptVec3 radius, const ScriptInt arg6) { bool opcode_00fd(const ScriptArguments& args, const ScriptPlayer player, const ScriptCharacter character, ScriptVec3 radius, const ScriptBoolean showMarker) {
auto plyChar = player->getCharacter(); auto plyChar = player->getCharacter();
auto condition = plyChar->getCurrentVehicle() != nullptr; auto condition = plyChar->getCurrentVehicle() != nullptr;
return script::objectInRadiusNear(args, plyChar, character, radius, arg6, condition); /// @todo if character is in vehicle, game uses vehicle position instead of character one
return script::objectInRadiusNear(args, plyChar, character, radius, showMarker, condition);
} }
/** /**
@brief actor %1d% %8bin-sphere/%near_point %2d% %3d% %4d% radius %5d% %6d% %7d% @brief actor %1d% %8bin-sphere/%near_point %2d% %3d% %4d% radius %5d% %6d% %7d%
opcode 00fe opcode 00fe
@arg character Character/ped @arg player Player
@arg coord Coordinates @arg center Center of object
@arg radius Radius @arg radius Radius of object
@arg arg8 Boolean true/false @arg showMarker Show marker (True/False)
*/ */
bool opcode_00fe(const ScriptArguments& args, const ScriptCharacter character, ScriptVec3 coord, ScriptVec3 radius, const ScriptBoolean arg8) { bool opcode_00fe(const ScriptArguments& args, const ScriptCharacter character, ScriptVec3 center, ScriptVec3 radius, const ScriptBoolean showMarker) {
RW_UNIMPLEMENTED_OPCODE(0x00fe); /// @todo if character is in vehicle, game uses vehicle position instead of character one
RW_UNUSED(character); return script::objectInRadius(args, character.get(), center, radius, showMarker);
RW_UNUSED(coord);
RW_UNUSED(radius);
RW_UNUSED(arg8);
RW_UNUSED(args);
return false;
} }
/** /**
@brief actor %1d% %8bin-sphere/%near_point_on_foot %2d% %3d% %4d% radius %5d% %6d% %7d% @brief actor %1d% %8bin-sphere/%near_point_on_foot %2d% %3d% %4d% radius %5d% %6d% %7d%
opcode 00ff opcode 00ff
@arg character Character/ped @arg player Player
@arg coord Coordinates @arg center Center of object
@arg radius Radius @arg radius Radius of object
@arg arg8 Boolean true/false @arg showMarker Show marker (True/False)
*/ */
bool opcode_00ff(const ScriptArguments& args, const ScriptCharacter character, ScriptVec3 coord, ScriptVec3 radius, const ScriptBoolean arg8) { bool opcode_00ff(const ScriptArguments& args, const ScriptCharacter character, ScriptVec3 center, ScriptVec3 radius, const ScriptBoolean showMarker) {
RW_UNIMPLEMENTED_OPCODE(0x00ff); auto condition = character->getCurrentVehicle() == nullptr;
RW_UNUSED(character); /// @todo if character is in vehicle, game uses vehicle position instead of character one
RW_UNUSED(coord); return script::objectInRadius(args, character.get(), center, radius, showMarker, condition);
RW_UNUSED(radius);
RW_UNUSED(arg8);
RW_UNUSED(args);
return false;
} }
/** /**
@ -2983,13 +2878,14 @@ bool opcode_00ff(const ScriptArguments& args, const ScriptCharacter character, S
opcode 0100 opcode 0100
@arg character Character/ped @arg character Character/ped
@arg coord Coordinates @arg center Center of object
@arg radius Radius @arg radius Radius of object
@arg arg8 Boolean true/false @arg showMarker Show marker (True/False)
*/ */
bool opcode_0100(const ScriptArguments& args, const ScriptCharacter character, ScriptVec3 coord, ScriptVec3 radius, const ScriptBoolean arg8) { bool opcode_0100(const ScriptArguments& args, const ScriptCharacter character, ScriptVec3 center, ScriptVec3 radius, const ScriptBoolean showMarker) {
auto condition = character->getCurrentVehicle() != nullptr; auto condition = character->getCurrentVehicle() != nullptr;
return script::objectInRadius(args, character.get(), coord, radius, arg8, condition); /// @todo if character is in vehicle, game uses vehicle position instead of character one
return script::objectInRadius(args, character.get(), center, radius, showMarker, condition);
} }
/** /**
@ -2997,18 +2893,14 @@ bool opcode_0100(const ScriptArguments& args, const ScriptCharacter character, S
opcode 0101 opcode 0101
@arg character Character/ped @arg character Character/ped
@arg coord Coordinates @arg center Center of object
@arg radius Radius @arg radius Radius of object
@arg arg8 Boolean true/false @arg showMarker Show marker (True/False)
*/ */
bool opcode_0101(const ScriptArguments& args, const ScriptCharacter character, ScriptVec3 coord, ScriptVec3 radius, const ScriptBoolean arg8) { bool opcode_0101(const ScriptArguments& args, const ScriptCharacter character, ScriptVec3 center, ScriptVec3 radius, const ScriptBoolean showMarker) {
RW_UNIMPLEMENTED_OPCODE(0x0101); auto condition = character->isStopped();
RW_UNUSED(character); /// @todo if character is in vehicle, game uses vehicle position instead of character one
RW_UNUSED(coord); return script::objectInRadius(args, character.get(), center, radius, showMarker, condition);
RW_UNUSED(radius);
RW_UNUSED(arg8);
RW_UNUSED(args);
return false;
} }
/** /**
@ -3016,18 +2908,14 @@ bool opcode_0101(const ScriptArguments& args, const ScriptCharacter character, S
opcode 0102 opcode 0102
@arg character Character/ped @arg character Character/ped
@arg coord Coordinates @arg center Center of object
@arg radius Radius @arg radius Radius of object
@arg arg8 Boolean true/false @arg showMarker Show marker (True/False)
*/ */
bool opcode_0102(const ScriptArguments& args, const ScriptCharacter character, ScriptVec3 coord, ScriptVec3 radius, const ScriptBoolean arg8) { bool opcode_0102(const ScriptArguments& args, const ScriptCharacter character, ScriptVec3 center, ScriptVec3 radius, const ScriptBoolean showMarker) {
RW_UNIMPLEMENTED_OPCODE(0x0102); auto condition = character->isStopped() && character->getCurrentVehicle() == nullptr;
RW_UNUSED(character); /// @todo if character is in vehicle, game uses vehicle position instead of character one
RW_UNUSED(coord); return script::objectInRadius(args, character.get(), center, radius, showMarker, condition);
RW_UNUSED(radius);
RW_UNUSED(arg8);
RW_UNUSED(args);
return false;
} }
/** /**
@ -3035,18 +2923,14 @@ bool opcode_0102(const ScriptArguments& args, const ScriptCharacter character, S
opcode 0103 opcode 0103
@arg character Character/ped @arg character Character/ped
@arg coord Coordinates @arg center Center of object
@arg radius Radius @arg radius Radius of object
@arg arg8 Boolean true/false @arg showMarker Show marker (True/False)
*/ */
bool opcode_0103(const ScriptArguments& args, const ScriptCharacter character, ScriptVec3 coord, ScriptVec3 radius, const ScriptBoolean arg8) { bool opcode_0103(const ScriptArguments& args, const ScriptCharacter character, ScriptVec3 center, ScriptVec3 radius, const ScriptBoolean showMarker) {
RW_UNIMPLEMENTED_OPCODE(0x0103); auto condition = character->isStopped() && character->getCurrentVehicle() != nullptr;
RW_UNUSED(character); /// @todo if character is in vehicle, game uses vehicle position instead of character one
RW_UNUSED(coord); return script::objectInRadius(args, character.get(), center, radius, showMarker, condition);
RW_UNUSED(radius);
RW_UNUSED(arg8);
RW_UNUSED(args);
return false;
} }
/** /**
@ -3055,17 +2939,12 @@ bool opcode_0103(const ScriptArguments& args, const ScriptCharacter character, S
opcode 0104 opcode 0104
@arg character0 Character/ped @arg character0 Character/ped
@arg character1 Character/ped @arg character1 Character/ped
@arg radius Radius @arg radius Radius of goal
@arg arg6 Boolean true/false @arg showMarker Show marker (True/False)
*/ */
bool opcode_0104(const ScriptArguments& args, const ScriptCharacter character0, const ScriptCharacter character1, ScriptVec3 radius, const ScriptBoolean arg6) { bool opcode_0104(const ScriptArguments& args, const ScriptCharacter character0, const ScriptCharacter character1, ScriptVec3 radius, const ScriptBoolean showMarker) {
RW_UNIMPLEMENTED_OPCODE(0x0104); /// @todo if characters are in vehicles, game uses vehicle positions instead of character ones
RW_UNUSED(character0); return script::objectInRadiusNear(args, character0, character1, radius, showMarker);
RW_UNUSED(character1);
RW_UNUSED(radius);
RW_UNUSED(arg6);
RW_UNUSED(args);
return false;
} }
/** /**
@ -3074,17 +2953,13 @@ bool opcode_0104(const ScriptArguments& args, const ScriptCharacter character0,
opcode 0105 opcode 0105
@arg character0 Character/ped @arg character0 Character/ped
@arg character1 Character/ped @arg character1 Character/ped
@arg radius Radius @arg radius Radius of goal
@arg arg6 Boolean true/false @arg showMarker Show marker (True/False)
*/ */
bool opcode_0105(const ScriptArguments& args, const ScriptCharacter character0, const ScriptCharacter character1, ScriptVec3 radius, const ScriptBoolean arg6) { bool opcode_0105(const ScriptArguments& args, const ScriptCharacter character0, const ScriptCharacter character1, ScriptVec3 radius, const ScriptBoolean showMarker) {
RW_UNIMPLEMENTED_OPCODE(0x0105); auto condition = character0->getCurrentVehicle() == nullptr;
RW_UNUSED(character0); /// @todo if characters are in vehicles, game uses vehicle positions instead of character ones
RW_UNUSED(character1); return script::objectInRadiusNear(args, character0, character1, radius, showMarker, condition);
RW_UNUSED(radius);
RW_UNUSED(arg6);
RW_UNUSED(args);
return false;
} }
/** /**
@ -3093,17 +2968,13 @@ bool opcode_0105(const ScriptArguments& args, const ScriptCharacter character0,
opcode 0106 opcode 0106
@arg character0 Character/ped @arg character0 Character/ped
@arg character1 Character/ped @arg character1 Character/ped
@arg radius Radius @arg radius Radius of goal
@arg arg6 Boolean true/false @arg showMarker Show marker (True/False)
*/ */
bool opcode_0106(const ScriptArguments& args, const ScriptCharacter character0, const ScriptCharacter character1, ScriptVec3 radius, const ScriptBoolean arg6) { bool opcode_0106(const ScriptArguments& args, const ScriptCharacter character0, const ScriptCharacter character1, ScriptVec3 radius, const ScriptBoolean showMarker) {
RW_UNIMPLEMENTED_OPCODE(0x0106); auto condition = character0->getCurrentVehicle() != nullptr;
RW_UNUSED(character0); /// @todo if characters are in vehicles, game uses vehicle positions instead of character ones
RW_UNUSED(character1); return script::objectInRadiusNear(args, character0, character1, radius, showMarker, condition);
RW_UNUSED(radius);
RW_UNUSED(arg6);
RW_UNUSED(args);
return false;
} }
/** /**
@ -3679,11 +3550,7 @@ void opcode_0152(const ScriptArguments& args, const ScriptString arg1, const Scr
@arg areaName Area name @arg areaName Area name
*/ */
bool opcode_0154(const ScriptArguments& args, const ScriptCharacter character, const ScriptString areaName) { bool opcode_0154(const ScriptArguments& args, const ScriptCharacter character, const ScriptString areaName) {
RW_UNIMPLEMENTED_OPCODE(0x0154); return script::objectInZone(args, character.get(), areaName);
RW_UNUSED(character);
RW_UNUSED(areaName);
RW_UNUSED(args);
return false;
} }
/** /**
@ -11418,16 +11285,18 @@ void opcode_03c5(const ScriptArguments& args, ScriptVec3 coord, const ScriptFloa
@brief current_island == %1d% @brief current_island == %1d%
opcode 03c6 opcode 03c6
@arg arg1 @arg island
*/ */
bool opcode_03c6(const ScriptArguments& args, const ScriptLevel arg1) { bool opcode_03c6(const ScriptArguments& args, const ScriptLevel island) {
// The paramter to this is actually the island number. // The parameter to this is actually the island number.
// Not sure how that will fit into the scheme of full paging // Not sure how that will fit into the scheme of full paging
/// @todo use the current player zone island number to return the correct value. /// @todo use the current player zone island number to return the correct value.
RW_UNIMPLEMENTED_OPCODE(0x03c6); // this might be very slow
RW_UNUSED(arg1); auto world = args.getWorld();
RW_UNUSED(args); auto plyChar = world->pedestrianPool.find(world->state->playerObject);
return true; auto zone = world->data->findZoneAt(plyChar->getPosition());
return island == zone->island;
} }
/** /**