Add new EVT macros (#482)

* add tools and new macros

* change EVT_OP enum names

* first file

* convert some files

* stuff

* EVT_PTR

* src/battle/item

* src/battle

* tool changes

* clouds.inc.c

* src/evt

* foliage.inc.c

* bitwise ops

* staticentitydata vars

* add diff_evt.py

* use evt macros in dro_01

* evt macro docs

* whoops

* fix some warnings
This commit is contained in:
Alex Bates 2021-10-25 12:44:55 +01:00 committed by GitHub
parent 9631996e76
commit ae00fea170
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
69 changed files with 8231 additions and 7095 deletions

166
diff_evt.py Executable file
View File

@ -0,0 +1,166 @@
#!/usr/bin/env python3
import argparse
import queue
import time
import subprocess
from diff import Display, debounced_fs_watch
from colorama import Fore, Back, Style
from tools.update_evts import parse_symbol_addrs
from tools.disasm_script import ScriptDisassembler, get_constants
parser = argparse.ArgumentParser(
description="Diff EVT macros."
)
parser.add_argument(
"start",
help="Symbol name or ROM address to start diffing from.",
)
parser.add_argument(
"-w",
"--watch",
action="store_true",
help="Watch for file changes and update the diff automatically."
)
parser.add_argument(
"-m",
"--make",
action="store_true",
help="Run ninja automatically."
)
parser.add_argument(
"-o",
action="store_true",
help="Ignored for compatibility with diff.py."
)
class EvtDisplay(Display):
def __init__(self, start):
self.config = None
self.base_lines = None
self.mydump = None
self.emsg = None
self.last_refresh_key = None
self.last_diff_output = None
self.start = start
def run_diff(self):
if self.emsg is not None:
return (self.emsg, self.emsg)
symbols = parse_symbol_addrs()
if self.start in symbols:
start = symbols[self.start].rom_addr
else:
try:
start = int(self.start, base=0)
except ValueError:
print("Start symbol name is not known or is an invalid address.")
exit(2)
with open("ver/current/build/papermario.z64", "rb") as f:
f.seek(start)
current = ScriptDisassembler(f, romstart=start, prelude=False).disassemble()
with open("ver/current/baserom.z64", "rb") as f:
f.seek(start)
target = ScriptDisassembler(f, romstart=start, prelude=False).disassemble()
current = current.splitlines()
target = target.splitlines()
score = 0
output = ""
for i in range(max(len(current), len(target))):
if i >= len(current):
current.append("")
if i >= len(target):
target.append("")
current_line = current[i][4:]
target_line = target[i][4:]
output += Style.RESET_ALL
if current_line != target_line:
output += Fore.RED
score += 10
else:
output += Style.DIM
output += f"{target_line:<60} {current_line:<60}\n"
output = f"{'TARGET':<60} {f'CURRENT ({score})':<60}\n" + output
refresh_key = (current, target)
return (output, refresh_key)
class FakeConfig():
def __init__(self, args):
self.make = args.make
self.source_extensions = ["c", "h"]
def run_ninja():
return subprocess.run(
["ninja", "ver/current/build/papermario.z64"],
stderr=subprocess.PIPE,
stdout=subprocess.PIPE,
)
def main():
args = parser.parse_args()
get_constants()
display = EvtDisplay(args.start)
if args.watch:
if not args.make:
yn = input(
"Warning: watch-mode (-w) enabled without auto-ninja (-m). "
"You will have to run ninja manually. Ok? (Y/n) "
)
if yn.lower() == "n":
return
if args.make:
watch_sources = ["src", "include"]
else:
watch_sources = ["ver/current/build/papermario.z64"]
q = queue.Queue()
debounced_fs_watch(watch_sources, q, FakeConfig(args), FakeConfig(args))
display.run_async(q)
last_build = 0.0
try:
while True:
t = q.get()
if t is None:
break
if t < last_build:
continue
last_build = time.time()
if args.make:
display.progress("Building...")
ret = run_ninja()
if ret.returncode != 0:
display.update(
ret.stderr.decode("utf-8-sig", "replace")
or ret.stdout.decode("utf-8-sig", "replace"),
error=True,
)
continue
display.update(last_build, error=False)
except KeyboardInterrupt:
display.terminate()
else:
display.run_sync()
if __name__ == "__main__":
main()

View File

@ -15,8 +15,8 @@ enum {
EVT_OP_LOOP, ///< Args: number of repeats (0 = infinite)
EVT_OP_END_LOOP,
EVT_OP_BREAK_LOOP,
EVT_OP_SLEEP_FRAMES,
EVT_OP_SLEEP_SECS,
EVT_OP_WAIT_FRAMES,
EVT_OP_WAIT_SECS,
EVT_OP_IF_EQ, ///< Args: a, b
EVT_OP_IF_NE, ///< Args: a, b
EVT_OP_IF_LT, ///< Args: a, b
@ -27,60 +27,60 @@ enum {
EVT_OP_IF_NOT_FLAG, ///< Args: a, b
EVT_OP_ELSE,
EVT_OP_END_IF,
EVT_OP_MATCH, ///< Args: expression to test against
EVT_OP_MATCH_CONST, ///< Args: value to test against
EVT_OP_SWITCH, ///< Args: expression to test against
EVT_OP_SWITCH_CONST, ///< Args: value to test against
EVT_OP_CASE_EQ, ///< Args: expression to test for
EVT_OP_CASE_NE, ///< Args: expression to test for
EVT_OP_CASE_LT, ///< Args: expression to test for
EVT_OP_CASE_GT, ///< Args: expression to test for
EVT_OP_CASE_LE, ///< Args: expression to test for
EVT_OP_CASE_GE, ///< Args: expression to test for
EVT_OP_CASE_ELSE,
EVT_OP_CASE_MULTI_OR_EQ, ///< Args: expression to test for
EVT_OP_CASE_MULTI_AND_EQ, ///< Args: expression to test for
EVT_OP_CASE_DEFAULT,
EVT_OP_CASE_OR_EQ, ///< Args: expression to test for
EVT_OP_CASE_AND_EQ, ///< Args: expression to test for
EVT_OP_CASE_FLAG, ///< Args: expression to test for
EVT_OP_END_CASE_MULTI, ///< Ends the case block of EVT_OP_CASE_MULTI_OR_EQ condition(s).
EVT_OP_END_CASE_GROUP, ///< Ends the case block of EVT_OP_CASE_OR_EQ condition(s).
EVT_OP_CASE_RANGE, ///< Args: from, to
EVT_OP_BREAK_MATCH,
EVT_OP_END_MATCH,
EVT_OP_BREAK_SWITCH,
EVT_OP_END_SWITCH,
EVT_OP_SET, ///< Args: container, expression
EVT_OP_SET_CONST, ///< Args: container, value
EVT_OP_SET_F, ///< Args: container, expression
EVT_OP_SETF, ///< Args: container, expression
EVT_OP_ADD, ///< Args: container, expression to increment by
EVT_OP_SUB, ///< Args: container, expression to decrement by
EVT_OP_MUL, ///< Args: container, expression to multiply by
EVT_OP_DIV, ///< Integer division. Args: container, expression to divide by
EVT_OP_MOD, ///< Args: container, expression to divide by
EVT_OP_ADD_F, ///< Args: container, expression to increment by
EVT_OP_SUB_F, ///< Args: container, expression to decrement by
EVT_OP_MUL_F, ///< Args: container, expression to multiply by
EVT_OP_DIV_F, ///< Args: container, expression to divide by
EVT_OP_USE_BUFFER, ///< Args: s32*
EVT_OP_BUFFER_READ_1, /// Args: container
EVT_OP_BUFFER_READ_2, /// Args: container, container
EVT_OP_BUFFER_READ_3, /// Args: container, container, container
EVT_OP_BUFFER_READ_4, /// Args: container, container, container, container
EVT_OP_BUFFER_PEEK, ///< Args: index, container
EVT_OP_USE_BUFFER_F, ///< Identical to USE_BUFFER. Args: f32*
EVT_OP_BUFFER_READ_1_F, /// Args: container
EVT_OP_BUFFER_READ_2_F, /// Args: container, container
EVT_OP_BUFFER_READ_3_F, /// Args: container, container, container
EVT_OP_BUFFER_READ_4_F, /// Args: container, container, container, container
EVT_OP_BUFFER_PEEK_F, ///< Args: index, container
EVT_OP_ADDF, ///< Args: container, expression to increment by
EVT_OP_SUBF, ///< Args: container, expression to decrement by
EVT_OP_MULF, ///< Args: container, expression to multiply by
EVT_OP_DIVF, ///< Args: container, expression to divide by
EVT_OP_USE_BUF, ///< Args: s32*
EVT_OP_BUF_READ1, /// Args: container
EVT_OP_BUF_READ2, /// Args: container, container
EVT_OP_BUF_READ3, /// Args: container, container, container
EVT_OP_BUF_READ4, /// Args: container, container, container, container
EVT_OP_BUF_PEEK, ///< Args: index, container
EVT_OP_USE_FBUF, ///< Identical to USE_BUFFER. Args: f32*
EVT_OP_FBUF_READ1, /// Args: container
EVT_OP_FBUF_READ2, /// Args: container, container
EVT_OP_FBUF_READ3, /// Args: container, container, container
EVT_OP_FBUF_READ4, /// Args: container, container, container, container
EVT_OP_FBUF_PEEK, ///< Args: index, container
EVT_OP_USE_ARRAY, ///< Args: *s32
EVT_OP_USE_FLAGS, ///< Args: *s32
EVT_OP_NEW_ARRAY, ///< Allocates a new array. Args: length, s32*
EVT_OP_AND, ///< Args: container, expression to bitwise AND with
EVT_OP_AND_CONST, ///< Args: container, value to bitwise AND with
EVT_OP_OR, ///< Args: container, expression to bitwise OR with
EVT_OP_OR_CONST, ///< Args: container, value to bitwise OR with
EVT_OP_BITWISE_AND, ///< Args: container, expression to bitwise AND with
EVT_OP_BITWISE_AND_CONST, ///< Args: container, value to bitwise AND with
EVT_OP_BITWISE_OR, ///< Args: container, expression to bitwise OR with
EVT_OP_BITWISE_OR_CONST, ///< Args: container, value to bitwise OR with
EVT_OP_CALL, ///< Args: *function, ...
EVT_OP_SPAWN_SCRIPT, ///< Args: EvtSource*
EVT_OP_SPAWN_GET_ID, ///< Args: EvtSource*, container
EVT_OP_AWAIT_SCRIPT, ///< Spawns a script and waits for it to return before continuing. Args: EvtSource*
EVT_OP_EXEC, ///< Args: EvtSource*
EVT_OP_EXEC_GET_TID, ///< Args: EvtSource*, container
EVT_OP_EXEC_WAIT, ///< Spawns a script and waits for it to return before continuing. Args: EvtSource*
EVT_OP_BIND_TRIGGER, ///< Args: EvtSource*, trigger flags, s32 target, 1, Trigger*
EVT_OP_UNBIND, ///< Unbinds any triggers bound to this script.
EVT_OP_KILL_SCRIPT, ///< Args: ScriptID
EVT_OP_KILL_THREAD, ///< Args: ScriptID
EVT_OP_JUMP, ///< Args: EvtSource*
EVT_OP_SET_PRIORITY, ///< Args: priority
EVT_OP_SET_TIMESCALE, ///< Args: timescale
@ -90,13 +90,13 @@ enum {
EVT_OP_RESUME_GROUP, ///< Args: group
EVT_OP_SUSPEND_OTHERS, ///< Args: group
EVT_OP_RESUME_OTHERS, ///< Args: group
EVT_OP_SUSPEND_SCRIPT, ///< Args: ScriptID
EVT_OP_RESUME_SCRIPT, ///< Args: ScriptID
EVT_OP_DOES_SCRIPT_EXIST, ///< Args: ScriptID, container
EVT_OP_SPAWN_THREAD,
EVT_OP_END_SPAWN_THREAD,
EVT_OP_PARALLEL_THREAD, ///< Parallel threads are killed as soon as the parent script returns.
EVT_OP_END_PARALLEL_THREAD,
EVT_OP_SUSPEND_THREAD, ///< Args: ScriptID
EVT_OP_RESUME_THREAD, ///< Args: ScriptID
EVT_OP_IS_THREAD_RUNNING, ///< Args: ScriptID, container
EVT_OP_THREAD,
EVT_OP_END_THREAD,
EVT_OP_CHILD_THREAD, ///< Parallel threads are killed as soon as the parent script returns.
EVT_OP_END_CHILD_THREAD,
EVT_OP_90,
EVT_OP_DEBUG_PRINT, ///< Args: expression
EVT_OP_92,
@ -104,6 +104,7 @@ enum {
EVT_OP_94,
};
// deprecated, use those in script_api/macros.h instead
#define EVT_VAR(v) ((v - 30000000))
#define EVT_MAP_VAR(v) ((v - 50000000))
#define EVT_FLAG(v) ((v - 70000000))
@ -114,17 +115,17 @@ enum {
#define EVT_SAVE_VAR(v) ((v - 170000000))
#define EVT_ARRAY(v) ((v - 190000000))
#define EVT_ARRAY_FLAG(v) ((v - 210000000))
#define EVT_FIXED(v) (((v * 1024.0f) + -230000000)) // See evt_float_to_fixed_var
#define EVT_LIMIT -250000000 // TODO better name
#define MAKE_ENTITY_END 0x80000000
#define EVT_FIXED(v) (((v * 1024.0f) + -230000000)) // See evt_float_to_fixed_var
#define EVT_PTR(sym) (Bytecode) &sym
#define EVT_LIMIT -250000000 // TODO better name
#define MAKE_ENTITY_END 0x80000000
// deprecated, use enum GSW/GSWF
#define EVT_STORY_PROGRESS EVT_SAVE_VAR(0)
#define EVT_SAVE_FLAG_PLACES_VISITED EVT_SAVE_FLAG(0x7AA)
#define EVT_SAVE_FLAG_TUTORIAL_GOT_STAR_PIECE EVT_SAVE_FLAG(101)
#define EVT_WORLD_LOCATION EVT_SAVE_VAR(425)
/* Return type of evt_execute_next_command */
#define EVT_CONTINUE 0 /* Continue to next command */
#define EVT_ABORT 1 /* Quit execution */
@ -138,18 +139,4 @@ typedef s32 ApiStatus;
#define ApiStatus_REPEAT 3 /* Call again immediately */
#define ApiStatus_FINISH 255 /* Corresponds to EVT_FINISH */
#define EVT_CMD(opcode, argv...) \
opcode, \
/* argc */ (sizeof((Bytecode[]){argv})/sizeof(Bytecode)), \
##argv
#define EXIT_WALK_SCRIPT(walkDistance, exitIdx, map, entryIdx) \
SCRIPT({ \
group 0x1B; \
UseExitHeading(walkDistance, exitIdx); \
spawn ExitWalk; \
GotoMap(map, entryIdx); \
sleep 100; \
})
#endif

View File

@ -2,7 +2,7 @@
#define _SCRIPT_API_COMMON_H_
#include "common_structs.h"
#include "evt.h"
#include "macros.h"
ApiStatus FadeBackgroundToBlack(Evt* script, s32 isInitialCall);
ApiStatus UnfadeBackgroundFromBlack(Evt* script, s32 isInitialCall);

509
include/script_api/macros.h Normal file
View File

@ -0,0 +1,509 @@
#ifndef _SCRIPT_API_MACROS_H_
#define _SCRIPT_API_MACROS_H_
#include "evt.h"
/****** EXPRESSIONS ***************************************************************************************************/
/// Expressions in EVT instructions should be one of the following types:
/// - Integer literals (as-is, s32)
/// - Float literals (EVT_FLOAT) - cast to int where a float is not accepted
/// - Pointers, string literals (EVT_ADDR)
/// - Variables (LW, GW, LSW, GSW, UW)
/// - Flags (LF, GF, LSWF, GSWF, UF)
/// This is implemented in `evt_get_variable` and `evt_get_float_variable`.
/// Decimal constant.
/// Despite the name, "floats" are actually stored as fixed-point values.
#define EVT_FLOAT(DOUBLE) (((Bytecode)(DOUBLE * 1024.0f) + -230000000))
/// Address/pointer constant.
#define EVT_ADDR(sym) (((Bytecode) &((sym))))
/// Local Word. A variable local to the current thread.
/// LWs are copied to any threads created by this one (EVT_EXEC, EVT_EXEC_WAIT, EVT_THREAD, EVT_CHILD_THREAD).
/// Additionally, EVT_EXEC_WAIT copies LWs back from the spawned thread when it completes.
///
/// Range: `0 <= v < 0x10`
/// Star Rod equivalent: `*Var[v]`.
#define LW(INDEX) ((((INDEX)) - 30000000))
/// Global Word. A variable global to all threads.
/// Cleared upon entering a new map.
///
/// Range: `0 <= v < 0x10`
/// Star Rod equivalent: `*MapVar[v]`.
#define GW(INDEX) ((((INDEX)) - 50000000))
/// Local Flag. A boolean variable local to the current thread.
/// LFs are copied to any threads created by this one (EVT_EXEC, EVT_EXEC_WAIT, EVT_THREAD, EVT_CHILD_THREAD).
/// Additionally, EVT_EXEC_WAIT copies LFs back from the spawned thread when it completes.
///
/// Range: `0 <= v < 0x60`
/// Star Rod equivalent: `*Flag[v]`.
#define LF(INDEX) ((((INDEX)) - 70000000))
/// Global Flag. A boolean variable global to all threads.
/// Cleared upon entering a new map.
///
/// Range: `0 <= v < 0x60`
/// Star Rod equivalent: `*MapFlag[v]`.
#define GF(INDEX) ((((INDEX)) - 90000000))
/// Local Save World Flag. A boolean variable local to the current world area, saved in the savefile.
/// Cleared upon entering a new world area.
///
/// Used to track whether items that respawn, such as coins, Goomnuts, or Koopa Leaves, have been collected.
///
/// Range: `0 <= v < 0x100`
/// Star Rod equivalent: `*AreaFlag[v]`.
#define LSWF(INDEX) ((((INDEX)) - 110000000))
/// Global Save World Flag. A boolean variable saved in the savefile.
///
/// Used to track whether badges, items, etc. have been collected or whether NPCs have been interacted with.
///
/// Range: `0 <= v < 0x800`
/// Star Rod equivalent: `*SaveFlag[v]`.
#define GSWF(INDEX) ((((INDEX)) - 130000000))
/// Local Saved **Byte**. A variable local to the current world area, saved in the savefile.
/// Cleared upon a new world area.
///
/// Rarely used. Most common use is for NPCs with dialogue that changes depending on the number of times you have
/// interacted with them in their 'recent memory' (i.e. until you leave the area).
///
/// Range: `0 <= v < 0x10`
/// Star Rod equivalent: `*AreaByte[v]`.
#define LSW(INDEX) ((((INDEX)) - 150000000))
/// Global Saved **Byte**. A variable saved in the save file.
///
/// Used for almost all savefile state.
#define GSW(INDEX) (((((INDEX)) - 170000000))
// TODO(docs): figure out what 'U' might stand for in UW and UF
/// **Array** Word. A variable stored within the current thread's array.
/// You can load an array with EVT_USE_ARRAY or temporarily allocate one with EVT_MALLOC_ARRAY, then get/set values with
/// the `UW(index)` macro.
///
/// Range: `0 <= v`
/// Star Rod equivalent: `*Array[v]`.
#define UW(INDEX) ((((INDEX)) - 190000000))
/// **Array** Flag. A boolean variable stored within the current thread's flag array.
/// The flag array is distinct from the word array (unlike EVT_USE_BUF and EVT_USE_FBUF).
///
/// Range: `0 <= v`
/// Star Rod equivalent: `*Array[v]`.
#define UF(INDEX) ((((v)) - 210000000))
/// An entity index. Entities are assigned indices in the order they are created with EVT_CALL(MakeEntity, ...).
/// Supported in EVT_BIND_TRIGGER and EVT_BIND_PADLOCK only.
#define EVT_ENTITY_INDEX(entityIndex) (((((entityIndex)) + 0x400)))
/****** INSTRUCTIONS **************************************************************************************************/
/// On each frame, the EVT manager will continue executing commands in all threads until a blocking command is
/// encountered. This means that if you have a thread that loops but does not block between iterations, the game will
/// freeze! Avoid this by inserting a blocking command such as EVT_WAIT_FRAMES(1) in the loop body.
///
/// Also note that threads are never executed in parallel. If your EVT script lacks blocking commands, it will be
/// executed all in one go, and race conditions cannot occur.
///
/// The following subset of EVT commands are blocking:
/// - EVT_EXEC_WAIT
/// - EVT_WAIT_FRAMES
/// - EVT_WAIT_SECONDS
/// - EVT_CALL (if function returns ApiStatus_BLOCK)
/// In EVT scripts, instructions are stored contiguously in the following structs:
/// struct {
/// Bytecode opcode;
/// Bytecode argc;
/// Bytecode argv[argc];
/// }
/// This macro expands to the given opcode and argv, with argc calculated automatically.
#define EVT_CMD(opcode, argv...) \
opcode, \
(sizeof((Bytecode[]){argv})/sizeof(Bytecode)), \
##argv
/// Signals the end of EVT script data. A script missing this will likely crash on load.
#define EVT_END EVT_CMD(EVT_OP_END),
/// Kills the current EVT thread.
/// A script missing a return will live - but do nothing - forever, or until something else kills it (e.g. leaving the map).
#define EVT_RETURN EVT_CMD(EVT_OP_RETURN),
/// Jumps to a given instruction pointer and begins execution from there.
/// You can jump to a different EVT source and labels etc. will be loaded as expected.
/// The timescale for the current thread is also reset to the global default.
#define EVT_JUMP(EVT_SOURCE) EVT_CMD(EVT_OP_JUMP, (Bytecode) EVT_SOURCE),
/// Marks this point in the script as a EVT_GOTO target.
///
/// Range: `0 <= LABEL_ID <= 0x16`
#define EVT_LABEL(LABEL_ID) EVT_CMD(EVT_OP_LABEL, LABEL_ID),
/// Moves execution to the given label.
///
/// Range: `0 <= LABEL_ID <= 0x16`
#define EVT_GOTO(LABEL_ID) EVT_CMD(EVT_OP_GOTO, LABEL_ID),
/// Marks the beginning of a loop.
///
/// EVT_LOOP(TIMES)
/// ...
/// EVT_END_LOOP
///
/// The variable or value given in `TIMES` is decremented upon each loop iteration.
/// After the "1" iteration completes, the loop exits.
/// Use EVT_LOOP(0) for an infinite loop; make sure it breaks or blocks to avoid a freeze.
///
/// Up to 8 loops may be nested within a single script.
#define EVT_LOOP(TIMES) EVT_CMD(EVT_OP_LOOP, TIMES),
/// Marks the end of a loop.
#define EVT_END_LOOP EVT_CMD(EVT_OP_END_LOOP),
/// Breaks out of the innermost loop.
#define EVT_BREAK_LOOP EVT_CMD(EVT_OP_BREAK_LOOP),
/// Blocks for the given number of frames.
#define EVT_WAIT_FRAMES(NUM_FRAMES) EVT_CMD(EVT_OP_WAIT_FRAMES, NUM_FRAMES),
/// Blocks for the given number of seconds.
#define EVT_WAIT_SECS(NUM_SECONDS) EVT_CMD(EVT_OP_WAIT_SECS, NUM_SECONDS),
/// Marks the beginning of an if statement that only executes if `LVAR == RVAR`.
///
/// EVT_IF_EQ(LVAR, RVAR)
/// ...
/// EVT_ELSE
/// ...
/// EVT_END_IF
///
/// The EVT_ELSE block is optional.
#define EVT_IF_EQ(LVAR, RVAR) EVT_CMD(EVT_OP_IF_EQ, LVAR, RVAR),
/// Marks the beginning of an if statement that only executes if `LVAR != RVAR`.
#define EVT_IF_NE(LVAR, RVAR) EVT_CMD(EVT_OP_IF_NE, LVAR, RVAR),
/// Marks the beginning of an if statement that only executes if `LVAR < RVAR`.
#define EVT_IF_LT(LVAR, RVAR) EVT_CMD(EVT_OP_IF_LT, LVAR, RVAR),
/// Marks the beginning of an if statement that only executes if `LVAR <= RVAR`.
#define EVT_IF_GT(LVAR, RVAR) EVT_CMD(EVT_OP_IF_GT, LVAR, RVAR),
/// Marks the beginning of an if statement that only executes if `LVAR > RVAR`.
#define EVT_IF_LE(LVAR, RVAR) EVT_CMD(EVT_OP_IF_LE, LVAR, RVAR),
/// Marks the beginning of an if statement that only executes if `LVAR >= RVAR`.
#define EVT_IF_GE(LVAR, RVAR) EVT_CMD(EVT_OP_IF_GE, LVAR, RVAR),
/// Marks the beginning of an if statement that only executes if the RVAR flag is set on LVAR,
/// i.e. `(LVAR & RVAR) != 1`.
#define EVT_IF_FLAG(LVAR, RVAR) EVT_CMD(EVT_OP_IF_FLAG, LVAR, RVAR),
/// Marks the beginning of an if statement that only executes if the RVAR flag is unset on LVAR,
/// i.e. `(LVAR & RVAR) == 0`.
#define EVT_IF_NOT_FLAG(LVAR, RVAR) EVT_CMD(EVT_OP_IF_NOT_FLAG, LVAR, RVAR),
/// Marks the end of an if statement and the start of the else block.
#define EVT_ELSE EVT_CMD(EVT_OP_ELSE),
/// Marks the end of an if statement or an else block.
#define EVT_END_IF EVT_CMD(EVT_OP_END_IF),
/// Marks the start of a switch statement.
///
/// EVT_SWITCH(LVAR)
/// EVT_CASE_EQ(RVAR)
/// ...
/// EVT_END_SWITCH
///
/// Unlike C, EVT switch statements do not have fallthrough by default.
/// If you want to opt-in to fallthrough, use EVT_CASE_OR_EQ.
///
/// Up to 8 switch statements may be nested within a single script.
#define EVT_SWITCH(LVAR) EVT_CMD(EVT_OP_SWITCH, LVAR),
/// Marks the start of a switch statement where the given value is treated as-is instead of using evt_get_variable.
/// That is, `EVT_SWITCH_CONST(LW(0))` will switch over the value `0xFE363C80` instead of the value contained
/// within `LW(0)`.
#define EVT_SWITCH_CONST(LCONST) EVT_CMD(EVT_OP_SWITCH_CONST, LCONST),
/// Marks the start of a switch case that executes only if `LVAR == RVAR`. It also marks the end of any previous case.
#define EVT_CASE_EQ(RVAR) EVT_CMD(EVT_OP_CASE_EQ, RVAR),
/// Marks the start of a switch case that executes only if `LVAR != RVAR`. It also marks the end of any previous case.
#define EVT_CASE_NE(RVAR) EVT_CMD(EVT_OP_CASE_NE, RVAR),
/// Marks the start of a switch case that executes only if `LVAR < RVAR`. It also marks the end of any previous case.
#define EVT_CASE_LT(RVAR) EVT_CMD(EVT_OP_CASE_LT, RVAR),
/// Marks the start of a switch case that executes only if `LVAR <= RVAR`. It also marks the end of any previous case.
#define EVT_CASE_GT(RVAR) EVT_CMD(EVT_OP_CASE_GT, RVAR),
/// Marks the start of a switch case that executes only if `LVAR > RVAR`. It also marks the end of any previous case.
#define EVT_CASE_LE(RVAR) EVT_CMD(EVT_OP_CASE_LE, RVAR),
/// Marks the start of a switch case that executes only if `LVAR >= RVAR`. It also marks the end of any previous case.
#define EVT_CASE_GE(RVAR) EVT_CMD(EVT_OP_CASE_GE, RVAR),
/// Marks the start of a switch case that executes unconditionally. It also marks the end of any previous case.
#define EVT_CASE_DEFAULT EVT_CMD(EVT_OP_CASE_DEFAULT),
/// Marks the start of a switch case that executes only if `LVAR == RVAR`. It also marks the end of any previous case.
/// Unlike EVT_CASE_EQ, EVT_CASE_OR_EQ will fallthrough to the next case until EVT_END_CASE_GROUP is reached.
#define EVT_CASE_OR_EQ(RVAR) EVT_CMD(EVT_OP_CASE_OR_EQ, RVAR),
/// Marks the start of a switch case that executes only if `LVAR == RVAR`. It also marks the end of any previous case.
/// Similar to EVT_CASE_OR_EQ, EVT_CASE_AND_EQ has fallthrough. However, if `LVAR != RVAR`, fallthrough does not apply.
#define EVT_CASE_AND_EQ(RVAR) EVT_CMD(EVT_OP_CASE_AND_EQ, RVAR),
/// Marks the start of a switch case that executes only if the `RVAR` flag is set on `LVAR`, i.e. `(LVAR & RVAR) != 1`.
/// It also marks the end of any previous case.
#define EVT_CASE_FLAG(RVAR) EVT_CMD(EVT_OP_CASE_FLAG, RVAR),
/// Marks the end of a switch case group (EVT_CASE_OR_EQ and/or EVT_CASE_AND_EQ), stopping fallthrough.
#define EVT_END_CASE_GROUP EVT_CMD(EVT_OP_END_CASE_GROUP),
/// Marks the start of a switch case that executes only if `MIN <= LVAR <= MAX` (inclusive).
/// It also marks the end of any previous case.
#define EVT_CASE_RANGE(MIN, MAX) EVT_CMD(EVT_OP_CASE_RANGE, MIN, MAX),
/// Marks the end of a switch statement and any case.
#define EVT_END_SWITCH EVT_CMD(EVT_OP_END_SWITCH),
/// Sets the given variable to a given value casted to an integer.
#define EVT_SET(VAR, INT_VALUE) EVT_CMD(EVT_OP_SET, VAR, (Bytecode) INT_VALUE),
/// Sets the given variable to a given value, skipping the evt_get_variable call.
/// That is, `EVT_SET_CONST(LW(0), LW(1))` will set `LW(0)` to `0xFE363C81` instead of copying the value of
/// `LW(1)` into `LW(0)`.
#define EVT_SET_CONST(VAR, CONST) EVT_CMD(EVT_OP_SET_CONST, VAR, (Bytecode) CONST),
/// Sets the given variable to a given value, but supports EVT_FLOATs.
#define EVT_SETF(VAR, FLOAT_VALUE) EVT_CMD(EVT_OP_SETF, VAR, FLOAT_VALUE),
// Basic arithmetic operations.
#define EVT_ADD(VAR, INT_VALUE) EVT_CMD(EVT_OP_ADD, VAR, INT_VALUE),
#define EVT_SUB(VAR, INT_VALUE) EVT_CMD(EVT_OP_SUB, VAR, INT_VALUE),
#define EVT_MUL(VAR, INT_VALUE) EVT_CMD(EVT_OP_MUL, VAR, INT_VALUE),
#define EVT_DIV(VAR, INT_VALUE) EVT_CMD(EVT_OP_DIV, VAR, INT_VALUE),
#define EVT_MOD(VAR, INT_VALUE) EVT_CMD(EVT_OP_MOD, VAR, INT_VALUE),
// Basic floating-point arithmetic operations.
#define EVT_ADDF(VAR, FLOAT_VALUE) EVT_CMD(EVT_OP_ADDF, VAR, FLOAT_VALUE),
#define EVT_SUBF(VAR, FLOAT_VALUE) EVT_CMD(EVT_OP_SUBF, VAR, FLOAT_VALUE),
#define EVT_MULF(VAR, FLOAT_VALUE) EVT_CMD(EVT_OP_MULF, VAR, FLOAT_VALUE),
#define EVT_DIVF(VAR, FLOAT_VALUE) EVT_CMD(EVT_OP_DIVF, VAR, FLOAT_VALUE),
/// Loads a s32 pointer for use with subsequent EVT_BUF_READ commands.
#define EVT_USE_BUF(INT_PTR) EVT_CMD(EVT_OP_USE_BUF, (Bytecode) INT_PTR),
/// Consumes the next s32 from the buffer and stores it in the given variable.
#define EVT_BUF_READ1(VAR) EVT_CMD(EVT_OP_BUF_READ1, VAR),
/// Consumes the next two s32s from the buffer and stores them in the given variables.
#define EVT_BUF_READ2(VAR1, VAR2) EVT_CMD(EVT_OP_BUF_READ2, VAR1, VAR2),
/// Consumes the next three s32s from the buffer and stores them in the given variables.
#define EVT_BUF_READ3(VAR1, VAR2, VAR3) EVT_CMD(EVT_OP_BUF_READ3, VAR1, VAR2, VAR3),
/// Consumes the next four s32s from the buffer and stores them in the given variables.
#define EVT_BUF_READ4(VAR1, VAR2, VAR3, VAR4) EVT_CMD(EVT_OP_BUF_READ4, VAR1, VAR2, VAR3, VAR4),
/// Gets the s32 at the given offset of the buffer and stores it in the given variable, without consuming it.
#define EVT_BUF_PEEK(OFFSET, VAR) EVT_CMD(EVT_OP_BUF_PEEK, OFFSET, VAR),
/// Identical to EVT_USE_BUF. Beware that the int buffer and the float buffer are not distinct.
#define EVT_USE_FBUF(FLOAT_PTR) EVT_CMD(EVT_OP_USE_FBUF, (Bytecode) FLOAT_PTR),
/// Consumes the next f32 from the buffer and stores it in the given variable.
#define EVT_FBUF_READ1(VAR) EVT_CMD(EVT_OP_FBUF_READ1, VAR),
/// Consumes the next two f32s from the buffer and stores them in the given variables.
#define EVT_FBUF_READ2(VAR1, VAR2) EVT_CMD(EVT_OP_FBUF_READ2, VAR1, VAR2),
/// Consumes the next three f32s from the buffer and stores them in the given variables.
#define EVT_FBUF_READ3(VAR1, VAR2, VAR3) EVT_CMD(EVT_OP_FBUF_READ3, VAR1, VAR2, VAR3),
/// Consumes the next four f32s from the buffer and stores them in the given variables.
#define EVT_FBUF_READ4(VAR1, VAR2, VAR3, VAR4) EVT_CMD(EVT_OP_FBUF_READ4, VAR1, VAR2, VAR3, VAR4),
/// Gets the f32 at the given offset of the buffer and stores it in the given variable, without consuming it.
#define EVT_FBUF_PEEK(OFFSET, VAR) EVT_CMD(EVT_OP_FBUF_PEEK, OFFSET, VAR),
/// Loads an s32 array pointer into the current thread for use with `UW(INDEX)`.
#define EVT_USE_ARRAY(INT_PTR) EVT_CMD(EVT_OP_USE_ARRAY, (Bytecode) INT_PTR),
/// Loads an s32 array pointer into the current thread for use with `UF(INDEX)`.
/// Flags are stored in a 'packed' structure where indices refer to bits.
#define EVT_USE_FLAG_ARRAY(PACKED_FLAGS_PTR) EVT_CMD(EVT_OP_USE_FLAG_ARRAY, (Bytecode) PACKED_FLAGS_PTR),
/// Allocates a new array of the given size for use with `UW(INDEX)`.
/// EVT scripts do not have to worry about freeing this array.
#define EVT_MALLOC_ARRAY(SIZE, OUT_PTR_VAR) EVT_CMD(EVT_OP_MALLOC_ARRAY, SIZE, OUT_PTR_VAR),
/// `VAR &= VALUE`
#define EVT_BITWISE_AND(VAR, VALUE) EVT_CMD(EVT_OP_BITWISE_AND, VAR, VALUE),
/// `VAR |= VALUE`
#define EVT_BITWISE_OR(VAR, VALUE) EVT_CMD(EVT_OP_BITWISE_OR, VAR, VALUE),
/// `VAR &= CONST`, but CONST is treated as-is rather than dereferenced with evt_get_variable.
#define EVT_BITWISE_AND_CONST(VAR, CONST) EVT_CMD(EVT_OP_BITWISE_AND_CONST, VAR, CONST),
/// `VAR |= CONST`, but CONST is treated as-is rather than dereferenced with evt_get_variable.
#define EVT_BITWISE_OR_CONST(VAR, CONST) EVT_CMD(EVT_OP_BITWISE_OR_CONST, VAR, CONST),
/// Launches a new thread.
/// The following values are copied from the current thread to the new thread:
/// - LFs
/// - LWs
/// - Array pointer
/// - Flag array pointer
/// - Priority
/// - Group
#define EVT_EXEC(EVT_SOURCE) EVT_CMD(EVT_OP_EXEC, (Bytecode) EVT_SOURCE),
/// Identical to EVT_EXEC, but the newly-launched thread ID is stored in OUTVAR.
/// The other thread may be interacted with using EVT_KILL_THREAD, EVT_SUSPEND_THREAD, EVT_RESUME_THREAD, and
/// EVT_IS_THREAD_RUNNING.
#define EVT_EXEC_GET_TID(EVT_SOURCE, OUTVAR) EVT_CMD(EVT_OP_EXEC_GET_TID, (Bytecode) EVT_SOURCE, OUTVAR),
/// Launches a new child thread.
/// Blocks for at least one frame unless the child thread is made to have a higher priority than the parent.
///
/// The following values are inherited and then copied back to the parent thread upon completion:
/// - LFs
/// - LWs
/// - Array pointer
/// - Flag array pointer
/// - Priority
/// - Group
///
/// Child threads are killed, suspended, and resumed as their parents are, for example, a different thread using
/// EVT_KILL_THREAD to kill a parent thread would also kill its child thread(s) launched by this command.
#define EVT_EXEC_WAIT(EVT_SOURCE) EVT_CMD(EVT_OP_EXEC_WAIT, (Bytecode) EVT_SOURCE),
/// Sets up a script to launch when a particular event is triggered.
///
/// Valid triggers:
/// - TRIGGER_WALL_PUSH
/// - TRIGGER_FLOOR_TOUCH
/// - TRIGGER_WALL_PRESS_A (displays "!" icon above player)
/// - TRIGGER_FLOOR_JUMP
/// - TRIGGER_WALL_TOUCH
/// - TRIGGER_FLOOR_PRESS_A
/// - TRIGGER_WALL_HAMMER
/// - TRIGGER_GAME_FLAG_SET (TODO: rename)
/// - TRIGGER_AREA_FLAG_SET (TODO: rename)
/// - TRIGGER_CEILING_TOUCH
/// - TRIGGER_FLOOR_ABOVE
/// - TRIGGER_POINT_BOMB (takes Vec3f* instead of collider ID)
///
/// For the `COLLIDER_ID` param, the following values are accepted:
/// - Collider ID
/// - Entity ID (use EVT_ENTITY_INDEX)
/// - Pointer to a Vec3f (for TRIGGER_POINT_BOMB only)
///
/// Only one thread will run for a trigger at once.
#define EVT_BIND_TRIGGER(EVT_SOURCE, TRIGGER, COLLIDER_ID, UNK_A3, TRIGGER_PTR_OUTVAR) \
EVT_CMD(EVT_OP_BIND_TRIGGER, (Bytecode) EVT_SOURCE, TRIGGER, (Bytecode) COLLIDER_ID, UNK_A3, TRIGGER_PTR_OUTVAR),
/// Similar to EVT_BIND_TRIGGER, but also takes arguments for the item list to show.
#define EVT_BIND_PADLOCK(EVT_SOURCE, TRIGGER, COLLIDER_ID, ITEM_LIST, UNK_A3, TRIGGER_PTR_OUTVAR) \
EVT_CMD(EVT_OP_BIND_PADLOCK, (Bytecode) EVT_SOURCE, TRIGGER, COLLIDER_ID, (Bytecode) ITEM_LIST, UNK_A3, TRIGGER_PTR_OUTVAR),
/// Unbinds the current thread from the trigger it was bound to, if any.
#define EVT_UNBIND EVT_CMD(EVT_OP_UNBIND),
/// Kills a thread by its thread ID.
#define EVT_KILL_THREAD(TID) EVT_CMD(EVT_OP_KILL_THREAD, TID),
/// Sets the current thread's priority. Higher-priority threads execute before lower-priority threads on each frame.
#define EVT_SET_PRIORITY(PRIORITY) EVT_CMD(EVT_OP_SET_PRIORITY, PRIORITY),
/// Sets the current thread's timescale. This is a multiplier applied to EVT_WAIT_FRAMES and EVT_WAIT_SECONDS.
#define EVT_SET_TIMESCALE(TIMESCALE) EVT_CMD(EVT_OP_SET_TIMESCALE, TIMESCALE),
/// Sets the current thread's group. Group value meanings are currently not known.
#define EVT_SET_GROUP(GROUP) EVT_CMD(EVT_OP_SET_GROUP, GROUP),
/// Suspends all threads in a group.
#define EVT_SUSPEND_GROUP(GROUP) EVT_CMD(EVT_OP_SUSPEND_GROUP, GROUP),
/// Resumes all threads in a group.
#define EVT_RESUME_GROUP(GROUP) EVT_CMD(EVT_OP_RESUME_GROUP, GROUP),
/// Suspends all threads in a group, except the current thread.
#define EVT_SUSPEND_OTHERS(GROUP) EVT_CMD(EVT_OP_SUSPEND_OTHERS, GROUP),
/// Resumes all threads in a group, except the current thread.
#define EVT_RESUME_OTHERS(GROUP) EVT_CMD(EVT_OP_RESUME_OTHERS, GROUP),
/// Suspends all threads in a group, except the current thread.
#define EVT_SUSPEND_THREAD(TID) EVT_CMD(EVT_OP_SUSPEND_THREAD, TID),
/// Resumes a thread by its thread ID.
#define EVT_RESUME_THREAD(TID) EVT_CMD(EVT_OP_RESUME_THREAD, TID),
/// Sets OUTVAR to TRUE/FALSE depending on whether a thread with the given ID exists (i.e. has not been killed).
#define EVT_IS_THREAD_RUNNING(TID, OUTVAR) EVT_CMD(EVT_OP_IS_THREAD_RUNNING, TID, OUTVAR),
/// Marks the start of a thread block. Commands between this and a matching EVT_END_THREAD
/// will be executed on their own, new thread instead of on the current thread.
#define EVT_THREAD EVT_CMD(EVT_OP_THREAD),
/// Marks the end of a thread block.
#define EVT_END_THREAD EVT_CMD(EVT_OP_END_THREAD),
/// Marks the start of a child thread block. Commands between this and a matching EVT_END_CHILD_THREAD
/// will be executed as a new child thread instead of on the current thread.
///
/// Child threads are killed if the parent thread dies, so the following script does NOT set the player's position:
///
/// EVT_CHILD_THREAD
/// EVT_WAIT_SECONDS(1) // child thread will be killed whilst waiting
/// EVT_CALL(SetPlayerPos, 0, -1000, 0) // will not be executed
/// EVT_END_CHILD_THREAD
/// EVT_RETURN // parent thread dies
///
#define EVT_CHILD_THREAD EVT_CMD(EVT_OP_CHILD_THREAD),
/// Marks the end of a child thread block.
#define EVT_END_CHILD_THREAD EVT_CMD(EVT_OP_END_CHILD_THREAD),
/// Calls a given C EVT API function with any number of arguments.
///
/// An API function has the following signature:
///
/// ApiStatus ApiFunction(Evt* thread, s32 isInitialCall);
///
/// This function could then be called with the following command:
///
/// EVT_CALL(ApiFunction)
///
/// The given arguments can be accessed from the API function using `thread->ptrReadPos`.
#define EVT_CALL(FUNC, ...) EVT_CMD(EVT_OP_CALL, (Bytecode) FUNC, ##__VA_ARGS__),
/****** COMMON SCRIPTS ************************************************************************************************/
#define EXIT_WALK_SCRIPT(walkDistance, exitIdx, map, entryIdx) \
{ \
EVT_SET_GROUP(0x1B) \
EVT_CALL(UseExitHeading, walkDistance, exitIdx) \
EVT_EXEC(ExitWalk) \
EVT_CALL(GotoMap, EVT_PTR(map), entryIdx) \
EVT_WAIT_FRAMES(100) \
EVT_RETURN \
EVT_END \
}
#endif

View File

@ -398,5 +398,18 @@ extern s32 bMarioIdleAnims[];
extern s32 bMarioDefendAnims[];
extern s32 bPeachIdleAnims[];
// TODO: name these entity symbols
extern StaticEntityData D_802E9A18; // entitySaveBlock
extern StaticEntityData D_802E9BB0;
extern StaticEntityData D_802E9BD4; // entityBlueSwitch
extern StaticEntityData D_802E9BF8; // entityHugeBlueSwitch
extern StaticEntityData D_802E9C1C;
extern StaticEntityData D_802E9C8C;
extern StaticEntityData D_802E9CB0;
extern StaticEntityData D_802E9CD4;
extern StaticEntityData D_802E9CF8;
extern StaticEntityData D_802E9D1C;
extern StaticEntityData D_802E9D40;
extern StaticEntityData D_802E9D64;
#endif

View File

@ -1,3 +1,5 @@
rm -rf ver/*/expected
mkdir -p ver/us/expected/ver/us
cp -r ver/us/build ver/us/expected/ver/us

View File

@ -22,123 +22,157 @@ extern f32 D_8029EFB0;
extern f32 D_8029EFB4;
extern f32 D_8029EFB8;
EvtSource BtlPutPartnerAway = SCRIPT({
DispatchEvent(ACTOR_PARTNER, 62);
parallel {
EVT_VAR(0) = 1.0;
loop 10 {
SetActorScale(ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(0), 1.0);
EVT_VAR(0) -= 0.1005859375;
sleep 1;
}
}
EnablePartnerBlur();
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_E);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 25;
SetActorJumpGravity(ACTOR_PARTNER, 1.0);
SetGoalPos(ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
JumpToGoal(ACTOR_PARTNER, 10, 0, 0, 1);
DisablePartnerBlur();
});
EvtSource BtlPutPartnerAway = {
EVT_CALL(DispatchEvent, 256, 62)
EVT_CHILD_THREAD
EVT_SETF(EVT_VAR(0), EVT_FIXED(1.0))
EVT_LOOP(10)
EVT_CALL(SetActorScale, 256, EVT_VAR(0), EVT_VAR(0), EVT_FIXED(1.0))
EVT_SUBF(EVT_VAR(0), EVT_FIXED(0.1005859375))
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_END_CHILD_THREAD
EVT_CALL(EnablePartnerBlur)
EVT_CALL(PlaySoundAtActor, 0, 14)
EVT_CALL(GetActorPos, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 25)
EVT_CALL(SetActorJumpGravity, 256, EVT_FIXED(1.0))
EVT_CALL(SetGoalPos, 256, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(JumpToGoal, 256, 10, 0, 0, 1)
EVT_CALL(DisablePartnerBlur)
EVT_RETURN
EVT_END
};
EvtSource BtlBringPartnerOut = SCRIPT({
parallel {
EVT_VAR(0) = 0.1005859375;
loop 20 {
SetActorScale(ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(0), 1.0);
EVT_VAR(0) += 0.05078125;
sleep 1;
}
SetActorScale(ACTOR_PARTNER, 1.0, 1.0, 1.0);
}
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_D);
GetGoalPos(256, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
SetActorJumpGravity(ACTOR_PARTNER, 1.0);
if (EVT_VAR(1) == 0) {
JumpToGoal(ACTOR_PARTNER, 20, 0, 0, 1);
} else {
JumpToGoal(ACTOR_PARTNER, 20, 0, 0, 1);
}
GetActorPos(ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
ForceHomePos(ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
});
EvtSource BtlBringPartnerOut = {
EVT_CHILD_THREAD
EVT_SETF(EVT_VAR(0), EVT_FIXED(0.1005859375))
EVT_LOOP(20)
EVT_CALL(SetActorScale, 256, EVT_VAR(0), EVT_VAR(0), EVT_FIXED(1.0))
EVT_ADDF(EVT_VAR(0), EVT_FIXED(0.05078125))
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_CALL(SetActorScale, 256, EVT_FIXED(1.0), EVT_FIXED(1.0), EVT_FIXED(1.0))
EVT_END_CHILD_THREAD
EVT_CALL(PlaySoundAtActor, 0, 13)
EVT_CALL(GetGoalPos, 256, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(SetActorJumpGravity, 256, EVT_FIXED(1.0))
EVT_IF_EQ(EVT_VAR(1), 0)
EVT_CALL(JumpToGoal, 256, 20, 0, 0, 1)
EVT_ELSE
EVT_CALL(JumpToGoal, 256, 20, 0, 0, 1)
EVT_END_IF
EVT_CALL(GetActorPos, 256, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(ForceHomePos, 256, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_RETURN
EVT_END
};
s8 D_80280CE0[] = { 0, 0, 0, 0 };
s32 D_80280CE4 = -1;
EvtSource CamPreset_B = SCRIPT({
func_80248DD0();
});
EvtSource CamPreset_B = {
EVT_CALL(func_80248DD0)
EVT_RETURN
EVT_END
};
EvtSource CamPreset_F = SCRIPT({
func_80248DE4();
});
EvtSource CamPreset_F = {
EVT_CALL(func_80248DE4)
EVT_RETURN
EVT_END
};
EvtSource CamPreset_M = SCRIPT({
func_80249804();
});
EvtSource CamPreset_M = {
EVT_CALL(func_80249804)
EVT_RETURN
EVT_END
};
EvtSource CamPreset_G = SCRIPT({
func_8024A214();
});
EvtSource CamPreset_G = {
EVT_CALL(func_8024A214)
EVT_RETURN
EVT_END
};
EvtSource CamPreset_I = SCRIPT({
func_8024A990();
});
EvtSource CamPreset_I = {
EVT_CALL(func_8024A990)
EVT_RETURN
EVT_END
};
EvtSource CamPreset_H = SCRIPT({
func_8024AFE4();
});
EvtSource CamPreset_H = {
EVT_CALL(func_8024AFE4)
EVT_RETURN
EVT_END
};
EvtSource CamPreset_N = SCRIPT({
func_8024B5FC();
});
EvtSource CamPreset_N = {
EVT_CALL(func_8024B5FC)
EVT_RETURN
EVT_END
};
EvtSource CamPreset_C = SCRIPT({
func_8024B9A0();
});
EvtSource CamPreset_C = {
EVT_CALL(func_8024B9A0)
EVT_RETURN
EVT_END
};
EvtSource CamPreset_D = SCRIPT({
func_8024BDA4();
});
EvtSource CamPreset_D = {
EVT_CALL(func_8024BDA4)
EVT_RETURN
EVT_END
};
EvtSource CamPreset_E = SCRIPT({
func_8024C180();
});
EvtSource CamPreset_E = {
EVT_CALL(func_8024C180)
EVT_RETURN
EVT_END
};
EvtSource CamPreset_J = SCRIPT({
func_8024C570();
});
EvtSource CamPreset_J = {
EVT_CALL(func_8024C570)
EVT_RETURN
EVT_END
};
EvtSource CamPreset_K = SCRIPT({
func_8024C944();
});
EvtSource CamPreset_K = {
EVT_CALL(func_8024C944)
EVT_RETURN
EVT_END
};
EvtSource CamPreset_L = SCRIPT({
func_8024CB68();
});
EvtSource CamPreset_L = {
EVT_CALL(func_8024CB68)
EVT_RETURN
EVT_END
};
EvtSource CamPreset_A = SCRIPT({
func_8024E9B0(0, 15, 0);
func_8024E748(2, 550);
func_8024E748(3, 100);
func_8024E748(4, 8);
});
EvtSource CamPreset_A = {
EVT_CALL(func_8024E9B0, 0, 15, 0)
EVT_CALL(func_8024E748, 2, 550)
EVT_CALL(func_8024E748, 3, 100)
EVT_CALL(func_8024E748, 4, 8)
EVT_RETURN
EVT_END
};
EvtSource D_80280EB8 = SCRIPT({
SetCamPerspective(CAM_BATTLE, 6, 25, 16, 1024);
SetCamViewport(CAM_BATTLE, 12, 20, 296, 200);
SetCamBGColor(CAM_BATTLE, 0, 0, 0);
SetCamEnabled(CAM_BATTLE, TRUE);
sleep 1;
InitVirtualEntityList();
InitAnimatedModels();
func_802CABE8(CAM_BATTLE, 0, 240, 100, 8);
func_802CAE50(CAM_BATTLE, -75, 35, 0);
BattleCamTargetActor(ACTOR_PLAYER);
func_8024CE9C();
});
EvtSource D_80280EB8 = {
EVT_CALL(SetCamPerspective, 1, 6, 25, 16, 1024)
EVT_CALL(SetCamViewport, 1, 12, 20, 296, 200)
EVT_CALL(SetCamBGColor, 1, 0, 0, 0)
EVT_CALL(SetCamEnabled, 1, 1)
EVT_WAIT_FRAMES(1)
EVT_CALL(InitVirtualEntityList)
EVT_CALL(InitAnimatedModels)
EVT_CALL(func_802CABE8, 1, 0, 240, 100, 8)
EVT_CALL(func_802CAE50, 1, -75, 35, 0)
EVT_CALL(BattleCamTargetActor, 0)
EVT_CALL(func_8024CE9C)
EVT_RETURN
EVT_END
};
void get_dpad_input_radial(f32* angle, f32* magnitude) {
BattleStatus* battleStatus = &gBattleStatus;

View File

@ -106,351 +106,351 @@ EvtSource N(takeTurn_8021A300);
EvtSource N(idle_802197F8);
EvtSource N(handleEvent_80219AD4);
EvtSource N(init_802197AC) = SCRIPT({
BindTakeTurn(ACTOR_SELF, N(takeTurn_8021A300));
BindIdle(ACTOR_SELF, N(idle_802197F8));
BindHandleEvent(ACTOR_SELF, N(handleEvent_80219AD4));
});
EvtSource N(init_802197AC) = {
EVT_CALL(BindTakeTurn, ACTOR_SELF, EVT_PTR(N(takeTurn_8021A300)))
EVT_CALL(BindIdle, ACTOR_SELF, EVT_PTR(N(idle_802197F8)))
EVT_CALL(BindHandleEvent, ACTOR_SELF, EVT_PTR(N(handleEvent_80219AD4)))
EVT_RETURN
EVT_END
};
EvtSource N(idle_802197F8) = SCRIPT({
10:
RandInt(80, EVT_VAR(0));
EVT_VAR(0) += 80;
loop EVT_VAR(0) {
0:
GetStatusFlags(ACTOR_SELF, EVT_VAR(1));
if (EVT_VAR(1) & 3526656) {
sleep 1;
goto 0;
}
sleep 1;
}
GetActorPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 5;
SetActorIdleSpeed(ACTOR_SELF, 1.0);
SetIdleAnimations(ACTOR_SELF, 1, N(idleAnimations_80219760));
SetIdleGoal(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
IdleRunToGoal(ACTOR_SELF, 0);
SetIdleAnimations(ACTOR_SELF, 1, N(idleAnimations_80219714));
loop 20 {
1:
GetStatusFlags(ACTOR_SELF, EVT_VAR(1));
if (EVT_VAR(1) & 3526656) {
sleep 1;
goto 1;
}
sleep 1;
}
GetActorPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) -= 5;
SetActorIdleSpeed(ACTOR_SELF, 1.0);
SetIdleAnimations(ACTOR_SELF, 1, N(idleAnimations_80219760));
SetIdleGoal(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
IdleRunToGoal(ACTOR_SELF, 0);
SetIdleAnimations(ACTOR_SELF, 1, N(idleAnimations_80219714));
loop 80 {
2:
GetStatusFlags(ACTOR_SELF, EVT_VAR(1));
if (EVT_VAR(1) & 3526656) {
sleep 1;
goto 2;
}
sleep 1;
}
goto 10;
});
EvtSource N(idle_802197F8) = {
EVT_LABEL(10)
EVT_CALL(RandInt, 80, EVT_VAR(0))
EVT_ADD(EVT_VAR(0), 80)
EVT_LOOP(EVT_VAR(0))
EVT_LABEL(0)
EVT_CALL(GetStatusFlags, ACTOR_SELF, EVT_VAR(1))
EVT_IF_FLAG(EVT_VAR(1), 0x35D000)
EVT_WAIT_FRAMES(1)
EVT_GOTO(0)
EVT_END_IF
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_CALL(GetActorPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 5)
EVT_CALL(SetActorIdleSpeed, ACTOR_SELF, EVT_FIXED(1.0))
EVT_CALL(SetIdleAnimations, ACTOR_SELF, 1, EVT_PTR(N(idleAnimations_80219760)))
EVT_CALL(SetIdleGoal, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(IdleRunToGoal, -127, 0)
EVT_CALL(SetIdleAnimations, ACTOR_SELF, 1, EVT_PTR(N(idleAnimations_80219714)))
EVT_LOOP(20)
EVT_LABEL(1)
EVT_CALL(GetStatusFlags, ACTOR_SELF, EVT_VAR(1))
EVT_IF_FLAG(EVT_VAR(1), 0x35D000)
EVT_WAIT_FRAMES(1)
EVT_GOTO(1)
EVT_END_IF
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_CALL(GetActorPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_SUB(EVT_VAR(0), 5)
EVT_CALL(SetActorIdleSpeed, ACTOR_SELF, EVT_FIXED(1.0))
EVT_CALL(SetIdleAnimations, ACTOR_SELF, 1, EVT_PTR(N(idleAnimations_80219760)))
EVT_CALL(SetIdleGoal, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(IdleRunToGoal, -127, 0)
EVT_CALL(SetIdleAnimations, ACTOR_SELF, 1, EVT_PTR(N(idleAnimations_80219714)))
EVT_LOOP(80)
EVT_LABEL(2)
EVT_CALL(GetStatusFlags, ACTOR_SELF, EVT_VAR(1))
EVT_IF_FLAG(EVT_VAR(1), 0x35D000)
EVT_WAIT_FRAMES(1)
EVT_GOTO(2)
EVT_END_IF
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_GOTO(10)
EVT_RETURN
EVT_END
};
EvtSource N(handleEvent_80219AD4) = SCRIPT({
UseIdleAnimation(ACTOR_SELF, FALSE);
EnableIdleScript(ACTOR_SELF, FALSE);
SetActorScale(ACTOR_SELF, 1.0, 1.0, 1.0);
GetLastEvent(ACTOR_SELF, EVT_VAR(0));
match EVT_VAR(0) {
EVENT_HIT_COMBO, EVENT_HIT {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_goomba_normal_pain;
await DoNormalHit;
}
== EVENT_BURN_HIT {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_goomba_normal_burn_pain;
EVT_VAR(2) = (const) NPC_ANIM_goomba_normal_burn_dead;
await DoBurnHit;
}
== EVENT_BURN_DEATH {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_goomba_normal_burn_pain;
EVT_VAR(2) = (const) NPC_ANIM_goomba_normal_burn_dead;
await DoBurnHit;
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_goomba_normal_burn_dead;
await DoDeath;
return;
}
== EVENT_SPIN_SMASH_HIT {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_goomba_normal_pain;
await DoSpinSmashHit;
}
== EVENT_SPIN_SMASH_DEATH {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_goomba_normal_pain;
await DoSpinSmashHit;
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_goomba_normal_dead;
await DoDeath;
return;
}
== EVENT_SHOCK_HIT {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_goomba_normal_electrocute;
await DoShockHit;
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_goomba_normal_pain;
await DoJumpBack;
JumpToGoal(ACTOR_SELF, 5, FALSE, TRUE, FALSE);
SetAnimationRate(ACTOR_SELF, 1, 2.0);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_goomba_normal_dizzy);
SetGoalToHome(ACTOR_SELF);
SetActorSpeed(ACTOR_SELF, 8.0);
RunToGoal(ACTOR_SELF, 0, FALSE);
SetAnimationRate(ACTOR_SELF, 1, 1.0);
sleep 5;
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_goomba_normal_idle);
SetActorJumpGravity(ACTOR_SELF, 1.6);
JumpToGoal(ACTOR_SELF, 5, FALSE, TRUE, FALSE);
}
== EVENT_SHOCK_DEATH {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_goomba_normal_electrocute;
await DoShockHit;
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_goomba_normal_dead;
await DoDeath;
return;
}
== EVENT_STAR_BEAM, 23, EVENT_IMMUNE, EVENT_AIR_LIFT_FAILED {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_goomba_normal_idle;
await DoImmune;
}
== EVENT_DEATH {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_goomba_normal_pain;
await DoNormalHit;
sleep 10;
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_goomba_normal_dead;
await DoDeath;
return;
}
== EVENT_END_FIRST_STRIKE {
SetAnimationRate(ACTOR_SELF, 1, 2.0);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_goomba_normal_run);
SetGoalToHome(ACTOR_SELF);
SetActorSpeed(ACTOR_SELF, 4.0);
RunToGoal(ACTOR_SELF, 0, FALSE);
SetAnimationRate(ACTOR_SELF, 1, 1.0);
HPBarToHome(ACTOR_SELF);
}
== EVENT_RECOVER_STATUS {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_goomba_normal_idle;
await DoRecover;
}
== EVENT_SCARE_AWAY {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_goomba_normal_run;
EVT_VAR(2) = (const) NPC_ANIM_goomba_normal_pain;
await DoScareAway;
return;
}
== EVENT_BEGIN_AIR_LIFT {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_goomba_normal_run;
await DoAirLift;
}
== EVENT_BLOW_AWAY {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_goomba_normal_pain;
await DoBlowAway;
return;
}
else {
}
}
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_goomba_normal_idle);
EnableIdleScript(ACTOR_SELF, TRUE);
UseIdleAnimation(ACTOR_SELF, TRUE);
});
EvtSource N(handleEvent_80219AD4) = {
EVT_CALL(UseIdleAnimation, ACTOR_SELF, FALSE)
EVT_CALL(EnableIdleScript, ACTOR_SELF, 0)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.0), EVT_FIXED(1.0), EVT_FIXED(1.0))
EVT_CALL(GetLastEvent, ACTOR_SELF, EVT_VAR(0))
EVT_SWITCH(EVT_VAR(0))
EVT_CASE_OR_EQ(9)
EVT_CASE_OR_EQ(10)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_goomba_normal_pain)
EVT_EXEC_WAIT(DoNormalHit)
EVT_END_CASE_GROUP
EVT_CASE_EQ(14)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_goomba_normal_burn_pain)
EVT_SET_CONST(EVT_VAR(2), NPC_ANIM_goomba_normal_burn_dead)
EVT_EXEC_WAIT(DoBurnHit)
EVT_CASE_EQ(36)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_goomba_normal_burn_pain)
EVT_SET_CONST(EVT_VAR(2), NPC_ANIM_goomba_normal_burn_dead)
EVT_EXEC_WAIT(DoBurnHit)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_goomba_normal_burn_dead)
EVT_EXEC_WAIT(DoDeath)
EVT_RETURN
EVT_CASE_EQ(11)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_goomba_normal_pain)
EVT_EXEC_WAIT(DoSpinSmashHit)
EVT_CASE_EQ(33)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_goomba_normal_pain)
EVT_EXEC_WAIT(DoSpinSmashHit)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_goomba_normal_dead)
EVT_EXEC_WAIT(DoDeath)
EVT_RETURN
EVT_CASE_EQ(47)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_goomba_normal_electrocute)
EVT_EXEC_WAIT(DoShockHit)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_goomba_normal_pain)
EVT_EXEC_WAIT(DoJumpBack)
EVT_CALL(JumpToGoal, ACTOR_SELF, 5, FALSE, TRUE, FALSE)
EVT_CALL(SetAnimationRate, ACTOR_SELF, 1, EVT_FIXED(2.0))
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_goomba_normal_dizzy)
EVT_CALL(SetGoalToHome, ACTOR_SELF)
EVT_CALL(SetActorSpeed, ACTOR_SELF, EVT_FIXED(8.0))
EVT_CALL(RunToGoal, ACTOR_SELF, 0, FALSE)
EVT_CALL(SetAnimationRate, ACTOR_SELF, 1, EVT_FIXED(1.0))
EVT_WAIT_FRAMES(5)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_goomba_normal_idle)
EVT_CALL(SetActorJumpGravity, ACTOR_SELF, EVT_FIXED(1.6))
EVT_CALL(JumpToGoal, ACTOR_SELF, 5, FALSE, TRUE, FALSE)
EVT_CASE_EQ(38)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_goomba_normal_electrocute)
EVT_EXEC_WAIT(DoShockHit)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_goomba_normal_dead)
EVT_EXEC_WAIT(DoDeath)
EVT_RETURN
EVT_CASE_EQ(19)
EVT_CASE_OR_EQ(23)
EVT_CASE_OR_EQ(25)
EVT_CASE_OR_EQ(31)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_goomba_normal_idle)
EVT_EXEC_WAIT(DoImmune)
EVT_END_CASE_GROUP
EVT_CASE_EQ(32)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_goomba_normal_pain)
EVT_EXEC_WAIT(DoNormalHit)
EVT_WAIT_FRAMES(10)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_goomba_normal_dead)
EVT_EXEC_WAIT(DoDeath)
EVT_RETURN
EVT_CASE_EQ(53)
EVT_CALL(SetAnimationRate, ACTOR_SELF, 1, EVT_FIXED(2.0))
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_goomba_normal_run)
EVT_CALL(SetGoalToHome, ACTOR_SELF)
EVT_CALL(SetActorSpeed, ACTOR_SELF, EVT_FIXED(4.0))
EVT_CALL(RunToGoal, ACTOR_SELF, 0, FALSE)
EVT_CALL(SetAnimationRate, ACTOR_SELF, 1, EVT_FIXED(1.0))
EVT_CALL(HPBarToHome, ACTOR_SELF)
EVT_CASE_EQ(49)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_goomba_normal_idle)
EVT_EXEC_WAIT(DoRecover)
EVT_CASE_EQ(57)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_goomba_normal_run)
EVT_SET_CONST(EVT_VAR(2), NPC_ANIM_goomba_normal_pain)
EVT_EXEC_WAIT(DoScareAway)
EVT_RETURN
EVT_CASE_EQ(58)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_goomba_normal_run)
EVT_EXEC_WAIT(DoAirLift)
EVT_CASE_EQ(22)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_goomba_normal_pain)
EVT_EXEC_WAIT(DoBlowAway)
EVT_RETURN
EVT_CASE_DEFAULT
EVT_END_SWITCH
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_goomba_normal_idle)
EVT_CALL(EnableIdleScript, ACTOR_SELF, 1)
EVT_CALL(UseIdleAnimation, ACTOR_SELF, TRUE)
EVT_RETURN
EVT_END
};
#include "anglestuff.inc.c"
EvtSource N(takeTurn_8021A300) = SCRIPT({
UseIdleAnimation(ACTOR_SELF, FALSE);
EnableIdleScript(ACTOR_SELF, FALSE);
SetTargetActor(ACTOR_SELF, ACTOR_PLAYER);
UseBattleCamPreset(63);
BattleCamTargetActor(ACTOR_SELF);
func_8024ECF8(-1, 1, 0);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_goomba_normal_run);
SetGoalToTarget(ACTOR_SELF);
AddGoalPos(ACTOR_SELF, 50, 0, 0);
SetActorSpeed(ACTOR_SELF, 6.0);
RunToGoal(ACTOR_SELF, 0, FALSE);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_goomba_normal_idle);
SetActorDispOffset(ACTOR_SELF, 0, -1, 0);
sleep 1;
SetActorDispOffset(ACTOR_SELF, 0, -2, 0);
sleep 5;
SetActorDispOffset(ACTOR_SELF, 0, 0, 0);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_goomba_normal_headbonk);
EnemyTestTarget(ACTOR_SELF, EVT_VAR(0), ((0)), 0, 1, 16);
match EVT_VAR(0) {
HIT_RESULT_MISS, HIT_RESULT_LUCKY {
EVT_VAR(10) = EVT_VAR(0);
SetGoalToTarget(ACTOR_SELF);
GetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) -= 10;
EVT_VAR(1) = 10;
EVT_VAR(2) += 3;
SetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
SetActorJumpGravity(ACTOR_SELF, 1.2);
spawn {
GetActorPos(ACTOR_SELF, EVT_VAR(1), EVT_VAR(2), EVT_VAR(0));
EVT_VAR(0) = 0;
loop 16 {
GetActorPos(ACTOR_SELF, EVT_VAR(4), EVT_VAR(5), EVT_VAR(6));
N(AngleCalculate)(EVT_VAR(1), EVT_VAR(2), EVT_VAR(4), EVT_VAR(5), EVT_VAR(0));
SetActorRotation(ACTOR_SELF, 0, 0, EVT_VAR(0));
EVT_VAR(1) = EVT_VAR(4);
EVT_VAR(2) = EVT_VAR(5);
EVT_VAR(3) = EVT_VAR(6);
sleep 1;
}
}
spawn {
sleep 6;
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_goomba_normal_headbonk);
}
JumpToGoal(ACTOR_SELF, 16, FALSE, TRUE, FALSE);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_goomba_normal_asleep);
SetActorScale(ACTOR_SELF, 1.1, 0.8, 1.0);
SetActorDispOffset(ACTOR_SELF, 0, 5, 0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.3, 0.5, 1.0);
SetActorDispOffset(ACTOR_SELF, 0, -2, 0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.0, 1.0, 1.0);
SetActorDispOffset(ACTOR_SELF, 0, 7, 0);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_goomba_normal_pain);
sleep 5;
if (EVT_VAR(10) == 5) {
EnemyTestTarget(ACTOR_SELF, EVT_VAR(0), ((0x80000000)), 0, 0, 0);
}
sleep 5;
SetActorDispOffset(ACTOR_SELF, 0, 0, 0);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_goomba_normal_headbonk);
SetGoalToTarget(ACTOR_SELF);
GetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 20;
EVT_VAR(1) = 0;
SetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
SetActorJumpGravity(ACTOR_SELF, 2.0);
spawn {
sleep 4;
EVT_VAR(0) = 180;
loop 4 {
EVT_VAR(0) -= 45;
SetActorRotation(ACTOR_SELF, 0, 0, EVT_VAR(0));
sleep 1;
}
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_goomba_normal_headbonk);
}
JumpToGoal(ACTOR_SELF, 15, FALSE, TRUE, FALSE);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_goomba_normal_dizzy);
sleep 5;
UseBattleCamPreset(2);
YieldTurn();
SetActorYaw(ACTOR_SELF, 180);
AddActorDecoration(ACTOR_SELF, 1, 0, 2);
SetAnimationRate(ACTOR_SELF, 1, 2.0);
SetGoalToHome(ACTOR_SELF);
SetActorSpeed(ACTOR_SELF, 8.0);
RunToGoal(ACTOR_SELF, 0, FALSE);
SetAnimationRate(ACTOR_SELF, 1, 1.0);
SetActorYaw(ACTOR_SELF, 0);
sleep 5;
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_goomba_normal_idle);
SetActorJumpGravity(ACTOR_SELF, 1.6);
JumpToGoal(ACTOR_SELF, 5, FALSE, TRUE, FALSE);
RemoveActorDecoration(ACTOR_SELF, 1, 0);
EnableIdleScript(ACTOR_SELF, TRUE);
UseIdleAnimation(ACTOR_SELF, TRUE);
return;
}
else {
SetGoalToTarget(ACTOR_SELF);
SetActorJumpGravity(ACTOR_SELF, 1.2);
spawn {
GetActorPos(ACTOR_SELF, EVT_VAR(1), EVT_VAR(2), EVT_VAR(0));
EVT_VAR(0) = 0;
loop 16 {
GetActorPos(ACTOR_SELF, EVT_VAR(4), EVT_VAR(5), EVT_VAR(6));
N(AngleCalculate)(EVT_VAR(1), EVT_VAR(2), EVT_VAR(4), EVT_VAR(5), EVT_VAR(0));
SetActorRotation(ACTOR_SELF, 0, 0, EVT_VAR(0));
EVT_VAR(1) = EVT_VAR(4);
EVT_VAR(2) = EVT_VAR(5);
EVT_VAR(3) = EVT_VAR(6);
sleep 1;
}
}
spawn {
sleep 6;
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_goomba_normal_headbonk);
}
JumpToGoal(ACTOR_SELF, 16, FALSE, TRUE, FALSE);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_goomba_normal_pre_headbonk);
SetActorScale(ACTOR_SELF, 1.1, 0.8, 1.0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.3, 0.5, 1.0);
sleep 1;
}
}
EnemyDamageTarget(ACTOR_SELF, EVT_VAR(0), ((0)), 0, 0, 1, 32);
match EVT_VAR(0) {
HIT_RESULT_HIT, 2 {
UseBattleCamPreset(2);
SetActorScale(ACTOR_SELF, 1.1, 0.8, 1.0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.0, 1.0, 1.0);
sleep 1;
SetActorRotation(ACTOR_SELF, 0, 0, 0);
SetActorDispOffset(ACTOR_SELF, 0, 0, 0);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_goomba_normal_idle);
GetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 40;
EVT_VAR(1) = 0;
SetActorJumpGravity(ACTOR_SELF, 1.8);
SetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
JumpToGoal(ACTOR_SELF, 10, FALSE, TRUE, FALSE);
EVT_VAR(0) += 30;
SetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
JumpToGoal(ACTOR_SELF, 8, FALSE, TRUE, FALSE);
EVT_VAR(0) += 20;
SetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
JumpToGoal(ACTOR_SELF, 6, FALSE, TRUE, FALSE);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_goomba_normal_idle);
sleep 3;
YieldTurn();
SetAnimationRate(ACTOR_SELF, 1, 2.0);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_goomba_normal_run);
SetGoalToHome(ACTOR_SELF);
SetActorSpeed(ACTOR_SELF, 8.0);
RunToGoal(ACTOR_SELF, 0, FALSE);
SetAnimationRate(ACTOR_SELF, 1, 1.0);
}
}
EnableIdleScript(ACTOR_SELF, TRUE);
UseIdleAnimation(ACTOR_SELF, TRUE);
});
EvtSource N(takeTurn_8021A300) = {
EVT_CALL(UseIdleAnimation, ACTOR_SELF, FALSE)
EVT_CALL(EnableIdleScript, ACTOR_SELF, 0)
EVT_CALL(SetTargetActor, ACTOR_SELF, ACTOR_PLAYER)
EVT_CALL(UseBattleCamPreset, 63)
EVT_CALL(BattleCamTargetActor, ACTOR_SELF)
EVT_CALL(func_8024ECF8, -1, 1, 0)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_goomba_normal_run)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(AddGoalPos, ACTOR_SELF, 50, 0, 0)
EVT_CALL(SetActorSpeed, ACTOR_SELF, EVT_FIXED(6.0))
EVT_CALL(RunToGoal, ACTOR_SELF, 0, FALSE)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_goomba_normal_idle)
EVT_CALL(SetActorDispOffset, ACTOR_SELF, 0, -1, 0)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorDispOffset, ACTOR_SELF, 0, -2, 0)
EVT_WAIT_FRAMES(5)
EVT_CALL(SetActorDispOffset, ACTOR_SELF, 0, 0, 0)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_goomba_normal_headbonk)
EVT_CALL(EnemyTestTarget, ACTOR_SELF, EVT_VAR(0), ((0)), 0, 1, 16)
EVT_SWITCH(EVT_VAR(0))
EVT_CASE_OR_EQ(6)
EVT_CASE_OR_EQ(5)
EVT_SET(EVT_VAR(10), EVT_VAR(0))
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(GetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_SUB(EVT_VAR(0), 10)
EVT_SET(EVT_VAR(1), 10)
EVT_ADD(EVT_VAR(2), 3)
EVT_CALL(SetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(SetActorJumpGravity, ACTOR_SELF, EVT_FIXED(1.2))
EVT_THREAD
EVT_CALL(GetActorPos, ACTOR_SELF, EVT_VAR(1), EVT_VAR(2), EVT_VAR(0))
EVT_SET(EVT_VAR(0), 0)
EVT_LOOP(16)
EVT_CALL(GetActorPos, ACTOR_SELF, EVT_VAR(4), EVT_VAR(5), EVT_VAR(6))
EVT_CALL(N(AngleCalculate), EVT_VAR(1), EVT_VAR(2), EVT_VAR(4), EVT_VAR(5), EVT_VAR(0))
EVT_CALL(SetActorRotation, ACTOR_SELF, 0, 0, EVT_VAR(0))
EVT_SET(EVT_VAR(1), EVT_VAR(4))
EVT_SET(EVT_VAR(2), EVT_VAR(5))
EVT_SET(EVT_VAR(3), EVT_VAR(6))
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_END_THREAD
EVT_THREAD
EVT_WAIT_FRAMES(6)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_goomba_normal_headbonk)
EVT_END_THREAD
EVT_CALL(JumpToGoal, ACTOR_SELF, 16, FALSE, TRUE, FALSE)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_goomba_normal_asleep)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.1), EVT_FIXED(0.8), EVT_FIXED(1.0))
EVT_CALL(SetActorDispOffset, ACTOR_SELF, 0, 5, 0)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.3), EVT_FIXED(0.5), EVT_FIXED(1.0))
EVT_CALL(SetActorDispOffset, ACTOR_SELF, 0, -2, 0)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.0), EVT_FIXED(1.0), EVT_FIXED(1.0))
EVT_CALL(SetActorDispOffset, ACTOR_SELF, 0, 7, 0)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_goomba_normal_pain)
EVT_WAIT_FRAMES(5)
EVT_IF_EQ(EVT_VAR(10), 5)
EVT_CALL(EnemyTestTarget, ACTOR_SELF, EVT_VAR(0), ((0x80000000)), 0, 0, 0)
EVT_END_IF
EVT_WAIT_FRAMES(5)
EVT_CALL(SetActorDispOffset, ACTOR_SELF, 0, 0, 0)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_goomba_normal_headbonk)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(GetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 20)
EVT_SET(EVT_VAR(1), 0)
EVT_CALL(SetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(SetActorJumpGravity, ACTOR_SELF, EVT_FIXED(2.0))
EVT_THREAD
EVT_WAIT_FRAMES(4)
EVT_SET(EVT_VAR(0), 180)
EVT_LOOP(4)
EVT_SUB(EVT_VAR(0), 45)
EVT_CALL(SetActorRotation, ACTOR_SELF, 0, 0, EVT_VAR(0))
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_goomba_normal_headbonk)
EVT_END_THREAD
EVT_CALL(JumpToGoal, ACTOR_SELF, 15, FALSE, TRUE, FALSE)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_goomba_normal_dizzy)
EVT_WAIT_FRAMES(5)
EVT_CALL(UseBattleCamPreset, 2)
EVT_CALL(YieldTurn)
EVT_CALL(SetActorYaw, ACTOR_SELF, 180)
EVT_CALL(AddActorDecoration, ACTOR_SELF, 1, 0, 2)
EVT_CALL(SetAnimationRate, ACTOR_SELF, 1, EVT_FIXED(2.0))
EVT_CALL(SetGoalToHome, ACTOR_SELF)
EVT_CALL(SetActorSpeed, ACTOR_SELF, EVT_FIXED(8.0))
EVT_CALL(RunToGoal, ACTOR_SELF, 0, FALSE)
EVT_CALL(SetAnimationRate, ACTOR_SELF, 1, EVT_FIXED(1.0))
EVT_CALL(SetActorYaw, ACTOR_SELF, 0)
EVT_WAIT_FRAMES(5)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_goomba_normal_idle)
EVT_CALL(SetActorJumpGravity, ACTOR_SELF, EVT_FIXED(1.6))
EVT_CALL(JumpToGoal, ACTOR_SELF, 5, FALSE, TRUE, FALSE)
EVT_CALL(RemoveActorDecoration, ACTOR_SELF, 1, 0)
EVT_CALL(EnableIdleScript, ACTOR_SELF, 1)
EVT_CALL(UseIdleAnimation, ACTOR_SELF, TRUE)
EVT_RETURN
EVT_END_CASE_GROUP
EVT_CASE_DEFAULT
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(SetActorJumpGravity, ACTOR_SELF, EVT_FIXED(1.2))
EVT_THREAD
EVT_CALL(GetActorPos, ACTOR_SELF, EVT_VAR(1), EVT_VAR(2), EVT_VAR(0))
EVT_SET(EVT_VAR(0), 0)
EVT_LOOP(16)
EVT_CALL(GetActorPos, ACTOR_SELF, EVT_VAR(4), EVT_VAR(5), EVT_VAR(6))
EVT_CALL(N(AngleCalculate), EVT_VAR(1), EVT_VAR(2), EVT_VAR(4), EVT_VAR(5), EVT_VAR(0))
EVT_CALL(SetActorRotation, ACTOR_SELF, 0, 0, EVT_VAR(0))
EVT_SET(EVT_VAR(1), EVT_VAR(4))
EVT_SET(EVT_VAR(2), EVT_VAR(5))
EVT_SET(EVT_VAR(3), EVT_VAR(6))
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_END_THREAD
EVT_THREAD
EVT_WAIT_FRAMES(6)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_goomba_normal_headbonk)
EVT_END_THREAD
EVT_CALL(JumpToGoal, ACTOR_SELF, 16, FALSE, TRUE, FALSE)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_goomba_normal_pre_headbonk)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.1), EVT_FIXED(0.8), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.3), EVT_FIXED(0.5), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_END_SWITCH
EVT_CALL(EnemyDamageTarget, ACTOR_SELF, EVT_VAR(0), ((0)), 0, 0, 1, 32)
EVT_SWITCH(EVT_VAR(0))
EVT_CASE_OR_EQ(0)
EVT_CASE_OR_EQ(2)
EVT_CALL(UseBattleCamPreset, 2)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.1), EVT_FIXED(0.8), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.0), EVT_FIXED(1.0), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorRotation, ACTOR_SELF, 0, 0, 0)
EVT_CALL(SetActorDispOffset, ACTOR_SELF, 0, 0, 0)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_goomba_normal_idle)
EVT_CALL(GetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 40)
EVT_SET(EVT_VAR(1), 0)
EVT_CALL(SetActorJumpGravity, ACTOR_SELF, EVT_FIXED(1.8))
EVT_CALL(SetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(JumpToGoal, ACTOR_SELF, 10, FALSE, TRUE, FALSE)
EVT_ADD(EVT_VAR(0), 30)
EVT_CALL(SetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(JumpToGoal, ACTOR_SELF, 8, FALSE, TRUE, FALSE)
EVT_ADD(EVT_VAR(0), 20)
EVT_CALL(SetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(JumpToGoal, ACTOR_SELF, 6, FALSE, TRUE, FALSE)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_goomba_normal_idle)
EVT_WAIT_FRAMES(3)
EVT_CALL(YieldTurn)
EVT_CALL(SetAnimationRate, ACTOR_SELF, 1, EVT_FIXED(2.0))
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_goomba_normal_run)
EVT_CALL(SetGoalToHome, ACTOR_SELF)
EVT_CALL(SetActorSpeed, ACTOR_SELF, EVT_FIXED(8.0))
EVT_CALL(RunToGoal, ACTOR_SELF, 0, FALSE)
EVT_CALL(SetAnimationRate, ACTOR_SELF, 1, EVT_FIXED(1.0))
EVT_END_CASE_GROUP
EVT_END_SWITCH
EVT_CALL(EnableIdleScript, ACTOR_SELF, 1)
EVT_CALL(UseIdleAnimation, ACTOR_SELF, TRUE)
EVT_RETURN
EVT_END
};

File diff suppressed because it is too large Load Diff

View File

@ -106,373 +106,372 @@ EvtSource N(takeTurn_8021BDDC);
EvtSource N(idle_8021B1B8);
EvtSource N(handleEvent_8021B494);
EvtSource N(init_8021B16C) = SCRIPT({
BindTakeTurn(ACTOR_SELF, N(takeTurn_8021BDDC));
BindIdle(ACTOR_SELF, N(idle_8021B1B8));
BindHandleEvent(ACTOR_SELF, N(handleEvent_8021B494));
});
EvtSource N(init_8021B16C) = {
EVT_CALL(BindTakeTurn, ACTOR_SELF, EVT_PTR(N(takeTurn_8021BDDC)))
EVT_CALL(BindIdle, ACTOR_SELF, EVT_PTR(N(idle_8021B1B8)))
EVT_CALL(BindHandleEvent, ACTOR_SELF, EVT_PTR(N(handleEvent_8021B494)))
EVT_RETURN
EVT_END
};
EvtSource N(idle_8021B1B8) = SCRIPT({
10:
RandInt(80, EVT_VAR(0));
EVT_VAR(0) += 80;
loop EVT_VAR(0) {
0:
GetStatusFlags(ACTOR_SELF, EVT_VAR(1));
if (EVT_VAR(1) & 3526656) {
sleep 1;
goto 0;
}
sleep 1;
}
GetActorPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 5;
SetActorIdleSpeed(ACTOR_SELF, 1.0);
SetIdleAnimations(ACTOR_SELF, 1, N(idleAnimations_8021B120));
SetIdleGoal(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
IdleRunToGoal(ACTOR_SELF, 0);
SetIdleAnimations(ACTOR_SELF, 1, N(idleAnimations_8021B0D4));
loop 20 {
1:
GetStatusFlags(ACTOR_SELF, EVT_VAR(1));
if (EVT_VAR(1) & 3526656) {
sleep 1;
goto 1;
}
sleep 1;
}
GetActorPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) -= 5;
SetActorIdleSpeed(ACTOR_SELF, 1.0);
SetIdleAnimations(ACTOR_SELF, 1, N(idleAnimations_8021B120));
SetIdleGoal(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
IdleRunToGoal(ACTOR_SELF, 0);
SetIdleAnimations(ACTOR_SELF, 1, N(idleAnimations_8021B0D4));
loop 80 {
2:
GetStatusFlags(ACTOR_SELF, EVT_VAR(1));
if (EVT_VAR(1) & 3526656) {
sleep 1;
goto 2;
}
sleep 1;
}
goto 10;
});
EvtSource N(idle_8021B1B8) = {
EVT_LABEL(10)
EVT_CALL(RandInt, 80, EVT_VAR(0))
EVT_ADD(EVT_VAR(0), 80)
EVT_LOOP(EVT_VAR(0))
EVT_LABEL(0)
EVT_CALL(GetStatusFlags, ACTOR_SELF, EVT_VAR(1))
EVT_IF_FLAG(EVT_VAR(1), 0x35D000)
EVT_WAIT_FRAMES(1)
EVT_GOTO(0)
EVT_END_IF
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_CALL(GetActorPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 5)
EVT_CALL(SetActorIdleSpeed, ACTOR_SELF, EVT_FIXED(1.0))
EVT_CALL(SetIdleAnimations, ACTOR_SELF, 1, EVT_PTR(N(idleAnimations_8021B120)))
EVT_CALL(SetIdleGoal, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(IdleRunToGoal, -127, 0)
EVT_CALL(SetIdleAnimations, ACTOR_SELF, 1, EVT_PTR(N(idleAnimations_8021B0D4)))
EVT_LOOP(20)
EVT_LABEL(1)
EVT_CALL(GetStatusFlags, ACTOR_SELF, EVT_VAR(1))
EVT_IF_FLAG(EVT_VAR(1), 0x35D000)
EVT_WAIT_FRAMES(1)
EVT_GOTO(1)
EVT_END_IF
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_CALL(GetActorPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_SUB(EVT_VAR(0), 5)
EVT_CALL(SetActorIdleSpeed, ACTOR_SELF, EVT_FIXED(1.0))
EVT_CALL(SetIdleAnimations, ACTOR_SELF, 1, EVT_PTR(N(idleAnimations_8021B120)))
EVT_CALL(SetIdleGoal, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(IdleRunToGoal, -127, 0)
EVT_CALL(SetIdleAnimations, ACTOR_SELF, 1, EVT_PTR(N(idleAnimations_8021B0D4)))
EVT_LOOP(80)
EVT_LABEL(2)
EVT_CALL(GetStatusFlags, ACTOR_SELF, EVT_VAR(1))
EVT_IF_FLAG(EVT_VAR(1), 0x35D000)
EVT_WAIT_FRAMES(1)
EVT_GOTO(2)
EVT_END_IF
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_GOTO(10)
EVT_RETURN
EVT_END
};
EvtSource N(handleEvent_8021B494) = SCRIPT({
UseIdleAnimation(ACTOR_SELF, FALSE);
EnableIdleScript(ACTOR_SELF, FALSE);
SetActorScale(ACTOR_SELF, 1.0, 1.0, 1.0);
GetLastEvent(ACTOR_SELF, EVT_VAR(0));
match EVT_VAR(0) {
EVENT_HIT_COMBO, EVENT_HIT {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_spiked_goomba_default_pain;
await DoNormalHit;
}
== EVENT_BURN_HIT {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_spiked_goomba_default_burn_dead;
EVT_VAR(2) = (const) NPC_ANIM_spiked_goomba_default_burn_pain;
await DoBurnHit;
}
== EVENT_BURN_DEATH {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_spiked_goomba_default_burn_dead;
EVT_VAR(2) = (const) NPC_ANIM_spiked_goomba_default_burn_pain;
await DoBurnHit;
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_spiked_goomba_default_burn_pain;
await DoDeath;
return;
}
== EVENT_SPIN_SMASH_HIT {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_spiked_goomba_default_pain;
await DoSpinSmashHit;
}
== EVENT_SPIN_SMASH_DEATH {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_spiked_goomba_default_pain;
await DoSpinSmashHit;
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_spiked_goomba_default_dead;
await DoDeath;
return;
}
== EVENT_SHOCK_HIT {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_spiked_goomba_default_electrocute;
await DoShockHit;
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_spiked_goomba_default_pain;
await DoJumpBack;
JumpToGoal(ACTOR_SELF, 5, FALSE, TRUE, FALSE);
SetAnimationRate(ACTOR_SELF, 1, 2.0);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_dizzy);
SetGoalToHome(ACTOR_SELF);
SetActorSpeed(ACTOR_SELF, 8.0);
RunToGoal(ACTOR_SELF, 0, FALSE);
SetAnimationRate(ACTOR_SELF, 1, 1.0);
sleep 5;
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_idle);
SetActorJumpGravity(ACTOR_SELF, 1.6);
JumpToGoal(ACTOR_SELF, 5, FALSE, TRUE, FALSE);
}
== EVENT_SHOCK_DEATH {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_spiked_goomba_default_electrocute;
await DoShockHit;
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_spiked_goomba_default_dead;
await DoDeath;
return;
}
== EVENT_STAR_BEAM, 23, EVENT_IMMUNE, EVENT_AIR_LIFT_FAILED {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_spiked_goomba_default_idle;
await DoImmune;
}
== EVENT_DEATH {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_spiked_goomba_default_pain;
await DoNormalHit;
sleep 10;
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_spiked_goomba_default_dead;
await DoDeath;
return;
}
== EVENT_END_FIRST_STRIKE {
SetAnimationRate(ACTOR_SELF, 1, 2.0);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_run);
SetGoalToHome(ACTOR_SELF);
SetActorSpeed(ACTOR_SELF, 4.0);
RunToGoal(ACTOR_SELF, 0, FALSE);
SetAnimationRate(ACTOR_SELF, 1, 1.0);
HPBarToHome(ACTOR_SELF);
}
== EVENT_RECOVER_STATUS {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_spiked_goomba_default_idle;
await DoRecover;
}
== EVENT_SCARE_AWAY {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_spiked_goomba_default_run;
EVT_VAR(2) = (const) NPC_ANIM_spiked_goomba_default_pain;
await DoScareAway;
return;
}
== EVENT_BEGIN_AIR_LIFT {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_spiked_goomba_default_run;
await DoAirLift;
}
== EVENT_BLOW_AWAY {
EVT_VAR(0) = (const) 1;
EVT_VAR(1) = (const) NPC_ANIM_spiked_goomba_default_pain;
await DoBlowAway;
return;
}
== EVENT_SPIKE_TAUNT {
GetStatusFlags(ACTOR_SELF, EVT_VAR(0));
if (EVT_VAR(0) !& 3526656) {
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_laugh);
}
sleep 10;
GetActorPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
GetStatusFlags(ACTOR_SELF, EVT_VAR(3));
if (EVT_VAR(3) & 524288) {
EVT_VAR(1) += 10;
} else {
EVT_VAR(1) += 26;
}
PlayEffect(0x1A, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 20, 0, 0, 0, 0, 0, 0, 0, 0);
sleep 20;
}
else {
}
}
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_idle);
EnableIdleScript(ACTOR_SELF, TRUE);
UseIdleAnimation(ACTOR_SELF, TRUE);
});
EvtSource N(handleEvent_8021B494) = {
EVT_CALL(UseIdleAnimation, ACTOR_SELF, FALSE)
EVT_CALL(EnableIdleScript, ACTOR_SELF, 0)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.0), EVT_FIXED(1.0), EVT_FIXED(1.0))
EVT_CALL(GetLastEvent, ACTOR_SELF, EVT_VAR(0))
EVT_SWITCH(EVT_VAR(0))
EVT_CASE_OR_EQ(9)
EVT_CASE_OR_EQ(10)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_spiked_goomba_default_pain)
EVT_EXEC_WAIT(DoNormalHit)
EVT_END_CASE_GROUP
EVT_CASE_EQ(14)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_spiked_goomba_default_burn_dead)
EVT_SET_CONST(EVT_VAR(2), NPC_ANIM_spiked_goomba_default_burn_pain)
EVT_EXEC_WAIT(DoBurnHit)
EVT_CASE_EQ(36)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_spiked_goomba_default_burn_dead)
EVT_SET_CONST(EVT_VAR(2), NPC_ANIM_spiked_goomba_default_burn_pain)
EVT_EXEC_WAIT(DoBurnHit)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_spiked_goomba_default_burn_pain)
EVT_EXEC_WAIT(DoDeath)
EVT_RETURN
EVT_CASE_EQ(11)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_spiked_goomba_default_pain)
EVT_EXEC_WAIT(DoSpinSmashHit)
EVT_CASE_EQ(33)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_spiked_goomba_default_pain)
EVT_EXEC_WAIT(DoSpinSmashHit)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_spiked_goomba_default_dead)
EVT_EXEC_WAIT(DoDeath)
EVT_RETURN
EVT_CASE_EQ(47)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_spiked_goomba_default_electrocute)
EVT_EXEC_WAIT(DoShockHit)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_spiked_goomba_default_pain)
EVT_EXEC_WAIT(DoJumpBack)
EVT_CALL(JumpToGoal, ACTOR_SELF, 5, FALSE, TRUE, FALSE)
EVT_CALL(SetAnimationRate, ACTOR_SELF, 1, EVT_FIXED(2.0))
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_dizzy)
EVT_CALL(SetGoalToHome, ACTOR_SELF)
EVT_CALL(SetActorSpeed, ACTOR_SELF, EVT_FIXED(8.0))
EVT_CALL(RunToGoal, ACTOR_SELF, 0, FALSE)
EVT_CALL(SetAnimationRate, ACTOR_SELF, 1, EVT_FIXED(1.0))
EVT_WAIT_FRAMES(5)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_idle)
EVT_CALL(SetActorJumpGravity, ACTOR_SELF, EVT_FIXED(1.6))
EVT_CALL(JumpToGoal, ACTOR_SELF, 5, FALSE, TRUE, FALSE)
EVT_CASE_EQ(38)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_spiked_goomba_default_electrocute)
EVT_EXEC_WAIT(DoShockHit)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_spiked_goomba_default_dead)
EVT_EXEC_WAIT(DoDeath)
EVT_RETURN
EVT_CASE_EQ(19)
EVT_CASE_OR_EQ(23)
EVT_CASE_OR_EQ(25)
EVT_CASE_OR_EQ(31)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_spiked_goomba_default_idle)
EVT_EXEC_WAIT(DoImmune)
EVT_END_CASE_GROUP
EVT_CASE_EQ(32)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_spiked_goomba_default_pain)
EVT_EXEC_WAIT(DoNormalHit)
EVT_WAIT_FRAMES(10)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_spiked_goomba_default_dead)
EVT_EXEC_WAIT(DoDeath)
EVT_RETURN
EVT_CASE_EQ(53)
EVT_CALL(SetAnimationRate, ACTOR_SELF, 1, EVT_FIXED(2.0))
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_run)
EVT_CALL(SetGoalToHome, ACTOR_SELF)
EVT_CALL(SetActorSpeed, ACTOR_SELF, EVT_FIXED(4.0))
EVT_CALL(RunToGoal, ACTOR_SELF, 0, FALSE)
EVT_CALL(SetAnimationRate, ACTOR_SELF, 1, EVT_FIXED(1.0))
EVT_CALL(HPBarToHome, ACTOR_SELF)
EVT_CASE_EQ(49)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_spiked_goomba_default_idle)
EVT_EXEC_WAIT(DoRecover)
EVT_CASE_EQ(57)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_spiked_goomba_default_run)
EVT_SET_CONST(EVT_VAR(2), NPC_ANIM_spiked_goomba_default_pain)
EVT_EXEC_WAIT(DoScareAway)
EVT_RETURN
EVT_CASE_EQ(58)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_spiked_goomba_default_run)
EVT_EXEC_WAIT(DoAirLift)
EVT_CASE_EQ(22)
EVT_SET_CONST(EVT_VAR(0), 0x00000001)
EVT_SET_CONST(EVT_VAR(1), NPC_ANIM_spiked_goomba_default_pain)
EVT_EXEC_WAIT(DoBlowAway)
EVT_RETURN
EVT_CASE_EQ(27)
EVT_CALL(GetStatusFlags, ACTOR_SELF, EVT_VAR(0))
EVT_IF_NOT_FLAG(EVT_VAR(0), 0x35D000)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_laugh)
EVT_END_IF
EVT_WAIT_FRAMES(10)
EVT_CALL(GetActorPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(GetStatusFlags, ACTOR_SELF, EVT_VAR(3))
EVT_IF_FLAG(EVT_VAR(3), 0x80000)
EVT_ADD(EVT_VAR(1), 10)
EVT_ELSE
EVT_ADD(EVT_VAR(1), 26)
EVT_END_IF
EVT_CALL(PlayEffect, 0x1A, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 20, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_WAIT_FRAMES(20)
EVT_CASE_DEFAULT
EVT_END_SWITCH
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_idle)
EVT_CALL(EnableIdleScript, ACTOR_SELF, 1)
EVT_CALL(UseIdleAnimation, ACTOR_SELF, TRUE)
EVT_RETURN
EVT_END
};
#include "anglestuff.inc.c"
EvtSource N(takeTurn_8021BDDC) = SCRIPT({
UseIdleAnimation(ACTOR_SELF, FALSE);
EnableIdleScript(ACTOR_SELF, FALSE);
SetTargetActor(ACTOR_SELF, ACTOR_PLAYER);
UseBattleCamPreset(63);
BattleCamTargetActor(ACTOR_SELF);
func_8024ECF8(-1, 1, 0);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_run);
SetGoalToTarget(ACTOR_SELF);
AddGoalPos(ACTOR_SELF, 50, 0, 0);
SetActorSpeed(ACTOR_SELF, 6.0);
RunToGoal(ACTOR_SELF, 0, FALSE);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_idle);
SetActorDispOffset(ACTOR_SELF, 0, -1, 0);
sleep 1;
SetActorDispOffset(ACTOR_SELF, 0, -2, 0);
sleep 5;
SetActorDispOffset(ACTOR_SELF, 0, 0, 0);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_headbonk);
EnemyTestTarget(ACTOR_SELF, EVT_VAR(0), ((0)), 0, 1, 16);
match EVT_VAR(0) {
HIT_RESULT_MISS, HIT_RESULT_LUCKY {
EVT_VAR(10) = EVT_VAR(0);
SetGoalToTarget(ACTOR_SELF);
GetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) -= 10;
EVT_VAR(1) = 10;
EVT_VAR(2) += 3;
SetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
SetActorJumpGravity(ACTOR_SELF, 1.2);
spawn {
GetActorPos(ACTOR_SELF, EVT_VAR(1), EVT_VAR(2), EVT_VAR(0));
EVT_VAR(0) = 0;
loop 16 {
GetActorPos(ACTOR_SELF, EVT_VAR(4), EVT_VAR(5), EVT_VAR(6));
N(AngleCalculate)(EVT_VAR(1), EVT_VAR(2), EVT_VAR(4), EVT_VAR(5), EVT_VAR(0));
SetActorRotation(ACTOR_SELF, 0, 0, EVT_VAR(0));
EVT_VAR(1) = EVT_VAR(4);
EVT_VAR(2) = EVT_VAR(5);
EVT_VAR(3) = EVT_VAR(6);
sleep 1;
}
}
spawn {
sleep 6;
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_headbonk);
}
JumpToGoal(ACTOR_SELF, 16, FALSE, TRUE, FALSE);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_sleep);
SetActorScale(ACTOR_SELF, 1.1, 0.8, 1.0);
SetActorDispOffset(ACTOR_SELF, 0, 5, 0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.3, 0.5, 1.0);
SetActorDispOffset(ACTOR_SELF, 0, -2, 0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.0, 1.0, 1.0);
SetActorDispOffset(ACTOR_SELF, 0, 7, 0);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_pain);
sleep 5;
if (EVT_VAR(10) == 5) {
EnemyTestTarget(ACTOR_SELF, EVT_VAR(0), ((0x80000000)), 0, 0, 0);
}
sleep 5;
SetActorDispOffset(ACTOR_SELF, 0, 0, 0);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_headbonk);
SetGoalToTarget(ACTOR_SELF);
GetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 20;
EVT_VAR(1) = 0;
SetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
SetActorJumpGravity(ACTOR_SELF, 2.0);
spawn {
sleep 4;
EVT_VAR(0) = 180;
loop 4 {
EVT_VAR(0) -= 45;
SetActorRotation(ACTOR_SELF, 0, 0, EVT_VAR(0));
sleep 1;
}
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_headbonk);
}
JumpToGoal(ACTOR_SELF, 15, FALSE, TRUE, FALSE);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_dizzy);
sleep 5;
UseBattleCamPreset(2);
YieldTurn();
SetActorYaw(ACTOR_SELF, 180);
AddActorDecoration(ACTOR_SELF, 1, 0, 2);
SetAnimationRate(ACTOR_SELF, 1, 2.0);
SetGoalToHome(ACTOR_SELF);
SetActorSpeed(ACTOR_SELF, 8.0);
RunToGoal(ACTOR_SELF, 0, FALSE);
SetAnimationRate(ACTOR_SELF, 1, 1.0);
SetActorYaw(ACTOR_SELF, 0);
sleep 5;
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_idle);
SetActorJumpGravity(ACTOR_SELF, 1.6);
JumpToGoal(ACTOR_SELF, 5, FALSE, TRUE, FALSE);
RemoveActorDecoration(ACTOR_SELF, 1, 0);
EnableIdleScript(ACTOR_SELF, TRUE);
UseIdleAnimation(ACTOR_SELF, TRUE);
return;
}
else {
SetGoalToTarget(ACTOR_SELF);
SetActorJumpGravity(ACTOR_SELF, 1.2);
spawn {
GetActorPos(ACTOR_SELF, EVT_VAR(1), EVT_VAR(2), EVT_VAR(0));
EVT_VAR(0) = 0;
loop 16 {
GetActorPos(ACTOR_SELF, EVT_VAR(4), EVT_VAR(5), EVT_VAR(6));
N(AngleCalculate)(EVT_VAR(1), EVT_VAR(2), EVT_VAR(4), EVT_VAR(5), EVT_VAR(0));
SetActorRotation(ACTOR_SELF, 0, 0, EVT_VAR(0));
EVT_VAR(1) = EVT_VAR(4);
EVT_VAR(2) = EVT_VAR(5);
EVT_VAR(3) = EVT_VAR(6);
sleep 1;
}
}
spawn {
sleep 6;
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_headbonk);
}
JumpToGoal(ACTOR_SELF, 16, FALSE, TRUE, FALSE);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_headbonk);
SetActorScale(ACTOR_SELF, 1.1, 0.8, 1.0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.3, 0.5, 1.0);
sleep 1;
}
}
EnemyDamageTarget(ACTOR_SELF, EVT_VAR(0), ((0)), 0, 0, 2, 32);
match EVT_VAR(0) {
HIT_RESULT_HIT, 2 {
UseBattleCamPreset(2);
SetActorScale(ACTOR_SELF, 1.1, 0.8, 1.0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.0, 1.0, 1.0);
sleep 1;
SetActorRotation(ACTOR_SELF, 0, 0, 0);
SetActorDispOffset(ACTOR_SELF, 0, 0, 0);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_idle);
GetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 40;
EVT_VAR(1) = 0;
SetActorJumpGravity(ACTOR_SELF, 1.8);
SetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
JumpToGoal(ACTOR_SELF, 10, FALSE, TRUE, FALSE);
EVT_VAR(0) += 30;
SetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
JumpToGoal(ACTOR_SELF, 8, FALSE, TRUE, FALSE);
EVT_VAR(0) += 20;
SetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
JumpToGoal(ACTOR_SELF, 6, FALSE, TRUE, FALSE);
GetLastDamage(0, EVT_VAR(0));
if (EVT_VAR(0) > 0) {
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_laugh);
sleep 15;
} else {
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_idle);
sleep 3;
}
YieldTurn();
SetAnimationRate(ACTOR_SELF, 1, 2.0);
SetAnimation(ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_run);
SetGoalToHome(ACTOR_SELF);
SetActorSpeed(ACTOR_SELF, 8.0);
RunToGoal(ACTOR_SELF, 0, FALSE);
SetAnimationRate(ACTOR_SELF, 1, 1.0);
}
}
EnableIdleScript(ACTOR_SELF, TRUE);
UseIdleAnimation(ACTOR_SELF, TRUE);
});
EvtSource N(takeTurn_8021BDDC) = {
EVT_CALL(UseIdleAnimation, ACTOR_SELF, FALSE)
EVT_CALL(EnableIdleScript, ACTOR_SELF, 0)
EVT_CALL(SetTargetActor, ACTOR_SELF, ACTOR_PLAYER)
EVT_CALL(UseBattleCamPreset, 63)
EVT_CALL(BattleCamTargetActor, ACTOR_SELF)
EVT_CALL(func_8024ECF8, -1, 1, 0)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_run)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(AddGoalPos, ACTOR_SELF, 50, 0, 0)
EVT_CALL(SetActorSpeed, ACTOR_SELF, EVT_FIXED(6.0))
EVT_CALL(RunToGoal, ACTOR_SELF, 0, FALSE)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_idle)
EVT_CALL(SetActorDispOffset, ACTOR_SELF, 0, -1, 0)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorDispOffset, ACTOR_SELF, 0, -2, 0)
EVT_WAIT_FRAMES(5)
EVT_CALL(SetActorDispOffset, ACTOR_SELF, 0, 0, 0)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_headbonk)
EVT_CALL(EnemyTestTarget, ACTOR_SELF, EVT_VAR(0), ((0)), 0, 1, 16)
EVT_SWITCH(EVT_VAR(0))
EVT_CASE_OR_EQ(6)
EVT_CASE_OR_EQ(5)
EVT_SET(EVT_VAR(10), EVT_VAR(0))
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(GetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_SUB(EVT_VAR(0), 10)
EVT_SET(EVT_VAR(1), 10)
EVT_ADD(EVT_VAR(2), 3)
EVT_CALL(SetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(SetActorJumpGravity, ACTOR_SELF, EVT_FIXED(1.2))
EVT_THREAD
EVT_CALL(GetActorPos, ACTOR_SELF, EVT_VAR(1), EVT_VAR(2), EVT_VAR(0))
EVT_SET(EVT_VAR(0), 0)
EVT_LOOP(16)
EVT_CALL(GetActorPos, ACTOR_SELF, EVT_VAR(4), EVT_VAR(5), EVT_VAR(6))
EVT_CALL(N(AngleCalculate), EVT_VAR(1), EVT_VAR(2), EVT_VAR(4), EVT_VAR(5), EVT_VAR(0))
EVT_CALL(SetActorRotation, ACTOR_SELF, 0, 0, EVT_VAR(0))
EVT_SET(EVT_VAR(1), EVT_VAR(4))
EVT_SET(EVT_VAR(2), EVT_VAR(5))
EVT_SET(EVT_VAR(3), EVT_VAR(6))
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_END_THREAD
EVT_THREAD
EVT_WAIT_FRAMES(6)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_headbonk)
EVT_END_THREAD
EVT_CALL(JumpToGoal, ACTOR_SELF, 16, FALSE, TRUE, FALSE)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_sleep)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.1), EVT_FIXED(0.8), EVT_FIXED(1.0))
EVT_CALL(SetActorDispOffset, ACTOR_SELF, 0, 5, 0)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.3), EVT_FIXED(0.5), EVT_FIXED(1.0))
EVT_CALL(SetActorDispOffset, ACTOR_SELF, 0, -2, 0)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.0), EVT_FIXED(1.0), EVT_FIXED(1.0))
EVT_CALL(SetActorDispOffset, ACTOR_SELF, 0, 7, 0)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_pain)
EVT_WAIT_FRAMES(5)
EVT_IF_EQ(EVT_VAR(10), 5)
EVT_CALL(EnemyTestTarget, ACTOR_SELF, EVT_VAR(0), ((0x80000000)), 0, 0, 0)
EVT_END_IF
EVT_WAIT_FRAMES(5)
EVT_CALL(SetActorDispOffset, ACTOR_SELF, 0, 0, 0)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_headbonk)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(GetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 20)
EVT_SET(EVT_VAR(1), 0)
EVT_CALL(SetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(SetActorJumpGravity, ACTOR_SELF, EVT_FIXED(2.0))
EVT_THREAD
EVT_WAIT_FRAMES(4)
EVT_SET(EVT_VAR(0), 180)
EVT_LOOP(4)
EVT_SUB(EVT_VAR(0), 45)
EVT_CALL(SetActorRotation, ACTOR_SELF, 0, 0, EVT_VAR(0))
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_headbonk)
EVT_END_THREAD
EVT_CALL(JumpToGoal, ACTOR_SELF, 15, FALSE, TRUE, FALSE)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_dizzy)
EVT_WAIT_FRAMES(5)
EVT_CALL(UseBattleCamPreset, 2)
EVT_CALL(YieldTurn)
EVT_CALL(SetActorYaw, ACTOR_SELF, 180)
EVT_CALL(AddActorDecoration, ACTOR_SELF, 1, 0, 2)
EVT_CALL(SetAnimationRate, ACTOR_SELF, 1, EVT_FIXED(2.0))
EVT_CALL(SetGoalToHome, ACTOR_SELF)
EVT_CALL(SetActorSpeed, ACTOR_SELF, EVT_FIXED(8.0))
EVT_CALL(RunToGoal, ACTOR_SELF, 0, FALSE)
EVT_CALL(SetAnimationRate, ACTOR_SELF, 1, EVT_FIXED(1.0))
EVT_CALL(SetActorYaw, ACTOR_SELF, 0)
EVT_WAIT_FRAMES(5)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_idle)
EVT_CALL(SetActorJumpGravity, ACTOR_SELF, EVT_FIXED(1.6))
EVT_CALL(JumpToGoal, ACTOR_SELF, 5, FALSE, TRUE, FALSE)
EVT_CALL(RemoveActorDecoration, ACTOR_SELF, 1, 0)
EVT_CALL(EnableIdleScript, ACTOR_SELF, 1)
EVT_CALL(UseIdleAnimation, ACTOR_SELF, TRUE)
EVT_RETURN
EVT_END_CASE_GROUP
EVT_CASE_DEFAULT
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(SetActorJumpGravity, ACTOR_SELF, EVT_FIXED(1.2))
EVT_THREAD
EVT_CALL(GetActorPos, ACTOR_SELF, EVT_VAR(1), EVT_VAR(2), EVT_VAR(0))
EVT_SET(EVT_VAR(0), 0)
EVT_LOOP(16)
EVT_CALL(GetActorPos, ACTOR_SELF, EVT_VAR(4), EVT_VAR(5), EVT_VAR(6))
EVT_CALL(N(AngleCalculate), EVT_VAR(1), EVT_VAR(2), EVT_VAR(4), EVT_VAR(5), EVT_VAR(0))
EVT_CALL(SetActorRotation, ACTOR_SELF, 0, 0, EVT_VAR(0))
EVT_SET(EVT_VAR(1), EVT_VAR(4))
EVT_SET(EVT_VAR(2), EVT_VAR(5))
EVT_SET(EVT_VAR(3), EVT_VAR(6))
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_END_THREAD
EVT_THREAD
EVT_WAIT_FRAMES(6)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_headbonk)
EVT_END_THREAD
EVT_CALL(JumpToGoal, ACTOR_SELF, 16, FALSE, TRUE, FALSE)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_headbonk)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.1), EVT_FIXED(0.8), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.3), EVT_FIXED(0.5), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_END_SWITCH
EVT_CALL(EnemyDamageTarget, ACTOR_SELF, EVT_VAR(0), ((0)), 0, 0, 2, 32)
EVT_SWITCH(EVT_VAR(0))
EVT_CASE_OR_EQ(0)
EVT_CASE_OR_EQ(2)
EVT_CALL(UseBattleCamPreset, 2)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.1), EVT_FIXED(0.8), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.0), EVT_FIXED(1.0), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorRotation, ACTOR_SELF, 0, 0, 0)
EVT_CALL(SetActorDispOffset, ACTOR_SELF, 0, 0, 0)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_idle)
EVT_CALL(GetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 40)
EVT_SET(EVT_VAR(1), 0)
EVT_CALL(SetActorJumpGravity, ACTOR_SELF, EVT_FIXED(1.8))
EVT_CALL(SetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(JumpToGoal, ACTOR_SELF, 10, FALSE, TRUE, FALSE)
EVT_ADD(EVT_VAR(0), 30)
EVT_CALL(SetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(JumpToGoal, ACTOR_SELF, 8, FALSE, TRUE, FALSE)
EVT_ADD(EVT_VAR(0), 20)
EVT_CALL(SetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(JumpToGoal, ACTOR_SELF, 6, FALSE, TRUE, FALSE)
EVT_CALL(GetLastDamage, 0, EVT_VAR(0))
EVT_IF_GT(EVT_VAR(0), 0)
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_laugh)
EVT_WAIT_FRAMES(15)
EVT_ELSE
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_idle)
EVT_WAIT_FRAMES(3)
EVT_END_IF
EVT_CALL(YieldTurn)
EVT_CALL(SetAnimationRate, ACTOR_SELF, 1, EVT_FIXED(2.0))
EVT_CALL(SetAnimation, ACTOR_SELF, 1, NPC_ANIM_spiked_goomba_default_run)
EVT_CALL(SetGoalToHome, ACTOR_SELF)
EVT_CALL(SetActorSpeed, ACTOR_SELF, EVT_FIXED(8.0))
EVT_CALL(RunToGoal, ACTOR_SELF, 0, FALSE)
EVT_CALL(SetAnimationRate, ACTOR_SELF, 1, EVT_FIXED(1.0))
EVT_END_CASE_GROUP
EVT_END_SWITCH
EVT_CALL(EnableIdleScript, ACTOR_SELF, 1)
EVT_CALL(UseIdleAnimation, ACTOR_SELF, TRUE)
EVT_RETURN
EVT_END
};

View File

@ -1,59 +1,65 @@
#include "common/UnkAngleFunc2.inc.c"
EvtSource N(clouds1) = SCRIPT({
EVT_VAR(10) = EVT_VAR(0);
EVT_VAR(7) = EVT_VAR(2);
EVT_VAR(7) *= 10;
0:
EVT_VAR(7) += 4;
if (EVT_VAR(7) > 3599) {
EVT_VAR(7) -= 3600;
}
N(UnkAngleFunc2)(EVT_VAR(7), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3));
TranslateModel(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
RotateModel(EVT_VAR(10), EVT_VAR(3), 0, 1, 0);
sleep 1;
goto 0;
});
EvtSource N(clouds1) = {
EVT_SET(EVT_VAR(10), EVT_VAR(0))
EVT_SET(EVT_VAR(7), EVT_VAR(2))
EVT_MUL(EVT_VAR(7), 10)
EVT_LABEL(0)
EVT_ADD(EVT_VAR(7), 4)
EVT_IF_GT(EVT_VAR(7), 3599)
EVT_SUB(EVT_VAR(7), 3600)
EVT_END_IF
EVT_CALL(N(UnkAngleFunc2), EVT_VAR(7), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3))
EVT_CALL(TranslateModel, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(RotateModel, EVT_VAR(10), EVT_VAR(3), 0, 1, 0)
EVT_WAIT_FRAMES(1)
EVT_GOTO(0)
EVT_RETURN
EVT_END
};
EvtSource N(clouds2) = SCRIPT({
EVT_VAR(10) = EVT_VAR(0);
EVT_VAR(11) = EVT_VAR(3);
EVT_VAR(12) = EVT_VAR(4);
EVT_VAR(7) = EVT_VAR(2);
EVT_VAR(7) *= 10;
0:
EVT_VAR(7) += 4;
if (EVT_VAR(7) > 3599) {
EVT_VAR(7) -= 3600;
}
N(UnkAngleFunc2)(EVT_VAR(7), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3));
EVT_VAR(1) += (float) EVT_VAR(11);
EVT_VAR(2) += (float) EVT_VAR(12);
TranslateModel(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
RotateModel(EVT_VAR(10), EVT_VAR(3), 0, 1, 0);
sleep 1;
goto 0;
});
EvtSource N(clouds2) = {
EVT_SET(EVT_VAR(10), EVT_VAR(0))
EVT_SET(EVT_VAR(11), EVT_VAR(3))
EVT_SET(EVT_VAR(12), EVT_VAR(4))
EVT_SET(EVT_VAR(7), EVT_VAR(2))
EVT_MUL(EVT_VAR(7), 10)
EVT_LABEL(0)
EVT_ADD(EVT_VAR(7), 4)
EVT_IF_GT(EVT_VAR(7), 3599)
EVT_SUB(EVT_VAR(7), 3600)
EVT_END_IF
EVT_CALL(N(UnkAngleFunc2), EVT_VAR(7), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3))
EVT_ADDF(EVT_VAR(1), EVT_VAR(11))
EVT_ADDF(EVT_VAR(2), EVT_VAR(12))
EVT_CALL(TranslateModel, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(RotateModel, EVT_VAR(10), EVT_VAR(3), 0, 1, 0)
EVT_WAIT_FRAMES(1)
EVT_GOTO(0)
EVT_RETURN
EVT_END
};
EvtSource N(clouds3) = SCRIPT({
EVT_VAR(10) = EVT_VAR(0);
EVT_VAR(11) = EVT_VAR(3);
EVT_VAR(12) = EVT_VAR(4);
EVT_VAR(13) = EVT_VAR(5);
EVT_VAR(7) = EVT_VAR(2);
EVT_VAR(7) *= 10;
0:
EVT_VAR(7) += 4;
if (EVT_VAR(7) > 3599) {
EVT_VAR(7) -= 3600;
}
N(UnkAngleFunc2)(EVT_VAR(7), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3));
EVT_VAR(0) += (float) EVT_VAR(11);
EVT_VAR(1) += (float) EVT_VAR(12);
EVT_VAR(2) += (float) EVT_VAR(13);
TranslateModel(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
RotateModel(EVT_VAR(10), EVT_VAR(3), 0, 1, 0);
sleep 1;
goto 0;
});
EvtSource N(clouds3) = {
EVT_SET(EVT_VAR(10), EVT_VAR(0))
EVT_SET(EVT_VAR(11), EVT_VAR(3))
EVT_SET(EVT_VAR(12), EVT_VAR(4))
EVT_SET(EVT_VAR(13), EVT_VAR(5))
EVT_SET(EVT_VAR(7), EVT_VAR(2))
EVT_MUL(EVT_VAR(7), 10)
EVT_LABEL(0)
EVT_ADD(EVT_VAR(7), 4)
EVT_IF_GT(EVT_VAR(7), 3599)
EVT_SUB(EVT_VAR(7), 3600)
EVT_END_IF
EVT_CALL(N(UnkAngleFunc2), EVT_VAR(7), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3))
EVT_ADDF(EVT_VAR(0), EVT_VAR(11))
EVT_ADDF(EVT_VAR(1), EVT_VAR(12))
EVT_ADDF(EVT_VAR(2), EVT_VAR(13))
EVT_CALL(TranslateModel, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(RotateModel, EVT_VAR(10), EVT_VAR(3), 0, 1, 0)
EVT_WAIT_FRAMES(1)
EVT_GOTO(0)
EVT_RETURN
EVT_END
};

View File

@ -3,12 +3,16 @@
#define NAMESPACE b_area_kmr_part_1_kmr_02
EvtSource N(beforeBattle_8021FDA0) = SCRIPT({
SetSpriteShading(-1);
});
EvtSource N(beforeBattle_8021FDA0) = {
EVT_CALL(SetSpriteShading, -1)
EVT_RETURN
EVT_END
};
EvtSource N(afterBattle_8021FDC0) = SCRIPT({
});
EvtSource N(afterBattle_8021FDC0) = {
EVT_RETURN
EVT_END
};
Stage NAMESPACE = {
.texture = "kmr_tex",

View File

@ -5,20 +5,22 @@
#include "clouds.inc.c"
EvtSource N(beforeBattle_80220188) = SCRIPT({
SetSpriteShading(-1);
EvtSource N(beforeBattle_80220188) = {
EVT_CALL(SetSpriteShading, -1)
EVT_SET(EVT_VAR(0), 1)
EVT_SET(EVT_VAR(2), 0)
EVT_EXEC(N(clouds1))
EVT_SET(EVT_VAR(0), 4)
EVT_SET(EVT_VAR(2), 70)
EVT_EXEC(N(clouds1))
EVT_RETURN
EVT_END
};
EVT_VAR(0) = 1; // model
EVT_VAR(2) = 0; // speed
spawn N(clouds1);
EVT_VAR(0) = 4;
EVT_VAR(2) = 70;
spawn N(clouds1);
});
EvtSource N(afterBattle_80220200) = SCRIPT({
});
EvtSource N(afterBattle_80220200) = {
EVT_RETURN
EVT_END
};
s32 N(foregroundModelList_80220210)[] = {
0x00000027, 0x0000002B, 0x00000000,

View File

@ -5,21 +5,22 @@
#include "clouds.inc.c"
EvtSource N(beforeBattle_802205D8) = SCRIPT({
SetSpriteShading(-1);
EvtSource N(beforeBattle_802205D8) = {
EVT_CALL(SetSpriteShading, -1)
EVT_SET(EVT_VAR(0), 1)
EVT_SET(EVT_VAR(2), 0)
EVT_EXEC(N(clouds1))
EVT_SET(EVT_VAR(0), 4)
EVT_SET(EVT_VAR(2), 70)
EVT_EXEC(N(clouds1))
EVT_RETURN
EVT_END
};
EVT_VAR(0) = 1;
EVT_VAR(2) = 0;
spawn N(clouds1);
EVT_VAR(0) = 4;
EVT_VAR(2) = 70;
spawn N(clouds1);
});
EvtSource N(afterBattle_80220650) = SCRIPT({
});
EvtSource N(afterBattle_80220650) = {
EVT_RETURN
EVT_END
};
s32 N(foregroundModelList_80220660)[] = {
0x00000024, 0x00000020, 0x00000000,

View File

@ -5,14 +5,17 @@
#include "clouds.inc.c"
EvtSource N(beforeBattle_80220A28) = SCRIPT({
SetSpriteShading(-1);
EnableModel(27, 0);
});
EvtSource N(beforeBattle_80220A28) = {
EVT_CALL(SetSpriteShading, -1)
EVT_CALL(EnableModel, 27, 0)
EVT_RETURN
EVT_END
};
EvtSource N(afterBattle_80220A5C) = SCRIPT({
});
EvtSource N(afterBattle_80220A5C) = {
EVT_RETURN
EVT_END
};
s32 N(foregroundModelList_80220A6C)[] = {
0x00000020, 0x00000024, 0x00000000,

View File

@ -6,23 +6,23 @@
#include "clouds.inc.c"
#include "common/UnkFogFunc.inc.c"
EvtSource N(beforeBattle_80220E28) = SCRIPT({
SetSpriteShading(-1);
EvtSource N(beforeBattle_80220E28) = {
EVT_CALL(SetSpriteShading, -1)
EVT_CALL(N(UnkFogFunc))
EVT_SET(EVT_VAR(0), 1)
EVT_SET(EVT_VAR(2), 0)
EVT_EXEC(N(clouds1))
EVT_SET(EVT_VAR(0), 4)
EVT_SET(EVT_VAR(2), 70)
EVT_EXEC(N(clouds1))
EVT_RETURN
EVT_END
};
N(UnkFogFunc)();
EVT_VAR(0) = 1;
EVT_VAR(2) = 0;
spawn N(clouds1);
EVT_VAR(0) = 4;
EVT_VAR(2) = 70;
spawn N(clouds1);
});
EvtSource N(afterBattle_80220EAC) = SCRIPT({
});
EvtSource N(afterBattle_80220EAC) = {
EVT_RETURN
EVT_END
};
s32 N(foregroundModelList_80220EBC)[] = {
0x0000001D, 0x00000022, 0x00000021, 0x00000000,

View File

@ -1,107 +1,103 @@
#include "common.h"
/// Provide arg `TRUE` on `EVT_VAR(1)` to disable refunding.
EvtSource N(UseItemWithEffect) = SCRIPT({
if (EVT_VAR(1) == 0) {
UseBattleCamPreset(69); // Nice
sleep 10;
EvtSource N(UseItemWithEffect) = {
EVT_IF_EQ(EVT_VAR(1), 0)
EVT_CALL(UseBattleCamPreset, 69)
EVT_WAIT_FRAMES(10)
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_208D)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_GOT_ITEM)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 18)
EVT_CALL(SetActorSpeed, ACTOR_PLAYER, EVT_FIXED(4.0))
EVT_CALL(SetGoalPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(PlayerRunToGoal, 0)
EVT_ADD(EVT_VAR(1), 45)
EVT_SET(EVT_VAR(3), EVT_VAR(1))
EVT_ADD(EVT_VAR(3), 10)
EVT_ADD(EVT_VAR(3), 2)
EVT_CALL(PlayEffect, 0x33, 1, EVT_VAR(0), EVT_VAR(3), EVT_VAR(2), EVT_FIXED(1.0), 30, 0, 0, 0, 0, 0, 0, 0)
EVT_CALL(MakeItemEntity, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1, 0)
EVT_SET(EVT_VAR(10), EVT_VAR(0))
EVT_CALL(N(GiveRefund))
EVT_WAIT_FRAMES(EVT_VAR(0))
EVT_WAIT_FRAMES(15)
EVT_CALL(N(GiveRefundCleanup))
EVT_CALL(RemoveItemEntity, EVT_VAR(10))
EVT_ELSE
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_208D)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_GOT_ITEM)
EVT_WAIT_FRAMES(4)
EVT_ADD(EVT_VAR(1), 45)
EVT_SET(EVT_VAR(3), EVT_VAR(1))
EVT_ADD(EVT_VAR(3), 10)
EVT_ADD(EVT_VAR(3), 2)
EVT_CALL(PlayEffect, 0x33, 1, EVT_VAR(0), EVT_VAR(3), EVT_VAR(2), EVT_FIXED(1.0), 30, 0, 0, 0, 0, 0, 0, 0)
EVT_CALL(MakeItemEntity, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1, 0)
EVT_SET(EVT_VAR(10), EVT_VAR(0))
EVT_WAIT_FRAMES(15)
EVT_CALL(RemoveItemEntity, EVT_VAR(10))
EVT_END_IF
EVT_RETURN
EVT_END
};
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_208D);
SetAnimation(ACTOR_PLAYER, 0, ANIM_GOT_ITEM);
GetActorPos(ACTOR_PLAYER, $x, $y, $z);
$x += 18;
SetActorSpeed(ACTOR_PLAYER, 4.0);
SetGoalPos(ACTOR_PLAYER, $x, $y, $z);
PlayerRunToGoal(ACTOR_PLAYER);
EvtSource N(UseItem) = {
EVT_CALL(UseBattleCamPreset, 19)
EVT_CALL(SetBattleCamTarget, -85, 1, 0)
EVT_CALL(SetBattleCamOffsetZ, 41)
EVT_CALL(SetBattleCamZoom, 248)
EVT_CALL(MoveBattleCamOver, 30)
EVT_WAIT_FRAMES(10)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_GOT_ITEM)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 45)
EVT_CALL(MakeItemEntity, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1, 0)
EVT_SET(EVT_VAR(14), EVT_VAR(0))
EVT_CALL(N(GiveRefund))
EVT_WAIT_FRAMES(EVT_VAR(0))
EVT_WAIT_FRAMES(15)
EVT_CALL(N(GiveRefundCleanup))
EVT_CALL(RemoveItemEntity, EVT_VAR(14))
EVT_RETURN
EVT_END
};
$y += 45;
$effectY = $y;
$effectY += 10;
$effectY += 2;
PlayEffect(0x33, 1, $x, $effectY, $z, 1.0, 30, 0, 0, 0, 0, 0, 0, 0);
MakeItemEntity(EVT_VAR(10), $x, $y, $z, 1, 0);
EVT_VAR(10) = $x;
EvtSource N(PlayerGoHome) = {
EVT_CALL(UseIdleAnimation, ACTOR_PLAYER, FALSE)
EVT_CALL(SetGoalToHome, ACTOR_PLAYER)
EVT_CALL(SetActorSpeed, ACTOR_PLAYER, EVT_FIXED(8.0))
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_RUNNING)
EVT_CALL(PlayerRunToGoal, 0)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_CALL(UseIdleAnimation, ACTOR_PLAYER, TRUE)
EVT_RETURN
EVT_END
};
N(GiveRefund)();
sleep $x;
EvtSource N(EatItem) = {
EVT_THREAD
EVT_LOOP(4)
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_2095)
EVT_WAIT_FRAMES(10)
EVT_END_LOOP
EVT_END_THREAD
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_EAT)
EVT_WAIT_FRAMES(45)
EVT_RETURN
EVT_END
};
sleep 15;
N(GiveRefundCleanup)();
RemoveItemEntity(EVT_VAR(10));
} else {
// No refund.
GetActorPos(ACTOR_PLAYER, $x, $y, $z);
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_208D);
SetAnimation(ACTOR_PLAYER, 0, ANIM_GOT_ITEM);
sleep 4;
$y += 45;
$effectY = $y;
$effectY += 10;
$effectY += 2;
PlayEffect(0x33, 1, $x, $effectY, $z, 1.0, 30, 0, 0, 0, 0, 0, 0, 0);
MakeItemEntity(EVT_VAR(10), $x, $y, $z, 1, 0);
EVT_VAR(10) = $x;
sleep 15;
RemoveItemEntity(EVT_VAR(10));
}
});
EvtSource N(UseItem) = SCRIPT({
UseBattleCamPreset(19);
SetBattleCamTarget(-85, 1, 0);
SetBattleCamOffsetZ(41);
SetBattleCamZoom(248);
MoveBattleCamOver(30);
sleep 10;
SetAnimation(ACTOR_PLAYER, 0, ANIM_GOT_ITEM);
GetActorPos(ACTOR_PLAYER, $x, $y, $z);
$y += 45;
MakeItemEntity(EVT_VAR(10), $x, $y, $z, 1, 0);
EVT_VAR(14) = $x;
N(GiveRefund)();
sleep $x;
sleep 15;
N(GiveRefundCleanup)();
RemoveItemEntity(EVT_VAR(14));
});
EvtSource N(PlayerGoHome) = SCRIPT({
UseIdleAnimation(ACTOR_PLAYER, 0);
SetGoalToHome(ACTOR_PLAYER);
SetActorSpeed(ACTOR_PLAYER, 8.0);
SetAnimation(ACTOR_PLAYER, 0, ANIM_RUNNING);
PlayerRunToGoal(ACTOR_PLAYER);
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
UseIdleAnimation(ACTOR_PLAYER, 1);
});
EvtSource N(EatItem) = SCRIPT({
spawn {
loop 4 {
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_2095);
sleep 10;
}
}
SetAnimation(ACTOR_PLAYER, 0, ANIM_EAT);
sleep 45;
});
EvtSource N(DrinkItem) = SCRIPT({
spawn {
loop 4 {
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_2095);
sleep 10;
}
}
SetAnimation(ACTOR_PLAYER, 0, ANIM_DRINK);
sleep 45;
});
EvtSource N(DrinkItem) = {
EVT_THREAD
EVT_LOOP(4)
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_2095)
EVT_WAIT_FRAMES(10)
EVT_END_LOOP
EVT_END_THREAD
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_DRINK)
EVT_WAIT_FRAMES(45)
EVT_RETURN
EVT_END
};

View File

@ -45,61 +45,49 @@ s32 N(modelCommandList)[] = {
0x00000004, 0x0000000D, 0x00000001, sizeof(N(displayList)) / sizeof(s32), &N(displayList), 0x00000002, 0x00000000,
};
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_COCONUT;
await N(UseItemWithEffect);
UseBattleCamPreset(3);
MoveBattleCamOver(15);
SetAnimation(ACTOR_PLAYER, 0, ANIM_THROW);
PlaySound(SOUND_THROW);
sleep 3;
CreateVirtualEntity(EVT_VAR(10), N(modelCommandList));
$x = 1.0;
MultiplyByActorScale($x);
SetVirtualEntityScale(EVT_VAR(10), $x, $x, $x);
GetActorPos(ACTOR_PLAYER, $x, $y, $z);
EVT_VAR(3) = 20;
EVT_VAR(4) = 42;
EVT_VAR(5) = 5;
MultiplyVec3ByActorScale(EVT_VAR(3), EVT_VAR(4), EVT_VAR(5));
$x += EVT_VAR(3);
$y += EVT_VAR(4);
$z += EVT_VAR(5);
SetVirtualEntityPosition(EVT_VAR(10), $x, $y, $z);
InitTargetIterator();
SetGoalToTarget(ACTOR_SELF);
GetGoalPos(ACTOR_SELF, $x, $y, $z);
spawn {
$x = 0;
loop 18 {
$x += -60;
SetVirtualEntityRotation(EVT_VAR(10), 0, 0, $x);
sleep 1;
}
}
SetVirtualEntityJumpGravity(EVT_VAR(10), 0.8);
$z += 5;
VirtualEntityJumpTo(EVT_VAR(10), $x, $y, $z, 18);
GetItemPower(ITEM_COCONUT, $damage, EVT_VAR(4));
ApplyShrinkFromOwner($damage);
ItemDamageEnemy(EVT_VAR(9), 0x18000000, 0, $damage, 32);
// Bounce off
$x += 60;
$y += 0;
VirtualEntityJumpTo(EVT_VAR(10), $x, $y, $z, 16);
DeleteVirtualEntity(EVT_VAR(10));
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x000000AC)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_CALL(UseBattleCamPreset, 3)
EVT_CALL(MoveBattleCamOver, 15)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_THROW)
EVT_CALL(PlaySound, SOUND_THROW)
EVT_WAIT_FRAMES(3)
EVT_CALL(CreateVirtualEntity, EVT_VAR(10), EVT_PTR(N(modelCommandList)))
EVT_SETF(EVT_VAR(0), EVT_FIXED(1.0))
EVT_CALL(MultiplyByActorScale, EVT_VAR(0))
EVT_CALL(SetVirtualEntityScale, EVT_VAR(10), EVT_VAR(0), EVT_VAR(0), EVT_VAR(0))
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_SET(EVT_VAR(3), 20)
EVT_SET(EVT_VAR(4), 42)
EVT_SET(EVT_VAR(5), 5)
EVT_CALL(MultiplyVec3ByActorScale, EVT_VAR(3), EVT_VAR(4), EVT_VAR(5))
EVT_ADD(EVT_VAR(0), EVT_VAR(3))
EVT_ADD(EVT_VAR(1), EVT_VAR(4))
EVT_ADD(EVT_VAR(2), EVT_VAR(5))
EVT_CALL(SetVirtualEntityPosition, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(InitTargetIterator)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(GetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_THREAD
EVT_SET(EVT_VAR(0), 0)
EVT_LOOP(18)
EVT_ADD(EVT_VAR(0), -60)
EVT_CALL(SetVirtualEntityRotation, EVT_VAR(10), 0, 0, EVT_VAR(0))
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_END_THREAD
EVT_CALL(SetVirtualEntityJumpGravity, EVT_VAR(10), EVT_FIXED(0.8))
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(VirtualEntityJumpTo, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 18)
EVT_CALL(GetItemPower, ITEM_COCONUT, EVT_VAR(3), EVT_VAR(4))
EVT_CALL(ApplyShrinkFromOwner, EVT_VAR(3))
EVT_CALL(ItemDamageEnemy, EVT_VAR(9), 402653184, 0, EVT_VAR(3), 32)
EVT_ADD(EVT_VAR(0), 60)
EVT_ADD(EVT_VAR(1), 0)
EVT_CALL(VirtualEntityJumpTo, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 16)
EVT_CALL(DeleteVirtualEntity, EVT_VAR(10))
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_RETURN
EVT_END
};

View File

@ -45,52 +45,54 @@ ApiStatus N(func_802A1270_727B80)(Evt* script, s32 isInitialCall) {
#include "UseItem.inc.c"
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_DIZZY_DIAL;
await N(UseItemWithEffect);
UseBattleCamPreset(2);
MoveBattleCamOver(20);
sleep 10;
spawn {
sleep 5;
AddBattleCamZoom(0xFFFFFF06);
MoveBattleCamOver(80);
func_8024ECF8(0, 0, 1);
sleep 80;
AddBattleCamZoom(250);
MoveBattleCamOver(3);
func_8024ECF8(0, 0, 1);
}
N(func_802A1270_727B80)();
spawn {
StartRumble(8);
ShakeCam(1, 0, 2, 1.0);
ShakeCam(1, 0, 2, 4.0);
ShakeCam(1, 0, 2, 3.0);
ShakeCam(1, 0, 2, 2.0);
ShakeCam(1, 0, 2, 1.0);
ShakeCam(1, 0, 2, 0.5);
sleep 10;
UseBattleCamPreset(3);
MoveBattleCamOver(10);
func_8024ECF8(0, 0, 0);
}
InitTargetIterator();
0:
SetGoalToTarget(ACTOR_SELF);
ItemCheckHit(EVT_VAR(0), 0x10000000, 0, EVT_VAR(0), 0);
if (EVT_VAR(0) == 6) {
goto 1;
}
GetItemPower(ITEM_DIZZY_DIAL, EVT_VAR(0), EVT_VAR(1));
MakeStatusField(EVT_VAR(0), 0x40000, 100, EVT_VAR(0));
func_80252B3C(EVT_VAR(0), 0x50000000, EVT_VAR(0), 0, 32);
1:
sleep 5;
ChooseNextTarget(0, EVT_VAR(0));
if (EVT_VAR(0) != -1) {
goto 0;
}
sleep 30;
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x0000009A)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_CALL(UseBattleCamPreset, 2)
EVT_CALL(MoveBattleCamOver, 20)
EVT_WAIT_FRAMES(10)
EVT_THREAD
EVT_WAIT_FRAMES(5)
EVT_CALL(AddBattleCamZoom, -250)
EVT_CALL(MoveBattleCamOver, 80)
EVT_CALL(func_8024ECF8, 0, 0, 1)
EVT_WAIT_FRAMES(80)
EVT_CALL(AddBattleCamZoom, 250)
EVT_CALL(MoveBattleCamOver, 3)
EVT_CALL(func_8024ECF8, 0, 0, 1)
EVT_END_THREAD
EVT_CALL(N(func_802A1270_727B80))
EVT_THREAD
EVT_CALL(StartRumble, 8)
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(1.0))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(4.0))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(3.0))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(2.0))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(1.0))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(0.5))
EVT_WAIT_FRAMES(10)
EVT_CALL(UseBattleCamPreset, 3)
EVT_CALL(MoveBattleCamOver, 10)
EVT_CALL(func_8024ECF8, 0, 0, 0)
EVT_END_THREAD
EVT_CALL(InitTargetIterator)
EVT_LABEL(0)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(ItemCheckHit, EVT_VAR(0), 268435456, 0, EVT_VAR(0), 0)
EVT_IF_EQ(EVT_VAR(0), 6)
EVT_GOTO(1)
EVT_END_IF
EVT_CALL(GetItemPower, ITEM_DIZZY_DIAL, EVT_VAR(0), EVT_VAR(1))
EVT_CALL(MakeStatusField, EVT_VAR(0), 262144, 100, EVT_VAR(0))
EVT_CALL(func_80252B3C, EVT_VAR(0), 1342177280, EVT_VAR(0), 0, 32)
EVT_LABEL(1)
EVT_WAIT_FRAMES(5)
EVT_CALL(ChooseNextTarget, 0, EVT_VAR(0))
EVT_IF_NE(EVT_VAR(0), -1)
EVT_GOTO(0)
EVT_END_IF
EVT_WAIT_FRAMES(30)
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_RETURN
EVT_END
};

View File

@ -27,25 +27,27 @@ ApiStatus N(func_802A12FC_71CFDC)(Evt* script, s32 isInitialCall) {
#include "UseItem.inc.c"
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_DRIED_SHROOM;
await N(UseItemWithEffect);
await N(EatItem);
SetAnimation(ACTOR_PLAYER, 0, ANIM_STICK_OUT_TONGUE);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 0;
EVT_VAR(1) += 35;
N(func_802A123C_71CF1C)(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 25;
EVT_VAR(2) += 5;
func_802D7520(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1);
N(func_802A12FC_71CFDC)();
sleep 30;
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(2) += 5;
func_802D75D8(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1);
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
sleep 20;
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x0000008D)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_EXEC_WAIT(N(EatItem))
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_STICK_OUT_TONGUE)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 0)
EVT_ADD(EVT_VAR(1), 35)
EVT_CALL(N(func_802A123C_71CF1C), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 25)
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(func_802D7520, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1)
EVT_CALL(N(func_802A12FC_71CFDC))
EVT_WAIT_FRAMES(30)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(func_802D75D8, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_WAIT_FRAMES(20)
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_RETURN
EVT_END
};

View File

@ -44,47 +44,49 @@ s32 N(modelCommandList)[] = {
0x00000004, 0x0000000D, 0x00000001, sizeof(N(displayList)) / sizeof(s32), &N(displayList), 0x00000002, 0x00000000,
};
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) 0x86;
await N(UseItemWithEffect);
UseBattleCamPreset(3);
MoveBattleCamOver(15);
SetAnimation(ACTOR_PLAYER, 0, ANIM_THROW);
PlaySound(SOUND_THROW);
sleep 3;
CreateVirtualEntity(EVT_VAR(10), N(modelCommandList));
EVT_VAR(0) = 1.0;
MultiplyByActorScale(EVT_VAR(0));
SetVirtualEntityScale(EVT_VAR(10), EVT_VAR(0), EVT_VAR(0), EVT_VAR(0));
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(3) = 20;
EVT_VAR(4) = 42;
EVT_VAR(5) = 5;
MultiplyVec3ByActorScale(EVT_VAR(3), EVT_VAR(4), EVT_VAR(5));
EVT_VAR(0) += EVT_VAR(3);
EVT_VAR(1) += EVT_VAR(4);
EVT_VAR(2) += EVT_VAR(5);
SetVirtualEntityPosition(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
InitTargetIterator();
SetGoalToTarget(ACTOR_SELF);
GetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
spawn {
EVT_VAR(0) = 0;
loop 18 {
EVT_VAR(0) += 0xFFFFFFC4;
SetVirtualEntityRotation(EVT_VAR(10), 0, 0, EVT_VAR(0));
sleep 1;
}
}
SetVirtualEntityJumpGravity(EVT_VAR(10), 0.80078125);
EVT_VAR(2) += 5;
VirtualEntityJumpTo(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 18);
GetItemPower(ITEM_DUSTY_HAMMER, EVT_VAR(3), EVT_VAR(4));
ApplyShrinkFromOwner(EVT_VAR(3));
ItemDamageEnemy(EVT_VAR(9), 0x18000000, 0, EVT_VAR(3), 32);
EVT_VAR(0) += 40;
EVT_VAR(1) += 10;
VirtualEntityJumpTo(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 10);
DeleteVirtualEntity(EVT_VAR(10));
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x00000086)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_CALL(UseBattleCamPreset, 3)
EVT_CALL(MoveBattleCamOver, 15)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_THROW)
EVT_CALL(PlaySound, SOUND_THROW)
EVT_WAIT_FRAMES(3)
EVT_CALL(CreateVirtualEntity, EVT_VAR(10), EVT_PTR(N(modelCommandList)))
EVT_SETF(EVT_VAR(0), EVT_FIXED(1.0))
EVT_CALL(MultiplyByActorScale, EVT_VAR(0))
EVT_CALL(SetVirtualEntityScale, EVT_VAR(10), EVT_VAR(0), EVT_VAR(0), EVT_VAR(0))
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_SET(EVT_VAR(3), 20)
EVT_SET(EVT_VAR(4), 42)
EVT_SET(EVT_VAR(5), 5)
EVT_CALL(MultiplyVec3ByActorScale, EVT_VAR(3), EVT_VAR(4), EVT_VAR(5))
EVT_ADD(EVT_VAR(0), EVT_VAR(3))
EVT_ADD(EVT_VAR(1), EVT_VAR(4))
EVT_ADD(EVT_VAR(2), EVT_VAR(5))
EVT_CALL(SetVirtualEntityPosition, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(InitTargetIterator)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(GetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_THREAD
EVT_SET(EVT_VAR(0), 0)
EVT_LOOP(18)
EVT_ADD(EVT_VAR(0), -60)
EVT_CALL(SetVirtualEntityRotation, EVT_VAR(10), 0, 0, EVT_VAR(0))
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_END_THREAD
EVT_CALL(SetVirtualEntityJumpGravity, EVT_VAR(10), EVT_FIXED(0.8))
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(VirtualEntityJumpTo, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 18)
EVT_CALL(GetItemPower, ITEM_DUSTY_HAMMER, EVT_VAR(3), EVT_VAR(4))
EVT_CALL(ApplyShrinkFromOwner, EVT_VAR(3))
EVT_CALL(ItemDamageEnemy, EVT_VAR(9), 402653184, 0, EVT_VAR(3), 32)
EVT_ADD(EVT_VAR(0), 40)
EVT_ADD(EVT_VAR(1), 10)
EVT_CALL(VirtualEntityJumpTo, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 10)
EVT_CALL(DeleteVirtualEntity, EVT_VAR(10))
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_RETURN
EVT_END
};

View File

@ -139,45 +139,47 @@ s32 N(modelCommandList)[] = {
0x00000002, 0x00000000,
};
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_EGG_MISSILE;
await N(UseItemWithEffect);
UseBattleCamPreset(3);
MoveBattleCamOver(15);
SetAnimation(ACTOR_PLAYER, 0, ANIM_THROW);
PlaySound(SOUND_THROW);
sleep 3;
CreateVirtualEntity(EVT_VAR(10), N(modelCommandList));
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 20;
EVT_VAR(1) += 42;
EVT_VAR(2) += 5;
SetVirtualEntityPosition(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
InitTargetIterator();
SetGoalToTarget(ACTOR_SELF);
GetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
spawn {
EVT_VAR(0) = 0;
loop 18 {
EVT_VAR(0) += 60;
SetVirtualEntityRotation(EVT_VAR(10), 0, 0, EVT_VAR(0));
sleep 1;
}
}
SetVirtualEntityJumpGravity(EVT_VAR(10), 1.0);
EVT_VAR(2) += 5;
VirtualEntityJumpTo(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 18);
DeleteVirtualEntity(EVT_VAR(10));
PlaySound(SOUND_UNKNOWN_2010);
N(func_802A123C_71CF1C)(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
spawn {
StartRumble(5);
ShakeCam(1, 0, 2, 0.75);
ShakeCam(1, 0, 5, 1.5);
ShakeCam(1, 0, 4, 1.2001953125);
ShakeCam(1, 0, 2, 0.4501953125);
}
GetItemPower(ITEM_EGG_MISSILE, EVT_VAR(0), EVT_VAR(1));
ItemDamageEnemy(EVT_VAR(0), 0x18000202, 0, EVT_VAR(0), 32);
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0xC8)
EVT_EXEC_WAIT(battle_item_egg_missile_UseItemWithEffect)
EVT_CALL(UseBattleCamPreset, 3)
EVT_CALL(MoveBattleCamOver, 15)
EVT_CALL(SetAnimation, 0, 0, 65558)
EVT_CALL(PlaySound, 1018)
EVT_WAIT_FRAMES(3)
EVT_CALL(CreateVirtualEntity, EVT_VAR(10), battle_item_egg_missile_modelCommandList)
EVT_CALL(GetActorPos, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 20)
EVT_ADD(EVT_VAR(1), 42)
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(SetVirtualEntityPosition, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(InitTargetIterator)
EVT_CALL(SetGoalToTarget, -127)
EVT_CALL(GetGoalPos, -127, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_THREAD
EVT_SET(EVT_VAR(0), 0)
EVT_LOOP(18)
EVT_ADD(EVT_VAR(0), 60)
EVT_CALL(SetVirtualEntityRotation, EVT_VAR(10), 0, 0, EVT_VAR(0))
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_END_THREAD
EVT_CALL(SetVirtualEntityJumpGravity, EVT_VAR(10), EVT_FIXED(1.0))
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(VirtualEntityJumpTo, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 18)
EVT_CALL(DeleteVirtualEntity, EVT_VAR(10))
EVT_CALL(PlaySound, 8208)
EVT_CALL(battle_item_egg_missile_func_802A123C_71CF1C, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_THREAD
EVT_CALL(StartRumble, 5)
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(0.75))
EVT_CALL(ShakeCam, 1, 0, 5, EVT_FIXED(1.5))
EVT_CALL(ShakeCam, 1, 0, 4, EVT_FIXED(1.2001953125))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(0.4501953125))
EVT_END_THREAD
EVT_CALL(GetItemPower, 200, EVT_VAR(0), EVT_VAR(1))
EVT_CALL(ItemDamageEnemy, EVT_VAR(0), 402653698, 0, EVT_VAR(0), 32)
EVT_EXEC_WAIT(battle_item_egg_missile_PlayerGoHome)
EVT_RETURN
EVT_END
};

View File

@ -84,34 +84,36 @@ ApiStatus N(func_802A14F0_730A90)(Evt* script, s32 isInitialCall) {
#include "UseItem.inc.c"
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_ELECTRO_POP;
await N(UseItemWithEffect);
await N(EatItem);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 20;
PlayEffect(0x57, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1.0, 30, 0, 0, 0, 0, 0, 0, 0);
PlaySound(SOUND_UNKNOWN_379);
GetItemPower(ITEM_VOLT_SHROOM, EVT_VAR(0), EVT_VAR(1));
N(func_802A123C_7307DC)();
sleep 40;
N(func_802A14F0_730A90)();
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 20;
EVT_VAR(1) += 25;
N(func_802A133C_7308DC)(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3));
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 25;
func_802D7520(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3));
N(AddFP)(EVT_VAR(3));
sleep 10;
SetAnimation(ACTOR_PLAYER, 0, ANIM_THUMBS_UP);
sleep 30;
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
func_802D75D8(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3));
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
sleep 20;
ShowMessageBox(16, 60);
WaitForMessageBoxDone();
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x000000CC)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_EXEC_WAIT(N(EatItem))
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 20)
EVT_CALL(PlayEffect, 0x57, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_FIXED(1.0), 30, 0, 0, 0, 0, 0, 0, 0)
EVT_CALL(PlaySound, SOUND_UNKNOWN_379)
EVT_CALL(GetItemPower, ITEM_VOLT_SHROOM, EVT_VAR(0), EVT_VAR(1))
EVT_CALL(N(func_802A123C_7307DC))
EVT_WAIT_FRAMES(40)
EVT_CALL(N(func_802A14F0_730A90))
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 20)
EVT_ADD(EVT_VAR(1), 25)
EVT_CALL(N(func_802A133C_7308DC), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3))
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 25)
EVT_CALL(func_802D7520, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3))
EVT_CALL(N(AddFP), EVT_VAR(3))
EVT_WAIT_FRAMES(10)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_THUMBS_UP)
EVT_WAIT_FRAMES(30)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(func_802D75D8, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3))
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_WAIT_FRAMES(20)
EVT_CALL(ShowMessageBox, 16, 60)
EVT_CALL(WaitForMessageBoxDone)
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_RETURN
EVT_END
};

View File

@ -34,64 +34,66 @@ ApiStatus N(func_802A1378_716FD8)(Evt* script, s32 isInitialCall) {
#include "UseItem.inc.c"
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_FIRE_FLOWER;
await N(UseItemWithEffect);
N(FadeBackgroundToBlack)();
PlaySound(SOUND_UNKNOWN_377);
SetAnimation(ACTOR_PLAYER, 0, ANIM_PLANT);
spawn {
sleep 50;
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
}
sleep 35;
UseBattleCamPreset(2);
MoveBattleCamOver(20);
sleep 10;
GetActorPos(ACTOR_PLAYER, EVT_VAR(3), EVT_VAR(4), EVT_VAR(5));
EVT_VAR(0) = 40;
MultiplyByActorScale(EVT_VAR(0));
EVT_VAR(3) += EVT_VAR(0);
spawn {
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) -= 10;
SetActorSpeed(ACTOR_PLAYER, 2.0);
SetAnimation(ACTOR_PLAYER, 0, ANIM_RUNNING);
SetGoalPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
PlayerRunToGoal(ACTOR_PLAYER);
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
}
spawn {
N(func_802A123C_716E9C)(EVT_VAR(3), EVT_VAR(4), EVT_VAR(5));
sleep 25;
loop 12 {
sleep 1;
PlaySound(SOUND_UNKNOWN_202C);
sleep 2;
PlaySound(SOUND_UNKNOWN_202D);
sleep 1;
}
}
sleep 80;
UseBattleCamPreset(3);
MoveBattleCamOver(20);
InitTargetIterator();
0:
SetGoalToTarget(ACTOR_SELF);
ItemCheckHit(EVT_VAR(0), 0x10000000, 0, EVT_VAR(0), 0);
if (EVT_VAR(0) == 6) {
goto 1;
}
GetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
GetItemPower(ITEM_FIRE_FLOWER, EVT_VAR(0), EVT_VAR(1));
ItemDamageEnemy(EVT_VAR(0), 0x38000002, 0, EVT_VAR(0), 32);
1:
sleep 5;
ChooseNextTarget(0, EVT_VAR(0));
if (EVT_VAR(0) != -1) {
goto 0;
}
N(func_802A1378_716FD8)();
sleep 30;
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x00000080)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_CALL(N(FadeBackgroundToBlack))
EVT_CALL(PlaySound, SOUND_UNKNOWN_377)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_PLANT)
EVT_THREAD
EVT_WAIT_FRAMES(50)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_END_THREAD
EVT_WAIT_FRAMES(35)
EVT_CALL(UseBattleCamPreset, 2)
EVT_CALL(MoveBattleCamOver, 20)
EVT_WAIT_FRAMES(10)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(3), EVT_VAR(4), EVT_VAR(5))
EVT_SET(EVT_VAR(0), 40)
EVT_CALL(MultiplyByActorScale, EVT_VAR(0))
EVT_ADD(EVT_VAR(3), EVT_VAR(0))
EVT_THREAD
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_SUB(EVT_VAR(0), 10)
EVT_CALL(SetActorSpeed, ACTOR_PLAYER, EVT_FIXED(2.0))
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_RUNNING)
EVT_CALL(SetGoalPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(PlayerRunToGoal, 0)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_END_THREAD
EVT_THREAD
EVT_CALL(N(func_802A123C_716E9C), EVT_VAR(3), EVT_VAR(4), EVT_VAR(5))
EVT_WAIT_FRAMES(25)
EVT_LOOP(12)
EVT_WAIT_FRAMES(1)
EVT_CALL(PlaySound, SOUND_UNKNOWN_202C)
EVT_WAIT_FRAMES(2)
EVT_CALL(PlaySound, SOUND_UNKNOWN_202D)
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_END_THREAD
EVT_WAIT_FRAMES(80)
EVT_CALL(UseBattleCamPreset, 3)
EVT_CALL(MoveBattleCamOver, 20)
EVT_CALL(InitTargetIterator)
EVT_LABEL(0)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(ItemCheckHit, EVT_VAR(0), 268435456, 0, EVT_VAR(0), 0)
EVT_IF_EQ(EVT_VAR(0), 6)
EVT_GOTO(1)
EVT_END_IF
EVT_CALL(GetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(GetItemPower, ITEM_FIRE_FLOWER, EVT_VAR(0), EVT_VAR(1))
EVT_CALL(ItemDamageEnemy, EVT_VAR(0), 939524098, 0, EVT_VAR(0), 32)
EVT_LABEL(1)
EVT_WAIT_FRAMES(5)
EVT_CALL(ChooseNextTarget, 0, EVT_VAR(0))
EVT_IF_NE(EVT_VAR(0), -1)
EVT_GOTO(0)
EVT_END_IF
EVT_CALL(N(func_802A1378_716FD8))
EVT_WAIT_FRAMES(30)
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_RETURN
EVT_END
};

View File

@ -95,140 +95,144 @@ ApiStatus N(func_802A15A0_733670)(Evt* script, s32 isInitialCall) {
#include "UseItem.inc.c"
EvtSource N(script6) = SCRIPT({
SetActorYaw(ACTOR_PLAYER, 30);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 60);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 90);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 120);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 150);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 180);
sleep 10;
EVT_VAR(1) = EVT_VAR(15);
await N(UseItem);
EVT_VAR(14) = EVT_VAR(10);
SetAnimation(ACTOR_PLAYER, 0, ANIM_THROW);
spawn {
sleep 20;
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
}
CreateVirtualEntity(EVT_VAR(10), 0x80283EE8);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 0;
EVT_VAR(1) += 30;
EVT_VAR(2) += 5;
SetVirtualEntityPosition(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
SetVirtualEntityFlags(EVT_VAR(10), 32);
spawn {
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 45;
MakeItemEntity(EVT_VAR(14), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1, 0);
EVT_VAR(14) = EVT_VAR(0);
loop 25 {
GetVirtualEntityPosition(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
N(func_802A123C_73330C)(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
sleep 1;
}
RemoveItemEntity(EVT_VAR(14));
}
InitTargetIterator();
SetGoalToTarget(ACTOR_SELF);
GetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
SetBattleCamTarget(0xFFFFFF83, 1, 0);
SetBattleCamOffsetZ(41);
SetBattleCamZoom(248);
MoveBattleCamOver(25);
SetVirtualEntityJumpGravity(EVT_VAR(10), 0.400390625);
EVT_VAR(2) += 5;
VirtualEntityJumpTo(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 25);
AddBattleCamZoom(100);
MoveBattleCamOver(30);
GetActorPos(ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 25;
func_802D7520(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11));
if (EVT_VAR(11) > 0) {
N(func_802A12EC_7333BC)(EVT_VAR(11));
}
sleep 30;
GetActorPos(ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
func_802D75D8(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11));
sleep 20;
SetActorYaw(ACTOR_PLAYER, 150);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 120);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 90);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 60);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 30);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 0);
sleep 10;
});
EvtSource N(script6) = {
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 30)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 60)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 90)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 120)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 150)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 180)
EVT_WAIT_FRAMES(10)
EVT_SET(EVT_VAR(1), EVT_VAR(15))
EVT_EXEC_WAIT(N(UseItem))
EVT_SET(EVT_VAR(14), EVT_VAR(10))
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_THROW)
EVT_THREAD
EVT_WAIT_FRAMES(20)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_END_THREAD
EVT_CALL(CreateVirtualEntity, EVT_VAR(10), 0x80283EE8)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 0)
EVT_ADD(EVT_VAR(1), 30)
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(SetVirtualEntityPosition, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(SetVirtualEntityFlags, EVT_VAR(10), 32)
EVT_THREAD
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 45)
EVT_CALL(MakeItemEntity, EVT_VAR(14), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1, 0)
EVT_SET(EVT_VAR(14), EVT_VAR(0))
EVT_LOOP(25)
EVT_CALL(GetVirtualEntityPosition, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(N(func_802A123C_73330C), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_CALL(RemoveItemEntity, EVT_VAR(14))
EVT_END_THREAD
EVT_CALL(InitTargetIterator)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(GetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(SetBattleCamTarget, -125, 1, 0)
EVT_CALL(SetBattleCamOffsetZ, 41)
EVT_CALL(SetBattleCamZoom, 248)
EVT_CALL(MoveBattleCamOver, 25)
EVT_CALL(SetVirtualEntityJumpGravity, EVT_VAR(10), EVT_FIXED(0.4))
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(VirtualEntityJumpTo, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 25)
EVT_CALL(AddBattleCamZoom, 100)
EVT_CALL(MoveBattleCamOver, 30)
EVT_CALL(GetActorPos, ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 25)
EVT_CALL(func_802D7520, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11))
EVT_IF_GT(EVT_VAR(11), 0)
EVT_CALL(N(func_802A12EC_7333BC), EVT_VAR(11))
EVT_END_IF
EVT_WAIT_FRAMES(30)
EVT_CALL(GetActorPos, ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(func_802D75D8, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11))
EVT_WAIT_FRAMES(20)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 150)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 120)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 90)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 60)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 30)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 0)
EVT_WAIT_FRAMES(10)
EVT_RETURN
EVT_END
};
EvtSource N(main) = SCRIPT({
EVT_VAR(14) = EVT_VAR(1);
GetMenuSelection(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(10) = EVT_VAR(1);
N(func_802A15A0_733670)(EVT_VAR(10));
InitTargetIterator();
GetOwnerTarget(EVT_VAR(0), EVT_VAR(1));
if (EVT_VAR(0) == ACTOR_PARTNER) {
await N(script6);
return;
}
EVT_VAR(1) = EVT_VAR(14);
await N(UseItemWithEffect);
if (EVT_VAR(13) == 0) {
await N(EatItem);
} else {
await N(DrinkItem);
}
if (EVT_VAR(15) == 1) {
SetAnimation(ACTOR_PLAYER, 0, ANIM_STICK_OUT_TONGUE);
}
if (EVT_VAR(11) > 0) {
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 0;
EVT_VAR(1) += 35;
N(func_802A1378_733448)(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11));
}
if (EVT_VAR(11) < 0) {
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 0;
EVT_VAR(1) += 35;
N(func_802A1378_733448)(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11));
}
if (EVT_VAR(12) > 0) {
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 20;
EVT_VAR(1) += 25;
N(func_802A1438_733508)(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(12));
}
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 25;
func_802D7520(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11));
if (EVT_VAR(11) != 0) {
N(AddHP)(EVT_VAR(11));
}
if (EVT_VAR(12) != 0) {
N(AddFP)(EVT_VAR(12));
}
if (EVT_VAR(15) == 0) {
sleep 10;
SetAnimation(ACTOR_PLAYER, 0, ANIM_THUMBS_UP);
sleep 30;
} else {
sleep 30;
}
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
func_802D75D8(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11));
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
sleep 20;
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET(EVT_VAR(14), EVT_VAR(1))
EVT_CALL(GetMenuSelection, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_SET(EVT_VAR(10), EVT_VAR(1))
EVT_CALL(N(func_802A15A0_733670), EVT_VAR(10))
EVT_CALL(InitTargetIterator)
EVT_CALL(GetOwnerTarget, EVT_VAR(0), EVT_VAR(1))
EVT_IF_EQ(EVT_VAR(0), 256)
EVT_EXEC_WAIT(N(script6))
EVT_RETURN
EVT_END_IF
EVT_SET(EVT_VAR(1), EVT_VAR(14))
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_IF_EQ(EVT_VAR(13), 0)
EVT_EXEC_WAIT(N(EatItem))
EVT_ELSE
EVT_EXEC_WAIT(N(DrinkItem))
EVT_END_IF
EVT_IF_EQ(EVT_VAR(15), 1)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_STICK_OUT_TONGUE)
EVT_END_IF
EVT_IF_GT(EVT_VAR(11), 0)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 0)
EVT_ADD(EVT_VAR(1), 35)
EVT_CALL(N(func_802A1378_733448), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11))
EVT_END_IF
EVT_IF_LT(EVT_VAR(11), 0)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 0)
EVT_ADD(EVT_VAR(1), 35)
EVT_CALL(N(func_802A1378_733448), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11))
EVT_END_IF
EVT_IF_GT(EVT_VAR(12), 0)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 20)
EVT_ADD(EVT_VAR(1), 25)
EVT_CALL(N(func_802A1438_733508), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(12))
EVT_END_IF
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 25)
EVT_CALL(func_802D7520, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11))
EVT_IF_NE(EVT_VAR(11), 0)
EVT_CALL(N(AddHP), EVT_VAR(11))
EVT_END_IF
EVT_IF_NE(EVT_VAR(12), 0)
EVT_CALL(N(AddFP), EVT_VAR(12))
EVT_END_IF
EVT_IF_EQ(EVT_VAR(15), 0)
EVT_WAIT_FRAMES(10)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_THUMBS_UP)
EVT_WAIT_FRAMES(30)
EVT_ELSE
EVT_WAIT_FRAMES(30)
EVT_END_IF
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(func_802D75D8, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11))
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_WAIT_FRAMES(20)
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_RETURN
EVT_END
};

View File

@ -22,56 +22,58 @@ ApiStatus N(func_802A12D4_72BBE4)(Evt* script, s32 isInitialCall) {
#include "UseItem.inc.c"
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_FRIGHT_JAR;
await N(UseItemWithEffect);
N(FadeBackgroundToBlack)();
spawn {
sleep 5;
UseBattleCamPreset(2);
MoveBattleCamOver(50);
}
SetAnimation(ACTOR_PLAYER, 0, ANIM_CROUCH);
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_367);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 0xFFFFFFD8;
EVT_VAR(1) += 5;
EVT_VAR(3) = 0.7001953125;
loop 5 {
PlayEffect(0x61, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3), 25, 0, 0, 0, 0, 0, 0, 0);
EVT_VAR(0) += 5;
EVT_VAR(3) += 0.150390625;
sleep 7;
}
PlayEffect(0x61, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1.5, 60, 0, 0, 0, 0, 0, 0, 0);
sleep 20;
loop 4 {
AddBattleCamZoom(0xFFFFFF9C);
MoveBattleCamOver(2);
sleep 2;
AddBattleCamZoom(100);
MoveBattleCamOver(2);
sleep 2;
}
UseBattleCamPreset(3);
MoveBattleCamOver(20);
InitTargetIterator();
0:
SetGoalToTarget(ACTOR_SELF);
ItemCheckHit(EVT_VAR(0), 0x10000000, 0, EVT_VAR(0), 0);
if (EVT_VAR(0) == 6) {
goto 1;
}
func_80269EAC(21);
ItemAfflictEnemy(EVT_VAR(0), 0x70001000, 0, 100, 0, 32);
1:
ChooseNextTarget(0, EVT_VAR(0));
if (EVT_VAR(0) != -1) {
goto 0;
}
sleep 10;
SetAnimation(ACTOR_PLAYER, 0, ANIM_WALKING);
N(func_802A12D4_72BBE4)();
sleep 20;
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x00000098)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_CALL(N(FadeBackgroundToBlack))
EVT_THREAD
EVT_WAIT_FRAMES(5)
EVT_CALL(UseBattleCamPreset, 2)
EVT_CALL(MoveBattleCamOver, 50)
EVT_END_THREAD
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_CROUCH)
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_367)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), -40)
EVT_ADD(EVT_VAR(1), 5)
EVT_SETF(EVT_VAR(3), EVT_FIXED(0.7))
EVT_LOOP(5)
EVT_CALL(PlayEffect, 0x61, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3), 25, 0, 0, 0, 0, 0, 0, 0)
EVT_ADD(EVT_VAR(0), 5)
EVT_ADDF(EVT_VAR(3), EVT_FIXED(0.15))
EVT_WAIT_FRAMES(7)
EVT_END_LOOP
EVT_CALL(PlayEffect, 0x61, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_FIXED(1.5), 60, 0, 0, 0, 0, 0, 0, 0)
EVT_WAIT_FRAMES(20)
EVT_LOOP(4)
EVT_CALL(AddBattleCamZoom, -100)
EVT_CALL(MoveBattleCamOver, 2)
EVT_WAIT_FRAMES(2)
EVT_CALL(AddBattleCamZoom, 100)
EVT_CALL(MoveBattleCamOver, 2)
EVT_WAIT_FRAMES(2)
EVT_END_LOOP
EVT_CALL(UseBattleCamPreset, 3)
EVT_CALL(MoveBattleCamOver, 20)
EVT_CALL(InitTargetIterator)
EVT_LABEL(0)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(ItemCheckHit, EVT_VAR(0), 268435456, 0, EVT_VAR(0), 0)
EVT_IF_EQ(EVT_VAR(0), 6)
EVT_GOTO(1)
EVT_END_IF
EVT_CALL(func_80269EAC, 21)
EVT_CALL(ItemAfflictEnemy, EVT_VAR(0), 1879052288, 0, 100, 0, 32)
EVT_LABEL(1)
EVT_CALL(ChooseNextTarget, 0, EVT_VAR(0))
EVT_IF_NE(EVT_VAR(0), -1)
EVT_GOTO(0)
EVT_END_IF
EVT_WAIT_FRAMES(10)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_WALKING)
EVT_CALL(N(func_802A12D4_72BBE4))
EVT_WAIT_FRAMES(20)
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_RETURN
EVT_END
};

View File

@ -36,80 +36,82 @@ ApiStatus N(func_802A12C4_726224)(Evt* script, s32 isInitialCall) {
#include "UseItem.inc.c"
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_HUSTLE_DRINK;
await N(UseItemWithEffect);
await N(DrinkItem);
SetAnimation(ACTOR_PLAYER, 0, ANIM_SQUISH);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 25;
func_802D7520(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 5);
N(func_802A12C4_726224)();
N(func_802A123C_72619C)();
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 20;
UseBattleCamPreset(13);
BattleCamTargetActor(ACTOR_SELF);
MoveBattleCamOver(20);
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_369);
spawn {
loop 2 {
SetActorScale(ACTOR_SELF, 1.0, 1.0, 1.0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.1005859375, 1.0, 1.0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.2001953125, 0.9501953125, 1.0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.30078125, 0.900390625, 1.0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.3505859375, 0.8505859375, 1.0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.380859375, 0.80078125, 1.0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.400390625, 0.80078125, 1.0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.30078125, 0.8505859375, 1.0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.2001953125, 0.900390625, 1.0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.1005859375, 0.9501953125, 1.0);
sleep 1;
}
SetActorScale(ACTOR_SELF, 1.0, 1.0, 1.0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.1005859375, 1.0, 1.0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.2001953125, 0.9501953125, 1.0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.30078125, 0.900390625, 1.0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.3505859375, 0.8505859375, 1.0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.380859375, 0.80078125, 1.0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.400390625, 0.80078125, 1.0);
sleep 1;
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_208E);
SetActorScale(ACTOR_SELF, 0.900390625, 1.30078125, 1.0);
sleep 1;
SetActorScale(ACTOR_SELF, 0.900390625, 1.2001953125, 1.0);
sleep 1;
SetActorScale(ACTOR_SELF, 0.9501953125, 1.1005859375, 1.0);
sleep 1;
SetActorScale(ACTOR_SELF, 1.0, 1.0, 1.0);
sleep 1;
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
}
loop 10 {
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_369);
PlayEffect(0x6, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0, 0, 0, 0, 0, 0, 0, 0, 0);
PlayEffect(0x6, 1, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0, 0, 0, 0, 0, 0, 0, 0, 0);
sleep 4;
}
sleep 10;
SetAnimation(ACTOR_PLAYER, 0, ANIM_RUNNING);
UseBattleCamPreset(2);
MoveBattleCamOver(20);
sleep 20;
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x00000091)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_EXEC_WAIT(N(DrinkItem))
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_SQUISH)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 25)
EVT_CALL(func_802D7520, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 5)
EVT_CALL(N(func_802A12C4_726224))
EVT_CALL(N(func_802A123C_72619C))
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 20)
EVT_CALL(UseBattleCamPreset, 13)
EVT_CALL(BattleCamTargetActor, ACTOR_SELF)
EVT_CALL(MoveBattleCamOver, 20)
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_369)
EVT_THREAD
EVT_LOOP(2)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.0), EVT_FIXED(1.0), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.1), EVT_FIXED(1.0), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.2), EVT_FIXED(0.95), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.3), EVT_FIXED(0.9), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.35), EVT_FIXED(0.85), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.38), EVT_FIXED(0.8), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.4), EVT_FIXED(0.8), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.3), EVT_FIXED(0.85), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.2), EVT_FIXED(0.9), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.1), EVT_FIXED(0.95), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.0), EVT_FIXED(1.0), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.1), EVT_FIXED(1.0), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.2), EVT_FIXED(0.95), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.3), EVT_FIXED(0.9), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.35), EVT_FIXED(0.85), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.38), EVT_FIXED(0.8), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.4), EVT_FIXED(0.8), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_208E)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(0.9), EVT_FIXED(1.3), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(0.9), EVT_FIXED(1.2), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(0.95), EVT_FIXED(1.1), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_SELF, EVT_FIXED(1.0), EVT_FIXED(1.0), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_END_THREAD
EVT_LOOP(10)
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_369)
EVT_CALL(PlayEffect, 0x6, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_CALL(PlayEffect, 0x6, 1, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_WAIT_FRAMES(4)
EVT_END_LOOP
EVT_WAIT_FRAMES(10)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_RUNNING)
EVT_CALL(UseBattleCamPreset, 2)
EVT_CALL(MoveBattleCamOver, 20)
EVT_WAIT_FRAMES(20)
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_RETURN
EVT_END
};

View File

@ -93,63 +93,65 @@ s32 N(modelCommandList)[] = {
0x00000004, 0x0000000D, 0x00000001, sizeof(N(displayList)) / sizeof(s32), &N(displayList), 0x00000002, 0x00000000,
};
EvtSource script = SCRIPT({
EVT_VAR(10) = (const) ITEM_INSECTICIDE_HERB;
await N(UseItemWithEffect);
UseBattleCamPreset(3);
MoveBattleCamOver(15);
SetAnimation(ACTOR_PLAYER, 0, ANIM_THROW);
PlaySound(SOUND_THROW);
sleep 3;
CreateVirtualEntity(EVT_VAR(10), N(modelCommandList));
EVT_VAR(0) = 1.0;
MultiplyByActorScale(EVT_VAR(0));
SetVirtualEntityScale(EVT_VAR(10), EVT_VAR(0), EVT_VAR(0), EVT_VAR(0));
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(3) = 20;
EVT_VAR(4) = 42;
EVT_VAR(5) = 5;
MultiplyVec3ByActorScale(EVT_VAR(3), EVT_VAR(4), EVT_VAR(5));
EVT_VAR(0) += EVT_VAR(3);
EVT_VAR(1) += EVT_VAR(4);
EVT_VAR(2) += EVT_VAR(5);
SetVirtualEntityPosition(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
InitTargetIterator();
SetGoalToTarget(ACTOR_SELF);
GetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
spawn {
EVT_VAR(0) = 0;
loop 18 {
EVT_VAR(0) += 0xFFFFFFC4;
SetVirtualEntityRotation(EVT_VAR(10), 0, 0, EVT_VAR(0));
sleep 1;
}
}
SetVirtualEntityJumpGravity(EVT_VAR(10), 0.80078125);
EVT_VAR(2) += 5;
VirtualEntityJumpTo(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 18);
PlayEffect(0x7, 3, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0, 0, 0, 0, 0, 0, 0, 0, 0);
EVT_VAR(0) -= 10;
PlayEffect(0x7, 3, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0, 0, 0, 0, 0, 0, 0, 0, 0);
EVT_VAR(0) += 20;
PlayEffect(0x7, 3, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0, 0, 0, 0, 0, 0, 0, 0, 0);
spawn {
N(func_802A12E0_72AA30)(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
sleep 3;
N(func_802A12E0_72AA30)(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
sleep 3;
N(func_802A12E0_72AA30)(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
}
InitTargetIterator();
SetGoalToTarget(ACTOR_SELF);
N(func_802A123C_72A98C)();
DeleteVirtualEntity(EVT_VAR(10));
if (EVT_VAR(9) == 0) {
ItemDamageEnemy(EVT_VAR(0), 0, 0, 0, 32);
} else {
InitTargetIterator();
SetGoalToTarget(ACTOR_SELF);
N(func_802A1280_72A9D0)();
}
await N(PlayerGoHome);
});
EvtSource script = {
EVT_SET_CONST(EVT_VAR(10), 0x00000087)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_CALL(UseBattleCamPreset, 3)
EVT_CALL(MoveBattleCamOver, 15)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_THROW)
EVT_CALL(PlaySound, SOUND_THROW)
EVT_WAIT_FRAMES(3)
EVT_CALL(CreateVirtualEntity, EVT_VAR(10), EVT_PTR(N(modelCommandList)))
EVT_SETF(EVT_VAR(0), EVT_FIXED(1.0))
EVT_CALL(MultiplyByActorScale, EVT_VAR(0))
EVT_CALL(SetVirtualEntityScale, EVT_VAR(10), EVT_VAR(0), EVT_VAR(0), EVT_VAR(0))
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_SET(EVT_VAR(3), 20)
EVT_SET(EVT_VAR(4), 42)
EVT_SET(EVT_VAR(5), 5)
EVT_CALL(MultiplyVec3ByActorScale, EVT_VAR(3), EVT_VAR(4), EVT_VAR(5))
EVT_ADD(EVT_VAR(0), EVT_VAR(3))
EVT_ADD(EVT_VAR(1), EVT_VAR(4))
EVT_ADD(EVT_VAR(2), EVT_VAR(5))
EVT_CALL(SetVirtualEntityPosition, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(InitTargetIterator)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(GetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_THREAD
EVT_SET(EVT_VAR(0), 0)
EVT_LOOP(18)
EVT_ADD(EVT_VAR(0), -60)
EVT_CALL(SetVirtualEntityRotation, EVT_VAR(10), 0, 0, EVT_VAR(0))
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_END_THREAD
EVT_CALL(SetVirtualEntityJumpGravity, EVT_VAR(10), EVT_FIXED(0.8))
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(VirtualEntityJumpTo, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 18)
EVT_CALL(PlayEffect, 0x7, 3, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_SUB(EVT_VAR(0), 10)
EVT_CALL(PlayEffect, 0x7, 3, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_ADD(EVT_VAR(0), 20)
EVT_CALL(PlayEffect, 0x7, 3, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_THREAD
EVT_CALL(N(func_802A12E0_72AA30), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_WAIT_FRAMES(3)
EVT_CALL(N(func_802A12E0_72AA30), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_WAIT_FRAMES(3)
EVT_CALL(N(func_802A12E0_72AA30), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_END_THREAD
EVT_CALL(InitTargetIterator)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(N(func_802A123C_72A98C))
EVT_CALL(DeleteVirtualEntity, EVT_VAR(10))
EVT_IF_EQ(EVT_VAR(9), 0)
EVT_CALL(ItemDamageEnemy, EVT_VAR(0), 0, 0, 0, 32)
EVT_ELSE
EVT_CALL(InitTargetIterator)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(N(func_802A1280_72A9D0))
EVT_END_IF
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_RETURN
EVT_END
};

View File

@ -84,111 +84,115 @@ ApiStatus N(func_802A1484_72E9B4)(Evt* script, s32 isInitialCall) {
#include "UseItem.inc.c"
EvtSource N(script6) = SCRIPT({
SetActorYaw(ACTOR_PLAYER, 30);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 60);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 90);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 120);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 150);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 180);
sleep 10;
EVT_VAR(1) = EVT_VAR(15);
await N(UseItem);
EVT_VAR(14) = EVT_VAR(10);
SetAnimation(ACTOR_PLAYER, 0, ANIM_THROW);
spawn {
sleep 20;
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
}
CreateVirtualEntity(EVT_VAR(10), 0x80283EE8);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 0;
EVT_VAR(1) += 30;
EVT_VAR(2) += 5;
SetVirtualEntityPosition(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
SetVirtualEntityFlags(EVT_VAR(10), 32);
spawn {
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 45;
MakeItemEntity(EVT_VAR(14), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1, 0);
EVT_VAR(14) = EVT_VAR(0);
loop 25 {
GetVirtualEntityPosition(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
N(func_802A123C_72E76C)(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
sleep 1;
}
RemoveItemEntity(EVT_VAR(14));
}
InitTargetIterator();
SetGoalToTarget(ACTOR_SELF);
GetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
SetBattleCamTarget(0xFFFFFF83, 1, 0);
SetBattleCamOffsetZ(41);
SetBattleCamZoom(248);
MoveBattleCamOver(25);
SetVirtualEntityJumpGravity(EVT_VAR(10), 0.400390625);
EVT_VAR(2) += 5;
VirtualEntityJumpTo(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 25);
AddBattleCamZoom(100);
MoveBattleCamOver(30);
GetActorPos(ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 25;
func_802D7520(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11));
if (EVT_VAR(11) > 0) {
N(func_802A12EC_72E81C)(EVT_VAR(11));
}
sleep 30;
GetActorPos(ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
func_802D75D8(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11));
sleep 20;
SetActorYaw(ACTOR_PLAYER, 150);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 120);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 90);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 60);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 30);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 0);
sleep 10;
});
EvtSource N(script6) = {
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 30)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 60)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 90)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 120)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 150)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 180)
EVT_WAIT_FRAMES(10)
EVT_SET(EVT_VAR(1), EVT_VAR(15))
EVT_EXEC_WAIT(N(UseItem))
EVT_SET(EVT_VAR(14), EVT_VAR(10))
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_THROW)
EVT_THREAD
EVT_WAIT_FRAMES(20)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_END_THREAD
EVT_CALL(CreateVirtualEntity, EVT_VAR(10), 0x80283EE8)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 0)
EVT_ADD(EVT_VAR(1), 30)
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(SetVirtualEntityPosition, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(SetVirtualEntityFlags, EVT_VAR(10), 32)
EVT_THREAD
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 45)
EVT_CALL(MakeItemEntity, EVT_VAR(14), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1, 0)
EVT_SET(EVT_VAR(14), EVT_VAR(0))
EVT_LOOP(25)
EVT_CALL(GetVirtualEntityPosition, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(N(func_802A123C_72E76C), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_CALL(RemoveItemEntity, EVT_VAR(14))
EVT_END_THREAD
EVT_CALL(InitTargetIterator)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(GetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(SetBattleCamTarget, -125, 1, 0)
EVT_CALL(SetBattleCamOffsetZ, 41)
EVT_CALL(SetBattleCamZoom, 248)
EVT_CALL(MoveBattleCamOver, 25)
EVT_CALL(SetVirtualEntityJumpGravity, EVT_VAR(10), EVT_FIXED(0.4))
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(VirtualEntityJumpTo, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 25)
EVT_CALL(AddBattleCamZoom, 100)
EVT_CALL(MoveBattleCamOver, 30)
EVT_CALL(GetActorPos, ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 25)
EVT_CALL(func_802D7520, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11))
EVT_IF_GT(EVT_VAR(11), 0)
EVT_CALL(N(func_802A12EC_72E81C), EVT_VAR(11))
EVT_END_IF
EVT_WAIT_FRAMES(30)
EVT_CALL(GetActorPos, ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(func_802D75D8, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11))
EVT_WAIT_FRAMES(20)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 150)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 120)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 90)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 60)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 30)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 0)
EVT_WAIT_FRAMES(10)
EVT_RETURN
EVT_END
};
EvtSource N(main) = SCRIPT({
EVT_VAR(15) = EVT_VAR(1);
GetMenuSelection(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(10) = EVT_VAR(1);
N(func_802A1484_72E9B4)(EVT_VAR(10));
InitTargetIterator();
GetOwnerTarget(EVT_VAR(0), EVT_VAR(1));
if (EVT_VAR(0) == ACTOR_PARTNER) {
await N(script6);
return;
}
EVT_VAR(10) = (const) ITEM_LIFE_SHROOM;
EVT_VAR(1) = EVT_VAR(15);
await N(UseItemWithEffect);
await N(EatItem);
N(func_802A1438_72E968)();
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 0;
EVT_VAR(1) += 35;
N(func_802A1378_72E8A8)(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3));
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 25;
func_802D7520(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3));
sleep 10;
SetAnimation(ACTOR_PLAYER, 0, ANIM_THUMBS_UP);
sleep 30;
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
func_802D75D8(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3));
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
sleep 20;
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET(EVT_VAR(15), EVT_VAR(1))
EVT_CALL(GetMenuSelection, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_SET(EVT_VAR(10), EVT_VAR(1))
EVT_CALL(N(func_802A1484_72E9B4), EVT_VAR(10))
EVT_CALL(InitTargetIterator)
EVT_CALL(GetOwnerTarget, EVT_VAR(0), EVT_VAR(1))
EVT_IF_EQ(EVT_VAR(0), 256)
EVT_EXEC_WAIT(N(script6))
EVT_RETURN
EVT_END_IF
EVT_SET_CONST(EVT_VAR(10), 0x00000095)
EVT_SET(EVT_VAR(1), EVT_VAR(15))
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_EXEC_WAIT(N(EatItem))
EVT_CALL(N(func_802A1438_72E968))
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 0)
EVT_ADD(EVT_VAR(1), 35)
EVT_CALL(N(func_802A1378_72E8A8), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3))
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 25)
EVT_CALL(func_802D7520, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3))
EVT_WAIT_FRAMES(10)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_THUMBS_UP)
EVT_WAIT_FRAMES(30)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(func_802D75D8, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3))
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_WAIT_FRAMES(20)
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_RETURN
EVT_END
};

View File

@ -83,130 +83,134 @@ ApiStatus N(func_802A15A0_715DF0)(Evt* script, s32 isInitialCall) {
#include "UseItem.inc.c"
EvtSource N(script6) = SCRIPT({
SetActorYaw(ACTOR_PLAYER, 30);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 60);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 90);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 120);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 150);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 180);
sleep 10;
EVT_VAR(1) = EVT_VAR(15);
await N(UseItem);
EVT_VAR(14) = EVT_VAR(10);
SetAnimation(ACTOR_PLAYER, 0, ANIM_THROW);
spawn {
sleep 20;
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
}
CreateVirtualEntity(EVT_VAR(10), 0x80283EE8);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 0;
EVT_VAR(1) += 30;
EVT_VAR(2) += 5;
SetVirtualEntityPosition(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
SetVirtualEntityFlags(EVT_VAR(10), 32);
spawn {
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 45;
MakeItemEntity(EVT_VAR(14), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1, 0);
EVT_VAR(14) = EVT_VAR(0);
loop 25 {
GetVirtualEntityPosition(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
N(func_802A123C_715A8C)(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
sleep 1;
}
RemoveItemEntity(EVT_VAR(14));
}
InitTargetIterator();
SetGoalToTarget(ACTOR_SELF);
GetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
SetBattleCamTarget(0xFFFFFF83, 1, 0);
SetBattleCamOffsetZ(41);
SetBattleCamZoom(248);
MoveBattleCamOver(25);
SetVirtualEntityJumpGravity(EVT_VAR(10), 0.400390625);
EVT_VAR(2) += 5;
VirtualEntityJumpTo(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 25);
AddBattleCamZoom(100);
MoveBattleCamOver(30);
GetActorPos(ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 25;
func_802D7520(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11));
if (EVT_VAR(11) > 0) {
N(func_802A12EC_715B3C)(EVT_VAR(11));
}
sleep 30;
GetActorPos(ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
func_802D75D8(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11));
sleep 20;
SetActorYaw(ACTOR_PLAYER, 150);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 120);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 90);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 60);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 30);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 0);
sleep 10;
});
EvtSource N(script6) = {
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 30)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 60)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 90)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 120)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 150)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 180)
EVT_WAIT_FRAMES(10)
EVT_SET(EVT_VAR(1), EVT_VAR(15))
EVT_EXEC_WAIT(N(UseItem))
EVT_SET(EVT_VAR(14), EVT_VAR(10))
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_THROW)
EVT_THREAD
EVT_WAIT_FRAMES(20)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_END_THREAD
EVT_CALL(CreateVirtualEntity, EVT_VAR(10), 0x80283EE8)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 0)
EVT_ADD(EVT_VAR(1), 30)
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(SetVirtualEntityPosition, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(SetVirtualEntityFlags, EVT_VAR(10), 32)
EVT_THREAD
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 45)
EVT_CALL(MakeItemEntity, EVT_VAR(14), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1, 0)
EVT_SET(EVT_VAR(14), EVT_VAR(0))
EVT_LOOP(25)
EVT_CALL(GetVirtualEntityPosition, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(N(func_802A123C_715A8C), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_CALL(RemoveItemEntity, EVT_VAR(14))
EVT_END_THREAD
EVT_CALL(InitTargetIterator)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(GetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(SetBattleCamTarget, -125, 1, 0)
EVT_CALL(SetBattleCamOffsetZ, 41)
EVT_CALL(SetBattleCamZoom, 248)
EVT_CALL(MoveBattleCamOver, 25)
EVT_CALL(SetVirtualEntityJumpGravity, EVT_VAR(10), EVT_FIXED(0.4))
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(VirtualEntityJumpTo, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 25)
EVT_CALL(AddBattleCamZoom, 100)
EVT_CALL(MoveBattleCamOver, 30)
EVT_CALL(GetActorPos, ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 25)
EVT_CALL(func_802D7520, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11))
EVT_IF_GT(EVT_VAR(11), 0)
EVT_CALL(N(func_802A12EC_715B3C), EVT_VAR(11))
EVT_END_IF
EVT_WAIT_FRAMES(30)
EVT_CALL(GetActorPos, ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(func_802D75D8, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11))
EVT_WAIT_FRAMES(20)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 150)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 120)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 90)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 60)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 30)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 0)
EVT_WAIT_FRAMES(10)
EVT_RETURN
EVT_END
};
EvtSource N(main) = SCRIPT({
EVT_VAR(14) = EVT_VAR(1);
GetMenuSelection(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(10) = EVT_VAR(1);
N(func_802A15A0_715DF0)(EVT_VAR(10));
InitTargetIterator();
GetOwnerTarget(EVT_VAR(0), EVT_VAR(1));
if (EVT_VAR(0) == ACTOR_PARTNER) {
await N(script6);
return;
}
EVT_VAR(1) = EVT_VAR(14);
await N(UseItemWithEffect);
await N(EatItem);
if (EVT_VAR(15) == 1) {
SetAnimation(ACTOR_PLAYER, 0, ANIM_STICK_OUT_TONGUE);
}
if (EVT_VAR(11) > 0) {
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 0;
EVT_VAR(1) += 35;
N(func_802A1378_715BC8)(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11));
}
if (EVT_VAR(12) > 0) {
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 20;
EVT_VAR(1) += 25;
N(func_802A1438_715C88)(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(12));
}
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 25;
func_802D7520(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11));
if (EVT_VAR(11) != 0) {
N(AddHP)(EVT_VAR(11));
}
if (EVT_VAR(12) != 0) {
N(AddFP)(EVT_VAR(12));
}
if (EVT_VAR(15) == 0) {
sleep 10;
SetAnimation(ACTOR_PLAYER, 0, ANIM_THUMBS_UP);
sleep 30;
} else {
sleep 30;
}
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
func_802D75D8(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11));
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
sleep 20;
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET(EVT_VAR(14), EVT_VAR(1))
EVT_CALL(GetMenuSelection, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_SET(EVT_VAR(10), EVT_VAR(1))
EVT_CALL(N(func_802A15A0_715DF0), EVT_VAR(10))
EVT_CALL(InitTargetIterator)
EVT_CALL(GetOwnerTarget, EVT_VAR(0), EVT_VAR(1))
EVT_IF_EQ(EVT_VAR(0), 256)
EVT_EXEC_WAIT(N(script6))
EVT_RETURN
EVT_END_IF
EVT_SET(EVT_VAR(1), EVT_VAR(14))
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_EXEC_WAIT(N(EatItem))
EVT_IF_EQ(EVT_VAR(15), 1)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_STICK_OUT_TONGUE)
EVT_END_IF
EVT_IF_GT(EVT_VAR(11), 0)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 0)
EVT_ADD(EVT_VAR(1), 35)
EVT_CALL(N(func_802A1378_715BC8), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11))
EVT_END_IF
EVT_IF_GT(EVT_VAR(12), 0)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 20)
EVT_ADD(EVT_VAR(1), 25)
EVT_CALL(N(func_802A1438_715C88), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(12))
EVT_END_IF
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 25)
EVT_CALL(func_802D7520, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11))
EVT_IF_NE(EVT_VAR(11), 0)
EVT_CALL(N(AddHP), EVT_VAR(11))
EVT_END_IF
EVT_IF_NE(EVT_VAR(12), 0)
EVT_CALL(N(AddFP), EVT_VAR(12))
EVT_END_IF
EVT_IF_EQ(EVT_VAR(15), 0)
EVT_WAIT_FRAMES(10)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_THUMBS_UP)
EVT_WAIT_FRAMES(30)
EVT_ELSE
EVT_WAIT_FRAMES(30)
EVT_END_IF
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(func_802D75D8, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11))
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_WAIT_FRAMES(20)
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_RETURN
EVT_END
};

View File

@ -273,48 +273,50 @@ s32 N(D_802A229C_72D84C)[8] = {
0x0000008A, 0x0000008C, 0x00000085, 0x0000008A
};
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_MYSTERY;
await N(UseItemWithEffect);
spawn {
sleep 220;
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_3F3);
}
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_368);
N(func_802A13E4_72C994)();
sleep 2;
if (EVT_VAR(0) != ITEM_PEBBLE) {
jump UseMystery;
return;
}
CreateVirtualEntity(EVT_VAR(10), N(modelCommandList));
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 150;
SetVirtualEntityPosition(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
SetOwnerTarget(0, 0);
SetGoalToTarget(ACTOR_SELF);
GetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
spawn {
EVT_VAR(0) = 0;
loop 18 {
EVT_VAR(0) += 0xFFFFFFC4;
SetVirtualEntityRotation(EVT_VAR(10), 0, 0, EVT_VAR(0));
sleep 1;
}
}
SetVirtualEntityJumpGravity(EVT_VAR(10), 0.6005859375);
EVT_VAR(2) += 5;
VirtualEntityJumpTo(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 12);
spawn {
EVT_VAR(0) += 60;
EVT_VAR(1) += 0;
VirtualEntityJumpTo(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 16);
DeleteVirtualEntity(EVT_VAR(10));
}
SetTargetActor(ACTOR_SELF, 0);
SetGoalToTarget(ACTOR_SELF);
GetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
N(func_802A188C_72CE3C)(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
SetBattleFlagBits(32, 1);
DispatchDamagePlayerEvent(1, EVENT_HIT);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x00000096)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_THREAD
EVT_WAIT_FRAMES(220)
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_3F3)
EVT_END_THREAD
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_368)
EVT_CALL(N(func_802A13E4_72C994))
EVT_WAIT_FRAMES(2)
EVT_IF_NE(EVT_VAR(0), 133)
EVT_JUMP(EVT_PTR(UseMystery))
EVT_RETURN
EVT_END_IF
EVT_CALL(CreateVirtualEntity, EVT_VAR(10), EVT_PTR(N(modelCommandList)))
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 150)
EVT_CALL(SetVirtualEntityPosition, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(SetOwnerTarget, 0, 0)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(GetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_THREAD
EVT_SET(EVT_VAR(0), 0)
EVT_LOOP(18)
EVT_ADD(EVT_VAR(0), -60)
EVT_CALL(SetVirtualEntityRotation, EVT_VAR(10), 0, 0, EVT_VAR(0))
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_END_THREAD
EVT_CALL(SetVirtualEntityJumpGravity, EVT_VAR(10), EVT_FIXED(0.6))
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(VirtualEntityJumpTo, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 12)
EVT_THREAD
EVT_ADD(EVT_VAR(0), 60)
EVT_ADD(EVT_VAR(1), 0)
EVT_CALL(VirtualEntityJumpTo, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 16)
EVT_CALL(DeleteVirtualEntity, EVT_VAR(10))
EVT_END_THREAD
EVT_CALL(SetTargetActor, ACTOR_SELF, ACTOR_PLAYER)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(GetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(N(func_802A188C_72CE3C), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(SetBattleFlagBits, 32, 1)
EVT_CALL(DispatchDamagePlayerEvent, 1, EVENT_HIT)
EVT_RETURN
EVT_END
};

View File

@ -44,47 +44,49 @@ s32 N(modelCommandList)[] = {
0x00000004, 0x0000000D, 0x00000001, sizeof(N(displayList)) / sizeof(s32), &N(displayList), 0x00000002, 0x00000000,
};
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_PEBBLE;
await N(UseItemWithEffect);
UseBattleCamPreset(3);
MoveBattleCamOver(15);
SetAnimation(ACTOR_PLAYER, 0, ANIM_THROW);
PlaySound(SOUND_THROW);
sleep 3;
CreateVirtualEntity(EVT_VAR(10), N(modelCommandList));
EVT_VAR(0) = 1.0;
MultiplyByActorScale(EVT_VAR(0));
SetVirtualEntityScale(EVT_VAR(10), EVT_VAR(0), EVT_VAR(0), EVT_VAR(0));
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(3) = 20;
EVT_VAR(4) = 42;
EVT_VAR(5) = 5;
MultiplyVec3ByActorScale(EVT_VAR(3), EVT_VAR(4), EVT_VAR(5));
EVT_VAR(0) += EVT_VAR(3);
EVT_VAR(1) += EVT_VAR(4);
EVT_VAR(2) += EVT_VAR(5);
SetVirtualEntityPosition(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
InitTargetIterator();
SetGoalToTarget(ACTOR_SELF);
GetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
spawn {
EVT_VAR(0) = 0;
loop 18 {
EVT_VAR(0) += 0xFFFFFFC4;
SetVirtualEntityRotation(EVT_VAR(10), 0, 0, EVT_VAR(0));
sleep 1;
}
}
SetVirtualEntityJumpGravity(EVT_VAR(10), 0.80078125);
EVT_VAR(2) += 5;
VirtualEntityJumpTo(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 18);
GetItemPower(ITEM_PEBBLE, EVT_VAR(3), EVT_VAR(4));
ApplyShrinkFromOwner(EVT_VAR(3));
ItemDamageEnemy(EVT_VAR(9), 0x18000000, 0, EVT_VAR(3), 32);
EVT_VAR(0) += 60;
EVT_VAR(1) += 0;
VirtualEntityJumpTo(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 16);
DeleteVirtualEntity(EVT_VAR(10));
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x00000085)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_CALL(UseBattleCamPreset, 3)
EVT_CALL(MoveBattleCamOver, 15)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_THROW)
EVT_CALL(PlaySound, SOUND_THROW)
EVT_WAIT_FRAMES(3)
EVT_CALL(CreateVirtualEntity, EVT_VAR(10), EVT_PTR(N(modelCommandList)))
EVT_SETF(EVT_VAR(0), EVT_FIXED(1.0))
EVT_CALL(MultiplyByActorScale, EVT_VAR(0))
EVT_CALL(SetVirtualEntityScale, EVT_VAR(10), EVT_VAR(0), EVT_VAR(0), EVT_VAR(0))
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_SET(EVT_VAR(3), 20)
EVT_SET(EVT_VAR(4), 42)
EVT_SET(EVT_VAR(5), 5)
EVT_CALL(MultiplyVec3ByActorScale, EVT_VAR(3), EVT_VAR(4), EVT_VAR(5))
EVT_ADD(EVT_VAR(0), EVT_VAR(3))
EVT_ADD(EVT_VAR(1), EVT_VAR(4))
EVT_ADD(EVT_VAR(2), EVT_VAR(5))
EVT_CALL(SetVirtualEntityPosition, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(InitTargetIterator)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(GetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_THREAD
EVT_SET(EVT_VAR(0), 0)
EVT_LOOP(18)
EVT_ADD(EVT_VAR(0), -60)
EVT_CALL(SetVirtualEntityRotation, EVT_VAR(10), 0, 0, EVT_VAR(0))
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_END_THREAD
EVT_CALL(SetVirtualEntityJumpGravity, EVT_VAR(10), EVT_FIXED(0.8))
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(VirtualEntityJumpTo, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 18)
EVT_CALL(GetItemPower, ITEM_PEBBLE, EVT_VAR(3), EVT_VAR(4))
EVT_CALL(ApplyShrinkFromOwner, EVT_VAR(3))
EVT_CALL(ItemDamageEnemy, EVT_VAR(9), 402653184, 0, EVT_VAR(3), 32)
EVT_ADD(EVT_VAR(0), 60)
EVT_ADD(EVT_VAR(1), 0)
EVT_CALL(VirtualEntityJumpTo, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 16)
EVT_CALL(DeleteVirtualEntity, EVT_VAR(10))
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_RETURN
EVT_END
};

View File

@ -4,16 +4,18 @@
#include "UseItem.inc.c"
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_DIZZY_DIAL;
await N(UseItemWithEffect);
SetGoalToHome(ACTOR_PLAYER);
SetJumpAnimations(ACTOR_PLAYER, 0, ANIM_MIDAIR_STILL, ANIM_MIDAIR, ANIM_10009);
SetActorSpeed(ACTOR_PLAYER, 4.0);
SetActorJumpGravity(ACTOR_PLAYER, 1.80078125);
func_80273444(4, 0, 0);
SetAnimation(ACTOR_PLAYER, 0, ANIM_8000B);
sleep 8;
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x0000009A)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_CALL(SetGoalToHome, ACTOR_PLAYER)
EVT_CALL(SetJumpAnimations, ACTOR_PLAYER, 0, ANIM_MIDAIR_STILL, ANIM_MIDAIR, ANIM_10009)
EVT_CALL(SetActorSpeed, ACTOR_PLAYER, EVT_FIXED(4.0))
EVT_CALL(SetActorJumpGravity, ACTOR_PLAYER, EVT_FIXED(1.8))
EVT_CALL(func_80273444, 4, 0, 0)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_8000B)
EVT_WAIT_FRAMES(8)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_RETURN
EVT_END
};

View File

@ -47,77 +47,79 @@ ApiStatus N(func_802A1318_718B68)(Evt* script, s32 isInitialCall) {
#include "UseItem.inc.c"
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_P_O_W_BLOCK;
await N(UseItemWithEffect);
sleep 10;
MakeEntity(0x802EA2E0, -40, 60, 0, 0, MAKE_ENTITY_END);
EVT_VAR(10) = EVT_VAR(0);
N(func_802A1318_718B68)();
PlayEffect(0x7, 2, -40, 60, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0);
PlayEffect(0x7, 2, -30, 65, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0);
PlayEffect(0x7, 2, -40, 60, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0);
PlayEffect(0x7, 2, -40, 55, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0);
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
sleep 20;
UseBattleCamPreset(2);
MoveBattleCamOver(20);
spawn {
sleep 15;
PlaySoundAtActor(ACTOR_PLAYER, SOUND_HIT_BLOCK);
N(func_802A123C_718A8C)();
PlayEffect(0x7, 2, -40, 60, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0);
PlayEffect(0x7, 2, -30, 65, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0);
PlayEffect(0x7, 2, -40, 60, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0);
PlayEffect(0x7, 2, -40, 55, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0);
StartRumble(4);
ShakeCam(1, 0, 2, 1.0);
ShakeCam(1, 0, 2, 3.0);
ShakeCam(1, 0, 2, 6.0);
ShakeCam(1, 0, 2, 5.0);
ShakeCam(1, 0, 2, 4.0);
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_2030);
ShakeCam(1, 0, 2, 3.0);
ShakeCam(1, 0, 2, 2.0);
ShakeCam(1, 0, 2, 1.0);
ShakeCam(1, 0, 2, 0.5);
ShakeCam(1, 0, 2, 0.2001953125);
}
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 30;
SetActorSpeed(ACTOR_PLAYER, 4.0);
SetAnimation(ACTOR_PLAYER, 0, ANIM_RUNNING);
SetGoalPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
PlayerRunToGoal(ACTOR_PLAYER);
sleep 5;
SetJumpAnimations(ACTOR_PLAYER, 0, ANIM_MIDAIR_STILL, ANIM_MIDAIR, ANIM_10009);
SetActorJumpGravity(ACTOR_PLAYER, 0.6005859375);
SetGoalPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
func_80273444(20, 0, 0);
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
UseBattleCamPreset(3);
MoveBattleCamOver(20);
InitTargetIterator();
0:
SetGoalToTarget(ACTOR_SELF);
ItemCheckHit(EVT_VAR(0), 0x10000000, 0, EVT_VAR(0), 0);
if (EVT_VAR(0) == 6) {
goto 1;
}
GetItemPower(ITEM_P_O_W_BLOCK, EVT_VAR(3), EVT_VAR(4));
ApplyShrinkFromOwner(EVT_VAR(3));
func_80269EAC(22);
ItemDamageEnemy(EVT_VAR(0), 0x38000400, 0, EVT_VAR(3), 32);
1:
ChooseNextTarget(0, EVT_VAR(0));
if (EVT_VAR(0) != -1) {
goto 0;
}
PlayEffect(0x7, 2, -70, 60, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0);
PlayEffect(0x7, 2, -60, 65, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0);
PlayEffect(0x7, 2, -70, 60, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0);
PlayEffect(0x7, 2, -70, 55, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0);
N(func_802A12E4_718B34)();
sleep 30;
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x00000090)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_WAIT_FRAMES(10)
EVT_CALL(MakeEntity, 0x802EA2E0, -40, 60, 0, 0, MAKE_ENTITY_END)
EVT_SET(EVT_VAR(10), EVT_VAR(0))
EVT_CALL(N(func_802A1318_718B68))
EVT_CALL(PlayEffect, 0x7, 2, -40, 60, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_CALL(PlayEffect, 0x7, 2, -30, 65, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_CALL(PlayEffect, 0x7, 2, -40, 60, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_CALL(PlayEffect, 0x7, 2, -40, 55, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_WAIT_FRAMES(20)
EVT_CALL(UseBattleCamPreset, 2)
EVT_CALL(MoveBattleCamOver, 20)
EVT_THREAD
EVT_WAIT_FRAMES(15)
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_HIT_BLOCK)
EVT_CALL(N(func_802A123C_718A8C))
EVT_CALL(PlayEffect, 0x7, 2, -40, 60, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_CALL(PlayEffect, 0x7, 2, -30, 65, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_CALL(PlayEffect, 0x7, 2, -40, 60, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_CALL(PlayEffect, 0x7, 2, -40, 55, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_CALL(StartRumble, 4)
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(1.0))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(3.0))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(6.0))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(5.0))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(4.0))
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_2030)
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(3.0))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(2.0))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(1.0))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(0.5))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(0.2))
EVT_END_THREAD
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 30)
EVT_CALL(SetActorSpeed, ACTOR_PLAYER, EVT_FIXED(4.0))
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_RUNNING)
EVT_CALL(SetGoalPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(PlayerRunToGoal, 0)
EVT_WAIT_FRAMES(5)
EVT_CALL(SetJumpAnimations, ACTOR_PLAYER, 0, ANIM_MIDAIR_STILL, ANIM_MIDAIR, ANIM_10009)
EVT_CALL(SetActorJumpGravity, ACTOR_PLAYER, EVT_FIXED(0.6))
EVT_CALL(SetGoalPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(func_80273444, 20, 0, 0)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_CALL(UseBattleCamPreset, 3)
EVT_CALL(MoveBattleCamOver, 20)
EVT_CALL(InitTargetIterator)
EVT_LABEL(0)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(ItemCheckHit, EVT_VAR(0), 268435456, 0, EVT_VAR(0), 0)
EVT_IF_EQ(EVT_VAR(0), 6)
EVT_GOTO(1)
EVT_END_IF
EVT_CALL(GetItemPower, ITEM_P_O_W_BLOCK, EVT_VAR(3), EVT_VAR(4))
EVT_CALL(ApplyShrinkFromOwner, EVT_VAR(3))
EVT_CALL(func_80269EAC, 22)
EVT_CALL(ItemDamageEnemy, EVT_VAR(0), 939525120, 0, EVT_VAR(3), 32)
EVT_LABEL(1)
EVT_CALL(ChooseNextTarget, 0, EVT_VAR(0))
EVT_IF_NE(EVT_VAR(0), -1)
EVT_GOTO(0)
EVT_END_IF
EVT_CALL(PlayEffect, 0x7, 2, -70, 60, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_CALL(PlayEffect, 0x7, 2, -60, 65, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_CALL(PlayEffect, 0x7, 2, -70, 60, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_CALL(PlayEffect, 0x7, 2, -70, 55, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_CALL(N(func_802A12E4_718B34))
EVT_WAIT_FRAMES(30)
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_RETURN
EVT_END
};

View File

@ -16,22 +16,24 @@ ApiStatus N(func_802A123C_72DDAC)(Evt* script, s32 isInitialCall) {
#include "UseItem.inc.c"
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_REPEL_GEL;
await N(UseItemWithEffect);
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_375);
SetAnimation(ACTOR_PLAYER, 0, ANIM_30008);
sleep 45;
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 20;
PlayEffect(0x33, 3, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1.0, 30, 0, 0, 0, 0, 0, 0, 0);
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_376);
GetItemPower(ITEM_REPEL_GEL, EVT_VAR(0), EVT_VAR(1));
N(func_802A123C_72DDAC)();
sleep 20;
ShowMessageBox(17, 60);
WaitForMessageBoxDone();
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x00000097)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_375)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_30008)
EVT_WAIT_FRAMES(45)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 20)
EVT_CALL(PlayEffect, 0x33, 3, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_FIXED(1.0), 30, 0, 0, 0, 0, 0, 0, 0)
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_376)
EVT_CALL(GetItemPower, ITEM_REPEL_GEL, EVT_VAR(0), EVT_VAR(1))
EVT_CALL(N(func_802A123C_72DDAC))
EVT_WAIT_FRAMES(20)
EVT_CALL(ShowMessageBox, 17, 60)
EVT_CALL(WaitForMessageBoxDone)
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_RETURN
EVT_END
};

View File

@ -93,73 +93,75 @@ ApiStatus N(func_802A14D4_71DC44)(Evt* script, s32 isInitialCall) {
#include "UseItem.inc.c"
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_SHOOTING_STAR;
await N(UseItemWithEffect);
spawn {
sleep 5;
UseBattleCamPreset(2);
MoveBattleCamOver(20);
}
N(func_802A1444_71DBB4)();
spawn {
EVT_VAR(0) = 0;
loop 10 {
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_259);
N(func_802A123C_71D9AC)();
EVT_VAR(0) += 1;
sleep 5;
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_25A);
N(func_802A123C_71D9AC)();
EVT_VAR(0) += 1;
sleep 5;
}
}
spawn {
EVT_VAR(0) = 0;
sleep 50;
loop 10 {
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_25C);
EVT_VAR(0) += 1;
sleep 5;
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_25D);
EVT_VAR(0) += 1;
sleep 5;
}
}
spawn {
loop 5 {
sleep 15;
StartRumble(8);
ShakeCam(1, 0, 5, 1.0);
}
}
sleep 90;
UseBattleCamPreset(3);
MoveBattleCamOver(20);
InitTargetIterator();
0:
SetGoalToTarget(ACTOR_SELF);
ItemCheckHit(EVT_VAR(0), 0x10000000, 0, EVT_VAR(0), 0);
if (EVT_VAR(0) == 6) {
goto 1;
}
GetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
N(func_802A1388_71DAF8)(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
GetItemPower(ITEM_SHOOTING_STAR, EVT_VAR(0), EVT_VAR(1));
ItemDamageEnemy(EVT_VAR(0), 0x38000100, 0, EVT_VAR(0), 32);
1:
sleep 10;
ChooseNextTarget(0, EVT_VAR(0));
if (EVT_VAR(0) != -1) {
goto 0;
}
sleep 20;
UseBattleCamPreset(2);
MoveBattleCamOver(20);
await N(PlayerGoHome);
spawn {
N(func_802A14D4_71DC44)();
}
sleep 30;
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x00000083)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_THREAD
EVT_WAIT_FRAMES(5)
EVT_CALL(UseBattleCamPreset, 2)
EVT_CALL(MoveBattleCamOver, 20)
EVT_END_THREAD
EVT_CALL(N(func_802A1444_71DBB4))
EVT_THREAD
EVT_SET(EVT_VAR(0), 0)
EVT_LOOP(10)
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_259)
EVT_CALL(N(func_802A123C_71D9AC))
EVT_ADD(EVT_VAR(0), 1)
EVT_WAIT_FRAMES(5)
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_25A)
EVT_CALL(N(func_802A123C_71D9AC))
EVT_ADD(EVT_VAR(0), 1)
EVT_WAIT_FRAMES(5)
EVT_END_LOOP
EVT_END_THREAD
EVT_THREAD
EVT_SET(EVT_VAR(0), 0)
EVT_WAIT_FRAMES(50)
EVT_LOOP(10)
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_25C)
EVT_ADD(EVT_VAR(0), 1)
EVT_WAIT_FRAMES(5)
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_25D)
EVT_ADD(EVT_VAR(0), 1)
EVT_WAIT_FRAMES(5)
EVT_END_LOOP
EVT_END_THREAD
EVT_THREAD
EVT_LOOP(5)
EVT_WAIT_FRAMES(15)
EVT_CALL(StartRumble, 8)
EVT_CALL(ShakeCam, 1, 0, 5, EVT_FIXED(1.0))
EVT_END_LOOP
EVT_END_THREAD
EVT_WAIT_FRAMES(90)
EVT_CALL(UseBattleCamPreset, 3)
EVT_CALL(MoveBattleCamOver, 20)
EVT_CALL(InitTargetIterator)
EVT_LABEL(0)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(ItemCheckHit, EVT_VAR(0), 268435456, 0, EVT_VAR(0), 0)
EVT_IF_EQ(EVT_VAR(0), 6)
EVT_GOTO(1)
EVT_END_IF
EVT_CALL(GetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(N(func_802A1388_71DAF8), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(GetItemPower, ITEM_SHOOTING_STAR, EVT_VAR(0), EVT_VAR(1))
EVT_CALL(ItemDamageEnemy, EVT_VAR(0), 939524352, 0, EVT_VAR(0), 32)
EVT_LABEL(1)
EVT_WAIT_FRAMES(10)
EVT_CALL(ChooseNextTarget, 0, EVT_VAR(0))
EVT_IF_NE(EVT_VAR(0), -1)
EVT_GOTO(0)
EVT_END_IF
EVT_WAIT_FRAMES(20)
EVT_CALL(UseBattleCamPreset, 2)
EVT_CALL(MoveBattleCamOver, 20)
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_THREAD
EVT_CALL(N(func_802A14D4_71DC44))
EVT_END_THREAD
EVT_WAIT_FRAMES(30)
EVT_RETURN
EVT_END
};

View File

@ -335,153 +335,155 @@ s32 N(modelCommandList)[] = {
0x00000002, 0x00000000,
};
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_SLEEPY_SHEEP;
await N(UseItemWithEffect);
UseBattleCamPreset(19);
SetBattleCamTarget(0xFFFFFFBD, 0xFFFFFFF1, 0xFFFFFFFB);
SetBattleCamOffsetZ(45);
SetBattleCamZoom(169);
MoveBattleCamOver(50);
spawn {
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_364);
loop 7 {
StartRumble(2);
ShakeCam(1, 0, 2, 0.5);
ShakeCam(1, 0, 2, 1.5);
ShakeCam(1, 0, 2, 0.5);
ShakeCam(1, 0, 2, 0.2001953125);
ShakeCam(1, 0, 2, 0.5);
ShakeCam(1, 0, 2, 2.0);
ShakeCam(1, 0, 2, 1.5);
ShakeCam(1, 0, 2, 1.0);
ShakeCam(1, 0, 2, 0.5);
ShakeCam(1, 0, 2, 0.25);
sleep 2;
ShakeCam(1, 0, 2, 0.5);
ShakeCam(1, 0, 2, 1.5);
ShakeCam(1, 0, 2, 0.5);
ShakeCam(1, 0, 2, 0.2001953125);
}
}
sleep 20;
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 32;
ShowEmote(0, EMOTE_QUESTION, -45, 20, 2, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 10);
sleep 30;
SetActorYaw(ACTOR_PLAYER, 30);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 60);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 90);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 120);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 150);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 180);
spawn {
N(func_802A123C_71E88C)();
}
InitTargetIterator();
spawn {
sleep 40;
N(func_802A1740_71ED90)();
N(func_802A1848_71EE98)();
}
UseBattleCamPreset(2);
MoveBattleCamOver(20);
sleep 8;
SetJumpAnimations(ACTOR_PLAYER, 0, ANIM_1002B, ANIM_1002B, ANIM_MIDAIR);
SetActorJumpGravity(ACTOR_PLAYER, 1.80078125);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
SetGoalPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
func_80273444(15, 0, 0);
spawn {
sleep 5;
SetActorYaw(ACTOR_PLAYER, 150);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 120);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 90);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 60);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 30);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 0);
}
sleep 40;
CreateVirtualEntity(EVT_VAR(10), N(modelCommandList));
EVT_VAR(7) = 0xFFFFFF38;
EVT_VAR(8) = 0;
EVT_VAR(9) = 0;
SetVirtualEntityPosition(EVT_VAR(10), EVT_VAR(7), EVT_VAR(8), EVT_VAR(9));
SetVirtualEntityScale(EVT_VAR(10), 0.7109375, 0.7109375, 0.7109375);
SetVirtualEntityMoveSpeed(EVT_VAR(10), 7.0);
SetVirtualEntityJumpGravity(EVT_VAR(10), 1.400390625);
SetOwnerTarget(0, 0);
SetGoalToTarget(ACTOR_PLAYER);
GetGoalPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) -= 60;
VirtualEntityMoveTo(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0);
GetGoalPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
VirtualEntityJumpTo(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0);
PlaySoundAtActor(ACTOR_PLAYER, SOUND_HIT_BLOCK);
spawn {
SetAnimation(ACTOR_PLAYER, 0, ANIM_SHOCK_STILL);
SetActorScale(ACTOR_PLAYER, 1.2001953125, 0.900390625, 1.0);
sleep 1;
SetActorScale(ACTOR_PLAYER, 1.30078125, 0.80078125, 1.0);
sleep 3;
SetActorScale(ACTOR_PLAYER, 1.2001953125, 0.900390625, 1.0);
sleep 1;
SetActorScale(ACTOR_PLAYER, 1.0, 1.0, 1.0);
}
PlayEffect(0x6, 3, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0, 0, 0, 0, 0, 0, 0, 0, 0);
sleep 2;
SetVirtualEntityJumpGravity(EVT_VAR(10), 1.400390625);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 60;
VirtualEntityJumpTo(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0);
PlayEffect(0x6, 2, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0, 0, 0, 0, 0, 0, 0, 0, 0);
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
EVT_VAR(0) += 20;
VirtualEntityJumpTo(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0);
PlayEffect(0x6, 2, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0, 0, 0, 0, 0, 0, 0, 0, 0);
EVT_VAR(0) += 10;
VirtualEntityJumpTo(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0);
PlayEffect(0x6, 2, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0, 0, 0, 0, 0, 0, 0, 0, 0);
sleep 5;
spawn {
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 270;
VirtualEntityMoveTo(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0);
DeleteVirtualEntity(EVT_VAR(10));
}
sleep 30;
UseBattleCamPreset(3);
MoveBattleCamOver(20);
InitTargetIterator();
0:
SetGoalToTarget(ACTOR_SELF);
ItemCheckHit(EVT_VAR(0), 0x10000000, 0, EVT_VAR(0), 0);
if (EVT_VAR(0) == 6) {
goto 1;
}
GetItemPower(ITEM_SLEEPY_SHEEP, EVT_VAR(0), EVT_VAR(1));
MakeStatusField(EVT_VAR(0), 4096, 100, EVT_VAR(0));
func_80252B3C(EVT_VAR(0), 0x50000000, EVT_VAR(0), 0, 32);
1:
sleep 5;
ChooseNextTarget(0, EVT_VAR(0));
if (EVT_VAR(0) != -1) {
goto 0;
}
sleep 30;
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x0000008F)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_CALL(UseBattleCamPreset, 19)
EVT_CALL(SetBattleCamTarget, -67, -15, -5)
EVT_CALL(SetBattleCamOffsetZ, 45)
EVT_CALL(SetBattleCamZoom, 169)
EVT_CALL(MoveBattleCamOver, 50)
EVT_THREAD
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_364)
EVT_LOOP(7)
EVT_CALL(StartRumble, 2)
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(0.5))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(1.5))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(0.5))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(0.2))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(0.5))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(2.0))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(1.5))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(1.0))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(0.5))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(0.25))
EVT_WAIT_FRAMES(2)
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(0.5))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(1.5))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(0.5))
EVT_CALL(ShakeCam, 1, 0, 2, EVT_FIXED(0.2))
EVT_END_LOOP
EVT_END_THREAD
EVT_WAIT_FRAMES(20)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 32)
EVT_CALL(ShowEmote, 0, EMOTE_QUESTION, -45, 20, 2, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 10)
EVT_WAIT_FRAMES(30)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 30)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 60)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 90)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 120)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 150)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 180)
EVT_THREAD
EVT_CALL(N(func_802A123C_71E88C))
EVT_END_THREAD
EVT_CALL(InitTargetIterator)
EVT_THREAD
EVT_WAIT_FRAMES(40)
EVT_CALL(N(func_802A1740_71ED90))
EVT_CALL(N(func_802A1848_71EE98))
EVT_END_THREAD
EVT_CALL(UseBattleCamPreset, 2)
EVT_CALL(MoveBattleCamOver, 20)
EVT_WAIT_FRAMES(8)
EVT_CALL(SetJumpAnimations, ACTOR_PLAYER, 0, ANIM_1002B, ANIM_1002B, ANIM_MIDAIR)
EVT_CALL(SetActorJumpGravity, ACTOR_PLAYER, EVT_FIXED(1.8))
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(SetGoalPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(func_80273444, 15, 0, 0)
EVT_THREAD
EVT_WAIT_FRAMES(5)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 150)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 120)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 90)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 60)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 30)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 0)
EVT_END_THREAD
EVT_WAIT_FRAMES(40)
EVT_CALL(CreateVirtualEntity, EVT_VAR(10), EVT_PTR(N(modelCommandList)))
EVT_SET(EVT_VAR(7), -200)
EVT_SET(EVT_VAR(8), 0)
EVT_SET(EVT_VAR(9), 0)
EVT_CALL(SetVirtualEntityPosition, EVT_VAR(10), EVT_VAR(7), EVT_VAR(8), EVT_VAR(9))
EVT_CALL(SetVirtualEntityScale, EVT_VAR(10), EVT_FIXED(0.71), EVT_FIXED(0.71), EVT_FIXED(0.71))
EVT_CALL(SetVirtualEntityMoveSpeed, EVT_VAR(10), EVT_FIXED(7.0))
EVT_CALL(SetVirtualEntityJumpGravity, EVT_VAR(10), EVT_FIXED(1.4))
EVT_CALL(SetOwnerTarget, 0, 0)
EVT_CALL(SetGoalToTarget, ACTOR_PLAYER)
EVT_CALL(GetGoalPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_SUB(EVT_VAR(0), 60)
EVT_CALL(VirtualEntityMoveTo, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0)
EVT_CALL(GetGoalPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(VirtualEntityJumpTo, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0)
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_HIT_BLOCK)
EVT_THREAD
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_SHOCK_STILL)
EVT_CALL(SetActorScale, ACTOR_PLAYER, EVT_FIXED(1.2), EVT_FIXED(0.9), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_PLAYER, EVT_FIXED(1.3), EVT_FIXED(0.8), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(3)
EVT_CALL(SetActorScale, ACTOR_PLAYER, EVT_FIXED(1.2), EVT_FIXED(0.9), EVT_FIXED(1.0))
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorScale, ACTOR_PLAYER, EVT_FIXED(1.0), EVT_FIXED(1.0), EVT_FIXED(1.0))
EVT_END_THREAD
EVT_CALL(PlayEffect, 0x6, 3, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_WAIT_FRAMES(2)
EVT_CALL(SetVirtualEntityJumpGravity, EVT_VAR(10), EVT_FIXED(1.4))
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 60)
EVT_CALL(VirtualEntityJumpTo, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0)
EVT_CALL(PlayEffect, 0x6, 2, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_ADD(EVT_VAR(0), 20)
EVT_CALL(VirtualEntityJumpTo, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0)
EVT_CALL(PlayEffect, 0x6, 2, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_ADD(EVT_VAR(0), 10)
EVT_CALL(VirtualEntityJumpTo, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0)
EVT_CALL(PlayEffect, 0x6, 2, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_WAIT_FRAMES(5)
EVT_THREAD
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 270)
EVT_CALL(VirtualEntityMoveTo, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0)
EVT_CALL(DeleteVirtualEntity, EVT_VAR(10))
EVT_END_THREAD
EVT_WAIT_FRAMES(30)
EVT_CALL(UseBattleCamPreset, 3)
EVT_CALL(MoveBattleCamOver, 20)
EVT_CALL(InitTargetIterator)
EVT_LABEL(0)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(ItemCheckHit, EVT_VAR(0), 268435456, 0, EVT_VAR(0), 0)
EVT_IF_EQ(EVT_VAR(0), 6)
EVT_GOTO(1)
EVT_END_IF
EVT_CALL(GetItemPower, ITEM_SLEEPY_SHEEP, EVT_VAR(0), EVT_VAR(1))
EVT_CALL(MakeStatusField, EVT_VAR(0), 4096, 100, EVT_VAR(0))
EVT_CALL(func_80252B3C, EVT_VAR(0), 1342177280, EVT_VAR(0), 0, 32)
EVT_LABEL(1)
EVT_WAIT_FRAMES(5)
EVT_CALL(ChooseNextTarget, 0, EVT_VAR(0))
EVT_IF_NE(EVT_VAR(0), -1)
EVT_GOTO(0)
EVT_END_IF
EVT_WAIT_FRAMES(30)
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_RETURN
EVT_END
};
s32 D_802A3E88_7214D8[] = {
0, 0

View File

@ -35,70 +35,72 @@ ApiStatus N(func_802A13B8_71C1E8)(Evt* script, s32 isInitialCall) {
#include "UseItem.inc.c"
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_SNOWMAN_DOLL;
await N(UseItemWithEffect);
N(FadeBackgroundToBlack)();
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_363);
spawn {
loop 45 {
RandInt(300, EVT_VAR(0));
EVT_VAR(0) -= 150;
EVT_VAR(1) = 170;
RandInt(50, EVT_VAR(2));
EVT_VAR(2) -= 25;
PlayEffect(0xE, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 60, 0, 0, 0, 0, 0, 0, 0, 0, 0);
sleep 2;
}
}
sleep 10;
UseBattleCamPreset(3);
MoveBattleCamOver(50);
sleep 50;
PlayEffect(0x60, 0, 0, 0, 20, 1.0, 160, 0, 0, 0, 0, 0, 0, 0);
spawn {
sleep 17;
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_202E);
StartRumble(9);
ShakeCam(1, 0, 5, 1.0);
sleep 46;
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_202E);
StartRumble(9);
ShakeCam(1, 0, 5, 1.0);
sleep 25;
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_202E);
StartRumble(9);
ShakeCam(1, 0, 5, 1.0);
sleep 25;
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_202E);
StartRumble(9);
ShakeCam(1, 0, 5, 1.0);
}
sleep 15;
StartRumble(10);
ShakeCam(1, 0, 5, 1.0);
ShakeCam(1, 0, 10, 2.0);
ShakeCam(1, 0, 5, 1.0);
sleep 110;
InitTargetIterator();
0:
SetGoalToTarget(ACTOR_SELF);
ItemCheckHit(EVT_VAR(0), 0x10000000, 0, EVT_VAR(0), 0);
if (EVT_VAR(0) == 6) {
goto 1;
}
GetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
N(func_802A123C_71C06C)(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
GetItemPower(ITEM_SNOWMAN_DOLL, EVT_VAR(0), EVT_VAR(1));
ItemDamageEnemy(EVT_VAR(0), 0x38000008, 0, EVT_VAR(0), 32);
sleep 5;
1:
ChooseNextTarget(0, EVT_VAR(0));
if (EVT_VAR(0) != -1) {
goto 0;
}
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
sleep 30;
N(func_802A13B8_71C1E8)();
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x00000081)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_CALL(N(FadeBackgroundToBlack))
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_363)
EVT_THREAD
EVT_LOOP(45)
EVT_CALL(RandInt, 300, EVT_VAR(0))
EVT_SUB(EVT_VAR(0), 150)
EVT_SET(EVT_VAR(1), 170)
EVT_CALL(RandInt, 50, EVT_VAR(2))
EVT_SUB(EVT_VAR(2), 25)
EVT_CALL(PlayEffect, 0xE, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 60, 0, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_WAIT_FRAMES(2)
EVT_END_LOOP
EVT_END_THREAD
EVT_WAIT_FRAMES(10)
EVT_CALL(UseBattleCamPreset, 3)
EVT_CALL(MoveBattleCamOver, 50)
EVT_WAIT_FRAMES(50)
EVT_CALL(PlayEffect, 0x60, 0, 0, 0, 20, EVT_FIXED(1.0), 160, 0, 0, 0, 0, 0, 0, 0)
EVT_THREAD
EVT_WAIT_FRAMES(17)
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_202E)
EVT_CALL(StartRumble, 9)
EVT_CALL(ShakeCam, 1, 0, 5, EVT_FIXED(1.0))
EVT_WAIT_FRAMES(46)
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_202E)
EVT_CALL(StartRumble, 9)
EVT_CALL(ShakeCam, 1, 0, 5, EVT_FIXED(1.0))
EVT_WAIT_FRAMES(25)
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_202E)
EVT_CALL(StartRumble, 9)
EVT_CALL(ShakeCam, 1, 0, 5, EVT_FIXED(1.0))
EVT_WAIT_FRAMES(25)
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_202E)
EVT_CALL(StartRumble, 9)
EVT_CALL(ShakeCam, 1, 0, 5, EVT_FIXED(1.0))
EVT_END_THREAD
EVT_WAIT_FRAMES(15)
EVT_CALL(StartRumble, 10)
EVT_CALL(ShakeCam, 1, 0, 5, EVT_FIXED(1.0))
EVT_CALL(ShakeCam, 1, 0, 10, EVT_FIXED(2.0))
EVT_CALL(ShakeCam, 1, 0, 5, EVT_FIXED(1.0))
EVT_WAIT_FRAMES(110)
EVT_CALL(InitTargetIterator)
EVT_LABEL(0)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(ItemCheckHit, EVT_VAR(0), 268435456, 0, EVT_VAR(0), 0)
EVT_IF_EQ(EVT_VAR(0), 6)
EVT_GOTO(1)
EVT_END_IF
EVT_CALL(GetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(N(func_802A123C_71C06C), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(GetItemPower, ITEM_SNOWMAN_DOLL, EVT_VAR(0), EVT_VAR(1))
EVT_CALL(ItemDamageEnemy, EVT_VAR(0), 939524104, 0, EVT_VAR(0), 32)
EVT_WAIT_FRAMES(5)
EVT_LABEL(1)
EVT_CALL(ChooseNextTarget, 0, EVT_VAR(0))
EVT_IF_NE(EVT_VAR(0), -1)
EVT_GOTO(0)
EVT_END_IF
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_WAIT_FRAMES(30)
EVT_CALL(N(func_802A13B8_71C1E8))
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_RETURN
EVT_END
};

View File

@ -47,16 +47,18 @@ ApiStatus N(func_802A123C_7217DC)(Evt* script, s32 isInitialCall) {
#include "UseItem.inc.c"
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_STONE_CAP;
await N(UseItemWithEffect);
PlaySound(SOUND_UNKNOWN_361);
SetAnimation(ACTOR_PLAYER, 0, ANIM_30009);
sleep 30;
SetAnimation(ACTOR_PLAYER, 0, ANIM_CROUCH);
GetItemPower(ITEM_STONE_CAP, EVT_VAR(0), EVT_VAR(1));
PlaySound(SOUND_UNKNOWN_362);
N(func_802A123C_7217DC)();
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
sleep 20;
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x00000088)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_CALL(PlaySound, SOUND_UNKNOWN_361)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_30009)
EVT_WAIT_FRAMES(30)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_CROUCH)
EVT_CALL(GetItemPower, ITEM_STONE_CAP, EVT_VAR(0), EVT_VAR(1))
EVT_CALL(PlaySound, SOUND_UNKNOWN_362)
EVT_CALL(N(func_802A123C_7217DC))
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_WAIT_FRAMES(20)
EVT_RETURN
EVT_END
};

View File

@ -22,36 +22,38 @@ ApiStatus N(func_802A12D4_7270A4)(Evt* script, s32 isInitialCall) {
#include "UseItem.inc.c"
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_STOP_WATCH;
await N(UseItemWithEffect);
spawn {
sleep 5;
UseBattleCamPreset(2);
MoveBattleCamOver(20);
}
N(FadeBackgroundToBlack)();
PlayEffect(0x62, 0, 0, 0, 0, 1.0, 200, 0, 0, 0, 0, 0, 0, 0);
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_246);
sleep 200;
UseBattleCamPreset(3);
MoveBattleCamOver(20);
InitTargetIterator();
0:
SetGoalToTarget(ACTOR_SELF);
ItemCheckHit(EVT_VAR(0), 0x10000000, 0, EVT_VAR(0), 0);
if (EVT_VAR(0) == 6) {
goto 1;
}
GetItemPower(ITEM_STOP_WATCH, EVT_VAR(0), EVT_VAR(1));
MakeStatusField(EVT_VAR(0), 0x200000, 100, EVT_VAR(0));
func_80252B3C(EVT_VAR(0), 0x50000000, EVT_VAR(0), 0, 32);
1:
sleep 5;
ChooseNextTarget(0, EVT_VAR(0));
if (EVT_VAR(0) != -1) {
goto 0;
}
N(func_802A12D4_7270A4)();
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x00000092)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_THREAD
EVT_WAIT_FRAMES(5)
EVT_CALL(UseBattleCamPreset, 2)
EVT_CALL(MoveBattleCamOver, 20)
EVT_END_THREAD
EVT_CALL(N(FadeBackgroundToBlack))
EVT_CALL(PlayEffect, 0x62, 0, 0, 0, 0, EVT_FIXED(1.0), 200, 0, 0, 0, 0, 0, 0, 0)
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_246)
EVT_WAIT_FRAMES(200)
EVT_CALL(UseBattleCamPreset, 3)
EVT_CALL(MoveBattleCamOver, 20)
EVT_CALL(InitTargetIterator)
EVT_LABEL(0)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(ItemCheckHit, EVT_VAR(0), 268435456, 0, EVT_VAR(0), 0)
EVT_IF_EQ(EVT_VAR(0), 6)
EVT_GOTO(1)
EVT_END_IF
EVT_CALL(GetItemPower, ITEM_STOP_WATCH, EVT_VAR(0), EVT_VAR(1))
EVT_CALL(MakeStatusField, EVT_VAR(0), 2097152, 100, EVT_VAR(0))
EVT_CALL(func_80252B3C, EVT_VAR(0), 1342177280, EVT_VAR(0), 0, 32)
EVT_LABEL(1)
EVT_WAIT_FRAMES(5)
EVT_CALL(ChooseNextTarget, 0, EVT_VAR(0))
EVT_IF_NE(EVT_VAR(0), -1)
EVT_GOTO(0)
EVT_END_IF
EVT_CALL(N(func_802A12D4_7270A4))
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_RETURN
EVT_END
};

View File

@ -321,89 +321,94 @@ s32 N(D_802A2858_732B58)[] = {
0x00000000, 0x00000001, 0x00000002, 0x00000000, 0x00000001, 0x000000000
};
EvtSource N(script6) = SCRIPT({
GetMenuSelection(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
if (EVT_VAR(1) == 211) {
EVT_VAR(10) = (const) ITEM_KOOKY_COOKIE;
EVT_VAR(1) = 0;
await N(UseItemWithEffect);
await N(EatItem);
N(func_802A1A8C_731D8C)();
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 20;
EVT_VAR(1) += 25;
N(func_802A18D8_731BD8)(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3));
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 25;
func_802D7520(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3));
N(AddFP)(EVT_VAR(3));
sleep 10;
SetAnimation(ACTOR_PLAYER, 0, ANIM_THUMBS_UP);
sleep 30;
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
func_802D75D8(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3));
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
sleep 20;
SetAnimation(ACTOR_PLAYER, 0, ANIM_GOT_ITEM);
} else {
EVT_VAR(10) = (const) ITEM_STRANGE_CAKE;
EVT_VAR(1) = 0;
await N(UseItemWithEffect);
await N(EatItem);
SetAnimation(ACTOR_PLAYER, 0, ANIM_GOT_ITEM);
}
sleep 10;
spawn {
sleep 220;
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_3F3);
}
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_368);
N(func_802A13E4_7316E4)();
sleep 2;
match EVT_VAR(0) {
== 0 {
await N(script7);
}
== 1 {
await N(script8);
}
== 2 {
await N(script9);
}
}
await N(PlayerGoHome);
});
EvtSource N(script6) = {
EVT_CALL(GetMenuSelection, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_IF_EQ(EVT_VAR(1), 211)
EVT_SET_CONST(EVT_VAR(10), 0xD3)
EVT_SET(EVT_VAR(1), 0)
EVT_EXEC_WAIT(battle_item_strange_cake_UseItemWithEffect)
EVT_EXEC_WAIT(battle_item_strange_cake_EatItem)
EVT_CALL(battle_item_strange_cake_func_802A1A8C_731D8C)
EVT_CALL(GetActorPos, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 20)
EVT_ADD(EVT_VAR(1), 25)
EVT_CALL(battle_item_strange_cake_func_802A18D8_731BD8, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3))
EVT_CALL(GetActorPos, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 25)
EVT_CALL(func_802D7520, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3))
EVT_CALL(battle_item_strange_cake_AddFP, EVT_VAR(3))
EVT_WAIT_FRAMES(10)
EVT_CALL(SetAnimation, 0, 0, 65586)
EVT_WAIT_FRAMES(30)
EVT_CALL(GetActorPos, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(func_802D75D8, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3))
EVT_CALL(SetAnimation, 0, 0, 65538)
EVT_WAIT_FRAMES(20)
EVT_CALL(SetAnimation, 0, 0, 65567)
EVT_ELSE
EVT_SET_CONST(EVT_VAR(10), 0xD2)
EVT_SET(EVT_VAR(1), 0)
EVT_EXEC_WAIT(battle_item_strange_cake_UseItemWithEffect)
EVT_EXEC_WAIT(battle_item_strange_cake_EatItem)
EVT_CALL(SetAnimation, 0, 0, 65567)
EVT_END_IF
EVT_WAIT_FRAMES(10)
EVT_THREAD
EVT_WAIT_FRAMES(220)
EVT_CALL(PlaySoundAtActor, 0, 1011)
EVT_END_THREAD
EVT_CALL(PlaySoundAtActor, 0, 872)
EVT_CALL(battle_item_strange_cake_func_802A13E4_7316E4)
EVT_WAIT_FRAMES(2)
EVT_SWITCH(EVT_VAR(0))
EVT_CASE_EQ(0)
EVT_EXEC_WAIT(battle_item_strange_cake_script7)
EVT_CASE_EQ(1)
EVT_EXEC_WAIT(battle_item_strange_cake_script8)
EVT_CASE_EQ(2)
EVT_EXEC_WAIT(battle_item_strange_cake_script9)
EVT_END_SWITCH
EVT_EXEC_WAIT(battle_item_strange_cake_PlayerGoHome)
EVT_RETURN
EVT_END
};
EvtSource N(script7) = SCRIPT({
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 20;
PlayEffect(0x57, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1.0, 30, 0, 0, 0, 0, 0, 0, 0);
N(func_802A1AD8_731DD8)();
sleep 20;
ShowMessageBox(16, 60);
WaitForMessageBoxDone();
});
EvtSource N(script7) = {
EVT_CALL(SetAnimation, 0, 0, 65538)
EVT_CALL(GetActorPos, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 20)
EVT_CALL(PlayEffect, 87, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_FIXED(1.0), 30, 0, 0, 0, 0, 0, 0, 0)
EVT_CALL(battle_item_strange_cake_func_802A1AD8_731DD8)
EVT_WAIT_FRAMES(20)
EVT_CALL(ShowMessageBox, 16, 60)
EVT_CALL(WaitForMessageBoxDone)
EVT_RETURN
EVT_END
};
EvtSource N(script8) = SCRIPT({
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 20;
PlayEffect(0x33, 6, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1.0, 30, 0, 0, 0, 0, 0, 0, 0);
N(func_802A1B14_731E14)();
sleep 20;
ShowMessageBox(17, 60);
WaitForMessageBoxDone();
});
EvtSource N(script8) = {
EVT_CALL(SetAnimation, 0, 0, 65538)
EVT_CALL(GetActorPos, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 20)
EVT_CALL(PlayEffect, 51, 6, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_FIXED(1.0), 30, 0, 0, 0, 0, 0, 0, 0)
EVT_CALL(battle_item_strange_cake_func_802A1B14_731E14)
EVT_WAIT_FRAMES(20)
EVT_CALL(ShowMessageBox, 17, 60)
EVT_CALL(WaitForMessageBoxDone)
EVT_RETURN
EVT_END
};
EvtSource N(script9) = SCRIPT({
SetAnimation(ACTOR_PLAYER, 0, ANIM_30004);
SetGoalToTarget(ACTOR_PLAYER);
GetGoalPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
spawn DoSleepHit;
N(func_802A1B68_731E68)();
sleep 20;
ShowMessageBox(11, 60);
WaitForMessageBoxDone();
});
EvtSource N(script9) = {
EVT_CALL(SetAnimation, 0, 0, 196612)
EVT_CALL(SetGoalToTarget, 0)
EVT_CALL(GetGoalPos, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_EXEC(DoSleepHit)
EVT_CALL(battle_item_strange_cake_func_802A1B68_731E68)
EVT_WAIT_FRAMES(20)
EVT_CALL(ShowMessageBox, 11, 60)
EVT_CALL(WaitForMessageBoxDone)
EVT_RETURN
EVT_END
};

View File

@ -83,115 +83,119 @@ ApiStatus N(func_802A1418_7250F8)(Evt* script, s32 isInitialCall) {
#include "UseItem.inc.c"
EvtSource N(script6) = SCRIPT({
SetActorYaw(ACTOR_PLAYER, 30);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 60);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 90);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 120);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 150);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 180);
sleep 10;
EVT_VAR(1) = EVT_VAR(15);
await N(UseItem);
EVT_VAR(14) = EVT_VAR(10);
SetAnimation(ACTOR_PLAYER, 0, ANIM_THROW);
spawn {
sleep 20;
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
}
CreateVirtualEntity(EVT_VAR(10), 0x80283EE8);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 0;
EVT_VAR(1) += 30;
EVT_VAR(2) += 5;
SetVirtualEntityPosition(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
SetVirtualEntityFlags(EVT_VAR(10), 32);
spawn {
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 45;
MakeItemEntity(EVT_VAR(14), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1, 0);
EVT_VAR(14) = EVT_VAR(0);
loop 25 {
GetVirtualEntityPosition(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
N(func_802A123C_724F1C)(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
sleep 1;
}
RemoveItemEntity(EVT_VAR(14));
}
InitTargetIterator();
SetGoalToTarget(ACTOR_SELF);
GetGoalPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
SetBattleCamTarget(0xFFFFFF83, 1, 0);
SetBattleCamOffsetZ(41);
SetBattleCamZoom(248);
MoveBattleCamOver(25);
SetVirtualEntityJumpGravity(EVT_VAR(10), 0.400390625);
EVT_VAR(2) += 5;
VirtualEntityJumpTo(EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 25);
AddBattleCamZoom(100);
MoveBattleCamOver(30);
GetActorPos(ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 25;
func_802D7520(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11));
if (EVT_VAR(11) > 0) {
N(func_802A12EC_724FCC)(EVT_VAR(11));
}
sleep 30;
GetActorPos(ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
func_802D75D8(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11));
sleep 20;
SetActorYaw(ACTOR_PLAYER, 150);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 120);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 90);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 60);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 30);
sleep 1;
SetActorYaw(ACTOR_PLAYER, 0);
sleep 10;
});
EvtSource N(script6) = {
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 30)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 60)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 90)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 120)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 150)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 180)
EVT_WAIT_FRAMES(10)
EVT_SET(EVT_VAR(1), EVT_VAR(15))
EVT_EXEC_WAIT(N(UseItem))
EVT_SET(EVT_VAR(14), EVT_VAR(10))
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_THROW)
EVT_THREAD
EVT_WAIT_FRAMES(20)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_END_THREAD
EVT_CALL(CreateVirtualEntity, EVT_VAR(10), 0x80283EE8)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 0)
EVT_ADD(EVT_VAR(1), 30)
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(SetVirtualEntityPosition, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(SetVirtualEntityFlags, EVT_VAR(10), 32)
EVT_THREAD
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 45)
EVT_CALL(MakeItemEntity, EVT_VAR(14), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1, 0)
EVT_SET(EVT_VAR(14), EVT_VAR(0))
EVT_LOOP(25)
EVT_CALL(GetVirtualEntityPosition, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(N(func_802A123C_724F1C), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_CALL(RemoveItemEntity, EVT_VAR(14))
EVT_END_THREAD
EVT_CALL(InitTargetIterator)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(GetGoalPos, ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(SetBattleCamTarget, -125, 1, 0)
EVT_CALL(SetBattleCamOffsetZ, 41)
EVT_CALL(SetBattleCamZoom, 248)
EVT_CALL(MoveBattleCamOver, 25)
EVT_CALL(SetVirtualEntityJumpGravity, EVT_VAR(10), EVT_FIXED(0.4))
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(VirtualEntityJumpTo, EVT_VAR(10), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 25)
EVT_CALL(AddBattleCamZoom, 100)
EVT_CALL(MoveBattleCamOver, 30)
EVT_CALL(GetActorPos, ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 25)
EVT_CALL(func_802D7520, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11))
EVT_IF_GT(EVT_VAR(11), 0)
EVT_CALL(N(func_802A12EC_724FCC), EVT_VAR(11))
EVT_END_IF
EVT_WAIT_FRAMES(30)
EVT_CALL(GetActorPos, ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(func_802D75D8, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(11))
EVT_WAIT_FRAMES(20)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 150)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 120)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 90)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 60)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 30)
EVT_WAIT_FRAMES(1)
EVT_CALL(SetActorYaw, ACTOR_PLAYER, 0)
EVT_WAIT_FRAMES(10)
EVT_RETURN
EVT_END
};
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_SUPER_SODA;
await N(UseItemWithEffect);
InitTargetIterator();
GetOwnerTarget(EVT_VAR(0), EVT_VAR(1));
if (EVT_VAR(0) == ACTOR_PLAYER) {
PlaySoundAtActor(ACTOR_PLAYER, SOUND_UNKNOWN_2095);
SetAnimation(ACTOR_PLAYER, 0, ANIM_DRINK);
sleep 45;
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 0;
EVT_VAR(1) += 35;
N(func_802A1418_7250F8)(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 5);
N(AddFP)(5);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 25;
func_802D7520(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 5);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 20;
SetAnimation(ACTOR_PLAYER, 0, ANIM_THUMBS_UP);
sleep 30;
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
func_802D75D8(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 5);
InitTargetIterator();
GetOwnerTarget(EVT_VAR(0), EVT_VAR(1));
N(func_802A1378_725058)(ACTOR_PLAYER);
sleep 20;
} else {
EVT_VAR(11) = 0;
EVT_VAR(12) = 0;
EVT_VAR(15) = 0;
await N(script6);
}
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x0000009B)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_CALL(InitTargetIterator)
EVT_CALL(GetOwnerTarget, EVT_VAR(0), EVT_VAR(1))
EVT_IF_EQ(EVT_VAR(0), 0)
EVT_CALL(PlaySoundAtActor, ACTOR_PLAYER, SOUND_UNKNOWN_2095)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_DRINK)
EVT_WAIT_FRAMES(45)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 0)
EVT_ADD(EVT_VAR(1), 35)
EVT_CALL(N(func_802A1418_7250F8), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 5)
EVT_CALL(N(AddFP), 5)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 25)
EVT_CALL(func_802D7520, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 5)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 20)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_THUMBS_UP)
EVT_WAIT_FRAMES(30)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_CALL(func_802D75D8, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 5)
EVT_CALL(InitTargetIterator)
EVT_CALL(GetOwnerTarget, EVT_VAR(0), EVT_VAR(1))
EVT_CALL(N(func_802A1378_725058), 0)
EVT_WAIT_FRAMES(20)
EVT_ELSE
EVT_SET(EVT_VAR(11), 0)
EVT_SET(EVT_VAR(12), 0)
EVT_SET(EVT_VAR(15), 0)
EVT_EXEC_WAIT(N(script6))
EVT_END_IF
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_RETURN
EVT_END
};

View File

@ -29,40 +29,42 @@ ApiStatus N(func_802A123C_72223C)(Evt* script, s32 isInitialCall) {
#include "UseItem.inc.c"
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_TASTY_TONIC;
await N(UseItemWithEffect);
InitTargetIterator();
GetOwnerTarget(EVT_VAR(0), EVT_VAR(1));
if (EVT_VAR(0) == 0) {
await N(DrinkItem);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 25;
EVT_VAR(2) += 5;
func_802D7520(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 10);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 20;
SetAnimation(ACTOR_PLAYER, 0, ANIM_THUMBS_UP);
sleep 30;
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(2) += 5;
func_802D75D8(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 10);
N(func_802A123C_72223C)(ACTOR_PLAYER);
sleep 20;
} else {
GetActorPos(ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 25;
EVT_VAR(2) += 5;
func_802D7520(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 5);
GetActorPos(ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 20;
sleep 30;
GetActorPos(ACTOR_PARTNER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(2) += 5;
func_802D75D8(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 5);
N(func_802A123C_72223C)(ACTOR_PARTNER);
sleep 20;
}
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x89)
EVT_EXEC_WAIT(battle_item_tasty_tonic_UseItemWithEffect)
EVT_CALL(InitTargetIterator)
EVT_CALL(GetOwnerTarget, EVT_VAR(0), EVT_VAR(1))
EVT_IF_EQ(EVT_VAR(0), 0)
EVT_EXEC_WAIT(battle_item_tasty_tonic_DrinkItem)
EVT_CALL(GetActorPos, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 25)
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(func_802D7520, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 10)
EVT_CALL(GetActorPos, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 20)
EVT_CALL(SetAnimation, 0, 0, 65586)
EVT_WAIT_FRAMES(30)
EVT_CALL(SetAnimation, 0, 0, 65538)
EVT_CALL(GetActorPos, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(func_802D75D8, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 10)
EVT_CALL(battle_item_tasty_tonic_func_802A123C_72223C, 0)
EVT_WAIT_FRAMES(20)
EVT_ELSE
EVT_CALL(GetActorPos, 256, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 25)
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(func_802D7520, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 5)
EVT_CALL(GetActorPos, 256, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 20)
EVT_WAIT_FRAMES(30)
EVT_CALL(GetActorPos, 256, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(func_802D75D8, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 5)
EVT_CALL(battle_item_tasty_tonic_func_802A123C_72223C, 256)
EVT_WAIT_FRAMES(20)
EVT_END_IF
EVT_EXEC_WAIT(battle_item_tasty_tonic_PlayerGoHome)
EVT_RETURN
EVT_END
};

View File

@ -51,35 +51,37 @@ ApiStatus N(func_802A1420_722F60)(Evt* script, s32 isInitialCall) {
#include "UseItem.inc.c"
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_THUNDER_BOLT;
await N(UseItemWithEffect);
spawn {
sleep 5;
UseBattleCamPreset(2);
MoveBattleCamOver(20);
}
N(FadeBackgroundToBlack)();
PlaySound(SOUND_UNKNOWN_365);
sleep 10;
InitTargetIterator();
SetGoalToTarget(ACTOR_SELF);
ItemCheckHit(EVT_VAR(0), 0x10000000, 0, EVT_VAR(0), 0);
if (EVT_VAR(0) == 6) {
goto 1;
}
N(func_802A123C_722D7C)();
sleep 5;
StartRumble(10);
ShakeCam(1, 0, 5, 1.0);
GetItemPower(ITEM_THUNDER_RAGE, EVT_VAR(0), EVT_VAR(1));
ItemDamageEnemy(EVT_VAR(0), 0x38000020, 0, EVT_VAR(0), 32);
1:
sleep 5;
UseBattleCamPreset(3);
MoveBattleCamOver(20);
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
sleep 30;
N(func_802A1420_722F60)();
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x84)
EVT_EXEC_WAIT(battle_item_thunder_bolt_UseItemWithEffect)
EVT_THREAD
EVT_WAIT_FRAMES(5)
EVT_CALL(UseBattleCamPreset, 2)
EVT_CALL(MoveBattleCamOver, 20)
EVT_END_THREAD
EVT_CALL(battle_item_thunder_bolt_FadeBackgroundToBlack)
EVT_CALL(PlaySound, 869)
EVT_WAIT_FRAMES(10)
EVT_CALL(InitTargetIterator)
EVT_CALL(SetGoalToTarget, -127)
EVT_CALL(ItemCheckHit, EVT_VAR(0), 268435456, 0, EVT_VAR(0), 0)
EVT_IF_EQ(EVT_VAR(0), 6)
EVT_GOTO(1)
EVT_END_IF
EVT_CALL(battle_item_thunder_bolt_func_802A123C_722D7C)
EVT_WAIT_FRAMES(5)
EVT_CALL(StartRumble, 10)
EVT_CALL(ShakeCam, 1, 0, 5, EVT_FIXED(1.0))
EVT_CALL(GetItemPower, 130, EVT_VAR(0), EVT_VAR(1))
EVT_CALL(ItemDamageEnemy, EVT_VAR(0), 939524128, 0, EVT_VAR(0), 32)
EVT_LABEL(1)
EVT_WAIT_FRAMES(5)
EVT_CALL(UseBattleCamPreset, 3)
EVT_CALL(MoveBattleCamOver, 20)
EVT_CALL(SetAnimation, 0, 0, 65538)
EVT_WAIT_FRAMES(30)
EVT_CALL(battle_item_thunder_bolt_func_802A1420_722F60)
EVT_EXEC_WAIT(battle_item_thunder_bolt_PlayerGoHome)
EVT_RETURN
EVT_END
};

View File

@ -51,41 +51,43 @@ ApiStatus N(func_802A1354_71B4F4)(Evt* script, s32 isInitialCall) {
#include "UseItem.inc.c"
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_THUNDER_RAGE;
await N(UseItemWithEffect);
parallel {
sleep 5;
UseBattleCamPreset(2);
MoveBattleCamOver(20);
}
N(FadeBackgroundToBlack)();
PlaySound(SOUND_UNKNOWN_365);
sleep 10;
InitTargetIterator();
0:
SetGoalToTarget(ACTOR_SELF);
ItemCheckHit(EVT_VAR(0), 0x10000000, 0, EVT_VAR(0), 0);
if (EVT_VAR(0) == 6) {
goto 1;
}
N(func_802A1354_71B4F4)();
sleep 5;
StartRumble(10);
ShakeCam(1, 0, 5, 1.0);
SetGoalToTarget(ACTOR_SELF);
GetItemPower(ITEM_THUNDER_RAGE, EVT_VAR(0), EVT_VAR(1));
ItemDamageEnemy(EVT_VAR(0), 0x38000020, 0, EVT_VAR(0), 32);
1:
sleep 5;
ChooseNextTarget(0, EVT_VAR(0));
if (EVT_VAR(0) != -1) {
goto 0;
}
UseBattleCamPreset(3);
MoveBattleCamOver(20);
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
sleep 30;
N(func_802A12D4_71B474)();
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x00000082)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_CHILD_THREAD
EVT_WAIT_FRAMES(5)
EVT_CALL(UseBattleCamPreset, 2)
EVT_CALL(MoveBattleCamOver, 20)
EVT_END_CHILD_THREAD
EVT_CALL(N(FadeBackgroundToBlack))
EVT_CALL(PlaySound, SOUND_UNKNOWN_365)
EVT_WAIT_FRAMES(10)
EVT_CALL(InitTargetIterator)
EVT_LABEL(0)
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(ItemCheckHit, EVT_VAR(0), 268435456, 0, EVT_VAR(0), 0)
EVT_IF_EQ(EVT_VAR(0), 6)
EVT_GOTO(1)
EVT_END_IF
EVT_CALL(N(func_802A1354_71B4F4))
EVT_WAIT_FRAMES(5)
EVT_CALL(StartRumble, 10)
EVT_CALL(ShakeCam, 1, 0, 5, EVT_FIXED(1.0))
EVT_CALL(SetGoalToTarget, ACTOR_SELF)
EVT_CALL(GetItemPower, ITEM_THUNDER_RAGE, EVT_VAR(0), EVT_VAR(1))
EVT_CALL(ItemDamageEnemy, EVT_VAR(0), 939524128, 0, EVT_VAR(0), 32)
EVT_LABEL(1)
EVT_WAIT_FRAMES(5)
EVT_CALL(ChooseNextTarget, 0, EVT_VAR(0))
EVT_IF_NE(EVT_VAR(0), -1)
EVT_GOTO(0)
EVT_END_IF
EVT_CALL(UseBattleCamPreset, 3)
EVT_CALL(MoveBattleCamOver, 20)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_WAIT_FRAMES(30)
EVT_CALL(N(func_802A12D4_71B474))
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_RETURN
EVT_END
};

View File

@ -26,28 +26,30 @@ ApiStatus N(func_802A12FC_723A7C)(Evt* script, s32 isInitialCall) {
#include "UseItem.inc.c"
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_SUPER_SHROOM;
await N(UseItemWithEffect);
AddBattleCamZoom(50);
MoveBattleCamOver(20);
await N(EatItem);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 0;
EVT_VAR(1) += 35;
N(func_802A123C_7239BC)(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 10);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 25;
EVT_VAR(2) += 5;
func_802D7520(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 10);
N(func_802A12FC_723A7C)();
sleep 10;
SetAnimation(ACTOR_PLAYER, 0, ANIM_THUMBS_UP);
sleep 30;
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(2) += 5;
func_802D75D8(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 10);
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
sleep 20;
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x0000008C)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_CALL(AddBattleCamZoom, 50)
EVT_CALL(MoveBattleCamOver, 20)
EVT_EXEC_WAIT(N(EatItem))
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 0)
EVT_ADD(EVT_VAR(1), 35)
EVT_CALL(N(func_802A123C_7239BC), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 10)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 25)
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(func_802D7520, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 10)
EVT_CALL(N(func_802A12FC_723A7C))
EVT_WAIT_FRAMES(10)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_THUMBS_UP)
EVT_WAIT_FRAMES(30)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(func_802D75D8, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 10)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_WAIT_FRAMES(20)
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_RETURN
EVT_END
};

View File

@ -26,26 +26,28 @@ ApiStatus N(func_802A12FC_72453C)(Evt* script, s32 isInitialCall) {
#include "UseItem.inc.c"
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_ULTRA_SHROOM;
await N(UseItemWithEffect);
await N(EatItem);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(0) += 0;
EVT_VAR(1) += 35;
N(func_802A123C_72447C)(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 20);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(1) += 25;
EVT_VAR(2) += 5;
func_802D7520(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 20);
N(func_802A12FC_72453C)();
sleep 10;
SetAnimation(ACTOR_PLAYER, 0, ANIM_THUMBS_UP);
sleep 30;
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(2) += 5;
func_802D75D8(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 20);
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
sleep 20;
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x0000008E)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_EXEC_WAIT(N(EatItem))
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(0), 0)
EVT_ADD(EVT_VAR(1), 35)
EVT_CALL(N(func_802A123C_72447C), EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 20)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(1), 25)
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(func_802D7520, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 20)
EVT_CALL(N(func_802A12FC_72453C))
EVT_WAIT_FRAMES(10)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_THUMBS_UP)
EVT_WAIT_FRAMES(30)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_ADD(EVT_VAR(2), 5)
EVT_CALL(func_802D75D8, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 20)
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_WAIT_FRAMES(20)
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_RETURN
EVT_END
};

View File

@ -13,23 +13,25 @@ ApiStatus N(func_802A123C_71AA2C)(Evt* script, s32 isInitialCall) {
#include "UseItem.inc.c"
EvtSource N(main) = SCRIPT({
EVT_VAR(10) = (const) ITEM_VOLT_SHROOM;
await N(UseItemWithEffect);
await N(EatItem);
SetAnimation(ACTOR_PLAYER, 0, ANIM_10002);
GetActorPos(ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2));
EVT_VAR(3) = 20;
MultiplyByActorScale(EVT_VAR(3));
EVT_VAR(1) += EVT_VAR(3);
EVT_VAR(3) = 1.0;
MultiplyByActorScale(EVT_VAR(3));
PlayEffect(0x57, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3), 30, 0, 0, 0, 0, 0, 0, 0);
PlaySound(SOUND_UNKNOWN_379);
GetItemPower(ITEM_VOLT_SHROOM, EVT_VAR(0), EVT_VAR(1));
N(func_802A123C_71AA2C)();
sleep 20;
ShowMessageBox(16, 60);
WaitForMessageBoxDone();
await N(PlayerGoHome);
});
EvtSource N(main) = {
EVT_SET_CONST(EVT_VAR(10), 0x0000008B)
EVT_EXEC_WAIT(N(UseItemWithEffect))
EVT_EXEC_WAIT(N(EatItem))
EVT_CALL(SetAnimation, ACTOR_PLAYER, 0, ANIM_10002)
EVT_CALL(GetActorPos, ACTOR_PLAYER, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2))
EVT_SET(EVT_VAR(3), 20)
EVT_CALL(MultiplyByActorScale, EVT_VAR(3))
EVT_ADD(EVT_VAR(1), EVT_VAR(3))
EVT_SETF(EVT_VAR(3), EVT_FIXED(1.0))
EVT_CALL(MultiplyByActorScale, EVT_VAR(3))
EVT_CALL(PlayEffect, 0x57, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3), 30, 0, 0, 0, 0, 0, 0, 0)
EVT_CALL(PlaySound, SOUND_UNKNOWN_379)
EVT_CALL(GetItemPower, ITEM_VOLT_SHROOM, EVT_VAR(0), EVT_VAR(1))
EVT_CALL(N(func_802A123C_71AA2C))
EVT_WAIT_FRAMES(20)
EVT_CALL(ShowMessageBox, 16, 60)
EVT_CALL(WaitForMessageBoxDone)
EVT_EXEC_WAIT(N(PlayerGoHome))
EVT_RETURN
EVT_END
};

File diff suppressed because it is too large Load Diff

View File

@ -1,15 +1,19 @@
#include "common.h"
#include "camera.h"
EvtSource ShakeCam1 = SCRIPT({
group 0;
ShakeCam(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1.0);
});
EvtSource ShakeCam1 = {
EVT_SET_GROUP(0)
EVT_CALL(ShakeCam, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_FIXED(1.0))
EVT_RETURN
EVT_END
};
EvtSource ShakeCamX = SCRIPT({
group 0;
ShakeCam(EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3));
});
EvtSource ShakeCamX = {
EVT_SET_GROUP(0)
EVT_CALL(ShakeCam, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3))
EVT_RETURN
EVT_END
};
ApiStatus SetCamEnabled(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;

View File

@ -1152,7 +1152,7 @@ ApiStatus evt_handle_thread(Evt* script) {
opcode = *endLine++;
nargs = *endLine++;
endLine += nargs;
} while (opcode != EVT_OP_END_SPAWN_THREAD);
} while (opcode != EVT_OP_END_THREAD);
script->ptrNextLine = endLine;
newScript = start_script_in_group((EvtSource*)startLine, script->priority, 0x60, script->groupFlags);
@ -1189,7 +1189,7 @@ ApiStatus evt_handle_child_thread(Evt* script) {
opcode = *endLine++;
nargs = *endLine++;
endLine += nargs;
} while (opcode != EVT_OP_END_PARALLEL_THREAD);
} while (opcode != EVT_OP_END_CHILD_THREAD);
script->ptrNextLine = endLine;
newScript = func_802C39F8(script, startLine, 0x60);
@ -1306,7 +1306,7 @@ s32 evt_handle_print_debug_var(Evt* script) {
tableVar = script->varTable[var];
do {} while (0);
if (tableVar <= -270000000) {
sprintf(evtDebugPrintBuffer, "LW(%3d) [%08X]", tableVar);
} else if (tableVar <= -220000000) {
@ -1378,10 +1378,10 @@ s32 evt_execute_next_command(Evt *script) {
case EVT_OP_BREAK_LOOP:
status = evt_handle_break_loop(script);
break;
case EVT_OP_SLEEP_FRAMES:
case EVT_OP_WAIT_FRAMES:
status = evt_handle_wait(script);
break;
case EVT_OP_SLEEP_SECS:
case EVT_OP_WAIT_SECS:
status = evt_handle_wait_seconds(script);
break;
case EVT_OP_IF_EQ:
@ -1414,10 +1414,10 @@ s32 evt_execute_next_command(Evt *script) {
case EVT_OP_END_IF:
status = evt_handle_end_if(script);
break;
case EVT_OP_MATCH:
case EVT_OP_SWITCH:
status = evt_handle_switch(script);
break;
case EVT_OP_MATCH_CONST:
case EVT_OP_SWITCH_CONST:
status = evt_handle_switch_const(script);
break;
case EVT_OP_CASE_EQ:
@ -1438,19 +1438,19 @@ s32 evt_execute_next_command(Evt *script) {
case EVT_OP_CASE_GE:
status = evt_handle_case_greater_equal(script);
break;
case EVT_OP_CASE_ELSE:
case EVT_OP_CASE_DEFAULT:
status = evt_handle_case_default(script);
break;
case EVT_OP_BREAK_MATCH:
case EVT_OP_BREAK_SWITCH:
status = evt_handle_break_case(script);
break;
case EVT_OP_CASE_MULTI_OR_EQ:
case EVT_OP_CASE_OR_EQ:
status = evt_handle_case_equal_OR(script);
break;
case EVT_OP_END_CASE_MULTI:
case EVT_OP_END_CASE_GROUP:
status = evt_handle_end_case_group(script);
break;
case EVT_OP_CASE_MULTI_AND_EQ:
case EVT_OP_CASE_AND_EQ:
status = evt_handle_case_equal_AND(script);
break;
case EVT_OP_CASE_FLAG:
@ -1459,7 +1459,7 @@ s32 evt_execute_next_command(Evt *script) {
case EVT_OP_CASE_RANGE:
status = evt_handle_case_range(script);
break;
case EVT_OP_END_MATCH:
case EVT_OP_END_SWITCH:
status = evt_handle_end_switch(script);
break;
case EVT_OP_SET:
@ -1468,7 +1468,7 @@ s32 evt_execute_next_command(Evt *script) {
case EVT_OP_SET_CONST:
status = evt_handle_set_const(script);
break;
case EVT_OP_SET_F:
case EVT_OP_SETF:
status = evt_handle_set_float(script);
break;
case EVT_OP_ADD:
@ -1486,52 +1486,52 @@ s32 evt_execute_next_command(Evt *script) {
case EVT_OP_MOD:
status = evt_handle_mod(script);
break;
case EVT_OP_ADD_F:
case EVT_OP_ADDF:
status = evt_handle_addF(script);
break;
case EVT_OP_SUB_F:
case EVT_OP_SUBF:
status = evt_handle_subtractF(script);
break;
case EVT_OP_MUL_F:
case EVT_OP_MULF:
status = evt_handle_multiplyF(script);
break;
case EVT_OP_DIV_F:
case EVT_OP_DIVF:
status = evt_handle_divideF(script);
break;
case EVT_OP_USE_BUFFER:
case EVT_OP_USE_BUF:
status = evt_handle_set_int_buffer_ptr(script);
break;
case EVT_OP_BUFFER_READ_1:
case EVT_OP_BUF_READ1:
status = evt_handle_get_1_word(script);
break;
case EVT_OP_BUFFER_READ_2:
case EVT_OP_BUF_READ2:
status = evt_handle_get_2_word(script);
break;
case EVT_OP_BUFFER_READ_3:
case EVT_OP_BUF_READ3:
status = evt_handle_get_3_word(script);
break;
case EVT_OP_BUFFER_READ_4:
case EVT_OP_BUF_READ4:
status = evt_handle_get_4_word(script);
break;
case EVT_OP_BUFFER_PEEK:
case EVT_OP_BUF_PEEK:
status = evt_handle_get_Nth_word(script);
break;
case EVT_OP_USE_BUFFER_F:
case EVT_OP_USE_FBUF:
status = evt_handle_set_float_buffer_ptr(script);
break;
case EVT_OP_BUFFER_READ_1_F:
case EVT_OP_FBUF_READ1:
status = evt_handle_get_1_float(script);
break;
case EVT_OP_BUFFER_READ_2_F:
case EVT_OP_FBUF_READ2:
status = evt_handle_get_2_float(script);
break;
case EVT_OP_BUFFER_READ_3_F:
case EVT_OP_FBUF_READ3:
status = evt_handle_get_3_float(script);
break;
case EVT_OP_BUFFER_READ_4_F:
case EVT_OP_FBUF_READ4:
status = evt_handle_get_4_float(script);
break;
case EVT_OP_BUFFER_PEEK_F:
case EVT_OP_FBUF_PEEK:
status = evt_handle_get_Nth_float(script);
break;
case EVT_OP_USE_ARRAY:
@ -1543,31 +1543,31 @@ s32 evt_execute_next_command(Evt *script) {
case EVT_OP_NEW_ARRAY:
status = evt_handle_allocate_array(script);
break;
case EVT_OP_KILL_SCRIPT:
case EVT_OP_KILL_THREAD:
status = evt_handle_kill(script);
break;
case EVT_OP_AND:
case EVT_OP_BITWISE_AND:
status = evt_handle_AND(script);
break;
case EVT_OP_AND_CONST:
case EVT_OP_BITWISE_AND_CONST:
status = evt_handle_AND_const(script);
break;
case EVT_OP_OR:
case EVT_OP_BITWISE_OR:
status = evt_handle_OR(script);
break;
case EVT_OP_OR_CONST:
case EVT_OP_BITWISE_OR_CONST:
status = evt_handle_OR_const(script);
break;
case EVT_OP_CALL:
status = evt_handle_call(script);
break;
case EVT_OP_SPAWN_SCRIPT:
case EVT_OP_EXEC:
status = evt_handle_exec1(script);
break;
case EVT_OP_SPAWN_GET_ID:
case EVT_OP_EXEC_GET_TID:
status = evt_handle_exec1_get_id(script);
break;
case EVT_OP_AWAIT_SCRIPT:
case EVT_OP_EXEC_WAIT:
status = evt_handle_exec_wait(script);
break;
case EVT_OP_BIND_TRIGGER:
@ -1603,25 +1603,25 @@ s32 evt_execute_next_command(Evt *script) {
case EVT_OP_RESUME_OTHERS:
status = evt_handle_resume_others(script);
break;
case EVT_OP_SUSPEND_SCRIPT:
case EVT_OP_SUSPEND_THREAD:
status = evt_handle_suspend(script);
break;
case EVT_OP_RESUME_SCRIPT:
case EVT_OP_RESUME_THREAD:
status = evt_handle_resume(script);
break;
case EVT_OP_DOES_SCRIPT_EXIST:
case EVT_OP_IS_THREAD_RUNNING:
status = evt_handle_does_script_exist(script);
break;
case EVT_OP_SPAWN_THREAD:
case EVT_OP_THREAD:
status = evt_handle_thread(script);
break;
case EVT_OP_END_SPAWN_THREAD:
case EVT_OP_END_THREAD:
status = evt_handle_end_thread(script);
break;
case EVT_OP_PARALLEL_THREAD:
case EVT_OP_CHILD_THREAD:
status = evt_handle_child_thread(script);
break;
case EVT_OP_END_PARALLEL_THREAD:
case EVT_OP_END_CHILD_THREAD:
status = evt_handle_end_child_thread(script);
break;
case EVT_OP_90:
@ -2006,10 +2006,10 @@ Bytecode* evt_goto_next_case(Evt* script) {
case EVT_OP_END:
PANIC();
break;
case EVT_OP_MATCH:
case EVT_OP_SWITCH:
switchDepth++;
break;
case EVT_OP_END_MATCH:
case EVT_OP_END_SWITCH:
switchDepth--;
if (switchDepth == 0) {
return opcode;
@ -2021,10 +2021,10 @@ Bytecode* evt_goto_next_case(Evt* script) {
case EVT_OP_CASE_GT:
case EVT_OP_CASE_LE:
case EVT_OP_CASE_GE:
case EVT_OP_CASE_ELSE:
case EVT_OP_CASE_MULTI_OR_EQ:
case EVT_OP_CASE_MULTI_AND_EQ:
case EVT_OP_END_CASE_MULTI:
case EVT_OP_CASE_DEFAULT:
case EVT_OP_CASE_OR_EQ:
case EVT_OP_CASE_AND_EQ:
case EVT_OP_END_CASE_GROUP:
case EVT_OP_CASE_RANGE:
if (switchDepth == 1) {
return opcode;

View File

@ -8,9 +8,11 @@ s32 func_802D5B10();
s32 D_802D9D30 = 0;
EvtSource D_802D9D34 = SCRIPT({
func_802D5B10();
});
EvtSource D_802D9D34 = {
EVT_CALL(func_802D5B10)
EVT_RETURN
EVT_END
};
INCLUDE_ASM(s32, "evt/fa4c0_len_3bf0", func_802D5B10);

View File

@ -95,9 +95,11 @@ ApiStatus func_802D7BA4(Evt* script, s32 isInitialCall) {
return ApiStatus_BLOCK;
}
EvtSource D_802D9D50 = SCRIPT({
func_802D7BA4();
});
EvtSource D_802D9D50 = {
EVT_CALL(func_802D7BA4)
EVT_RETURN
EVT_END
};
ApiStatus Spawn802D9D50(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;

22
src/evt/msg_api.h Normal file
View File

@ -0,0 +1,22 @@
#ifndef _EVT_MSG_API_H_
#define _EVT_MSG_API_H_
#include "script_api/macros.h"
#define SpeakToPlayer(...) \
_EVT_CMD(EVT_OP_CALL, evt_SpeakToPlayer, ##__VA_ARGS__),
ApiStatus evt_SpeakToPlayer(Evt* script, s32 isInitialCall);
#define EndSpeech(...) \
_EVT_CMD(EVT_OP_CALL, evt_EndSpeech, ##__VA_ARGS__),
ApiStatus evt_EndSpeech(Evt* script, s32 isInitialCall);
#define ContinueSpeech(...) \
_EVT_CMD(EVT_OP_CALL, evt_ContinueSpeech, ##__VA_ARGS__),
ApiStatus evt_ContinueSpeech(Evt* script, s32 isInitialCall);
#define SpeakToNpc(...) \
_EVT_CMD(EVT_OP_CALL, evt_SpeakToNpc, ##__VA_ARGS__),
ApiStatus evt_SpeakToNpc(Evt* script, s32 isInitialCall);
#endif

File diff suppressed because it is too large Load Diff

View File

@ -56,8 +56,10 @@ ShakeTreeConfig N(tree1) = {
Vec4f N(triggerCoord_8024DD68) = { 120.0f, 0.0f, -43.0f, 0.0f };
EvtSource N(8024DD78) = SCRIPT({
EVT_VAR(0) = N(tree1);
bind N(shakeTree) TRIGGER_WALL_HAMMER 11;
bind N(shakeTree) TRIGGER_POINT_BOMB N(triggerCoord_8024DD68);
});
EvtSource N(8024DD78) = {
EVT_SET(EVT_VAR(0), EVT_PTR(N(tree1)))
EVT_BIND_TRIGGER(N(shakeTree), TRIGGER_WALL_HAMMER, 11, 1, 0)
EVT_BIND_TRIGGER(N(shakeTree), TRIGGER_POINT_BOMB, EVT_PTR(N(triggerCoord_8024DD68)), 1, 0)
EVT_RETURN
EVT_END
};

View File

@ -104,14 +104,14 @@ EvtSource N(80243AF0) = SCRIPT({
#else
EvtSource N(80243AF0) = {
EVT_CMD(EVT_OP_CALL, GetEntryID, EVT_VAR(0)),
EVT_CMD(EVT_OP_MATCH, EVT_VAR(0)),
EVT_CMD(EVT_OP_CASE_MULTI_OR_EQ, 2),
EVT_CMD(EVT_OP_CASE_MULTI_OR_EQ, 3),
EVT_CMD(EVT_OP_END_CASE_MULTI),
EVT_CMD(EVT_OP_CASE_ELSE),
EVT_CMD(EVT_OP_SWITCH, EVT_VAR(0)),
EVT_CMD(EVT_OP_CASE_OR_EQ, 2),
EVT_CMD(EVT_OP_CASE_OR_EQ, 3),
EVT_CMD(EVT_OP_END_CASE_GROUP),
EVT_CMD(EVT_OP_CASE_DEFAULT),
EVT_CMD(EVT_OP_CALL, SetMusicTrack, 0, 21, 0, 8),
EVT_CMD(EVT_OP_END_CASE_MULTI),
EVT_CMD(EVT_OP_END_MATCH),
EVT_CMD(EVT_OP_END_CASE_GROUP),
EVT_CMD(EVT_OP_END_SWITCH),
EVT_CMD(EVT_OP_RETURN),
EVT_CMD(EVT_OP_END)
};

View File

@ -400,26 +400,26 @@ EvtSource N(80241ED4) = SCRIPT({
});
#else
EvtSource N(80241ED4) = {
EVT_CMD(EVT_OP_SET_F, EVT_VAR(0), 0),
EVT_CMD(EVT_OP_SET_F, EVT_VAR(1), 0),
EVT_CMD(EVT_OP_SET_F, EVT_VAR(2), 0),
EVT_CMD(EVT_OP_SET_F, EVT_VAR(3), EVT_FIXED(-1.0)),
EVT_CMD(EVT_OP_SET_F, EVT_VAR(4), EVT_FIXED(0.0)),
EVT_CMD(EVT_OP_SET_F, EVT_VAR(5), EVT_FIXED(3.0)),
EVT_CMD(EVT_OP_SPAWN_THREAD),
EVT_CMD(EVT_OP_SLEEP_FRAMES, 10),
EVT_CMD(EVT_OP_SETF, EVT_VAR(0), 0),
EVT_CMD(EVT_OP_SETF, EVT_VAR(1), 0),
EVT_CMD(EVT_OP_SETF, EVT_VAR(2), 0),
EVT_CMD(EVT_OP_SETF, EVT_VAR(3), EVT_FIXED(-1.0)),
EVT_CMD(EVT_OP_SETF, EVT_VAR(4), EVT_FIXED(0.0)),
EVT_CMD(EVT_OP_SETF, EVT_VAR(5), EVT_FIXED(3.0)),
EVT_CMD(EVT_OP_THREAD),
EVT_CMD(EVT_OP_WAIT_FRAMES, 10),
EVT_CMD(EVT_OP_CALL, PlaySoundAtCollider, 19, 486, 0),
EVT_CMD(EVT_OP_END_SPAWN_THREAD),
EVT_CMD(EVT_OP_END_THREAD),
EVT_CMD(EVT_OP_LOOP, 300),
EVT_CMD(EVT_OP_ADD_F, EVT_VAR(4), EVT_FIXED(-0.5)),
EVT_CMD(EVT_OP_ADD_F, EVT_VAR(5), EVT_FIXED(0.09375)),
EVT_CMD(EVT_OP_ADD_F, EVT_VAR(0), EVT_VAR(3)),
EVT_CMD(EVT_OP_ADD_F, EVT_VAR(1), EVT_VAR(4)),
EVT_CMD(EVT_OP_ADD_F, EVT_VAR(2), EVT_VAR(5)),
EVT_CMD(EVT_OP_ADDF, EVT_VAR(4), EVT_FIXED(-0.5)),
EVT_CMD(EVT_OP_ADDF, EVT_VAR(5), EVT_FIXED(0.09375)),
EVT_CMD(EVT_OP_ADDF, EVT_VAR(0), EVT_VAR(3)),
EVT_CMD(EVT_OP_ADDF, EVT_VAR(1), EVT_VAR(4)),
EVT_CMD(EVT_OP_ADDF, EVT_VAR(2), EVT_VAR(5)),
EVT_CMD(EVT_OP_IF_LT, EVT_VAR(1), -10),
EVT_CMD(EVT_OP_SET_F, EVT_VAR(1), EVT_FIXED(-10.0)),
EVT_CMD(EVT_OP_SET_F, EVT_VAR(3), EVT_FIXED(0.0)),
EVT_CMD(EVT_OP_SET_F, EVT_VAR(4), EVT_FIXED(0.0)),
EVT_CMD(EVT_OP_SETF, EVT_VAR(1), EVT_FIXED(-10.0)),
EVT_CMD(EVT_OP_SETF, EVT_VAR(3), EVT_FIXED(0.0)),
EVT_CMD(EVT_OP_SETF, EVT_VAR(4), EVT_FIXED(0.0)),
EVT_CMD(EVT_OP_IF_GE, EVT_VAR(2), 80),
EVT_CMD(EVT_OP_GOTO, 0),
EVT_CMD(EVT_OP_END_IF),
@ -433,10 +433,10 @@ EvtSource N(80241ED4) = {
EVT_CMD(EVT_OP_CALL, RotateModel, 32, EVT_VAR(2), 0, 0, 1),
EVT_CMD(EVT_OP_CALL, TranslateModel, 31, 78, -19, -2),
EVT_CMD(EVT_OP_CALL, TranslateModel, 32, 78, -19, -2),
EVT_CMD(EVT_OP_SLEEP_FRAMES, 1),
EVT_CMD(EVT_OP_WAIT_FRAMES, 1),
EVT_CMD(EVT_OP_END_LOOP),
EVT_CMD(EVT_OP_LABEL, 0),
EVT_CMD(EVT_OP_SLEEP_FRAMES, 30),
EVT_CMD(EVT_OP_WAIT_FRAMES, 30),
EVT_CMD(EVT_OP_CALL, ModifyColliderFlags, 0, 19, 0x7FFFFE00),
EVT_CMD(EVT_OP_RETURN),
EVT_CMD(EVT_OP_END)
@ -597,26 +597,26 @@ EvtSource N(80242910) = SCRIPT({
});
#else
EvtSource N(80242910) = {
EVT_CMD(EVT_OP_SET_F, EVT_VAR(0), 0),
EVT_CMD(EVT_OP_SET_F, EVT_VAR(1), 0),
EVT_CMD(EVT_OP_SET_F, EVT_VAR(2), 0),
EVT_CMD(EVT_OP_SET_F, EVT_VAR(3), EVT_FIXED(-1.0)),
EVT_CMD(EVT_OP_SET_F, EVT_VAR(4), EVT_FIXED(0.0)),
EVT_CMD(EVT_OP_SET_F, EVT_VAR(5), EVT_FIXED(3.0)),
EVT_CMD(EVT_OP_SPAWN_THREAD),
EVT_CMD(EVT_OP_SLEEP_FRAMES, 15),
EVT_CMD(EVT_OP_SETF, EVT_VAR(0), 0),
EVT_CMD(EVT_OP_SETF, EVT_VAR(1), 0),
EVT_CMD(EVT_OP_SETF, EVT_VAR(2), 0),
EVT_CMD(EVT_OP_SETF, EVT_VAR(3), EVT_FIXED(-1.0)),
EVT_CMD(EVT_OP_SETF, EVT_VAR(4), EVT_FIXED(0.0)),
EVT_CMD(EVT_OP_SETF, EVT_VAR(5), EVT_FIXED(3.0)),
EVT_CMD(EVT_OP_THREAD),
EVT_CMD(EVT_OP_WAIT_FRAMES, 15),
EVT_CMD(EVT_OP_CALL, PlaySoundAtCollider, 18, 486, 0),
EVT_CMD(EVT_OP_END_SPAWN_THREAD),
EVT_CMD(EVT_OP_END_THREAD),
EVT_CMD(EVT_OP_LOOP, 300),
EVT_CMD(EVT_OP_ADD_F, EVT_VAR(4), EVT_FIXED(-0.5)),
EVT_CMD(EVT_OP_ADD_F, EVT_VAR(5), EVT_FIXED(0.09375)),
EVT_CMD(EVT_OP_ADD_F, EVT_VAR(0), EVT_VAR(3)),
EVT_CMD(EVT_OP_ADD_F, EVT_VAR(1), EVT_VAR(4)),
EVT_CMD(EVT_OP_ADD_F, EVT_VAR(2), EVT_VAR(5)),
EVT_CMD(EVT_OP_ADDF, EVT_VAR(4), EVT_FIXED(-0.5)),
EVT_CMD(EVT_OP_ADDF, EVT_VAR(5), EVT_FIXED(0.09375)),
EVT_CMD(EVT_OP_ADDF, EVT_VAR(0), EVT_VAR(3)),
EVT_CMD(EVT_OP_ADDF, EVT_VAR(1), EVT_VAR(4)),
EVT_CMD(EVT_OP_ADDF, EVT_VAR(2), EVT_VAR(5)),
EVT_CMD(EVT_OP_IF_LT, EVT_VAR(1), -25),
EVT_CMD(EVT_OP_SET_F, EVT_VAR(1), EVT_FIXED(-25.0)),
EVT_CMD(EVT_OP_SET_F, EVT_VAR(3), EVT_FIXED(0.0)),
EVT_CMD(EVT_OP_SET_F, EVT_VAR(4), EVT_FIXED(0.0)),
EVT_CMD(EVT_OP_SETF, EVT_VAR(1), EVT_FIXED(-25.0)),
EVT_CMD(EVT_OP_SETF, EVT_VAR(3), EVT_FIXED(0.0)),
EVT_CMD(EVT_OP_SETF, EVT_VAR(4), EVT_FIXED(0.0)),
EVT_CMD(EVT_OP_IF_GE, EVT_VAR(2), 80),
EVT_CMD(EVT_OP_GOTO, 0),
EVT_CMD(EVT_OP_END_IF),
@ -626,7 +626,7 @@ EvtSource N(80242910) = {
EVT_CMD(EVT_OP_CALL, TranslateModel, 29, EVT_VAR(0), EVT_VAR(1), 0),
EVT_CMD(EVT_OP_CALL, RotateModel, 29, EVT_VAR(2), 0, 0, -1),
EVT_CMD(EVT_OP_CALL, TranslateModel, 29, -124, -17, -3),
EVT_CMD(EVT_OP_SLEEP_FRAMES, 1),
EVT_CMD(EVT_OP_WAIT_FRAMES, 1),
EVT_CMD(EVT_OP_END_LOOP),
EVT_CMD(EVT_OP_LABEL, 0),
EVT_CMD(EVT_OP_RETURN),

View File

@ -37,22 +37,22 @@ EvtSource N(802409C0) = SCRIPT({
#else
EvtSource N(802409C0) = {
EVT_CMD(EVT_OP_CALL, GetEntryID, EVT_VAR(0)),
EVT_CMD(EVT_OP_MATCH, EVT_VAR(0)),
EVT_CMD(EVT_OP_CASE_MULTI_OR_EQ, 0),
EVT_CMD(EVT_OP_CASE_MULTI_OR_EQ, 1),
EVT_CMD(EVT_OP_SWITCH, EVT_VAR(0)),
EVT_CMD(EVT_OP_CASE_OR_EQ, 0),
EVT_CMD(EVT_OP_CASE_OR_EQ, 1),
EVT_CMD(EVT_OP_CALL, SetMusicTrack, 0, SONG_CLOUDY_CLIMB, 0, 8),
EVT_CMD(EVT_OP_END_CASE_MULTI),
EVT_CMD(EVT_OP_CASE_MULTI_OR_EQ, 2),
EVT_CMD(EVT_OP_CASE_MULTI_OR_EQ, 7),
EVT_CMD(EVT_OP_END_CASE_MULTI),
EVT_CMD(EVT_OP_END_CASE_GROUP),
EVT_CMD(EVT_OP_CASE_OR_EQ, 2),
EVT_CMD(EVT_OP_CASE_OR_EQ, 7),
EVT_CMD(EVT_OP_END_CASE_GROUP),
EVT_CMD(EVT_OP_CASE_EQ, 3),
EVT_CMD(EVT_OP_IF_NE, EVT_AREA_FLAG(44), 0),
EVT_CMD(EVT_OP_ELSE),
EVT_CMD(EVT_OP_CALL, FadeOutMusic, 1, 3000),
EVT_CMD(EVT_OP_CALL, FadeInMusic, 0, 50, 0, 3000, 0, 127),
EVT_CMD(EVT_OP_END_IF),
EVT_CMD(EVT_OP_END_CASE_MULTI),
EVT_CMD(EVT_OP_END_MATCH),
EVT_CMD(EVT_OP_END_CASE_GROUP),
EVT_CMD(EVT_OP_END_SWITCH),
EVT_CMD(EVT_OP_RETURN),
EVT_CMD(EVT_OP_END)
};

View File

@ -242,30 +242,30 @@ EvtSource N(8024183C) = {
EVT_CMD(EVT_OP_CALL, SetCamSpeed, 0, EVT_FIXED(90.0)),
EVT_CMD(EVT_OP_CALL, PanToTarget, 0, 0, 1),
EVT_CMD(EVT_OP_CALL, PlaySound, 0x80000050),
EVT_CMD(EVT_OP_SPAWN_THREAD),
EVT_CMD(EVT_OP_THREAD),
EVT_CMD(EVT_OP_CALL, MakeLerp, 80, 90, 10, 0),
EVT_CMD(EVT_OP_LABEL, 0),
EVT_CMD(EVT_OP_CALL, UpdateLerp),
EVT_CMD(EVT_OP_CALL, RotateModel, 101, EVT_VAR(0), 1, 0, 0),
EVT_CMD(EVT_OP_CALL, RotateModel, 103, EVT_VAR(0), 1, 0, 0),
EVT_CMD(EVT_OP_IF_EQ, EVT_VAR(1), 1),
EVT_CMD(EVT_OP_SLEEP_FRAMES, 1),
EVT_CMD(EVT_OP_WAIT_FRAMES, 1),
EVT_CMD(EVT_OP_GOTO, 0),
EVT_CMD(EVT_OP_END_IF),
EVT_CMD(EVT_OP_SPAWN_THREAD),
EVT_CMD(EVT_OP_THREAD),
EVT_CMD(EVT_OP_CALL, MakeLerp, 45, 100, 150, 0),
EVT_CMD(EVT_OP_LOOP, 0),
EVT_CMD(EVT_OP_CALL, UpdateLerp),
EVT_CMD(EVT_OP_CALL, TranslateGroup, 100, 0, EVT_VAR(0), 0),
EVT_CMD(EVT_OP_SLEEP_FRAMES, 1),
EVT_CMD(EVT_OP_WAIT_FRAMES, 1),
EVT_CMD(EVT_OP_IF_EQ, EVT_VAR(1), 0),
EVT_CMD(EVT_OP_BREAK_LOOP),
EVT_CMD(EVT_OP_END_IF),
EVT_CMD(EVT_OP_END_LOOP),
EVT_CMD(EVT_OP_SLEEP_FRAMES, 30),
EVT_CMD(EVT_OP_WAIT_FRAMES, 30),
EVT_CMD(EVT_OP_SET, EVT_STORY_PROGRESS, STORY_CH6_FILLED_SPRING_WITH_WATER),
EVT_CMD(EVT_OP_CALL, GotoMap, N(flo_10_name_hack), 2),
EVT_CMD(EVT_OP_SLEEP_FRAMES, 100),
EVT_CMD(EVT_OP_WAIT_FRAMES, 100),
EVT_CMD(EVT_OP_RETURN),
EVT_CMD(EVT_OP_END)
};

View File

@ -78,173 +78,177 @@ ApiStatus N(TransformFoliage)(Evt* script, s32 isInitialCall) {
return ApiStatus_DONE2;
}
EvtSource N(searchBush) = SCRIPT({
buf_use EVT_VAR(0);
buf_read EVT_VAR(1) EVT_VAR(2) EVT_VAR(3) EVT_VAR(4);
GetPlayerPos(EVT_VAR(5), EVT_VAR(15), EVT_VAR(7));
spawn {
EVT_FLAG(0) = 0;
if (EVT_VAR(1) != NULL) {
loop 5 {
buf_use EVT_VAR(1);
buf_read EVT_VAR(2);
loop EVT_VAR(2) {
buf_read EVT_VAR(3);
N(TransformFoliage)(EVT_VAR(3), 0.1, 1, EVT_VAR(15), 0);
if (EVT_FLAG(0) == 0) {
EVT_FLAG(0) = 1;
PlaySoundAtModel(EVT_VAR(3), 339, 0);
}
}
sleep 1;
buf_use EVT_VAR(1);
buf_read EVT_VAR(2);
loop EVT_VAR(2) {
buf_read EVT_VAR(3);
N(TransformFoliage)(EVT_VAR(3), 0.1, -1, EVT_VAR(15), 0);
}
sleep 1;
}
buf_use EVT_VAR(1);
buf_read EVT_VAR(2);
loop EVT_VAR(2) {
buf_read EVT_VAR(3);
TranslateModel(EVT_VAR(3), 0, 0, 0);
}
sleep 1;
}
}
spawn {
if (EVT_VAR(2) != NULL) {
buf_use EVT_VAR(2);
buf_read EVT_VAR(3);
loop EVT_VAR(3) {
buf_read EVT_VAR(4);
buf_read EVT_VAR(5) EVT_VAR(6) EVT_VAR(7);
buf_read EVT_VAR(8) EVT_VAR(9) EVT_VAR(10);
if (EVT_VAR(10) == 0) {
DropItemEntity(EVT_VAR(4), EVT_VAR(5), EVT_VAR(6), EVT_VAR(7), EVT_VAR(8), EVT_VAR(9));
} else {
GetValueByRef(EVT_VAR(10), EVT_VAR(11));
if (EVT_VAR(11) == 0) {
SetValueByRef(EVT_VAR(10), 1);
DropItemEntity(EVT_VAR(4), EVT_VAR(5), EVT_VAR(6), EVT_VAR(7), EVT_VAR(8), EVT_VAR(9));
}
}
}
}
}
sleep 15;
if (EVT_VAR(4) != NULL) {
await EVT_VAR(4);
}
});
EvtSource N(searchBush) = {
EVT_USE_BUF(EVT_VAR(0))
EVT_BUF_READ4(EVT_VAR(1), EVT_VAR(2), EVT_VAR(3), EVT_VAR(4))
EVT_CALL(GetPlayerPos, EVT_VAR(5), EVT_VAR(15), EVT_VAR(7))
EVT_THREAD
EVT_SET(EVT_FLAG(0), 0)
EVT_IF_NE(EVT_VAR(1), 0)
EVT_LOOP(5)
EVT_USE_BUF(EVT_VAR(1))
EVT_BUF_READ1(EVT_VAR(2))
EVT_LOOP(EVT_VAR(2))
EVT_BUF_READ1(EVT_VAR(3))
EVT_CALL(N(TransformFoliage), EVT_VAR(3), EVT_FIXED(0.1), 1, EVT_VAR(15), 0)
EVT_IF_EQ(EVT_FLAG(0), 0)
EVT_SET(EVT_FLAG(0), 1)
EVT_CALL(PlaySoundAtModel, EVT_VAR(3), 339, 0)
EVT_END_IF
EVT_END_LOOP
EVT_WAIT_FRAMES(1)
EVT_USE_BUF(EVT_VAR(1))
EVT_BUF_READ1(EVT_VAR(2))
EVT_LOOP(EVT_VAR(2))
EVT_BUF_READ1(EVT_VAR(3))
EVT_CALL(N(TransformFoliage), EVT_VAR(3), EVT_FIXED(0.1), -1, EVT_VAR(15), 0)
EVT_END_LOOP
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_USE_BUF(EVT_VAR(1))
EVT_BUF_READ1(EVT_VAR(2))
EVT_LOOP(EVT_VAR(2))
EVT_BUF_READ1(EVT_VAR(3))
EVT_CALL(TranslateModel, EVT_VAR(3), 0, 0, 0)
EVT_END_LOOP
EVT_WAIT_FRAMES(1)
EVT_END_IF
EVT_END_THREAD
EVT_THREAD
EVT_IF_NE(EVT_VAR(2), 0)
EVT_USE_BUF(EVT_VAR(2))
EVT_BUF_READ1(EVT_VAR(3))
EVT_LOOP(EVT_VAR(3))
EVT_BUF_READ1(EVT_VAR(4))
EVT_BUF_READ3(EVT_VAR(5), EVT_VAR(6), EVT_VAR(7))
EVT_BUF_READ3(EVT_VAR(8), EVT_VAR(9), EVT_VAR(10))
EVT_IF_EQ(EVT_VAR(10), 0)
EVT_CALL(DropItemEntity, EVT_VAR(4), EVT_VAR(5), EVT_VAR(6), EVT_VAR(7), EVT_VAR(8), EVT_VAR(9))
EVT_ELSE
EVT_CALL(GetValueByRef, EVT_VAR(10), EVT_VAR(11))
EVT_IF_EQ(EVT_VAR(11), 0)
EVT_CALL(SetValueByRef, EVT_VAR(10), 1)
EVT_CALL(DropItemEntity, EVT_VAR(4), EVT_VAR(5), EVT_VAR(6), EVT_VAR(7), EVT_VAR(8), EVT_VAR(9))
EVT_END_IF
EVT_END_IF
EVT_END_LOOP
EVT_END_IF
EVT_END_THREAD
EVT_WAIT_FRAMES(15)
EVT_IF_NE(EVT_VAR(4), 0)
EVT_EXEC_WAIT(EVT_VAR(4))
EVT_END_IF
EVT_RETURN
EVT_END
};
EvtSource N(shakeTree) = SCRIPT({
timescale 2.0;
buf_use EVT_VAR(0);
buf_read EVT_VAR(1) EVT_VAR(2) EVT_VAR(3) EVT_VAR(4);
buf_read EVT_VAR(5);
GetPlayerPos(EVT_VAR(6), EVT_VAR(15), EVT_VAR(8));
PlaySound(0x165);
PlaySound(0x166);
spawn {
EVT_FLAG(0) = 0;
if (EVT_VAR(1) != NULL) {
sleep 1;
loop 5 {
buf_use EVT_VAR(1);
buf_read EVT_VAR(2);
loop EVT_VAR(2) {
buf_read EVT_VAR(3);
N(TransformFoliage)(EVT_VAR(3), 0.1, 0.2, EVT_VAR(15), 0);
if (EVT_FLAG(0) == 0) {
EVT_FLAG(0) = 1;
PlaySoundAtModel(EVT_VAR(3), 358, 0);
}
}
sleep 1;
buf_use EVT_VAR(1);
buf_read EVT_VAR(2);
loop EVT_VAR(2) {
buf_read EVT_VAR(3);
N(TransformFoliage)(EVT_VAR(3), 0.1, -0.2, EVT_VAR(15), 0);
}
sleep 1;
}
buf_use EVT_VAR(1);
buf_read EVT_VAR(2);
loop EVT_VAR(2) {
buf_read EVT_VAR(3);
TranslateModel(EVT_VAR(3), 0, 0, 0);
}
sleep 1;
}
}
spawn {
EVT_FLAG(0) = 0;
if (EVT_VAR(2) != NULL) {
loop 5 {
buf_use EVT_VAR(2);
buf_read EVT_VAR(3);
loop EVT_VAR(3) {
buf_read EVT_VAR(4);
N(TransformFoliage)(EVT_VAR(4), 0.1, 0.2, EVT_VAR(15), 0);
if (EVT_FLAG(0) == 0) {
EVT_FLAG(0) = 1;
PlaySoundAtModel(EVT_VAR(4), 357, 0);
}
}
sleep 1;
buf_use EVT_VAR(2);
buf_read EVT_VAR(3);
loop EVT_VAR(3) {
buf_read EVT_VAR(4);
N(TransformFoliage)(EVT_VAR(4), 0.1, -0.2, EVT_VAR(15), 0);
}
sleep 1;
}
buf_use EVT_VAR(2);
buf_read EVT_VAR(3);
loop EVT_VAR(3) {
buf_read EVT_VAR(4);
TranslateModel(EVT_VAR(4), 0, 0, 0);
}
sleep 1;
}
}
spawn {
if (EVT_VAR(3) != NULL) {
buf_use EVT_VAR(3);
buf_read EVT_VAR(4);
loop EVT_VAR(4) {
buf_read EVT_VAR(5);
buf_read EVT_VAR(6) EVT_VAR(7) EVT_VAR(8);
buf_read EVT_VAR(9) EVT_VAR(10) EVT_VAR(11);
if (EVT_VAR(11) == 0) {
DropItemEntity(EVT_VAR(5), EVT_VAR(6), EVT_VAR(7), EVT_VAR(8), EVT_VAR(9), EVT_VAR(10));
} else {
GetValueByRef(EVT_VAR(11), EVT_VAR(12));
if (EVT_VAR(12) == 0) {
SetValueByRef(EVT_VAR(11), 1);
DropItemEntity(EVT_VAR(5), EVT_VAR(6), EVT_VAR(7), EVT_VAR(8), EVT_VAR(9), EVT_VAR(10));
}
}
}
}
}
spawn {
if (EVT_VAR(4) != NULL) {
buf_use EVT_VAR(4);
buf_read EVT_VAR(5);
loop EVT_VAR(5) {
buf_read EVT_VAR(6) EVT_VAR(7) EVT_VAR(8);
PlayEffect(0x14, 0, EVT_VAR(6), EVT_VAR(7), EVT_VAR(8), 100, 0, 0, 0, 0, 0, 0, 0, 0);
}
}
}
if (EVT_VAR(5) != NULL) {
await EVT_VAR(5);
}
sleep 15;
});
EvtSource N(shakeTree) = {
EVT_SET_TIMESCALE(EVT_FIXED(2.0))
EVT_USE_BUF(EVT_VAR(0))
EVT_BUF_READ4(EVT_VAR(1), EVT_VAR(2), EVT_VAR(3), EVT_VAR(4))
EVT_BUF_READ1(EVT_VAR(5))
EVT_CALL(GetPlayerPos, EVT_VAR(6), EVT_VAR(15), EVT_VAR(8))
EVT_CALL(PlaySound, SOUND_SMASH_GOOMNUT_TREE)
EVT_CALL(PlaySound, 358)
EVT_THREAD
EVT_SET(EVT_FLAG(0), 0)
EVT_IF_NE(EVT_VAR(1), 0)
EVT_WAIT_FRAMES(1)
EVT_LOOP(5)
EVT_USE_BUF(EVT_VAR(1))
EVT_BUF_READ1(EVT_VAR(2))
EVT_LOOP(EVT_VAR(2))
EVT_BUF_READ1(EVT_VAR(3))
EVT_CALL(N(TransformFoliage), EVT_VAR(3), EVT_FIXED(0.1), EVT_FIXED(0.2), EVT_VAR(15), 0)
EVT_IF_EQ(EVT_FLAG(0), 0)
EVT_SET(EVT_FLAG(0), 1)
EVT_CALL(PlaySoundAtModel, EVT_VAR(3), 358, 0)
EVT_END_IF
EVT_END_LOOP
EVT_WAIT_FRAMES(1)
EVT_USE_BUF(EVT_VAR(1))
EVT_BUF_READ1(EVT_VAR(2))
EVT_LOOP(EVT_VAR(2))
EVT_BUF_READ1(EVT_VAR(3))
EVT_CALL(N(TransformFoliage), EVT_VAR(3), EVT_FIXED(0.1), EVT_FIXED(-0.2), EVT_VAR(15), 0)
EVT_END_LOOP
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_USE_BUF(EVT_VAR(1))
EVT_BUF_READ1(EVT_VAR(2))
EVT_LOOP(EVT_VAR(2))
EVT_BUF_READ1(EVT_VAR(3))
EVT_CALL(TranslateModel, EVT_VAR(3), 0, 0, 0)
EVT_END_LOOP
EVT_WAIT_FRAMES(1)
EVT_END_IF
EVT_END_THREAD
EVT_THREAD
EVT_SET(EVT_FLAG(0), 0)
EVT_IF_NE(EVT_VAR(2), 0)
EVT_LOOP(5)
EVT_USE_BUF(EVT_VAR(2))
EVT_BUF_READ1(EVT_VAR(3))
EVT_LOOP(EVT_VAR(3))
EVT_BUF_READ1(EVT_VAR(4))
EVT_CALL(N(TransformFoliage), EVT_VAR(4), EVT_FIXED(0.1), EVT_FIXED(0.2), EVT_VAR(15), 0)
EVT_IF_EQ(EVT_FLAG(0), 0)
EVT_SET(EVT_FLAG(0), 1)
EVT_CALL(PlaySoundAtModel, EVT_VAR(4), 357, 0)
EVT_END_IF
EVT_END_LOOP
EVT_WAIT_FRAMES(1)
EVT_USE_BUF(EVT_VAR(2))
EVT_BUF_READ1(EVT_VAR(3))
EVT_LOOP(EVT_VAR(3))
EVT_BUF_READ1(EVT_VAR(4))
EVT_CALL(N(TransformFoliage), EVT_VAR(4), EVT_FIXED(0.1), EVT_FIXED(-0.2), EVT_VAR(15), 0)
EVT_END_LOOP
EVT_WAIT_FRAMES(1)
EVT_END_LOOP
EVT_USE_BUF(EVT_VAR(2))
EVT_BUF_READ1(EVT_VAR(3))
EVT_LOOP(EVT_VAR(3))
EVT_BUF_READ1(EVT_VAR(4))
EVT_CALL(TranslateModel, EVT_VAR(4), 0, 0, 0)
EVT_END_LOOP
EVT_WAIT_FRAMES(1)
EVT_END_IF
EVT_END_THREAD
EVT_THREAD
EVT_IF_NE(EVT_VAR(3), 0)
EVT_USE_BUF(EVT_VAR(3))
EVT_BUF_READ1(EVT_VAR(4))
EVT_LOOP(EVT_VAR(4))
EVT_BUF_READ1(EVT_VAR(5))
EVT_BUF_READ3(EVT_VAR(6), EVT_VAR(7), EVT_VAR(8))
EVT_BUF_READ3(EVT_VAR(9), EVT_VAR(10), EVT_VAR(11))
EVT_IF_EQ(EVT_VAR(11), 0)
EVT_CALL(DropItemEntity, EVT_VAR(5), EVT_VAR(6), EVT_VAR(7), EVT_VAR(8), EVT_VAR(9), EVT_VAR(10))
EVT_ELSE
EVT_CALL(GetValueByRef, EVT_VAR(11), EVT_VAR(12))
EVT_IF_EQ(EVT_VAR(12), 0)
EVT_CALL(SetValueByRef, EVT_VAR(11), 1)
EVT_CALL(DropItemEntity, EVT_VAR(5), EVT_VAR(6), EVT_VAR(7), EVT_VAR(8), EVT_VAR(9), EVT_VAR(10))
EVT_END_IF
EVT_END_IF
EVT_END_LOOP
EVT_END_IF
EVT_END_THREAD
EVT_THREAD
EVT_IF_NE(EVT_VAR(4), 0)
EVT_USE_BUF(EVT_VAR(4))
EVT_BUF_READ1(EVT_VAR(5))
EVT_LOOP(EVT_VAR(5))
EVT_BUF_READ3(EVT_VAR(6), EVT_VAR(7), EVT_VAR(8))
EVT_CALL(PlayEffect, 0x14, 0, EVT_VAR(6), EVT_VAR(7), EVT_VAR(8), 100, 0, 0, 0, 0, 0, 0, 0, 0)
EVT_END_LOOP
EVT_END_IF
EVT_END_THREAD
EVT_IF_NE(EVT_VAR(5), 0)
EVT_EXEC_WAIT(EVT_VAR(5))
EVT_END_IF
EVT_WAIT_FRAMES(15)
EVT_RETURN
EVT_END
};

View File

@ -44,18 +44,26 @@ ApiStatus GoombariaPutAway(Evt* script, s32 isInitialCall) {
return partner_put_away(owner) != 0;
}
EvtSource world_goombaria_take_out = SCRIPT({
GoombariaTakeOut();
});
EvtSource world_goombaria_take_out = {
EVT_CALL(GoombariaTakeOut)
EVT_RETURN
EVT_END
};
EvtSource world_goombaria_update = SCRIPT({
GoombariaUpdate();
});
EvtSource world_goombaria_update = {
EVT_CALL(GoombariaUpdate)
EVT_RETURN
EVT_END
};
EvtSource world_goombaria_use_ability = SCRIPT({
GoombariaUseAbility();
});
EvtSource world_goombaria_use_ability = {
EVT_CALL(GoombariaUseAbility)
EVT_RETURN
EVT_END
};
EvtSource world_goombaria_put_away = SCRIPT({
GoombariaPutAway();
});
EvtSource world_goombaria_put_away = {
EVT_CALL(GoombariaPutAway)
EVT_RETURN
EVT_END
};

View File

@ -90,38 +90,40 @@ s32 D_802BDC40_317B60[] = {
0x00000039, 0x001B0024, 0xFFFFFFFF
};
EvtSource world_goombario_take_out = SCRIPT({
func_802BD188_3170A8();
});
EvtSource world_goombario_take_out = {
EVT_CALL(func_802BD188_3170A8)
EVT_RETURN
EVT_END
};
s32 D_802BDD88_317CA8 = 0x802BDF40;
EvtSource world_goombario_update = SCRIPT({
func_802BD1D0_3170F0();
});
EvtSource world_goombario_update = {
EVT_CALL(func_802BD1D0_3170F0)
EVT_RETURN
EVT_END
};
EvtSource world_goombario_use_ability = SCRIPT({
func_802BD5D8_3174F8(); // returns tattle message id on EVT_VAR(0), and something else on EVT_VAR(1)
EvtSource world_goombario_use_ability = {
EVT_CALL(func_802BD5D8_3174F8)
EVT_IF_EQ(EVT_VAR(0), -1)
EVT_RETURN
EVT_END_IF
EVT_IF_EQ(EVT_VAR(0), 0)
EVT_CALL(func_802BDB30_317A50)
EVT_RETURN
EVT_END_IF
EVT_IF_EQ(EVT_VAR(1), 0)
EVT_CALL(SpeakToPlayer, NPC_PARTNER, NPC_ANIM_world_goombario_normal_talk, NPC_ANIM_world_goombario_normal_idle, 0, EVT_VAR(0))
EVT_END_IF
EVT_WAIT_FRAMES(1)
EVT_CALL(func_802BDB30_317A50)
EVT_RETURN
EVT_END
};
if (EVT_VAR(0) == -1) {
return;
}
if (EVT_VAR(0) == 0) {
func_802BDB30_317A50();
return;
}
if (EVT_VAR(1) == 0) {
SpeakToPlayer(NPC_PARTNER, NPC_ANIM_world_goombario_normal_talk, NPC_ANIM_world_goombario_normal_idle, 0,
EVT_VAR(0));
}
sleep 1;
func_802BDB30_317A50();
});
EvtSource world_goombario_put_away = SCRIPT({
func_802BDB84();
});
EvtSource world_goombario_put_away = {
EVT_CALL(func_802BDB84)
EVT_RETURN
EVT_END
};

View File

@ -36,20 +36,28 @@ ApiStatus GoompaPutAway(Evt* script, s32 isInitialCall) {
return partner_put_away(owner) != 0;
}
EvtSource world_goompa_take_out = SCRIPT({
GoompaTakeOut();
});
EvtSource world_goompa_take_out = {
EVT_CALL(GoompaTakeOut)
EVT_RETURN
EVT_END
};
s32 D_802BD58C_324E9C = &goompa_802BD600;
EvtSource world_goompa_update = SCRIPT({
func_802BD14C_324A5C();
});
EvtSource world_goompa_update = {
EVT_CALL(func_802BD14C_324A5C)
EVT_RETURN
EVT_END
};
EvtSource world_goompa_use_ability = SCRIPT({
GoompaUseAbility();
});
EvtSource world_goompa_use_ability = {
EVT_CALL(GoompaUseAbility)
EVT_RETURN
EVT_END
};
EvtSource world_goompa_put_away = SCRIPT({
GoompaPutAway();
});
EvtSource world_goompa_put_away = {
EVT_CALL(GoompaPutAway)
EVT_RETURN
EVT_END
};

View File

@ -232,7 +232,7 @@ class IfCtx(CmdCtx):
class MatchCtx(CmdCtx):
def break_opcode(self, meta):
return "EVT_OP_BREAK_MATCH"
return "EVT_OP_BREAK_SWITCH"
class LoopCtx(CmdCtx):
def break_opcode(self, meta):
@ -397,9 +397,9 @@ class Compile(Transformer):
raise Exception(f"uncompiled match case: {cmd}")
return [
Cmd("EVT_OP_MATCH", expr, meta=tree.meta),
Cmd("EVT_OP_SWITCH", expr, meta=tree.meta),
*cases,
Cmd("EVT_OP_END_MATCH"),
Cmd("EVT_OP_END_SWITCH"),
]
def match_const_stmt(self, tree):
commands = self.match_stmt(tree)
@ -412,7 +412,7 @@ class Compile(Transformer):
return [tree.children[0], *tree.children[1]]
def case_else(self, tree):
return [Cmd("EVT_OP_CASE_ELSE"), *tree.children[0]]
return [Cmd("EVT_OP_CASE_DEFAULT"), *tree.children[0]]
def case_op(self, tree):
if len(tree.children) == 4:
op, expr, multi_case, block = tree.children
@ -420,7 +420,7 @@ class Compile(Transformer):
if not "case" in op:
raise CompileError(f"operation `{opcodes['__op__']}' not supported in match cases", tree.meta)
return [Cmd(op["case"], expr), *multi_case, *block, Cmd("EVT_OP_END_CASE_MULTI")]
return [Cmd(op["case"], expr), *multi_case, *block, Cmd("EVT_OP_END_CASE_GROUP")]
else:
op, expr, block = tree.children
@ -431,16 +431,16 @@ class Compile(Transformer):
def case_range(self, tree):
if len(tree.children) == 4:
a, b, multi_case, block = tree.children
return [Cmd("EVT_OP_CASE_RANGE", a, b), *multi_case, *block, Cmd("EVT_OP_END_CASE_MULTI")]
return [Cmd("EVT_OP_CASE_RANGE", a, b), *multi_case, *block, Cmd("EVT_OP_END_CASE_GROUP")]
else:
a, b, block = tree.children
return [Cmd("EVT_OP_CASE_RANGE", a, b), *block]
def case_multi(self, tree):
multi_case, block = tree.children
return [*multi_case, *block, Cmd("EVT_OP_END_CASE_MULTI")]
return [*multi_case, *block, Cmd("EVT_OP_END_CASE_GROUP")]
def multi_case(self, tree):
return [Cmd("EVT_OP_CASE_MULTI_OR_EQ", expr) for expr in tree.children]
return [Cmd("EVT_OP_CASE_OR_EQ", expr) for expr in tree.children]
def loop_stmt(self, tree):
expr = tree.children.pop(0) if len(tree.children) > 1 else 0
@ -459,7 +459,7 @@ class Compile(Transformer):
return BreakCmd(meta=tree.meta)
def break_match_stmt(self, tree):
return Cmd("EVT_OP_BREAK_MATCH", meta=tree.meta)
return Cmd("EVT_OP_BREAK_SWITCH", meta=tree.meta)
def break_loop_stmt(self, tree):
return Cmd("EVT_OP_BREAK_LOOP", meta=tree.meta)
@ -509,15 +509,15 @@ class Compile(Transformer):
def control_type_script(self, tree):
return {
"__control_type__": "script",
"suspend": "EVT_OP_SUSPEND_SCRIPT",
"resume": "EVT_OP_RESUME_SCRIPT",
"kill": "EVT_OP_KILL_SCRIPT",
"suspend": "EVT_OP_SUSPEND_THREAD",
"resume": "EVT_OP_RESUME_THREAD",
"kill": "EVT_OP_KILL_THREAD",
}
def sleep_stmt(self, tree):
return Cmd("EVT_OP_SLEEP_FRAMES", tree.children[0], meta=tree.meta)
return Cmd("EVT_OP_WAIT_FRAMES", tree.children[0], meta=tree.meta)
def sleep_secs_stmt(self, tree):
return Cmd("EVT_OP_SLEEP_SECS", tree.children[0], meta=tree.meta)
return Cmd("EVT_OP_WAIT_SECS", tree.children[0], meta=tree.meta)
def bind_stmt(self, tree):
script, trigger, target = tree.children
@ -532,12 +532,12 @@ class Compile(Transformer):
return Cmd("EVT_OP_UNBIND", meta=tree.meta)
def spawn_stmt(self, tree):
return Cmd("EVT_OP_SPAWN_SCRIPT", tree.children[0], meta=tree.meta)
return Cmd("EVT_OP_EXEC", tree.children[0], meta=tree.meta)
def spawn_set_stmt(self, tree):
lhs, script = tree.children
return Cmd("EVT_OP_SPAWN_GET_ID", script, lhs, meta=tree.meta)
return Cmd("EVT_OP_EXEC_GET_TID", script, lhs, meta=tree.meta)
def await_stmt(self, tree):
return Cmd("EVT_OP_AWAIT_SCRIPT", tree.children[0], meta=tree.meta)
return Cmd("EVT_OP_EXEC_WAIT", tree.children[0], meta=tree.meta)
def jump_stmt(self, tree):
return Cmd("EVT_OP_JUMP", tree.children[0], meta=tree.meta)
@ -575,31 +575,31 @@ class Compile(Transformer):
"__op__": "=",
"int": "EVT_OP_SET",
"const": "EVT_OP_SET_CONST",
"float": "EVT_OP_SET_F",
"float": "EVT_OP_SETF",
}
def set_op_add(self, tree):
return {
"__op__": "+",
"int": "EVT_OP_ADD",
"float": "EVT_OP_ADD_F",
"float": "EVT_OP_ADDF",
}
def set_op_sub(self, tree):
return {
"__op__": "-",
"int": "EVT_OP_SUB",
"float": "EVT_OP_SUB_F",
"float": "EVT_OP_SUBF",
}
def set_op_mul(self, tree):
return {
"__op__": "*",
"int": "EVT_OP_MUL",
"float": "EVT_OP_MUL_F",
"float": "EVT_OP_MULF",
}
def set_op_div(self, tree):
return {
"__op__": "/",
"int": "EVT_OP_DIV",
"float": "EVT_OP_DIV_F",
"float": "EVT_OP_DIVF",
}
def set_op_mod(self, tree):
return {
@ -609,14 +609,14 @@ class Compile(Transformer):
def set_op_and(self, tree):
return {
"__op__": "&",
"int": "EVT_OP_AND",
"const": "EVT_OP_AND_CONST",
"int": "EVT_OP_BITWISE_AND",
"const": "EVT_OP_BITWISE_AND_CONST",
}
def set_op_or(self, tree):
return {
"__op__": "|",
"int": "EVT_OP_OR",
"const": "EVT_OP_OR_CONST",
"int": "EVT_OP_BITWISE_OR",
"const": "EVT_OP_BITWISE_OR_CONST",
}
def variable(self, tree):
@ -664,61 +664,61 @@ class Compile(Transformer):
for cmd in block:
if isinstance(cmd, BaseCmd):
cmd.add_context(SpawnCtx())
return [ Cmd("EVT_OP_SPAWN_THREAD", meta=tree.meta), *block, Cmd("EVT_OP_END_SPAWN_THREAD") ]
return [ Cmd("EVT_OP_THREAD", meta=tree.meta), *block, Cmd("EVT_OP_END_THREAD") ]
def parallel_block_stmt(self, tree):
block, = tree.children
for cmd in block:
if isinstance(cmd, BaseCmd):
cmd.add_context(ParallelCtx())
return [ Cmd("EVT_OP_PARALLEL_THREAD", meta=tree.meta), *block, Cmd("EVT_OP_END_PARALLEL_THREAD") ]
return [ Cmd("EVT_OP_CHILD_THREAD", meta=tree.meta), *block, Cmd("EVT_OP_END_CHILD_THREAD") ]
def entity_id(self, tree):
expr, = tree.children
return f"({expr} + 0x4000)"
def buf_use(self, tree):
return Cmd("EVT_OP_USE_BUFFER", tree.children[0], meta=tree.meta)
return Cmd("EVT_OP_USE_BUF", tree.children[0], meta=tree.meta)
def buf_read(self, tree):
args = tree.children
cmds = []
while args:
if len(args) >= 4:
cmds.append(Cmd("EVT_OP_BUFFER_READ_4", args.pop(0), args.pop(0), args.pop(0), args.pop(0), meta=tree.meta))
cmds.append(Cmd("EVT_OP_BUF_READ4", args.pop(0), args.pop(0), args.pop(0), args.pop(0), meta=tree.meta))
elif len(args) == 3:
cmds.append(Cmd("EVT_OP_BUFFER_READ_3", args.pop(0), args.pop(0), args.pop(0), meta=tree.meta))
cmds.append(Cmd("EVT_OP_BUF_READ3", args.pop(0), args.pop(0), args.pop(0), meta=tree.meta))
elif len(args) == 2:
cmds.append(Cmd("EVT_OP_BUFFER_READ_2", args.pop(0), args.pop(0), meta=tree.meta))
cmds.append(Cmd("EVT_OP_BUF_READ2", args.pop(0), args.pop(0), meta=tree.meta))
elif len(args) == 1:
cmds.append(Cmd("EVT_OP_BUFFER_READ_1", args.pop(0), meta=tree.meta))
cmds.append(Cmd("EVT_OP_BUF_READ1", args.pop(0), meta=tree.meta))
else:
break
return cmds
def buf_peek(self, tree):
return Cmd("EVT_OP_BUFFER_PEEK", tree.children[0], tree.children[1], meta=tree.meta)
return Cmd("EVT_OP_BUF_PEEK", tree.children[0], tree.children[1], meta=tree.meta)
def buf_usef(self, tree):
return Cmd("EVT_OP_USE_BUFFER_F", tree.children[0], meta=tree.meta)
return Cmd("EVT_OP_USE_FBUF", tree.children[0], meta=tree.meta)
def buf_readf(self, tree):
args = tree.children
cmds = []
while args:
if len(args) >= 4:
cmds.append(Cmd("EVT_OP_BUFFER_READ_4_F", args.pop(0), args.pop(0), args.pop(0), args.pop(0), meta=tree.meta))
cmds.append(Cmd("EVT_OP_FBUF_READ4", args.pop(0), args.pop(0), args.pop(0), args.pop(0), meta=tree.meta))
elif len(args) == 3:
cmds.append(Cmd("EVT_OP_BUFFER_READ_3_F", args.pop(0), args.pop(0), args.pop(0), meta=tree.meta))
cmds.append(Cmd("EVT_OP_FBUF_READ3", args.pop(0), args.pop(0), args.pop(0), meta=tree.meta))
elif len(args) == 2:
cmds.append(Cmd("EVT_OP_BUFFER_READ_2_F", args.pop(0), args.pop(0), meta=tree.meta))
cmds.append(Cmd("EVT_OP_FBUF_READ2", args.pop(0), args.pop(0), meta=tree.meta))
elif len(args) == 1:
cmds.append(Cmd("EVT_OP_BUFFER_READ_1_F", args.pop(0), meta=tree.meta))
cmds.append(Cmd("EVT_OP_FBUF_READ1", args.pop(0), meta=tree.meta))
else:
break
return cmds
def buf_peekf(self, tree):
return Cmd("EVT_OP_BUFFER_PEEK_F", tree.children[0], tree.children[1], meta=tree.meta)
return Cmd("EVT_OP_FBUF_PEEK", tree.children[0], tree.children[1], meta=tree.meta)
def use_array(self, tree):
return Cmd("EVT_OP_USE_ARRAY", tree.children[0], meta=tree.meta)
@ -728,7 +728,7 @@ class Compile(Transformer):
return Cmd("EVT_OP_NEW_ARRAY", tree.children[0], tree.children[1], meta=tree.meta)
def does_script_exist(self, tree):
return Cmd("EVT_OP_DOES_SCRIPT_EXIST", tree.children[1], tree.children[0], meta=tree.meta)
return Cmd("EVT_OP_IS_THREAD_RUNNING", tree.children[1], tree.children[0], meta=tree.meta)
def compile_script(s):
tree = script_parser.parse(s)

View File

@ -94,26 +94,26 @@ def write_ninja_rules(ninja: ninja_syntax.Writer, cpp: str, cppflags: str, extra
)
ninja.rule("cc",
description="cc $in",
description="gcc $in",
command=f"bash -o pipefail -c '{cpp} {CPPFLAGS} {cppflags} -MD -MF $out.d $in -o - | {iconv} > $out.i && {ccache}{cc} {cflags} $cflags $out.i -o $out'",
depfile="$out.d",
deps="gcc",
)
ninja.rule("cc_dsl",
description="cc $in $cflags",
description="dsl $in",
command=f"bash -o pipefail -c '{cpp} {CPPFLAGS} {cppflags} -MD -MF $out.d $in -o - | {compile_script} | {iconv} > $out.i && {cc} {cflags} $cflags $out.i -o $out'",
depfile="$out.d",
deps="gcc",
)
ninja.rule("cc_ido",
description="cc_ido $in",
description="ido $in",
command=f"{ccache}{cc_ido} -w {CPPFLAGS_COMMON} {cppflags} -c -mips1 -O0 -G0 -non_shared -Xfullwarn -Xcpluscomm -o $out $in",
)
ninja.rule("cc_kmc",
description="cc_kmc $in",
description="kmc $in",
command=f"bash -o pipefail -c 'N64ALIGN=ON VR4300MUL=ON {cc_kmc} {CPPFLAGS_LIBULTRA} {cppflags} {kmc_cflags} $cflags $in -o $out && mips-linux-gnu-objcopy -N $in $out'",
)
@ -373,7 +373,7 @@ class Configure:
task = "cxx"
with entry.src_paths[0].open() as f:
s = f.read()
if "SCRIPT(" in s or "#pragma SCRIPT" in s or "#include \"world/common/foliage.inc.c\"" in s:
if " SCRIPT(" in s or "#pragma SCRIPT" in s:
task = "cc_dsl"
if seg.name.endswith("osFlash"):

View File

@ -151,34 +151,16 @@ def get_constants():
for file in sprite_path.iterdir():
fd = file.read_text()
for line in fd.splitlines():
if "#define _NPC_SPRITE_" in line:
enum = "NPC_SPRITE"
elif "#define _NPC_PALETTE_" in line:
enum = "NPC_PALETTE"
elif "#define _NPC_ANIM_" in line:
enum = "NPC_ANIM"
else:
if "#define NPC_ANIM_" not in line:
continue
name = line.split(" ",2)[1]
id_ = line.split("0x", 1)[1]
if " " in id_:
id_ = id_.split(" ",1)[0]
name = name.split(f"_{enum}_", 1)[1]
if enum == "NPC_SPRITE":
saved_name = name
saved_id = id_
else:
name = name.rsplit(f"{saved_name}_")[1]
header_file_name = file.parts[-1]
if enum == "NPC_SPRITE":
if int(id_, 16) not in CONSTANTS["NPC_SPRITE"]:
CONSTANTS[enum][int(id_, 16)] = {"name":"", "palettes":{}, "anims":{}}
CONSTANTS[enum][int(id_, 16)]["name"] = name
elif enum == "NPC_PALETTE":
CONSTANTS["NPC_SPRITE"][int(saved_id, 16)]["palettes"][int(id_, 16)] = name
elif enum == "NPC_ANIM":
CONSTANTS["NPC_SPRITE"][int(saved_id, 16)]["anims"][int(id_, 16)] = name
name = line.split(" ",2)[1]
value = int(line.split("0x", 1)[1], base=16)
CONSTANTS["NPC_SPRITE"][value] = name
CONSTANTS["NPC_SPRITE"][str(value) + ".h"] = header_file_name
return
@ -186,22 +168,19 @@ def make_anim_macro(self, sprite, palette, anim):
if sprite == 0xFF and palette == 0xFF and anim == 0xFF:
return "-1"
call = "NPC_ANIM("
if sprite in CONSTANTS["NPC_SPRITE"]:
call += f"{CONSTANTS['NPC_SPRITE'][sprite]['name']}, "
if palette in CONSTANTS["NPC_SPRITE"][sprite]["palettes"]:
call += f"{CONSTANTS['NPC_SPRITE'][sprite]['palettes'][palette]}, "
else:
call += f"0x{palette:02X}, "
if anim in CONSTANTS["NPC_SPRITE"][sprite]["anims"]:
call += f"{CONSTANTS['NPC_SPRITE'][sprite]['anims'][anim]}"
else:
call += f"0x{anim:02X}"
call += ")"
self.INCLUDES_NEEDED["sprites"].add(CONSTANTS['NPC_SPRITE'][sprite]['name'])
value = (sprite << 16) | (palette << 8) | anim
if value in CONSTANTS["NPC_SPRITE"]:
self.INCLUDES_NEEDED["sprites"].add(CONSTANTS['NPC_SPRITE'][str(value) + ".h"])
return CONSTANTS['NPC_SPRITE'][value]
else:
call += f"0x{sprite:02X}, 0x{palette:02X}, 0x{anim:02X})"
return call
return f"0x{sprite:02X}{palette:02X}{anim:02X}"
def remove_evt_ptr(s):
if s.startswith("EVT_PTR("):
return s[8:-1]
else:
return s
def fix_args(self, func, args, info):
global CONSTANTS
@ -209,11 +188,14 @@ def fix_args(self, func, args, info):
new_args = []
args = args.split(", ")
for i,arg in enumerate(args):
if ((arg == "D_80000000") or (arg.startswith("D_B")) or
if ((remove_evt_ptr(arg) == "D_80000000") or (remove_evt_ptr(arg).startswith("D_B")) or
(i == 0 and func == "MakeEntity" and arg.startswith("D_"))):
arg = "0x" + arg[2:]
if "0x" in arg and int(arg, 16) >= 0xF0000000:
arg = f"{int(arg, 16) - 0x100000000}"
if func == "MakeEntity":
arg = "MAKE_ENTITY_END"
else:
arg = "0x" + remove_evt_ptr(arg)[2:]
if "0x" in arg and int(remove_evt_ptr(arg), 16) >= 0xF0000000:
arg = f"{int(remove_evt_ptr(arg), 16) - 0x100000000}"
if i in info or (i+1 == len(args) and -1 in info):
if i+1 == len(args) and -1 in info:
i = -1
@ -224,7 +206,7 @@ def fix_args(self, func, args, info):
if info[i] == "Bool":
new_args.append(f"{'TRUE' if argNum == True else 'FALSE'}")
elif info[i] == "Hex":
elif info[i] == "Hex" and argNum > 0:
new_args.append(f"0x{argNum:08X}")
elif info[i] == "CustomAnim":
sprite = (argNum & 0xFF0000) >> 16
@ -245,7 +227,7 @@ def fix_args(self, func, args, info):
call = f"{CONSTANTS['PlayerAnims'][argNum]}"
else:
if sprite == 0:
print(f"Func {func} arg {i} ({CONSTANTS['MAP_NPCS'][int(args[0])]}) -- sprite was 0, is this really valid? Arg 0x{argNum:X} -- sprite: {sprite}, palette: {palette}, anim: {anim}")
print(f"Func {func} arg {i} -- sprite was 0, is this really valid? Arg 0x{argNum:X} -- sprite: {sprite}, palette: {palette}, anim: {anim}")
call = f"0x{argNum:X}"
else:
call = make_anim_macro(self, sprite, palette, anim)
@ -267,12 +249,11 @@ def fix_args(self, func, args, info):
enabled.append(f"0")
new_args.append("((" + " | ".join(enabled) + "))")
elif info[i] == "NpcIDs":
if argNum not in CONSTANTS["MAP_NPCS"]:
new_args.append(f"0x{argNum:X}")
continue
if argNum >= 0:
new_args.append(CONSTANTS["MAP_NPCS"][argNum])
if argNum in CONSTANTS["MAP_NPCS"]:
new_args.append(CONSTANTS["MAP_NPCS"][argNum])
else:
new_args.append(str(argNum))
else:
new_args.append(CONSTANTS["NpcIDs"][argNum])
elif info[i] == "DamageTypes":
@ -347,7 +328,7 @@ replace_funcs = {
"JumpToGoal" :{0:"ActorIDs"},
"MakeEntity" :{0:"Hex", 5:"ItemIDs"},
"MakeEntity" :{0:"Hex"},
"MakeItemEntity" :{0:"ItemIDs"},
"ModifyColliderFlags" :{2:"Hex"},
@ -434,9 +415,10 @@ def replace_constants(self, func, args):
return args
class ScriptDisassembler:
def __init__(self, bytes, script_name = "script", symbol_map = {}, romstart = 0, INCLUDES_NEEDED = {}, INCLUDED = {"functions": set(), "includes": set()}):
def __init__(self, bytes, script_name = "script", symbol_map = {}, romstart = 0, INCLUDES_NEEDED = {"forward": [], "sprites": set(), "npcs": []}, INCLUDED = {"functions": set(), "includes": set()}, prelude = True):
self.bytes = bytes
self.script_name = script_name
self.prelude = prelude
self.symbol_map = { **script_lib(self.bytes.tell()), **symbol_map }
self.romstart = romstart
@ -494,13 +476,14 @@ class ScriptDisassembler:
self.prefix += line
self.prefix += "\n"
def var(self, arg):
def var(self, arg, prefer_hex = False, use_evt_ptr = True):
if arg in self.symbol_map:
return self.symbol_map[arg][0][1]
s = self.symbol_map[arg][0][1]
return f"EVT_PTR({s})" if use_evt_ptr else s
v = arg - 2**32 # convert to s32
if v > -250000000:
if v <= -220000000: return f"EVT_FIXED({(v + 230000000) / 1024})"
if v <= -220000000: return f"EVT_FIXED({round_fixed((v + 230000000) / 1024)})"
elif v <= -200000000: return f"EVT_ARRAY_FLAG({v + 210000000})"
elif v <= -180000000: return f"EVT_ARRAY({v + 190000000})"
elif v <= -160000000: return f"EVT_SAVE_VAR({v + 170000000})"
@ -518,6 +501,8 @@ class ScriptDisassembler:
return f"0x{arg:X}"
elif arg >= 0x80000000:
return f"{arg - 0x100000000}"
elif prefer_hex and arg > 0:
return f"0x{arg:X}"
else:
return f"{arg}"
@ -533,7 +518,7 @@ class ScriptDisassembler:
name = self.symbol_map[addr][0][1]
toReplace = True
suffix = ""
if name.startswith("N(func_"):
if False and name.startswith("N(func_"):
prefix = "ApiStatus "
name = self.replace_star_rod_function_name(name[2:-1])
suffix = "(Evt* script, s32 isInitialCall)"
@ -591,215 +576,220 @@ class ScriptDisassembler:
def disassemble_command(self, opcode, argc, argv):
if opcode == 0x01:
self.write_line("EVT_CMD(EVT_OP_END)")
self.write_line("EVT_END")
self.indent -= 1
if self.indent_used:
self.prefix_line("// *INDENT-OFF*")
self.prefix_line(f"EvtSource {self.script_name} = {{")
self.write_line("};")
self.write_line("// *INDENT-ON*")
else:
if self.prelude:
self.prefix_line(f"EvtSource {self.script_name} = {{")
self.write_line("};")
self.done = True
elif opcode == 0x02: self.write_line(f"EVT_CMD(EVT_OP_RETURN),")
elif opcode == 0x03: self.write_line(f"EVT_CMD(EVT_OP_LABEL, {self.var(argv[0])}),")
elif opcode == 0x04: self.write_line(f"EVT_CMD(EVT_OP_GOTO, {self.var(argv[0])}),")
elif opcode == 0x02: self.write_line(f"EVT_RETURN")
elif opcode == 0x03: self.write_line(f"EVT_LABEL({self.var(argv[0])})")
elif opcode == 0x04: self.write_line(f"EVT_GOTO({self.var(argv[0])})")
elif opcode == 0x05:
self.write_line(f"EVT_CMD(EVT_OP_LOOP, {self.var(argv[0])}),")
self.write_line(f"EVT_LOOP({self.var(argv[0])})")
self.indent += 1
elif opcode == 0x06:
self.indent -= 1
self.write_line("EVT_CMD(EVT_OP_END_LOOP),")
elif opcode == 0x07: self.write_line(f"EVT_CMD(EVT_OP_BREAK_LOOP),")
elif opcode == 0x08: self.write_line(f"EVT_CMD(EVT_OP_SLEEP_FRAMES, {self.var(argv[0])}),")
elif opcode == 0x09: self.write_line(f"EVT_CMD(EVT_OP_SLEEP_SECS, {self.var(argv[0])}),")
self.write_line("EVT_END_LOOP")
elif opcode == 0x07: self.write_line(f"EVT_BREAK_LOOP")
elif opcode == 0x08: self.write_line(f"EVT_WAIT_FRAMES({self.var(argv[0])})")
elif opcode == 0x09: self.write_line(f"EVT_WAIT_SECS({self.var(argv[0])})")
elif opcode == 0x0A:
self.write_line(f"EVT_CMD(EVT_OP_IF_EQ, {self.var(argv[0])}, {self.var(argv[1])}),")
self.write_line(f"EVT_IF_EQ({self.var(argv[0])}, {self.var(argv[1])})")
self.indent += 1
elif opcode == 0x0B:
self.write_line(f"EVT_CMD(EVT_OP_IF_NE, {self.var(argv[0])}, {self.var(argv[1])}),")
self.write_line(f"EVT_IF_NE({self.var(argv[0])}, {self.var(argv[1])})")
self.indent += 1
elif opcode == 0x0C:
self.write_line(f"EVT_CMD(EVT_OP_IF_LT, {self.var(argv[0])}, {self.var(argv[1])}),")
self.write_line(f"EVT_IF_LT({self.var(argv[0])}, {self.var(argv[1])})")
self.indent += 1
elif opcode == 0x0D:
self.write_line(f"EVT_CMD(EVT_OP_IF_GT, {self.var(argv[0])}, {self.var(argv[1])}),")
self.write_line(f"EVT_IF_GT({self.var(argv[0])}, {self.var(argv[1])})")
self.indent += 1
elif opcode == 0x0E:
self.write_line(f"EVT_CMD(EVT_OP_IF_LE, {self.var(argv[0])}, {self.var(argv[1])}),")
self.write_line(f"EVT_IF_LE({self.var(argv[0])}, {self.var(argv[1])})")
self.indent += 1
elif opcode == 0x0F:
self.write_line(f"EVT_CMD(EVT_OP_IF_GE, {self.var(argv[0])}, {self.var(argv[1])}),")
self.write_line(f"EVT_IF_GE({self.var(argv[0])}, {self.var(argv[1])})")
self.indent += 1
elif opcode == 0x10:
self.write_line(f"EVT_CMD(EVT_OP_IF_FLAG, {self.var(argv[0])}, {self.var(argv[1])}),")
self.write_line(f"EVT_IF_FLAG({self.var(argv[0])}, {self.var(argv[1], prefer_hex=True)})")
self.indent += 1
elif opcode == 0x11:
self.write_line(f"EVT_CMD(EVT_OP_IF_NOT_FLAG, ({self.var(argv[0])}, {self.var(argv[1])}),")
self.write_line(f"EVT_IF_NOT_FLAG({self.var(argv[0])}, {self.var(argv[1], prefer_hex=True)})")
self.indent += 1
elif opcode == 0x12:
self.indent -= 1
self.write_line(f"EVT_CMD(EVT_OP_ELSE),")
self.write_line(f"EVT_ELSE")
self.indent += 1
elif opcode == 0x13:
self.indent -= 1
self.write_line(f"EVT_CMD(EVT_OP_END_IF),")
self.write_line(f"EVT_END_IF")
elif opcode == 0x14:
self.write_line(f"EVT_CMD(EVT_OP_MATCH, {self.var(argv[0])}),")
self.write_line(f"EVT_SWITCH({self.var(argv[0])})")
self.indent += 2
elif opcode == 0x15:
self.write_line(f"EVT_CMD(EVT_OP_MATCH_CONST, 0x{argv[0]:X}),")
self.write_line(f"EVT_SWITCH_CONST(0x{argv[0]:X})")
self.indent += 2
elif opcode == 0x16:
self.indent -= 1
self.write_line(f"EVT_CMD(EVT_OP_CASE_EQ, {self.var(argv[0])}),")
self.write_line(f"EVT_CASE_EQ({self.var(argv[0])})")
self.indent += 1
elif opcode == 0x17:
self.indent -= 1
self.write_line(f"EVT_CMD(EVT_OP_CASE_NE, {self.var(argv[0])}),")
self.write_line(f"EVT_CASE_NE({self.var(argv[0])})")
self.indent += 1
elif opcode == 0x18:
self.indent -= 1
self.write_line(f"EVT_CMD(EVT_OP_CASE_LT, {self.var(argv[0])}),")
self.write_line(f"EVT_CASE_LT({self.var(argv[0])})")
self.indent += 1
elif opcode == 0x19:
self.indent -= 1
self.write_line(f"EVT_CMD(EVT_OP_CASE_GT, {self.var(argv[0])}),")
self.write_line(f"EVT_CASE_GT({self.var(argv[0])})")
self.indent += 1
elif opcode == 0x1A:
self.indent -= 1
self.write_line(f"EVT_CMD(EVT_OP_CASE_LE, {self.var(argv[0])}),")
self.write_line(f"EVT_CASE_LE({self.var(argv[0])})")
self.indent += 1
elif opcode == 0x1B:
self.indent -= 1
self.write_line(f"EVT_CMD(EVT_OP_CASE_GE, {self.var(argv[0])}),")
self.write_line(f"EVT_CASE_GE({self.var(argv[0])})")
self.indent += 1
elif opcode == 0x1C:
self.indent -= 1
self.write_line(f"EVT_CMD(EVT_OP_CASE_ELSE),")
self.write_line(f"EVT_CASE_DEFAULT")
self.indent += 1
elif opcode == 0x1D:
self.indent -= 1
self.write_line(f"EVT_CMD(EVT_OP_CASE_MULTI_OR_EQ, {self.var(argv[0])}),")
self.write_line(f"EVT_CASE_OR_EQ({self.var(argv[0])})")
self.indent += 1
elif opcode == 0x1E:
self.indent -= 1
self.write_line(f"EVT_CMD(EVT_OP_CASE_MULTI_AND_EQ, {self.var(argv[0])}),")
self.write_line(f"EVT_CASE_AND_EQ({self.var(argv[0])})")
self.indent += 1
elif opcode == 0x1F:
self.indent -= 1
self.write_line(f"EVT_CMD(EVT_OP_CASE_FLAG, {self.var(argv[0])}),")
self.write_line(f"EVT_CASE_FLAG({self.var(argv[0])})")
self.indent += 1
elif opcode == 0x20:
self.indent -= 1
self.write_line(f"EVT_CMD(EVT_OP_END_CASE_MULTI),")
self.write_line(f"EVT_END_CASE_GROUP")
self.indent += 1
elif opcode == 0x21:
self.indent -= 1
self.write_line(f"EVT_CMD(EVT_OP_CASE_RANGE, {self.var(argv[0])}, {self.var(argv[1])}),")
self.write_line(f"EVT_CASE_RANGE({self.var(argv[0])}, {self.var(argv[1])})")
self.indent += 1
elif opcode == 0x22: self.write_line(f"EVT_CMD(EVT_OP_BREAK_CASE),")
elif opcode == 0x22: self.write_line(f"EVT_BREAK_SWITCH")
elif opcode == 0x23:
self.indent -= 2
self.write_line(f"EVT_CMD(EVT_OP_END_MATCH),")
elif opcode == 0x24: self.write_line(f"EVT_CMD(EVT_OP_SET, {self.var(argv[0])}, {self.var(argv[1])}),")
elif opcode == 0x25: self.write_line(f"EVT_CMD(EVT_OP_SET_CONST, {self.var(argv[0])}, 0x{argv[1]:X}),")
elif opcode == 0x26: self.write_line(f"EVT_CMD(EVT_OP_SET_F, {self.var(argv[0])}, {self.var(argv[1])}),")
elif opcode == 0x27: self.write_line(f"EVT_CMD(EVT_OP_ADD, {self.var(argv[0])}, {self.var(argv[1])}),")
elif opcode == 0x28: self.write_line(f"EVT_CMD(EVT_OP_SUB, {self.var(argv[0])}, {self.var(argv[1])}),")
elif opcode == 0x29: self.write_line(f"EVT_CMD(EVT_OP_MUL, {self.var(argv[0])}, {self.var(argv[1])}),")
elif opcode == 0x2A: self.write_line(f"EVT_CMD(EVT_OP_DIV, {self.var(argv[0])}, {self.var(argv[1])}),")
elif opcode == 0x2B: self.write_line(f"EVT_CMD(EVT_OP_MOD, {self.var(argv[0])}, {self.var(argv[1])}),")
elif opcode == 0x2C: self.write_line(f"EVT_CMD(EVT_OP_ADD_F, {self.var(argv[0])}, {self.var(argv[1])}),")
elif opcode == 0x2D: self.write_line(f"EVT_CMD(EVT_OP_SUB_F, {self.var(argv[0])}, {self.var(argv[1])}),")
elif opcode == 0x2E: self.write_line(f"EVT_CMD(EVT_OP_MUL_F, {self.var(argv[0])}, {self.var(argv[1])}),")
elif opcode == 0x2F: self.write_line(f"EVT_CMD(EVT_OP_DIV_F, {self.var(argv[0])}, {self.var(argv[1])}),")
elif opcode == 0x30: self.write_line(f"EVT_CMD(EVT_OP_USE_BUFFER, {self.var(argv[0])}),")
elif opcode == 0x31:
args = ["EVT_OP_BUFFER_READ_1",*map(self.var, argv)]
self.write_line(f"EVT_CMD({', '.join(args)}),")
elif opcode == 0x32:
args = ["EVT_OP_BUFFER_READ_2",*map(self.var, argv)]
self.write_line(f"EVT_CMD({', '.join(args)}),")
elif opcode == 0x33:
args = ["EVT_OP_BUFFER_READ_3",*map(self.var, argv)]
self.write_line(f"EVT_CMD({', '.join(args)}),")
elif opcode == 0x34:
args = ["EVT_OP_BUFFER_READ_4",*map(self.var, argv)]
self.write_line(f"EVT_CMD({', '.join(args)}),")
self.write_line(f"EVT_END_SWITCH")
elif opcode == 0x24: self.write_line(f"EVT_SET({self.var(argv[0])}, {self.var(argv[1])})")
elif opcode == 0x25:
argNum = argv[1]
sprite = (argNum & 0xFF0000) >> 16
palette = (argNum & 0xFF00) >> 8
anim = (argNum & 0xFF) >> 0
if sprite > 0:
value = make_anim_macro(self, sprite, palette, anim)
else:
value = f"0x{argNum:08X}"
self.write_line(f"EVT_SET_CONST({self.var(argv[0])}, {value})")
elif opcode == 0x26: self.write_line(f"EVT_SETF({self.var(argv[0])}, {self.var(argv[1])})")
elif opcode == 0x27: self.write_line(f"EVT_ADD({self.var(argv[0])}, {self.var(argv[1])})")
elif opcode == 0x28: self.write_line(f"EVT_SUB({self.var(argv[0])}, {self.var(argv[1])})")
elif opcode == 0x29: self.write_line(f"EVT_MUL({self.var(argv[0])}, {self.var(argv[1])})")
elif opcode == 0x2A: self.write_line(f"EVT_DIV({self.var(argv[0])}, {self.var(argv[1])})")
elif opcode == 0x2B: self.write_line(f"EVT_MOD({self.var(argv[0])}, {self.var(argv[1])})")
elif opcode == 0x2C: self.write_line(f"EVT_ADDF({self.var(argv[0])}, {self.var(argv[1])})")
elif opcode == 0x2D: self.write_line(f"EVT_SUBF({self.var(argv[0])}, {self.var(argv[1])})")
elif opcode == 0x2E: self.write_line(f"EVT_MULF({self.var(argv[0])}, {self.var(argv[1])})")
elif opcode == 0x2F: self.write_line(f"EVT_DIVF({self.var(argv[0])}, {self.var(argv[1])})")
elif opcode == 0x30: self.write_line(f"EVT_USE_BUF({self.var(argv[0])})")
elif opcode == 0x31 or opcode == 0x32 or opcode == 0x33 or opcode == 0x34:
args = [*map(self.var, argv)]
self.write_line(f"EVT_BUF_READ{opcode - 0x30}({', '.join(args)})")
elif opcode == 0x35:
args = ["EVT_OP_BUFFER_PEEK",*map(self.var, argv)]
self.write_line(f"EVT_CMD({', '.join(args)}),")
elif opcode == 0x36: self.write_line(f"EVT_CMD(EVT_OP_USE_BUFFER_f, {self.var(argv[0])}),")
elif opcode == 0x37:
args = ["EVT_OP_BUFFER_READ_1_F",*map(self.var, argv)]
self.write_line(f"EVT_CMD({', '.join(args)}),")
elif opcode == 0x38:
args = ["EVT_OP_BUFFER_READ_2_F",*map(self.var, argv)]
self.write_line(f"EVT_CMD({', '.join(args)}),")
elif opcode == 0x39:
args = ["EVT_OP_BUFFER_READ_3_F",*map(self.var, argv)]
self.write_line(f"EVT_CMD({', '.join(args)}),")
elif opcode == 0x3A:
args = ["EVT_OP_BUFFER_READ_4_F",*map(self.var, argv)]
self.write_line(f"EVT_CMD({', '.join(args)}),")
args = [*map(self.var, argv)]
self.write_line(f"EVT_BUF_PEEK({', '.join(args)})")
elif opcode == 0x36: self.write_line(f"EVT_USE_FBUF({self.var(argv[0])})")
elif opcode == 0x37 or opcode == 0x38 or opcode == 0x39 or opcode == 0x3A:
args = [*map(self.var, argv)]
self.write_line(f"EVT_FBUF_READ{opcode - 0x36}({', '.join(args)})")
elif opcode == 0x3B:
args = ["EVT_OP_BUFFER_PEEK_F",*map(self.var, argv)]
self.write_line(f"EVT_CMD({', '.join(args)}),")
elif opcode == 0x3C: self.write_line(f"EVT_CMD(EVT_OP_USE_ARRAY, {self.var(argv[0])}),")
elif opcode == 0x3D: self.write_line(f"EVT_CMD(EVT_OP_USE_FLAGS, {self.var(argv[0])}),")
elif opcode == 0x3E: self.write_line(f"EVT_CMD(EVT_OP_NEW_ARRAY, {self.var(argv[0])}, {self.var(argv[1])}),")
elif opcode == 0x3F: self.write_line(f"EVT_CMD(EVT_OP_AND, {self.var(argv[0])}, {self.var(argv[1])}),")
elif opcode == 0x40: self.write_line(f"EVT_CMD(EVT_OP_OR, {self.var(argv[0])}, {self.var(argv[1])}),")
elif opcode == 0x41: self.write_line(f"EVT_CMD(EVT_OP_AND_CONST, {self.var(argv[0])}, 0x{argv[1]:X})")
elif opcode == 0x42: self.write_line(f"EVT_CMD(EVT_OP_OR_CONST, {self.var(argv[0])}, 0x{argv[1]:X})")
args = [*map(self.var, argv)]
self.write_line(f"EVT_FBUF_PEEK({', '.join(args)})")
elif opcode == 0x3C: self.write_line(f"EVT_USE_ARRAY({self.var(argv[0])})")
elif opcode == 0x3D: self.write_line(f"EVT_USE_FLAG_ARRAY({self.var(argv[0])})")
elif opcode == 0x3E: self.write_line(f"EVT_MALLOC_ARRAY({self.var(argv[0])}, {self.var(argv[1])})")
elif opcode == 0x3F: self.write_line(f"EVT_BITWISE_AND({self.var(argv[0])}, {self.var(argv[1])})")
elif opcode == 0x40: self.write_line(f"EVT_BITWISE_OR({self.var(argv[0])}, {self.var(argv[1])})")
elif opcode == 0x41: self.write_line(f"EVT_BITWISE_AND_CONST({self.var(argv[0])}, 0x{argv[1]:X})")
elif opcode == 0x42: self.write_line(f"EVT_BITWISE_OR_CONST({self.var(argv[0])}, 0x{argv[1]:X})")
elif opcode == 0x43:
args = ["EVT_OP_CALL", self.addr_ref(argv[0]), *map(self.var, argv[1:])]
self.write_line(f"EVT_CMD({', '.join(args)}),")
elif opcode == 0x44: self.write_line(f"EVT_CMD(EVT_OP_SPAWN_SCRIPT, {self.addr_ref(argv[0])}),")
elif opcode == 0x45: self.write_line(f"EVT_CMD(EVT_OP_SPAWN_GET_ID, {self.addr_ref(argv[0])}, {self.var(argv[1])}),")
elif opcode == 0x46: self.write_line(f"EVT_CMD(EVT_OP_AWAIT_SCRIPT, {self.addr_ref(argv[0])}),")
func = self.addr_ref(argv[0])
args = [self.var(a, use_evt_ptr=True) for a in argv[1:]]
args_str = ', '.join(args)
args_str = replace_constants(self, func, args_str)
if func.startswith("evt_"):
# use func-specific macro
self.write_line(f"{func}({args_str})")
elif args_str:
self.write_line(f"EVT_CALL({func}, {args_str})")
else:
self.write_line(f"EVT_CALL({func})") # no args
elif opcode == 0x44: self.write_line(f"EVT_EXEC({self.addr_ref(argv[0])})")
elif opcode == 0x45: self.write_line(f"EVT_EXEC_GET_TID({self.addr_ref(argv[0])}, {self.var(argv[1])})")
elif opcode == 0x46: self.write_line(f"EVT_EXEC_WAIT({self.addr_ref(argv[0])})")
elif opcode == 0x47:
args = ["EVT_OP_BIND_TRIGGER", self.addr_ref(argv[0]), self.trigger(argv[1]), *map(self.var, argv[2:])]
self.write_line(f"EVT_CMD({', '.join(args)}),")
elif opcode == 0x48: self.write_line(f"EVT_CMD(EVT_OP_UNBIND),")
elif opcode == 0x49: self.write_line(f"EVT_CMD(EVT_OP_KILL_SCRIPT, {self.var(argv[0])}),")
elif opcode == 0x4A: self.write_line(f"EVT_CMD(EVT_OP_JUMP, {self.var(argv[0])}),")
elif opcode == 0x4B: self.write_line(f"EVT_CMD(EVT_OP_SET_PRIORITY, {self.var(argv[0])}),")
elif opcode == 0x4C: self.write_line(f"EVT_CMD(EVT_OP_SET_TIMESCALE, {self.var(argv[0])}),")
elif opcode == 0x4D: self.write_line(f"EVT_CMD(EVT_OP_SET_GROUP, {self.var(argv[0])}),")
args = [self.addr_ref(argv[0]), self.trigger(argv[1]), self.collider_id(argv[2]), *map(self.var, argv[3:])]
self.write_line(f"EVT_BIND_TRIGGER({', '.join(args)})")
elif opcode == 0x48: self.write_line(f"EVT_UNBIND")
elif opcode == 0x49: self.write_line(f"EVT_KILL_THREAD({self.var(argv[0])})")
elif opcode == 0x4A: self.write_line(f"EVT_JUMP({self.var(argv[0])})")
elif opcode == 0x4B: self.write_line(f"EVT_SET_PRIORITY({self.var(argv[0])})")
elif opcode == 0x4C: self.write_line(f"EVT_SET_TIMESCALE({self.var(argv[0])})")
elif opcode == 0x4D: self.write_line(f"EVT_SET_GROUP({self.var(argv[0])})")
elif opcode == 0x4E:
args = ["EVT_OP_BIND_PADLOCK", self.addr_ref(argv[0]), self.trigger(argv[1]), *map(self.var, argv[2:])]
self.write_line(f"EVT_CMD({', '.join(args)}),")
elif opcode == 0x4F: self.write_line(f"EVT_CMD(EVT_OP_SUSPEND_GROUP, {self.var(argv[0])}),")
elif opcode == 0x50: self.write_line(f"EVT_CMD(EVT_OP_RESUME_GROUP, {self.var(argv[0])}),")
elif opcode == 0x51: self.write_line(f"EVT_CMD(EVT_OP_SUSPEND_OTHERS, {self.var(argv[0])}),")
elif opcode == 0x52: self.write_line(f"EVT_CMD(EVT_OP_RESUME_OTHERS, {self.var(argv[0])}),")
elif opcode == 0x53: self.write_line(f"EVT_CMD(EVT_OP_SUSPEND_SCRIPT, {self.var(argv[0])}),")
elif opcode == 0x54: self.write_line(f"EVT_CMD(EVT_OP_RESUME_SCRIPT, {self.var(argv[0])}),")
elif opcode == 0x55: self.write_line(f"EVT_CMD(EVT_OP_DOES_SCRIPT_EXIST, {self.var(argv[0])}, {self.var(argv[1])}),")
args = [self.addr_ref(argv[0]), self.trigger(argv[1]), self.collider_id(argv[2]), *map(self.var, argv[3:])]
self.write_line(f"EVT_BIND_PADLOCK({', '.join(args)})")
elif opcode == 0x4F: self.write_line(f"EVT_SUSPEND_GROUP({self.var(argv[0])})")
elif opcode == 0x50: self.write_line(f"EVT_RESUME_GROUP({self.var(argv[0])})")
elif opcode == 0x51: self.write_line(f"EVT_SUSPEND_OTHERS({self.var(argv[0])})")
elif opcode == 0x52: self.write_line(f"EVT_RESUME_OTHERS({self.var(argv[0])})")
elif opcode == 0x53: self.write_line(f"EVT_SUSPEND_THREAD({self.var(argv[0])})")
elif opcode == 0x54: self.write_line(f"EVT_RESUME_THREAD({self.var(argv[0])})")
elif opcode == 0x55: self.write_line(f"EVT_IS_THREAD_RUNNING({self.var(argv[0])}, {self.var(argv[1])})")
elif opcode == 0x56:
self.write_line("EVT_CMD(EVT_OP_SPAWN_THREAD),")
self.write_line("EVT_THREAD")
self.indent += 1
elif opcode == 0x57:
self.indent -= 1
self.write_line("EVT_CMD(EVT_OP_END_SPAWN_THREAD),")
self.write_line("EVT_END_THREAD")
elif opcode == 0x58:
self.write_line("EVT_CMD(EVT_OP_PARALLEL_THREAD),")
self.write_line("EVT_CHILD_THREAD")
self.indent += 1
elif opcode == 0x59:
self.indent -= 1
self.write_line("EVT_CMD(EVT_OP_END_PARALLEL_THREAD),")
self.write_line("EVT_END_CHILD_THREAD")
else:
# unknown opcode
argv_str = ""
for arg in argv:
argv_str += ", "
argv_str += f"0x{arg:X}"
self.write_line(f"EVT_CMD(0x{opcode:02X}{argv_str}),")
self.write_line(f"0x{opcode:02X}{argv_str}),")
def collider_id(self, arg):
if arg >= 0x4000 and arg <= 0x5000:
return f"EVT_ENTITY_INDEX({arg - 0x4000})"
else:
return self.var(arg)
class UnsupportedScript(Exception):
pass
@ -1271,7 +1261,7 @@ if __name__ == "__main__":
try:
script_text = script.disassemble()
if script.instructions > 1 and "EVT_CMD" not in script_text:
if script.instructions > 1 and "_EVT_CMD" not in script_text:
if gap and first_print:
potential_struct_sizes = { "StaticNpc": 0x1F0, "NpcAISettings":0x30, "NpcSettings":0x2C, "NpcGroupList":0xC }
gap_size = args.offset - gap_start

View File

@ -0,0 +1,41 @@
# ninja -j1 | python3 tools/fix_bad_evt_changes.py
import fileinput
import requests
problems = []
for line in fileinput.input():
if "undeclared here (not in a function)" in line:
filename = line.split(":")[0].strip()
line_number = int(line.split(":")[1].strip())
bad_symbol_name = line.split("`")[1].split("'")[0]
problems.append((filename, line_number, bad_symbol_name))
for filename, line_number, bad_symbol_name in problems:
url = f"https://raw.githubusercontent.com/pmret/papermario/master/{filename}"
old_lines = requests.get(url).text.splitlines()
old_line = old_lines[line_number - 1].strip()
with open(filename, "r") as f:
lines = f.readlines()
line = lines[line_number - 1]
if "EVT_CALL" not in line and "EVT_EXEC" not in line:
continue
if old_line.startswith("N(") or old_line.startswith("await N("):
good_symbol_name = old_line[old_line.find("N("):].split(")", 1)[0] + ")"
else:
good_symbol_name = old_line.split("(", 1)[0]
print(filename, bad_symbol_name, "->", good_symbol_name)
lines[line_number - 1] = line.replace(bad_symbol_name, good_symbol_name)
with open(filename, "w") as f:
f.writelines(lines)

169
tools/update_evts.py Executable file
View File

@ -0,0 +1,169 @@
#!/usr/bin/env python3
from disasm_script import ScriptDisassembler, get_constants
from glob import glob
NAMESPACES = {
"src/battle/area_kmr_part_1/stage/clouds.inc.c": "b_area_kmr_part_1_kmr_03",
"src/world/common/foliage.inc.c": "kmr_03",
}
for filename in glob("src/battle/item/*.c"):
parts = filename.split("/")[1:]
parts[-1] = parts[-1].split(".")[0]
NAMESPACES[filename] = "_".join(parts)
NAMESPACES["src/battle/item/UseItem.inc.c"] = "battle_item_food"
for filename in glob("src/world/*/*/*.c"):
map_name = filename.split("/")[3]
NAMESPACES[filename] = map_name
class UserException(Exception):
pass
class Range:
def __init__(self, start: int, end: int, symbol_name: str, namespace: str):
self.start = start
self.end = end
self.symbol_name = symbol_name
self.namespace = namespace
class Symbol:
def __init__(self, ram_addr, rom_addr):
self.ram_addr = ram_addr
self.rom_addr = rom_addr
def parse_symbol_addrs():
with open("ver/us/symbol_addrs.txt", "r") as f:
lines = f.readlines()
symbol_addrs = {}
for line in lines:
name = line[:line.find(" ")]
attributes = line[line.find("//"):].split(" ")
ram_addr = int(line[:line.find(";")].split("=")[1].strip(), base=0)
rom_addr = next((int(attr.split(":")[1], base=0) for attr in attributes if attr.split(":")[0] == "rom"), None)
symbol_addrs[name] = Symbol(ram_addr, rom_addr)
return symbol_addrs
def find_old_script_ranges(lines, filename):
"""
Finds all ranges that contain the old SCRIPT macro.
"""
start_line_no = None
symbol_name = None
namespace = NAMESPACES.get(filename, filename.split("/")[-1].split(".")[0])
for line_no, line_content in enumerate(lines):
if "#define NAMESPACE " in line_content:
namespace = line_content.split(" ")[2].strip()
if "SCRIPT({" in line_content:
start_line_no = line_no
symbol_name = eval_namespace(line_content.split(" ")[1], namespace)
elif "});" in line_content and start_line_no is not None:
yield Range(start_line_no, line_no, symbol_name, namespace)
start_line_no = None
def eval_namespace(sym, namespace):
if sym.startswith("N("):
return namespace + "_" + sym[2:-1]
else:
return sym
def replace_old_script_macros(filename, symbol_addrs):
with open(filename, "r") as f:
lines = f.readlines()
with open("ver/us/baserom.z64", "rb") as rom:
num_scripts_replaced = 0
while True:
try:
range = next(find_old_script_ranges(lines, filename))
except StopIteration:
break
# Replace initial line
macro_start_idx = lines[range.start].find("SCRIPT({\n")
if macro_start_idx == -1:
raise Exception("Could not find SCRIPT macro start")
lines[range.start] = lines[range.start][:macro_start_idx] + "{\n"
# Remove other lines
lines = lines[:range.start + 1] + lines[range.end + 1:]
# Find the symbol
try:
range_sym = symbol_addrs[range.symbol_name]
except KeyError:
raise UserException(f"Symbol {range.symbol_name} is not in symbol_addrs")
if not range_sym.rom_addr:
raise UserException(f"Symbol {range.symbol_name} lacks a rom address in symbol_addrs")
# Make local symbol map, replacing namespaced symbols with N(sym)
local_symbol_map = {}
for sym in symbol_addrs:
if sym.startswith(range.namespace):
key = "N(" + sym[len(range.namespace)+1:] + ")"
else:
key = sym
symbol = symbol_addrs[sym]
if symbol.ram_addr in local_symbol_map:
cur_sym_name = local_symbol_map[symbol.ram_addr][0][1]
if cur_sym_name.startswith("N("):
continue
local_symbol_map[symbol.ram_addr] = [[symbol.ram_addr, key]]
# Disassemble the script
rom.seek(range_sym.rom_addr)
evt_code = ScriptDisassembler(rom,
script_name=range.symbol_name,
romstart=range_sym.rom_addr,
prelude=False,
symbol_map=local_symbol_map,
).disassemble()
lines.insert(range.start + 1, f"{evt_code}}};\n")
num_scripts_replaced += 1
if num_scripts_replaced > 0:
with open(filename, "w") as f:
f.writelines(lines)
return num_scripts_replaced
if __name__ == "__main__":
import sys
symbol_addrs = parse_symbol_addrs()
get_constants()
num_errors = 0
if len(sys.argv) > 1:
for filename in sys.argv[1:]:
try:
num_scripts_replaced = replace_old_script_macros(filename, symbol_addrs)
if num_scripts_replaced > 0:
print(f"{num_scripts_replaced} old scripts replaced in {filename}")
except UserException as e:
print(f"{filename} ERROR: {e}")
num_errors += 1
if num_errors > 0:
print(f"ERROR: {num_errors} files had errors.")
exit(1)
else:
print("warning: no files specified")
print("usage: ./tools/update_evts.c <files to modify>")