mirror of
https://github.com/LostArtefacts/TR2X.git
synced 2025-03-01 10:36:00 +00:00
console: add /give command
This commit is contained in:
parent
bab4642cdc
commit
5ca75e447a
@ -8,8 +8,9 @@
|
||||
- `/save [slot]`
|
||||
- `/exit`
|
||||
- `/fly`
|
||||
- `/flip`
|
||||
- `/give`
|
||||
- `/kill`
|
||||
- `/flip`
|
||||
- added `/tp` console command's ability to teleport to specific items
|
||||
- added `/fly` console command's ability to open nearest doors
|
||||
- added an option to fix M16 accuracy while running (#45)
|
||||
|
@ -19,6 +19,13 @@ Currently supported commands:
|
||||
- `/fly`
|
||||
Turns on the fly cheat. Why even walk?
|
||||
|
||||
- `/give {item_name}`
|
||||
`/give {num} {item_name}`
|
||||
`/give all`
|
||||
`/give guns`
|
||||
`/give keys`
|
||||
Gives Lara an item. Try `/give guns` to arm her to the teeth, and `/give keys` to get her all important puzzle items. Ain't nobody got time for searching!
|
||||
|
||||
- `/kill`
|
||||
`/kill all`
|
||||
`/kill {enemy_type}`
|
||||
|
@ -220,7 +220,7 @@
|
||||
"O_COMPASS_ITEM": "Compass",
|
||||
"O_PISTOL_ITEM": "Pistols",
|
||||
"O_SHOTGUN_ITEM": "Shotgun",
|
||||
"O_MAGNUM_ITEM": "Magnums",
|
||||
"O_MAGNUM_ITEM": "Automatic Pistols",
|
||||
"O_UZI_ITEM": "Uzis",
|
||||
"O_HARPOON_ITEM": "Harpoon",
|
||||
"O_M16_ITEM": "M16",
|
||||
@ -360,6 +360,10 @@
|
||||
"OSD_POS_SET_ROOM_FAIL": "Failed to teleport to room: %d",
|
||||
"OSD_POS_SET_ITEM": "Teleported to object: %s",
|
||||
"OSD_POS_SET_ITEM_FAIL": "Failed to teleport to object: %s",
|
||||
"OSD_GIVE_ITEM": "Added %s to Lara's inventory",
|
||||
"OSD_GIVE_ITEM_ALL_KEYS": "Surprise! Every key item Lara needs is now in her backpack.",
|
||||
"OSD_GIVE_ITEM_ALL_GUNS": "Lock'n'load - Lara's armed to the teeth!",
|
||||
"OSD_GIVE_ITEM_CHEAT": "Lara's backpack just got way heavier!",
|
||||
"OSD_FLIPMAP_ON": "Flipmap set to ON",
|
||||
"OSD_FLIPMAP_OFF": "Flipmap set to OFF",
|
||||
"OSD_FLIPMAP_FAIL_ALREADY_ON": "Flipmap is already ON",
|
||||
@ -370,6 +374,7 @@
|
||||
"OSD_KILL_FAIL": "No enemy nearby...",
|
||||
"OSD_COMPLETE_LEVEL": "Level complete!",
|
||||
"OSD_PLAY_LEVEL": "Loading %s",
|
||||
"OSD_INVALID_ITEM": "Invalid item: %s",
|
||||
"OSD_INVALID_ROOM": "Invalid room: %d. Valid rooms are 0-%d",
|
||||
"OSD_INVALID_OBJECT": "Invalid object",
|
||||
"OSD_OBJECT_NOT_FOUND": "Object not found",
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include "game/creature.h"
|
||||
#include "game/game_string.h"
|
||||
#include "game/gameflow/gameflow_new.h"
|
||||
#include "game/inventory.h"
|
||||
#include "game/items.h"
|
||||
#include "game/lara/lara_cheat.h"
|
||||
#include "game/lara/lara_control.h"
|
||||
@ -31,6 +32,7 @@ static COMMAND_RESULT Console_Cmd_SetHealth(const char *args);
|
||||
static COMMAND_RESULT Console_Cmd_Heal(const char *args);
|
||||
static COMMAND_RESULT Console_Cmd_Fly(const char *const args);
|
||||
static COMMAND_RESULT Console_Cmd_FlipMap(const char *args);
|
||||
static COMMAND_RESULT Console_Cmd_GiveItem(const char *args);
|
||||
static COMMAND_RESULT Console_Cmd_Kill(const char *args);
|
||||
static COMMAND_RESULT Console_Cmd_EndLevel(const char *args);
|
||||
static COMMAND_RESULT Console_Cmd_StartLevel(const char *args);
|
||||
@ -385,6 +387,66 @@ static COMMAND_RESULT Console_Cmd_Kill(const char *args)
|
||||
}
|
||||
}
|
||||
|
||||
static COMMAND_RESULT Console_Cmd_GiveItem(const char *args)
|
||||
{
|
||||
if (g_GameInfo.current_level.type == GFL_TITLE
|
||||
|| g_GameInfo.current_level.type == GFL_DEMO
|
||||
|| g_GameInfo.current_level.type == GFL_CUTSCENE) {
|
||||
return CR_UNAVAILABLE;
|
||||
}
|
||||
|
||||
if (g_LaraItem == NULL) {
|
||||
return CR_UNAVAILABLE;
|
||||
}
|
||||
|
||||
if (String_Equivalent(args, "keys")) {
|
||||
return Lara_Cheat_GiveAllKeys() ? CR_SUCCESS : CR_FAILURE;
|
||||
}
|
||||
|
||||
if (String_Equivalent(args, "guns")) {
|
||||
return Lara_Cheat_GiveAllGuns() ? CR_SUCCESS : CR_FAILURE;
|
||||
}
|
||||
|
||||
if (String_Equivalent(args, "all")) {
|
||||
return Lara_Cheat_GiveAllItems() ? CR_SUCCESS : CR_FAILURE;
|
||||
}
|
||||
|
||||
int32_t num = 1;
|
||||
if (sscanf(args, "%d ", &num) == 1) {
|
||||
args = strstr(args, " ");
|
||||
if (!args) {
|
||||
return CR_BAD_INVOCATION;
|
||||
}
|
||||
args++;
|
||||
}
|
||||
|
||||
if (String_Equivalent(args, "")) {
|
||||
return CR_BAD_INVOCATION;
|
||||
}
|
||||
|
||||
bool found = false;
|
||||
int32_t match_count = 0;
|
||||
GAME_OBJECT_ID *matching_objs = Object_IdsFromName(args, &match_count);
|
||||
for (int32_t i = 0; i < match_count; i++) {
|
||||
const GAME_OBJECT_ID obj_id = matching_objs[i];
|
||||
if (Object_IsObjectType(obj_id, g_PickupObjects)) {
|
||||
if (g_Objects[obj_id].loaded) {
|
||||
Inv_AddItemNTimes(obj_id, num);
|
||||
Console_Log(GS(OSD_GIVE_ITEM), Object_GetName(obj_id));
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
Memory_FreePointer(&matching_objs);
|
||||
|
||||
if (!found) {
|
||||
Console_Log(GS(OSD_INVALID_ITEM), args);
|
||||
return CR_FAILURE;
|
||||
}
|
||||
|
||||
return CR_SUCCESS;
|
||||
}
|
||||
|
||||
static COMMAND_RESULT Console_Cmd_EndLevel(const char *const args)
|
||||
{
|
||||
if (strcmp(args, "") == 0) {
|
||||
@ -532,6 +594,8 @@ CONSOLE_COMMAND g_ConsoleCommands[] = {
|
||||
{ .prefix = "hp", .proc = Console_Cmd_SetHealth },
|
||||
{ .prefix = "heal", .proc = Console_Cmd_Heal },
|
||||
{ .prefix = "fly", .proc = Console_Cmd_Fly },
|
||||
{ .prefix = "give", .proc = Console_Cmd_GiveItem },
|
||||
{ .prefix = "gimme", .proc = Console_Cmd_GiveItem },
|
||||
{ .prefix = "flip", .proc = Console_Cmd_FlipMap },
|
||||
{ .prefix = "flipmap", .proc = Console_Cmd_FlipMap },
|
||||
{ .prefix = "kill", .proc = Console_Cmd_Kill },
|
||||
|
@ -7,6 +7,10 @@ GS_DEFINE(OSD_POS_SET_ROOM, "Teleported to room: %d")
|
||||
GS_DEFINE(OSD_POS_SET_ROOM_FAIL, "Failed to teleport to room: %d")
|
||||
GS_DEFINE(OSD_POS_SET_ITEM, "Teleported to object: %s")
|
||||
GS_DEFINE(OSD_POS_SET_ITEM_FAIL, "Failed to teleport to object: %s")
|
||||
GS_DEFINE(OSD_GIVE_ITEM, "Added %s to Lara's inventory")
|
||||
GS_DEFINE(OSD_GIVE_ITEM_ALL_KEYS, "Surprise! Every key item Lara needs is now in her backpack.")
|
||||
GS_DEFINE(OSD_GIVE_ITEM_ALL_GUNS, "Lock'n'load - Lara's armed to the teeth!")
|
||||
GS_DEFINE(OSD_GIVE_ITEM_CHEAT, "Lara's backpack just got way heavier!")
|
||||
GS_DEFINE(OSD_FLIPMAP_ON, "Flipmap set to ON")
|
||||
GS_DEFINE(OSD_FLIPMAP_OFF, "Flipmap set to OFF")
|
||||
GS_DEFINE(OSD_FLIPMAP_FAIL_ALREADY_ON, "Flipmap is already ON")
|
||||
@ -17,6 +21,7 @@ GS_DEFINE(OSD_KILL, "Bye-bye!")
|
||||
GS_DEFINE(OSD_KILL_FAIL, "No enemy nearby...")
|
||||
GS_DEFINE(OSD_COMPLETE_LEVEL, "Level complete!")
|
||||
GS_DEFINE(OSD_PLAY_LEVEL, "Loading %s")
|
||||
GS_DEFINE(OSD_INVALID_ITEM, "Invalid item: %s")
|
||||
GS_DEFINE(OSD_INVALID_ROOM, "Invalid room: %d. Valid rooms are 0-%d")
|
||||
GS_DEFINE(OSD_INVALID_OBJECT, "Invalid object")
|
||||
GS_DEFINE(OSD_OBJECT_NOT_FOUND, "Object not found")
|
||||
|
@ -947,6 +947,9 @@ GAME_OBJECT_ID Inv_GetItemOption(const GAME_OBJECT_ID object_id)
|
||||
int32_t __cdecl Inv_AddItem(const GAME_OBJECT_ID object_id)
|
||||
{
|
||||
const GAME_OBJECT_ID inv_object_id = Inv_GetItemOption(object_id);
|
||||
if (!g_Objects[object_id].loaded) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (int32_t i = 0; i < g_Inv_MainObjectsCount; i++) {
|
||||
const INVENTORY_ITEM *const inv_item = g_Inv_MainList[i];
|
||||
|
@ -21,6 +21,48 @@
|
||||
#include <libtrx/utils.h>
|
||||
#include <libtrx/vector.h>
|
||||
|
||||
static void Lara_Cheat_GiveAllGunsImpl(void);
|
||||
static void Lara_Cheat_GiveAllMedpacksImpl(void);
|
||||
static void Lara_Cheat_GiveAllKeysImpl(void);
|
||||
|
||||
static void Lara_Cheat_GiveAllGunsImpl(void)
|
||||
{
|
||||
Inv_AddItem(O_PISTOL_ITEM);
|
||||
Inv_AddItem(O_MAGNUM_ITEM);
|
||||
Inv_AddItem(O_UZI_ITEM);
|
||||
Inv_AddItem(O_SHOTGUN_ITEM);
|
||||
Inv_AddItem(O_HARPOON_ITEM);
|
||||
Inv_AddItem(O_M16_ITEM);
|
||||
Inv_AddItem(O_GRENADE_ITEM);
|
||||
g_Lara.magnum_ammo.ammo = 1000;
|
||||
g_Lara.uzi_ammo.ammo = 2000;
|
||||
g_Lara.shotgun_ammo.ammo = 300;
|
||||
g_Lara.harpoon_ammo.ammo = 300;
|
||||
g_Lara.m16_ammo.ammo = 300;
|
||||
g_Lara.grenade_ammo.ammo = 300;
|
||||
}
|
||||
|
||||
static void Lara_Cheat_GiveAllMedpacksImpl(void)
|
||||
{
|
||||
Inv_AddItemNTimes(O_FLARES_ITEM, 10);
|
||||
Inv_AddItemNTimes(O_SMALL_MEDIPACK_ITEM, 10);
|
||||
Inv_AddItemNTimes(O_LARGE_MEDIPACK_ITEM, 10);
|
||||
}
|
||||
|
||||
static void Lara_Cheat_GiveAllKeysImpl(void)
|
||||
{
|
||||
Inv_AddItem(O_PUZZLE_ITEM_1);
|
||||
Inv_AddItem(O_PUZZLE_ITEM_2);
|
||||
Inv_AddItem(O_PUZZLE_ITEM_3);
|
||||
Inv_AddItem(O_PUZZLE_ITEM_4);
|
||||
Inv_AddItem(O_KEY_ITEM_1);
|
||||
Inv_AddItem(O_KEY_ITEM_2);
|
||||
Inv_AddItem(O_KEY_ITEM_3);
|
||||
Inv_AddItem(O_KEY_ITEM_4);
|
||||
Inv_AddItem(O_PICKUP_ITEM_1);
|
||||
Inv_AddItem(O_PICKUP_ITEM_2);
|
||||
}
|
||||
|
||||
void __cdecl Lara_Cheat_EndLevel(void)
|
||||
{
|
||||
g_LevelComplete = true;
|
||||
@ -151,24 +193,49 @@ bool Lara_Cheat_OpenNearestDoor(void)
|
||||
|
||||
void __cdecl Lara_Cheat_GetStuff(void)
|
||||
{
|
||||
Inv_AddItem(O_PISTOL_ITEM);
|
||||
Inv_AddItem(O_MAGNUM_ITEM);
|
||||
Inv_AddItem(O_UZI_ITEM);
|
||||
Inv_AddItem(O_SHOTGUN_ITEM);
|
||||
Inv_AddItem(O_HARPOON_ITEM);
|
||||
Inv_AddItem(O_M16_ITEM);
|
||||
Inv_AddItem(O_GRENADE_ITEM);
|
||||
Lara_Cheat_GiveAllGunsImpl();
|
||||
Lara_Cheat_GiveAllMedpacksImpl();
|
||||
}
|
||||
|
||||
Inv_AddItemNTimes(O_FLARES_ITEM, 10);
|
||||
Inv_AddItemNTimes(O_SMALL_MEDIPACK_ITEM, 10);
|
||||
Inv_AddItemNTimes(O_LARGE_MEDIPACK_ITEM, 10);
|
||||
bool Lara_Cheat_GiveAllKeys(void)
|
||||
{
|
||||
if (g_LaraItem == NULL) {
|
||||
return false;
|
||||
}
|
||||
|
||||
g_Lara.magnum_ammo.ammo = 1000;
|
||||
g_Lara.uzi_ammo.ammo = 2000;
|
||||
g_Lara.shotgun_ammo.ammo = 300;
|
||||
g_Lara.harpoon_ammo.ammo = 300;
|
||||
g_Lara.m16_ammo.ammo = 300;
|
||||
g_Lara.grenade_ammo.ammo = 300;
|
||||
Lara_Cheat_GiveAllKeysImpl();
|
||||
|
||||
Sound_Effect(SFX_LARA_KEY, NULL, SPM_ALWAYS);
|
||||
Console_Log(GS(OSD_GIVE_ITEM_ALL_KEYS));
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Lara_Cheat_GiveAllGuns(void)
|
||||
{
|
||||
if (g_LaraItem == NULL) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Lara_Cheat_GiveAllGunsImpl();
|
||||
|
||||
Sound_Effect(SFX_LARA_RELOAD, NULL, SPM_ALWAYS);
|
||||
Console_Log(GS(OSD_GIVE_ITEM_ALL_GUNS));
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Lara_Cheat_GiveAllItems(void)
|
||||
{
|
||||
if (g_LaraItem == NULL) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Lara_Cheat_GiveAllGunsImpl();
|
||||
Lara_Cheat_GiveAllKeysImpl();
|
||||
Lara_Cheat_GiveAllMedpacksImpl();
|
||||
|
||||
Sound_Effect(SFX_LARA_HOLSTER, &g_LaraItem->pos, SPM_NORMAL);
|
||||
Console_Log(GS(OSD_GIVE_ITEM_CHEAT));
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Lara_Cheat_Teleport(int32_t x, int32_t y, int32_t z)
|
||||
|
@ -7,6 +7,9 @@ void __cdecl Lara_Cheat_EndLevel(void);
|
||||
bool __cdecl Lara_Cheat_EnterFlyMode(void);
|
||||
bool __cdecl Lara_Cheat_ExitFlyMode(void);
|
||||
void __cdecl Lara_Cheat_GetStuff(void);
|
||||
bool Lara_Cheat_GiveAllKeys(void);
|
||||
bool Lara_Cheat_GiveAllGuns(void);
|
||||
bool Lara_Cheat_GiveAllItems(void);
|
||||
bool Lara_Cheat_OpenNearestDoor(void);
|
||||
bool Lara_Cheat_Teleport(int32_t x, int32_t y, int32_t z);
|
||||
bool Lara_Cheat_KillEnemy(int16_t item_num);
|
||||
|
@ -135,7 +135,7 @@ OBJ_NAME_DEFINE(O_PASSPORT_CLOSED, "Passport Closed")
|
||||
OBJ_NAME_DEFINE(O_COMPASS_ITEM, "Compass")
|
||||
OBJ_NAME_DEFINE(O_PISTOL_ITEM, "Pistols")
|
||||
OBJ_NAME_DEFINE(O_SHOTGUN_ITEM, "Shotgun")
|
||||
OBJ_NAME_DEFINE(O_MAGNUM_ITEM, "Magnums")
|
||||
OBJ_NAME_DEFINE(O_MAGNUM_ITEM, "Automatic Pistols")
|
||||
OBJ_NAME_DEFINE(O_UZI_ITEM, "Uzis")
|
||||
OBJ_NAME_DEFINE(O_HARPOON_ITEM, "Harpoon")
|
||||
OBJ_NAME_DEFINE(O_M16_ITEM, "M16")
|
||||
|
Loading…
x
Reference in New Issue
Block a user