mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2026-04-27 04:21:42 +00:00
Fix palette editor cap on/off invulnerability
This commit is contained in:
parent
a38a7525b5
commit
a2b4ac8f08
23 changed files with 237 additions and 172 deletions
|
|
@ -91,6 +91,7 @@ override_field_mutable = {
|
|||
|
||||
override_field_invisible = {
|
||||
"Mod": [ "files", "showedScriptWarning" ],
|
||||
"Camera": [ "paletteEditorCapState" ],
|
||||
"MarioState": [ "visibleToEnemies" ],
|
||||
"NetworkPlayer": [ "gag", "moderator", "discordId" ],
|
||||
"GraphNode": [ "_guard1", "_guard2", "padding" ],
|
||||
|
|
|
|||
|
|
@ -7367,6 +7367,9 @@ ACT_COUGHING = 0x0C40020A
|
|||
--- @type integer
|
||||
ACT_SHIVERING = 0x0C40020B
|
||||
|
||||
--- @type integer
|
||||
ACT_PALETTE_EDITOR_CAP = 0x0000020C
|
||||
|
||||
--- @type integer
|
||||
ACT_IN_QUICKSAND = 0x0002020D
|
||||
|
||||
|
|
@ -7949,9 +7952,6 @@ ACT_FEET_STUCK_IN_GROUND = 0x0002033C
|
|||
--- @type integer
|
||||
ACT_PUTTING_ON_CAP = 0x0000133D
|
||||
|
||||
--- @type integer
|
||||
ACT_TAKING_OFF_CAP = 0x0000133E
|
||||
|
||||
--- @type integer
|
||||
ACT_HOLDING_POLE = 0x08100340
|
||||
|
||||
|
|
|
|||
|
|
@ -6247,6 +6247,13 @@ function check_common_landing_cancels(m, action)
|
|||
-- ...
|
||||
end
|
||||
|
||||
--- @param m MarioState
|
||||
--- @param c Camera
|
||||
--- @return integer
|
||||
function mario_exit_palette_editor(m, c)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param m MarioState
|
||||
--- @return integer
|
||||
--- Checks for and handles common conditions that would cancel Mario's current stationary action.
|
||||
|
|
|
|||
|
|
@ -225,7 +225,6 @@
|
|||
--- @field public mode integer
|
||||
--- @field public mtx Mat4
|
||||
--- @field public nextYaw integer
|
||||
--- @field public paletteEditorCap boolean
|
||||
--- @field public pos Vec3f
|
||||
--- @field public unusedVec1 Vec3f
|
||||
--- @field public yaw integer
|
||||
|
|
|
|||
|
|
@ -3221,6 +3221,7 @@
|
|||
- ACT_STANDING_AGAINST_WALL
|
||||
- ACT_COUGHING
|
||||
- ACT_SHIVERING
|
||||
- ACT_PALETTE_EDITOR_CAP
|
||||
- ACT_IN_QUICKSAND
|
||||
- ACT_UNKNOWN_0002020E
|
||||
- ACT_CROUCHING
|
||||
|
|
@ -3415,7 +3416,6 @@
|
|||
- ACT_BUTT_STUCK_IN_GROUND
|
||||
- ACT_FEET_STUCK_IN_GROUND
|
||||
- ACT_PUTTING_ON_CAP
|
||||
- ACT_TAKING_OFF_CAP
|
||||
- ACT_HOLDING_POLE
|
||||
- ACT_GRAB_POLE_SLOW
|
||||
- ACT_GRAB_POLE_FAST
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
---
|
||||
|
||||
[< prev](functions.md) | [1](functions.md) | 2 | [3](functions-3.md) | [4](functions-4.md) | [5](functions-5.md) | [6](functions-6.md) | [next >](functions-3.md)]
|
||||
[< prev](functions.md) | [1](functions.md) | 2 | [3](functions-3.md) | [4](functions-4.md) | [5](functions-5.md) | [6](functions-6.md) | [7](functions-7.md) | [next >](functions-3.md)]
|
||||
|
||||
|
||||
---
|
||||
|
|
@ -12081,5 +12081,5 @@ Spawns a Star that won't make Mario exit the level with an ID corresponding to t
|
|||
<br />
|
||||
---
|
||||
|
||||
[< prev](functions.md) | [1](functions.md) | 2 | [3](functions-3.md) | [4](functions-4.md) | [5](functions-5.md) | [6](functions-6.md) | [next >](functions-3.md)]
|
||||
[< prev](functions.md) | [1](functions.md) | 2 | [3](functions-3.md) | [4](functions-4.md) | [5](functions-5.md) | [6](functions-6.md) | [7](functions-7.md) | [next >](functions-3.md)]
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
---
|
||||
|
||||
[< prev](functions-2.md) | [1](functions.md) | [2](functions-2.md) | 3 | [4](functions-4.md) | [5](functions-5.md) | [6](functions-6.md) | [next >](functions-4.md)]
|
||||
[< prev](functions-2.md) | [1](functions.md) | [2](functions-2.md) | 3 | [4](functions-4.md) | [5](functions-5.md) | [6](functions-6.md) | [7](functions-7.md) | [next >](functions-4.md)]
|
||||
|
||||
|
||||
---
|
||||
|
|
@ -7183,5 +7183,5 @@ Sets whether a lighting engine point light will use a surface's normals to deter
|
|||
<br />
|
||||
---
|
||||
|
||||
[< prev](functions-2.md) | [1](functions.md) | [2](functions-2.md) | 3 | [4](functions-4.md) | [5](functions-5.md) | [6](functions-6.md) | [next >](functions-4.md)]
|
||||
[< prev](functions-2.md) | [1](functions.md) | [2](functions-2.md) | 3 | [4](functions-4.md) | [5](functions-5.md) | [6](functions-6.md) | [7](functions-7.md) | [next >](functions-4.md)]
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
---
|
||||
|
||||
[< prev](functions-3.md) | [1](functions.md) | [2](functions-2.md) | [3](functions-3.md) | 4 | [5](functions-5.md) | [6](functions-6.md) | [next >](functions-5.md)]
|
||||
[< prev](functions-3.md) | [1](functions.md) | [2](functions-2.md) | [3](functions-3.md) | 4 | [5](functions-5.md) | [6](functions-6.md) | [7](functions-7.md) | [next >](functions-5.md)]
|
||||
|
||||
|
||||
---
|
||||
|
|
@ -3526,6 +3526,27 @@ Checks for and handles common conditions that would cancel Mario's current landi
|
|||
|
||||
<br />
|
||||
|
||||
## [mario_exit_palette_editor](#mario_exit_palette_editor)
|
||||
|
||||
### Lua Example
|
||||
`local integerValue = mario_exit_palette_editor(m, c)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| m | [MarioState](structs.md#MarioState) |
|
||||
| c | [Camera](structs.md#Camera) |
|
||||
|
||||
### Returns
|
||||
- `integer`
|
||||
|
||||
### C Prototype
|
||||
`s32 mario_exit_palette_editor(struct MarioState *m, struct Camera *c);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [check_common_stationary_cancels](#check_common_stationary_cancels)
|
||||
|
||||
### Description
|
||||
|
|
@ -6738,5 +6759,5 @@ Converts a 3D short integer vector `a` into a 3D integer vector and stores the r
|
|||
<br />
|
||||
---
|
||||
|
||||
[< prev](functions-3.md) | [1](functions.md) | [2](functions-2.md) | [3](functions-3.md) | 4 | [5](functions-5.md) | [6](functions-6.md) | [next >](functions-5.md)]
|
||||
[< prev](functions-3.md) | [1](functions.md) | [2](functions-2.md) | [3](functions-3.md) | 4 | [5](functions-5.md) | [6](functions-6.md) | [7](functions-7.md) | [next >](functions-5.md)]
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
---
|
||||
|
||||
[< prev](functions-4.md) | [1](functions.md) | [2](functions-2.md) | [3](functions-3.md) | [4](functions-4.md) | 5 | [6](functions-6.md) | [next >](functions-6.md)]
|
||||
[< prev](functions-4.md) | [1](functions.md) | [2](functions-2.md) | [3](functions-3.md) | [4](functions-4.md) | 5 | [6](functions-6.md) | [7](functions-7.md) | [next >](functions-6.md)]
|
||||
|
||||
|
||||
---
|
||||
|
|
@ -8206,5 +8206,5 @@ Gets a trajectory's length
|
|||
<br />
|
||||
---
|
||||
|
||||
[< prev](functions-4.md) | [1](functions.md) | [2](functions-2.md) | [3](functions-3.md) | [4](functions-4.md) | 5 | [6](functions-6.md) | [next >](functions-6.md)]
|
||||
[< prev](functions-4.md) | [1](functions.md) | [2](functions-2.md) | [3](functions-3.md) | [4](functions-4.md) | 5 | [6](functions-6.md) | [7](functions-7.md) | [next >](functions-6.md)]
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
---
|
||||
|
||||
[< prev](functions-5.md) | [1](functions.md) | [2](functions-2.md) | [3](functions-3.md) | [4](functions-4.md) | [5](functions-5.md) | 6]
|
||||
[< prev](functions-5.md) | [1](functions.md) | [2](functions-2.md) | [3](functions-3.md) | [4](functions-4.md) | [5](functions-5.md) | 6 | [7](functions-7.md) | [next >](functions-7.md)]
|
||||
|
||||
|
||||
---
|
||||
|
|
@ -8517,83 +8517,7 @@ Checks if a surface has force
|
|||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
---
|
||||
# functions from sync_object.h
|
||||
|
||||
<br />
|
||||
|
||||
|
||||
## [sync_object_get_object](#sync_object_get_object)
|
||||
|
||||
### Description
|
||||
Retrieves an object from a sync ID
|
||||
|
||||
### Lua Example
|
||||
`local ObjectValue = sync_object_get_object(syncId)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| syncId | `integer` |
|
||||
|
||||
### Returns
|
||||
[Object](structs.md#Object)
|
||||
|
||||
### C Prototype
|
||||
`struct Object* sync_object_get_object(u32 syncId);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [sync_object_is_initialized](#sync_object_is_initialized)
|
||||
|
||||
### Description
|
||||
Checks if a sync object is initialized using a `syncId`
|
||||
|
||||
### Lua Example
|
||||
`local booleanValue = sync_object_is_initialized(syncId)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| syncId | `integer` |
|
||||
|
||||
### Returns
|
||||
- `boolean`
|
||||
|
||||
### C Prototype
|
||||
`bool sync_object_is_initialized(u32 syncId);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [sync_object_is_owned_locally](#sync_object_is_owned_locally)
|
||||
|
||||
### Description
|
||||
Checks if a sync object is owned locally using a `syncId`
|
||||
|
||||
### Lua Example
|
||||
`local booleanValue = sync_object_is_owned_locally(syncId)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| syncId | `integer` |
|
||||
|
||||
### Returns
|
||||
- `boolean`
|
||||
|
||||
### C Prototype
|
||||
`bool sync_object_is_owned_locally(u32 syncId);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
---
|
||||
|
||||
[< prev](functions-5.md) | [1](functions.md) | [2](functions-2.md) | [3](functions-3.md) | [4](functions-4.md) | [5](functions-5.md) | 6]
|
||||
[< prev](functions-5.md) | [1](functions.md) | [2](functions-2.md) | [3](functions-3.md) | [4](functions-4.md) | [5](functions-5.md) | 6 | [7](functions-7.md) | [next >](functions-7.md)]
|
||||
|
||||
|
|
|
|||
86
docs/lua/functions-7.md
Normal file
86
docs/lua/functions-7.md
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
## [:rewind: Lua Functions](functions.md)
|
||||
|
||||
---
|
||||
|
||||
[< prev](functions-6.md) | [1](functions.md) | [2](functions-2.md) | [3](functions-3.md) | [4](functions-4.md) | [5](functions-5.md) | [6](functions-6.md) | 7]
|
||||
|
||||
|
||||
---
|
||||
# functions from sync_object.h
|
||||
|
||||
<br />
|
||||
|
||||
|
||||
## [sync_object_get_object](#sync_object_get_object)
|
||||
|
||||
### Description
|
||||
Retrieves an object from a sync ID
|
||||
|
||||
### Lua Example
|
||||
`local ObjectValue = sync_object_get_object(syncId)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| syncId | `integer` |
|
||||
|
||||
### Returns
|
||||
[Object](structs.md#Object)
|
||||
|
||||
### C Prototype
|
||||
`struct Object* sync_object_get_object(u32 syncId);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [sync_object_is_initialized](#sync_object_is_initialized)
|
||||
|
||||
### Description
|
||||
Checks if a sync object is initialized using a `syncId`
|
||||
|
||||
### Lua Example
|
||||
`local booleanValue = sync_object_is_initialized(syncId)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| syncId | `integer` |
|
||||
|
||||
### Returns
|
||||
- `boolean`
|
||||
|
||||
### C Prototype
|
||||
`bool sync_object_is_initialized(u32 syncId);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [sync_object_is_owned_locally](#sync_object_is_owned_locally)
|
||||
|
||||
### Description
|
||||
Checks if a sync object is owned locally using a `syncId`
|
||||
|
||||
### Lua Example
|
||||
`local booleanValue = sync_object_is_owned_locally(syncId)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| syncId | `integer` |
|
||||
|
||||
### Returns
|
||||
- `boolean`
|
||||
|
||||
### C Prototype
|
||||
`bool sync_object_is_owned_locally(u32 syncId);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
---
|
||||
|
||||
[< prev](functions-6.md) | [1](functions.md) | [2](functions-2.md) | [3](functions-3.md) | [4](functions-4.md) | [5](functions-5.md) | [6](functions-6.md) | 7]
|
||||
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
---
|
||||
|
||||
1 | [2](functions-2.md) | [3](functions-3.md) | [4](functions-4.md) | [5](functions-5.md) | [6](functions-6.md) | [next >](functions-2.md)]
|
||||
1 | [2](functions-2.md) | [3](functions-3.md) | [4](functions-4.md) | [5](functions-5.md) | [6](functions-6.md) | [7](functions-7.md) | [next >](functions-2.md)]
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -1159,6 +1159,7 @@
|
|||
- [stopping_step](functions-4.md#stopping_step)
|
||||
- [landing_step](functions-4.md#landing_step)
|
||||
- [check_common_landing_cancels](functions-4.md#check_common_landing_cancels)
|
||||
- [mario_exit_palette_editor](functions-4.md#mario_exit_palette_editor)
|
||||
- [check_common_stationary_cancels](functions-4.md#check_common_stationary_cancels)
|
||||
- [mario_execute_stationary_action](functions-4.md#mario_execute_stationary_action)
|
||||
|
||||
|
|
@ -2186,9 +2187,9 @@
|
|||
<br />
|
||||
|
||||
- sync_object.h
|
||||
- [sync_object_get_object](functions-6.md#sync_object_get_object)
|
||||
- [sync_object_is_initialized](functions-6.md#sync_object_is_initialized)
|
||||
- [sync_object_is_owned_locally](functions-6.md#sync_object_is_owned_locally)
|
||||
- [sync_object_get_object](functions-7.md#sync_object_get_object)
|
||||
- [sync_object_is_initialized](functions-7.md#sync_object_is_initialized)
|
||||
- [sync_object_is_owned_locally](functions-7.md#sync_object_is_owned_locally)
|
||||
|
||||
<br />
|
||||
|
||||
|
|
@ -2834,5 +2835,5 @@ Plays a screen transition after a `delay` in frames
|
|||
<br />
|
||||
---
|
||||
|
||||
1 | [2](functions-2.md) | [3](functions-3.md) | [4](functions-4.md) | [5](functions-5.md) | [6](functions-6.md) | [next >](functions-2.md)]
|
||||
1 | [2](functions-2.md) | [3](functions-3.md) | [4](functions-4.md) | [5](functions-5.md) | [6](functions-6.md) | [7](functions-7.md) | [next >](functions-2.md)]
|
||||
|
||||
|
|
|
|||
|
|
@ -413,7 +413,6 @@
|
|||
| mode | `integer` | |
|
||||
| mtx | [Mat4](structs.md#Mat4) | read-only |
|
||||
| nextYaw | `integer` | |
|
||||
| paletteEditorCap | `boolean` | |
|
||||
| pos | [Vec3f](structs.md#Vec3f) | read-only |
|
||||
| unusedVec1 | [Vec3f](structs.md#Vec3f) | read-only |
|
||||
| yaw | `integer` | |
|
||||
|
|
|
|||
|
|
@ -194,6 +194,7 @@
|
|||
#define ACT_STANDING_AGAINST_WALL 0x0C400209 // (0x009 | ACT_FLAG_STATIONARY | ACT_FLAG_IDLE | ACT_FLAG_ALLOW_FIRST_PERSON | ACT_FLAG_PAUSE_EXIT)
|
||||
#define ACT_COUGHING 0x0C40020A // (0x00A | ACT_FLAG_STATIONARY | ACT_FLAG_IDLE | ACT_FLAG_ALLOW_FIRST_PERSON | ACT_FLAG_PAUSE_EXIT)
|
||||
#define ACT_SHIVERING 0x0C40020B // (0x00B | ACT_FLAG_STATIONARY | ACT_FLAG_IDLE | ACT_FLAG_ALLOW_FIRST_PERSON | ACT_FLAG_PAUSE_EXIT)
|
||||
#define ACT_PALETTE_EDITOR_CAP 0x0000020C // (0x00C | ACT_FLAG_STATIONARY) // ! COOP ACTION
|
||||
#define ACT_IN_QUICKSAND 0x0002020D // (0x00D | ACT_FLAG_STATIONARY | ACT_FLAG_INVULNERABLE)
|
||||
#define ACT_UNKNOWN_0002020E 0x0002020E // (0x00E | ACT_FLAG_STATIONARY | ACT_FLAG_INVULNERABLE)
|
||||
#define ACT_CROUCHING 0x0C008220 // (0x020 | ACT_FLAG_STATIONARY | ACT_FLAG_SHORT_HITBOX | ACT_FLAG_ALLOW_FIRST_PERSON | ACT_FLAG_PAUSE_EXIT)
|
||||
|
|
@ -396,7 +397,6 @@
|
|||
#define ACT_BUTT_STUCK_IN_GROUND 0x0002033B // (0x13B | ACT_FLAG_STATIONARY | ACT_FLAG_INVULNERABLE)
|
||||
#define ACT_FEET_STUCK_IN_GROUND 0x0002033C // (0x13C | ACT_FLAG_STATIONARY | ACT_FLAG_INVULNERABLE)
|
||||
#define ACT_PUTTING_ON_CAP 0x0000133D // (0x13D | ACT_FLAG_STATIONARY | ACT_FLAG_INTANGIBLE)
|
||||
#define ACT_TAKING_OFF_CAP 0x0000133E // (0x13E | ACT_FLAG_STATIONARY | ACT_FLAG_INTANGIBLE) // ! COOP ACTION
|
||||
|
||||
// group 0x140: "automatic" actions
|
||||
#define ACT_HOLDING_POLE 0x08100340 // (0x140 | ACT_FLAG_STATIONARY | ACT_FLAG_ON_POLE | ACT_FLAG_PAUSE_EXIT)
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
#include "engine/behavior_script.h"
|
||||
#include "level_update.h"
|
||||
#include "ingame_menu.h"
|
||||
#include "mario_actions_stationary.h"
|
||||
#include "mario_actions_cutscene.h"
|
||||
#include "save_file.h"
|
||||
#include "object_helpers.h"
|
||||
|
|
@ -500,8 +501,6 @@ s32 update_slide_or_0f_camera(struct Camera *c, Vec3f, Vec3f);
|
|||
s32 update_spiral_stairs_camera(struct Camera *c, Vec3f, Vec3f);
|
||||
s32 update_rom_hack_camera(struct Camera *c, Vec3f, Vec3f);
|
||||
void mode_rom_hack_camera(struct Camera *c);
|
||||
void cutscene_take_cap_off(struct MarioState *m);
|
||||
void cutscene_put_cap_on(struct MarioState *m);
|
||||
|
||||
typedef s32 (*CameraTransition)(struct Camera *c, Vec3f, Vec3f);
|
||||
CameraTransition sModeTransitions[] = {
|
||||
|
|
@ -3396,13 +3395,8 @@ void update_camera(struct Camera *c) {
|
|||
|
||||
// Make sure the palette editor cutscene is properly reset
|
||||
struct MarioState *m = gMarioState;
|
||||
if (c->paletteEditorCap) {
|
||||
if (m->flags & MARIO_CAP_ON_HEAD) {
|
||||
c->paletteEditorCap = false;
|
||||
} else if (c->cutscene != CUTSCENE_PALETTE_EDITOR && m->action != ACT_PUTTING_ON_CAP) {
|
||||
cutscene_put_cap_on(m);
|
||||
c->paletteEditorCap = false;
|
||||
}
|
||||
if (c->cutscene != CUTSCENE_PALETTE_EDITOR && c->paletteEditorCapState) {
|
||||
mario_exit_palette_editor(m, c);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -10930,19 +10924,14 @@ void cutscene_palette_editor(struct Camera *c) {
|
|||
if (!c) { return; }
|
||||
struct MarioState* m = gMarioState;
|
||||
|
||||
// Init cap state
|
||||
// Ensures that Mario regains his correct cap state when exiting the palette editor
|
||||
if (!c->paletteEditorCapState) {
|
||||
c->paletteEditorCapState = (m->flags & MARIO_CAP_ON_HEAD) ? 1 : 2;
|
||||
}
|
||||
|
||||
if (!gDjuiInPlayerMenu) {
|
||||
if (c->paletteEditorCap) {
|
||||
if (m->flags & MARIO_CAP_ON_HEAD) {
|
||||
gCamera->paletteEditorCap = false;
|
||||
} else {
|
||||
if (m->action == ACT_IDLE) {
|
||||
set_mario_action(m, ACT_PUTTING_ON_CAP, 0);
|
||||
} else {
|
||||
cutscene_put_cap_on(m);
|
||||
gCamera->paletteEditorCap = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
mario_exit_palette_editor(m, c);
|
||||
gCutsceneTimer = CUTSCENE_STOP;
|
||||
c->cutscene = 0;
|
||||
skip_camera_interpolation();
|
||||
|
|
@ -10953,11 +10942,7 @@ void cutscene_palette_editor(struct Camera *c) {
|
|||
static bool pressed = false;
|
||||
if (gInteractablePad.button & PAD_BUTTON_Z) {
|
||||
if (!pressed && m->action == ACT_IDLE) {
|
||||
if (m->flags & MARIO_CAP_ON_HEAD) {
|
||||
set_mario_action(m, ACT_TAKING_OFF_CAP, 1); // Add palette editor action arg
|
||||
} else {
|
||||
set_mario_action(m, ACT_PUTTING_ON_CAP, 0);
|
||||
}
|
||||
set_mario_action(m, ACT_PALETTE_EDITOR_CAP, (m->flags & MARIO_CAP_ON_HEAD) != 0);
|
||||
}
|
||||
pressed = true;
|
||||
} else {
|
||||
|
|
@ -10969,8 +10954,7 @@ void cutscene_palette_editor(struct Camera *c) {
|
|||
djui_base_set_visible(
|
||||
&gDjuiPaletteToggle->base,
|
||||
m->action == ACT_IDLE ||
|
||||
m->action == ACT_TAKING_OFF_CAP ||
|
||||
m->action == ACT_PUTTING_ON_CAP
|
||||
m->action == ACT_PALETTE_EDITOR_CAP
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -596,7 +596,7 @@ struct Camera
|
|||
/// when paused. See zoom_out_if_paused_and_outside
|
||||
/*0x68*/ f32 areaCenY;
|
||||
/*????*/ Mat4 mtx;
|
||||
/*????*/ bool paletteEditorCap;
|
||||
/*????*/ u8 paletteEditorCapState;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1897,13 +1897,12 @@ s32 act_squished(struct MarioState *m) {
|
|||
s32 act_putting_on_cap(struct MarioState *m) {
|
||||
s32 animFrame = set_character_animation(m, CHAR_ANIM_PUT_CAP_ON);
|
||||
|
||||
if (animFrame == 0 && !gCamera->paletteEditorCap) {
|
||||
if (animFrame == 0) {
|
||||
enable_time_stop_if_alone();
|
||||
}
|
||||
|
||||
if (animFrame == 28) {
|
||||
cutscene_put_cap_on(m);
|
||||
gCamera->paletteEditorCap = false;
|
||||
}
|
||||
|
||||
if (is_anim_at_end(m)) {
|
||||
|
|
@ -1915,30 +1914,6 @@ s32 act_putting_on_cap(struct MarioState *m) {
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
// coop custom action
|
||||
// actionArg == 1: the action was inited from CUTSCENE_PALETTE_EDITOR
|
||||
s32 act_taking_off_cap(struct MarioState *m) {
|
||||
s16 animFrame = set_character_animation(m, CHAR_ANIM_TAKE_CAP_OFF_THEN_ON);
|
||||
switch (animFrame) {
|
||||
case 0:
|
||||
if (m->actionArg != 1) {
|
||||
enable_time_stop_if_alone();
|
||||
}
|
||||
break;
|
||||
case 12:
|
||||
cutscene_take_cap_off(m);
|
||||
if (m->actionArg == 1) { gCamera->paletteEditorCap = true; }
|
||||
break;
|
||||
}
|
||||
if (animFrame >= 30 || gCamera->cutscene != CUTSCENE_PALETTE_EDITOR) {
|
||||
set_mario_action(m, ACT_IDLE, 0);
|
||||
disable_time_stop();
|
||||
}
|
||||
|
||||
stationary_ground_step(m);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* |description|
|
||||
Handles the cutscene and animation sequence for when Mario is stuck in the ground (head, butt, or feet). Plays a designated `animation`, checks specific frames (`unstuckFrame`, `target2`, `target3`) for sound effects or transitions, and frees Mario to the `endAction` once the animation completes
|
||||
|descriptionEnd| */
|
||||
|
|
@ -3215,7 +3190,6 @@ s32 mario_execute_cutscene_action(struct MarioState *m) {
|
|||
case ACT_BUTT_STUCK_IN_GROUND: cancel = act_butt_stuck_in_ground(m); break;
|
||||
case ACT_FEET_STUCK_IN_GROUND: cancel = act_feet_stuck_in_ground(m); break;
|
||||
case ACT_PUTTING_ON_CAP: cancel = act_putting_on_cap(m); break;
|
||||
case ACT_TAKING_OFF_CAP: cancel = act_taking_off_cap(m); break;
|
||||
default:
|
||||
LOG_ERROR("Attempted to execute unimplemented action '%04X'", m->action);
|
||||
set_mario_action(m, ACT_IDLE, 0);
|
||||
|
|
|
|||
|
|
@ -14,5 +14,7 @@ s32 mario_ready_to_speak(struct MarioState* m);
|
|||
u8 should_start_or_continue_dialog(struct MarioState* m, struct Object* object);
|
||||
s32 set_mario_npc_dialog(struct MarioState* m, s32 actionArg, u8(*inContinueDialogFunction)(void));
|
||||
s32 mario_execute_cutscene_action(struct MarioState *m);
|
||||
void cutscene_take_cap_off(struct MarioState *m);
|
||||
void cutscene_put_cap_on(struct MarioState *m);
|
||||
|
||||
#endif // MARIO_ACTIONS_CUTSCENE_H
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
#include "level_update.h"
|
||||
#include "mario.h"
|
||||
#include "mario_actions_stationary.h"
|
||||
#include "mario_actions_cutscene.h"
|
||||
#include "mario_step.h"
|
||||
#include "memory.h"
|
||||
#include "save_file.h"
|
||||
|
|
@ -1160,6 +1161,47 @@ s32 act_first_person(struct MarioState *m) {
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
s32 mario_exit_palette_editor(struct MarioState *m, struct Camera *c) {
|
||||
switch (c->paletteEditorCapState) {
|
||||
case 0: return FALSE;
|
||||
case 1: cutscene_put_cap_on(m); break;
|
||||
case 2: cutscene_take_cap_off(m); break;
|
||||
}
|
||||
c->paletteEditorCapState = 0;
|
||||
return set_mario_action(m, ACT_IDLE, 0);
|
||||
}
|
||||
|
||||
s32 act_palette_editor_cap(struct MarioState *m) {
|
||||
if (gCamera->cutscene != CUTSCENE_PALETTE_EDITOR) {
|
||||
return mario_exit_palette_editor(m, gCamera);
|
||||
}
|
||||
|
||||
// Put cap on
|
||||
if (m->actionArg == 0) {
|
||||
s16 animFrame = set_character_animation(m, CHAR_ANIM_PUT_CAP_ON);
|
||||
if (animFrame == 28) {
|
||||
cutscene_put_cap_on(m);
|
||||
}
|
||||
if (is_anim_at_end(m)) {
|
||||
set_mario_action(m, ACT_IDLE, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// Take cap off
|
||||
else {
|
||||
s16 animFrame = set_character_animation(m, CHAR_ANIM_TAKE_CAP_OFF_THEN_ON);
|
||||
if (animFrame == 12) {
|
||||
cutscene_take_cap_off(m);
|
||||
}
|
||||
if (animFrame >= 30) {
|
||||
set_mario_action(m, ACT_IDLE, 0);
|
||||
}
|
||||
}
|
||||
|
||||
stationary_ground_step(m);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* |description|
|
||||
Checks for and handles common conditions that would cancel Mario's current stationary action.
|
||||
|descriptionEnd| */
|
||||
|
|
@ -1249,6 +1291,7 @@ s32 mario_execute_stationary_action(struct MarioState *m) {
|
|||
case ACT_BRAKING_STOP: cancel = act_braking_stop(m); break;
|
||||
case ACT_BUTT_SLIDE_STOP: cancel = act_butt_slide_stop(m); break;
|
||||
case ACT_HOLD_BUTT_SLIDE_STOP: cancel = act_hold_butt_slide_stop(m); break;
|
||||
case ACT_PALETTE_EDITOR_CAP: cancel = act_palette_editor_cap(m); break;
|
||||
default:
|
||||
LOG_ERROR("Attempted to execute unimplemented action '%04X'", m->action);
|
||||
set_mario_action(m, ACT_IDLE, 0);
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@
|
|||
|
||||
#include "types.h"
|
||||
|
||||
struct Camera;
|
||||
|
||||
s32 check_common_idle_cancels(struct MarioState *m);
|
||||
s32 check_common_hold_idle_cancels(struct MarioState *m);
|
||||
s32 act_idle(struct MarioState *m);
|
||||
|
|
@ -44,6 +46,8 @@ s32 act_air_throw_land(struct MarioState *m);
|
|||
s32 act_twirl_land(struct MarioState *m);
|
||||
s32 act_ground_pound_land(struct MarioState *m);
|
||||
s32 act_first_person(struct MarioState *m);
|
||||
s32 mario_exit_palette_editor(struct MarioState *m, struct Camera *c);
|
||||
s32 act_palette_editor_cap(struct MarioState *m);
|
||||
s32 check_common_stationary_cancels(struct MarioState *m);
|
||||
s32 mario_execute_stationary_action(struct MarioState *m);
|
||||
|
||||
|
|
|
|||
|
|
@ -393,24 +393,23 @@ static struct LuaObjectField sBullyCollisionDataFields[LUA_BULLY_COLLISION_DATA_
|
|||
{ "velZ", LVT_F32, offsetof(struct BullyCollisionData, velZ), false, LOT_NONE, 1, sizeof(f32) },
|
||||
};
|
||||
|
||||
#define LUA_CAMERA_FIELD_COUNT 16
|
||||
#define LUA_CAMERA_FIELD_COUNT 15
|
||||
static struct LuaObjectField sCameraFields[LUA_CAMERA_FIELD_COUNT] = {
|
||||
{ "areaCenX", LVT_F32, offsetof(struct Camera, areaCenX), false, LOT_NONE, 1, sizeof(f32) },
|
||||
{ "areaCenY", LVT_F32, offsetof(struct Camera, areaCenY), false, LOT_NONE, 1, sizeof(f32) },
|
||||
{ "areaCenZ", LVT_F32, offsetof(struct Camera, areaCenZ), false, LOT_NONE, 1, sizeof(f32) },
|
||||
{ "cutscene", LVT_U8, offsetof(struct Camera, cutscene), false, LOT_NONE, 1, sizeof(u8) },
|
||||
{ "defMode", LVT_U8, offsetof(struct Camera, defMode), false, LOT_NONE, 1, sizeof(u8) },
|
||||
{ "doorStatus", LVT_U8, offsetof(struct Camera, doorStatus), false, LOT_NONE, 1, sizeof(u8) },
|
||||
{ "filler31", LVT_U8, offsetof(struct Camera, filler31), false, LOT_NONE, 8, sizeof(u8) },
|
||||
{ "filler3C", LVT_U8, offsetof(struct Camera, filler3C), false, LOT_NONE, 40, sizeof(u8) },
|
||||
{ "focus", LVT_COBJECT, offsetof(struct Camera, focus), true, LOT_VEC3F, 1, sizeof(Vec3f) },
|
||||
{ "mode", LVT_U8, offsetof(struct Camera, mode), false, LOT_NONE, 1, sizeof(u8) },
|
||||
{ "mtx", LVT_COBJECT, offsetof(struct Camera, mtx), true, LOT_MAT4, 1, sizeof(Mat4) },
|
||||
{ "nextYaw", LVT_S16, offsetof(struct Camera, nextYaw), false, LOT_NONE, 1, sizeof(s16) },
|
||||
{ "paletteEditorCap", LVT_BOOL, offsetof(struct Camera, paletteEditorCap), false, LOT_NONE, 1, sizeof(bool) },
|
||||
{ "pos", LVT_COBJECT, offsetof(struct Camera, pos), true, LOT_VEC3F, 1, sizeof(Vec3f) },
|
||||
{ "unusedVec1", LVT_COBJECT, offsetof(struct Camera, unusedVec1), true, LOT_VEC3F, 1, sizeof(Vec3f) },
|
||||
{ "yaw", LVT_S16, offsetof(struct Camera, yaw), false, LOT_NONE, 1, sizeof(s16) },
|
||||
{ "areaCenX", LVT_F32, offsetof(struct Camera, areaCenX), false, LOT_NONE, 1, sizeof(f32) },
|
||||
{ "areaCenY", LVT_F32, offsetof(struct Camera, areaCenY), false, LOT_NONE, 1, sizeof(f32) },
|
||||
{ "areaCenZ", LVT_F32, offsetof(struct Camera, areaCenZ), false, LOT_NONE, 1, sizeof(f32) },
|
||||
{ "cutscene", LVT_U8, offsetof(struct Camera, cutscene), false, LOT_NONE, 1, sizeof(u8) },
|
||||
{ "defMode", LVT_U8, offsetof(struct Camera, defMode), false, LOT_NONE, 1, sizeof(u8) },
|
||||
{ "doorStatus", LVT_U8, offsetof(struct Camera, doorStatus), false, LOT_NONE, 1, sizeof(u8) },
|
||||
{ "filler31", LVT_U8, offsetof(struct Camera, filler31), false, LOT_NONE, 8, sizeof(u8) },
|
||||
{ "filler3C", LVT_U8, offsetof(struct Camera, filler3C), false, LOT_NONE, 40, sizeof(u8) },
|
||||
{ "focus", LVT_COBJECT, offsetof(struct Camera, focus), true, LOT_VEC3F, 1, sizeof(Vec3f) },
|
||||
{ "mode", LVT_U8, offsetof(struct Camera, mode), false, LOT_NONE, 1, sizeof(u8) },
|
||||
{ "mtx", LVT_COBJECT, offsetof(struct Camera, mtx), true, LOT_MAT4, 1, sizeof(Mat4) },
|
||||
{ "nextYaw", LVT_S16, offsetof(struct Camera, nextYaw), false, LOT_NONE, 1, sizeof(s16) },
|
||||
{ "pos", LVT_COBJECT, offsetof(struct Camera, pos), true, LOT_VEC3F, 1, sizeof(Vec3f) },
|
||||
{ "unusedVec1", LVT_COBJECT, offsetof(struct Camera, unusedVec1), true, LOT_VEC3F, 1, sizeof(Vec3f) },
|
||||
{ "yaw", LVT_S16, offsetof(struct Camera, yaw), false, LOT_NONE, 1, sizeof(s16) },
|
||||
};
|
||||
|
||||
#define LUA_CAMERA_FOVSTATUS_FIELD_COUNT 8
|
||||
|
|
|
|||
|
|
@ -3195,6 +3195,7 @@ char gSmluaConstants[] = ""
|
|||
"ACT_STANDING_AGAINST_WALL=0x0C400209\n"
|
||||
"ACT_COUGHING=0x0C40020A\n"
|
||||
"ACT_SHIVERING=0x0C40020B\n"
|
||||
"ACT_PALETTE_EDITOR_CAP=0x0000020C\n"
|
||||
"ACT_IN_QUICKSAND=0x0002020D\n"
|
||||
"ACT_UNKNOWN_0002020E=0x0002020E\n"
|
||||
"ACT_CROUCHING=0x0C008220\n"
|
||||
|
|
@ -3389,7 +3390,6 @@ char gSmluaConstants[] = ""
|
|||
"ACT_BUTT_STUCK_IN_GROUND=0x0002033B\n"
|
||||
"ACT_FEET_STUCK_IN_GROUND=0x0002033C\n"
|
||||
"ACT_PUTTING_ON_CAP=0x0000133D\n"
|
||||
"ACT_TAKING_OFF_CAP=0x0000133E\n"
|
||||
"ACT_HOLDING_POLE=0x08100340\n"
|
||||
"ACT_GRAB_POLE_SLOW=0x00100341\n"
|
||||
"ACT_GRAB_POLE_FAST=0x00100342\n"
|
||||
|
|
|
|||
|
|
@ -18875,6 +18875,26 @@ int smlua_func_check_common_landing_cancels(lua_State* L) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_mario_exit_palette_editor(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 2) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "mario_exit_palette_editor", 2, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct MarioState* m = (struct MarioState*)smlua_to_cobject(L, 1, LOT_MARIOSTATE);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "mario_exit_palette_editor"); return 0; }
|
||||
struct Camera* c = (struct Camera*)smlua_to_cobject(L, 2, LOT_CAMERA);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 2, "mario_exit_palette_editor"); return 0; }
|
||||
|
||||
extern s32 mario_exit_palette_editor(struct MarioState *m, struct Camera *c);
|
||||
lua_pushinteger(L, mario_exit_palette_editor(m, c));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_check_common_stationary_cancels(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
|
|
@ -37505,6 +37525,7 @@ void smlua_bind_functions_autogen(void) {
|
|||
smlua_bind_function(L, "stopping_step", smlua_func_stopping_step);
|
||||
smlua_bind_function(L, "landing_step", smlua_func_landing_step);
|
||||
smlua_bind_function(L, "check_common_landing_cancels", smlua_func_check_common_landing_cancels);
|
||||
smlua_bind_function(L, "mario_exit_palette_editor", smlua_func_mario_exit_palette_editor);
|
||||
smlua_bind_function(L, "check_common_stationary_cancels", smlua_func_check_common_stationary_cancels);
|
||||
smlua_bind_function(L, "mario_execute_stationary_action", smlua_func_mario_execute_stationary_action);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue