area_create_warp_node and area_get_warp_node* (#270)

* area_get_warp_node*

- Added area_get_warp_node to Lua
- Added area_get_warp_node_from_params to Lua

* area_create_warp_node and warp constants

Here you go Isaac!

* Add object param

* Commits work again, pushing everything else
This commit is contained in:
Agent X 2023-02-20 21:47:32 -05:00 committed by GitHub
parent e5cb5e5e15
commit 4aada40a62
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 240 additions and 3 deletions

View File

@ -38,7 +38,8 @@ in_files = [
"include/seq_ids.h",
"include/surface_terrains.h",
"src/game/level_update.h",
"src/pc/network/version.h"
"src/pc/network/version.h",
"include/level_commands.h"
]
exclude_constants = {
@ -47,6 +48,7 @@ exclude_constants = {
}
include_constants = {
'include/level_commands.h': [ "WARP_CHECKPOINT", "WARP_NO_CHECKPOINT" ],
}
pretend_find = [

View File

@ -55,7 +55,9 @@ in_files = [
"src/game/mario_misc.h",
"src/pc/mods/mod_storage.h",
"src/pc/utils/misc.h",
"src/game/level_update.h"
"src/game/level_update.h",
"src/game/area.h",
"src/engine/level_script.h"
]
override_allowed_functions = {
@ -66,8 +68,10 @@ override_allowed_functions = {
"src/pc/lua/utils/smlua_model_utils.h": [ "smlua_model_util_get_id" ],
"src/game/object_list_processor.h": [ "set_object_respawn_info_bits" ],
"src/game/mario_misc.h": [ "bhv_toad.*", "bhv_unlock_door.*" ],
"src/pc/utils/misc.h": [ "update_all_mario_stars" ],
"src/game/level_update.h": [ "level_trigger_warp" ],
"src/pc/utils/misc.h": [ "update_all_mario_stars"],
"src/game/area.h": [ "area_get_warp_node" ],
"src/engine/level_script.h": [ "area_create_warp_node" ]
}
override_disallowed_functions = {

View File

@ -3627,6 +3627,12 @@ INTERACT_IGLOO_BARRIER = (1 << 30)
--- @type InteractionType
INTERACT_PLAYER = (1 << 31)
--- @type integer
WARP_CHECKPOINT = 0x80
--- @type integer
WARP_NO_CHECKPOINT = 0x00
--- @class LevelNum
--- @type LevelNum

View File

@ -1,5 +1,17 @@
-- AUTOGENERATED FOR CODE EDITORS --
--- @param id integer
--- @return ObjectWarpNode
function area_get_warp_node(id)
-- ...
end
--- @param o Object
--- @return ObjectWarpNode
function area_get_warp_node_from_params(o)
-- ...
end
--- @param a0 Vec3f
--- @param a1 Vec3f
--- @param yVel number
@ -4002,6 +4014,17 @@ function get_star_name_sm64(courseNum, starNum, charCase)
-- ...
end
--- @param id integer
--- @param destLevel integer
--- @param destArea integer
--- @param destNode integer
--- @param checkpoint integer
--- @param o Object
--- @return ObjectWarpNode
function area_create_warp_node(id, destLevel, destArea, destNode, checkpoint, o)
-- ...
end
--- @param m MarioState
--- @param warpOp integer
--- @return integer

View File

@ -19,6 +19,7 @@
- [enum InteractionFlag](#enum-InteractionFlag)
- [interaction.h](#interactionh)
- [enum InteractionType](#enum-InteractionType)
- [level_commands.h](#level_commandsh)
- [level_defines.h](#level_definesh)
- [enum LevelNum](#enum-LevelNum)
- [level_update.h](#level_updateh)
@ -1244,6 +1245,14 @@
<br />
## [level_commands.h](#level_commands.h)
- WARP_CHECKPOINT
- WARP_NO_CHECKPOINT
[:arrow_up_small:](#)
<br />
## [level_defines.h](#level_defines.h)
### [enum LevelNum](#LevelNum)

View File

@ -3358,6 +3358,37 @@
<br />
---
# functions from level_script.h
<br />
## [area_create_warp_node](#area_create_warp_node)
### Lua Example
`local ObjectWarpNodeValue = area_create_warp_node(id, destLevel, destArea, destNode, checkpoint, o)`
### Parameters
| Field | Type |
| ----- | ---- |
| id | `integer` |
| destLevel | `integer` |
| destArea | `integer` |
| destNode | `integer` |
| checkpoint | `integer` |
| o | [Object](structs.md#Object) |
### Returns
[ObjectWarpNode](structs.md#ObjectWarpNode)
### C Prototype
`struct ObjectWarpNode *area_create_warp_node(u8 id, u8 destLevel, u8 destArea, u8 destNode, u8 checkpoint, struct Object *o);`
[:arrow_up_small:](#)
<br />
---
# functions from level_update.h

View File

@ -20,6 +20,12 @@
<br />
- area.h
- [area_get_warp_node](functions.md#area_get_warp_node)
- [area_get_warp_node_from_params](functions.md#area_get_warp_node_from_params)
<br />
- behavior_actions.h
- [arc_to_goal_pos](functions-2.md#arc_to_goal_pos)
- [bhv_1up_common_init](functions-2.md#bhv_1up_common_init)
@ -788,6 +794,11 @@
<br />
- level_script.h
- [area_create_warp_node](functions-3.md#area_create_warp_node)
<br />
- level_update.h
- [level_trigger_warp](functions-3.md#level_trigger_warp)
@ -1843,6 +1854,52 @@ Retrieves a texture by name.
<br />
---
# functions from area.h
<br />
## [area_get_warp_node](#area_get_warp_node)
### Lua Example
`local ObjectWarpNodeValue = area_get_warp_node(id)`
### Parameters
| Field | Type |
| ----- | ---- |
| id | `integer` |
### Returns
[ObjectWarpNode](structs.md#ObjectWarpNode)
### C Prototype
`struct ObjectWarpNode *area_get_warp_node(u8 id);`
[:arrow_up_small:](#)
<br />
## [area_get_warp_node_from_params](#area_get_warp_node_from_params)
### Lua Example
`local ObjectWarpNodeValue = area_get_warp_node_from_params(o)`
### Parameters
| Field | Type |
| ----- | ---- |
| o | [Object](structs.md#Object) |
### Returns
[ObjectWarpNode](structs.md#ObjectWarpNode)
### C Prototype
`struct ObjectWarpNode *area_get_warp_node_from_params(struct Object *o);`
[:arrow_up_small:](#)
<br />
---
1 | [2](functions-2.md) | [3](functions-3.md) | [4](functions-4.md) | [5](functions-5.md) | [next >](functions-2.md)]

View File

@ -102,6 +102,26 @@ static s32 eval_script_op(s8 op, s32 arg) {
return result;
}
struct ObjectWarpNode *area_create_warp_node(u8 id, u8 destLevel, u8 destArea, u8 destNode, u8 checkpoint, struct Object *o) {
if (sCurrAreaIndex != -1) {
struct ObjectWarpNode *warpNode =
alloc_only_pool_alloc(sLevelPool, sizeof(struct ObjectWarpNode));
warpNode->node.id = id;
warpNode->node.destLevel = destLevel + checkpoint;
warpNode->node.destArea = destArea;
warpNode->node.destNode = destNode;
warpNode->object = o;
warpNode->next = gAreas[sCurrAreaIndex].warpNodes;
gAreas[sCurrAreaIndex].warpNodes = warpNode;
return warpNode;
}
return NULL;
}
static void area_check_red_coin_or_secret(void *arg, bool isMacroObject) {
const BehaviorScript *bhv = NULL;
if (isMacroObject) {

View File

@ -10,6 +10,8 @@ extern LevelScript* gLevelScriptActive;
extern u8 level_script_entry[];
struct ObjectWarpNode *area_create_warp_node(u8 id, u8 destLevel, u8 destArea, u8 destNode, u8 checkpoint, struct Object *o);
struct LevelCommand *level_script_execute(struct LevelCommand *cmd);
#endif // LEVEL_SCRIPT_H

View File

@ -170,6 +170,8 @@ struct ObjectWarpNode *area_get_warp_node(u8 id) {
}
struct ObjectWarpNode *area_get_warp_node_from_params(struct Object *o) {
if (o == NULL) { return NULL; }
u8 sp1F = (o->oBehParams & 0x00FF0000) >> 16;
return area_get_warp_node(sp1F);

View File

@ -160,6 +160,7 @@ void override_viewport_and_clip(Vp *a, Vp *b, u8 c, u8 d, u8 e);
void print_intro_text(void);
u32 get_mario_spawn_type(struct Object *o);
struct ObjectWarpNode *area_get_warp_node(u8 id);
struct ObjectWarpNode *area_get_warp_node_from_params(struct Object *o);
void clear_areas(void);
void clear_area_graph_nodes(void);
void load_area(s32 index);

View File

@ -1398,6 +1398,8 @@ char gSmluaConstants[] = ""
"INT_STATUS_HIT_MINE = (1 << 21)\n"
"INT_STATUS_STOP_RIDING = (1 << 22)\n"
"INT_STATUS_TOUCHED_BOB_OMB = (1 << 23)\n"
"WARP_CHECKPOINT = 0x80\n"
"WARP_NO_CHECKPOINT = 0x00\n"
"LEVEL_NONE = 0\n"
"LEVEL_UNKNOWN_1 = 1\n"
"LEVEL_UNKNOWN_2 = 2\n"

View File

@ -35,8 +35,48 @@
#include "src/pc/mods/mod_storage.h"
#include "src/pc/utils/misc.h"
#include "src/game/level_update.h"
#include "src/game/area.h"
#include "src/engine/level_script.h"
////////////
// area.h //
////////////
int smlua_func_area_get_warp_node(lua_State* L) {
if (L == NULL) { return 0; }
int top = lua_gettop(L);
if (top != 1) {
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "area_get_warp_node", 1, top);
return 0;
}
u8 id = smlua_to_integer(L, 1);
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "area_get_warp_node"); return 0; }
smlua_push_object(L, LOT_OBJECTWARPNODE, area_get_warp_node(id));
return 1;
}
int smlua_func_area_get_warp_node_from_params(lua_State* L) {
if (L == NULL) { return 0; }
int top = lua_gettop(L);
if (top != 1) {
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "area_get_warp_node_from_params", 1, top);
return 0;
}
struct Object* o = (struct Object*)smlua_to_cobject(L, 1, LOT_OBJECT);
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "area_get_warp_node_from_params"); return 0; }
smlua_push_object(L, LOT_OBJECTWARPNODE, area_get_warp_node_from_params(o));
return 1;
}
////////////////////////
// behavior_actions.h //
////////////////////////
@ -12605,6 +12645,37 @@ int smlua_func_get_star_name_sm64(lua_State* L) {
return 1;
}
////////////////////
// level_script.h //
////////////////////
int smlua_func_area_create_warp_node(lua_State* L) {
if (L == NULL) { return 0; }
int top = lua_gettop(L);
if (top != 6) {
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "area_create_warp_node", 6, top);
return 0;
}
u8 id = smlua_to_integer(L, 1);
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "area_create_warp_node"); return 0; }
u8 destLevel = smlua_to_integer(L, 2);
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 2, "area_create_warp_node"); return 0; }
u8 destArea = smlua_to_integer(L, 3);
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 3, "area_create_warp_node"); return 0; }
u8 destNode = smlua_to_integer(L, 4);
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 4, "area_create_warp_node"); return 0; }
u8 checkpoint = smlua_to_integer(L, 5);
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 5, "area_create_warp_node"); return 0; }
struct Object* o = (struct Object*)smlua_to_cobject(L, 6, LOT_OBJECT);
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 6, "area_create_warp_node"); return 0; }
smlua_push_object(L, LOT_OBJECTWARPNODE, area_create_warp_node(id, destLevel, destArea, destNode, checkpoint, o));
return 1;
}
////////////////////
// level_update.h //
////////////////////
@ -28721,6 +28792,10 @@ int smlua_func_load_object_collision_model(UNUSED lua_State* L) {
void smlua_bind_functions_autogen(void) {
lua_State* L = gLuaState;
// area.h
smlua_bind_function(L, "area_get_warp_node", smlua_func_area_get_warp_node);
smlua_bind_function(L, "area_get_warp_node_from_params", smlua_func_area_get_warp_node_from_params);
// behavior_actions.h
smlua_bind_function(L, "arc_to_goal_pos", smlua_func_arc_to_goal_pos);
smlua_bind_function(L, "bhv_1up_common_init", smlua_func_bhv_1up_common_init);
@ -29481,6 +29556,9 @@ void smlua_bind_functions_autogen(void) {
smlua_bind_function(L, "get_star_name_ascii", smlua_func_get_star_name_ascii);
smlua_bind_function(L, "get_star_name_sm64", smlua_func_get_star_name_sm64);
// level_script.h
smlua_bind_function(L, "area_create_warp_node", smlua_func_area_create_warp_node);
// level_update.h
smlua_bind_function(L, "level_trigger_warp", smlua_func_level_trigger_warp);